include upstream ip1000a driver version 2.09f
[linux-2.4.git] / arch / sh64 / lib / page_clear.S
1 /* Written by Richard P. Curnow, SuperH (UK) Ltd.
2
3    Tight version of memset for the case of just clearing a page.  It turns out
4    that having the alloco's spaced out slightly due to the increment/branch
5    pair causes them to contend less for access to the cache.  Similarly,
6    keeping the stores apart from the allocos causes less contention.  => Do two
7    separate loops.  Do multiple stores per loop to amortise the
8    increment/branch cost a little.
9
10    Parameters:
11    r2 : source effective address (start of page)
12
13    Always clears 4096 bytes.
14   
15 */
16
17         .section .text..SHmedia32,"ax"
18         .little
19
20         .balign 8
21         .global sh64_page_clear
22 sh64_page_clear:
23         pta/l 1f, tr1
24         pta/l 2f, tr2
25         ptabs/l r18, tr0
26
27         movi 4096, r7
28         add  r2, r7, r7
29         add  r2, r63, r6
30 1:
31         alloco r6, 0
32         addi    r6, 32, r6
33         bgt/l   r7, r6, tr1
34
35         add  r2, r63, r6
36 2:
37         st.q  r6,   0, r63
38         st.q  r6,   8, r63
39         st.q  r6,  16, r63
40         st.q  r6,  24, r63
41         addi r6, 32, r6
42         bgt/l r7, r6, tr2
43         
44         blink tr0, r63
45
46