1 /* SPDX-License-Identifier: GPL-2.0 */ 2 3 /* 4 * String handling functions for PowerPC32 5 * 6 * Copyright (C) 1996 Paul Mackerras. 7 * 8 */ 9 10 #include <linux/export.h> 11 #include <asm/ppc_asm.h> 12 #include <asm/cache.h> 13 14 .text 15 16 CACHELINE_BYTES = L1_CACHE_BYTES 17 LG_CACHELINE_BYTES = L1_CACHE_SHIFT 18 CACHELINE_MASK = (L1_CACHE_BYTES-1) 19 20 _GLOBAL(__arch_clear_user) 21 /* 22 * Use dcbz on the complete cache lines in the destination 23 * to set them to zero. This requires that the destination 24 * area is cacheable. 25 */ 26 cmplwi cr0, r4, 4 27 mr r10, r3 28 li r3, 0 29 blt 7f 30 31 11: stw r3, 0(r10) 32 beqlr 33 andi. r0, r10, 3 34 add r11, r0, r4 35 subf r6, r0, r10 36 37 clrlwi r7, r6, 32 - LG_CACHELINE_BYTES 38 add r8, r7, r11 39 srwi r9, r8, LG_CACHELINE_BYTES 40 addic. r9, r9, -1 /* total number of complete cachelines */ 41 ble 2f 42 xori r0, r7, CACHELINE_MASK & ~3 43 srwi. r0, r0, 2 44 beq 3f 45 mtctr r0 46 4: stwu r3, 4(r6) 47 bdnz 4b 48 3: mtctr r9 49 li r7, 4 50 10: dcbz r7, r6 51 addi r6, r6, CACHELINE_BYTES 52 bdnz 10b 53 clrlwi r11, r8, 32 - LG_CACHELINE_BYTES 54 addi r11, r11, 4 55 56 2: srwi r0 ,r11 ,2 57 mtctr r0 58 bdz 6f 59 1: stwu r3, 4(r6) 60 bdnz 1b 61 6: andi. r11, r11, 3 62 beqlr 63 mtctr r11 64 addi r6, r6, 3 65 8: stbu r3, 1(r6) 66 bdnz 8b 67 blr 68 69 7: cmpwi cr0, r4, 0 70 beqlr 71 mtctr r4 72 addi r6, r10, -1 73 9: stbu r3, 1(r6) 74 bdnz 9b 75 blr 76 77 90: mr r3, r4 78 blr 79 91: add r3, r10, r4 80 subf r3, r6, r3 81 blr 82 83 EX_TABLE(11b, 90b) 84 EX_TABLE(4b, 91b) 85 EX_TABLE(10b, 91b) 86 EX_TABLE(1b, 91b) 87 EX_TABLE(8b, 91b) 88 EX_TABLE(9b, 91b) 89 90 EXPORT_SYMBOL(__arch_clear_user)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.