2 * __clear_user_page, __clear_user, clear_page implementation of SuperH
4 * Copyright (C) 2001 Kaz Kojima
5 * Copyright (C) 2001, 2002 Niibe Yutaka
6 * Copyright (C) 2006 Paul Mundt
8 #include <linux/linkage.h>
15 * void clear_page_slow(void *to)
21 * r5 --- to + PAGE_SIZE
23 ENTRY(clear_page_slow)
30 #if defined(CONFIG_CPU_SH3)
32 #elif defined(CONFIG_CPU_SH4)
44 #if defined(CONFIG_CPU_SH4)
53 .Llimit: .long (PAGE_SIZE-28)
58 mov #0xe0, r1 ! 0xffffffe0
60 ! r4..(r4+31)&~32 -------- not aligned [ Area 0 ]
61 ! (r4+31)&~32..(r4+r5)&~32 -------- aligned [ Area 1 ]
62 ! (r4+r5)&~32..r4+r5 -------- not aligned [ Area 2 ]
67 tst r1, r5 ! length < 32
68 bt .Larea2 ! skip to remainder
94 #if defined(CONFIG_CPU_SH4)
131 mov #0, r0 ! return 0 as normal return
133 ! return the number of bytes remained
140 .section __ex_table,"a"
142 .long 0b, .Lbad_clear_user
143 .long 1b, .Lbad_clear_user
144 .long 2b, .Lbad_clear_user
145 .long 3b, .Lbad_clear_user
146 .long 4b, .Lbad_clear_user
147 .long 5b, .Lbad_clear_user
148 .long 6b, .Lbad_clear_user
149 .long 7b, .Lbad_clear_user
150 .long 8b, .Lbad_clear_user
151 .long 9b, .Lbad_clear_user