1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * __clear_user_page, __clear_user, clear_page implementation of SuperH 4 * 5 * Copyright (C) 2001 Kaz Kojima 6 * Copyright (C) 2001, 2002 Niibe Yutaka 7 * Copyright (C) 2006 Paul Mundt 8 */ 9 #include <linux/linkage.h> 10 #include <asm/page.h> 11 12 ENTRY(__clear_user) 13 ! 14 mov #0, r0 15 mov #0xffffffe0, r1 16 ! 17 ! r4..(r4+31)&~32 -------- not aligned [ Area 0 ] 18 ! (r4+31)&~32..(r4+r5)&~32 -------- aligned [ Area 1 ] 19 ! (r4+r5)&~32..r4+r5 -------- not aligned [ Area 2 ] 20 ! 21 ! Clear area 0 22 mov r4, r2 23 ! 24 tst r1, r5 ! length < 32 25 bt .Larea2 ! skip to remainder 26 ! 27 add #31, r2 28 and r1, r2 29 cmp/eq r4, r2 30 bt .Larea1 31 mov r2, r3 32 sub r4, r3 33 mov r3, r7 34 mov r4, r2 35 ! 36 .L0: dt r3 37 0: mov.b r0, @r2 38 bf/s .L0 39 add #1, r2 40 ! 41 sub r7, r5 42 mov r2, r4 43 .Larea1: 44 mov r4, r3 45 add r5, r3 46 and r1, r3 47 cmp/hi r2, r3 48 bf .Larea2 49 ! 50 ! Clear area 1 51 #if defined(CONFIG_CPU_SH4) 52 1: movca.l r0, @r2 53 #else 54 1: mov.l r0, @r2 55 #endif 56 add #4, r2 57 2: mov.l r0, @r2 58 add #4, r2 59 3: mov.l r0, @r2 60 add #4, r2 61 4: mov.l r0, @r2 62 add #4, r2 63 5: mov.l r0, @r2 64 add #4, r2 65 6: mov.l r0, @r2 66 add #4, r2 67 7: mov.l r0, @r2 68 add #4, r2 69 8: mov.l r0, @r2 70 add #4, r2 71 cmp/hi r2, r3 72 bt/s 1b 73 nop 74 ! 75 ! Clear area 2 76 .Larea2: 77 mov r4, r3 78 add r5, r3 79 cmp/hs r3, r2 80 bt/s .Ldone 81 sub r2, r3 82 .L2: dt r3 83 9: mov.b r0, @r2 84 bf/s .L2 85 add #1, r2 86 ! 87 .Ldone: rts 88 mov #0, r0 ! return 0 as normal return 89 90 ! return the number of bytes remained 91 .Lbad_clear_user: 92 mov r4, r0 93 add r5, r0 94 rts 95 sub r2, r0 96 97 .section __ex_table,"a" 98 .align 2 99 .long 0b, .Lbad_clear_user 100 .long 1b, .Lbad_clear_user 101 .long 2b, .Lbad_clear_user 102 .long 3b, .Lbad_clear_user 103 .long 4b, .Lbad_clear_user 104 .long 5b, .Lbad_clear_user 105 .long 6b, .Lbad_clear_user 106 .long 7b, .Lbad_clear_user 107 .long 8b, .Lbad_clear_user 108 .long 9b, .Lbad_clear_user 109 .previous
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.