Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
[linux-2.6] / arch / arm / mm / copypage-v3.S
1 /*
2  *  linux/arch/arm/lib/copypage.S
3  *
4  *  Copyright (C) 1995-1999 Russell King
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  *  ASM optimised string functions
11  */
12 #include <linux/linkage.h>
13 #include <linux/init.h>
14 #include <asm/assembler.h>
15 #include <asm/asm-offsets.h>
16
17                 .text
18                 .align  5
19 /*
20  * ARMv3 optimised copy_user_page
21  *
22  * FIXME: do we need to handle cache stuff...
23  */
24 ENTRY(v3_copy_user_page)
25         stmfd   sp!, {r4, lr}                   @       2
26         mov     r2, #PAGE_SZ/64                 @       1
27         ldmia   r1!, {r3, r4, ip, lr}           @       4+1
28 1:      stmia   r0!, {r3, r4, ip, lr}           @       4
29         ldmia   r1!, {r3, r4, ip, lr}           @       4+1
30         stmia   r0!, {r3, r4, ip, lr}           @       4
31         ldmia   r1!, {r3, r4, ip, lr}           @       4+1
32         stmia   r0!, {r3, r4, ip, lr}           @       4
33         ldmia   r1!, {r3, r4, ip, lr}           @       4
34         subs    r2, r2, #1                      @       1
35         stmia   r0!, {r3, r4, ip, lr}           @       4
36         ldmneia r1!, {r3, r4, ip, lr}           @       4
37         bne     1b                              @       1
38         ldmfd   sp!, {r4, pc}                   @       3
39
40         .align  5
41 /*
42  * ARMv3 optimised clear_user_page
43  *
44  * FIXME: do we need to handle cache stuff...
45  */
46 ENTRY(v3_clear_user_page)
47         str     lr, [sp, #-4]!
48         mov     r1, #PAGE_SZ/64                 @ 1
49         mov     r2, #0                          @ 1
50         mov     r3, #0                          @ 1
51         mov     ip, #0                          @ 1
52         mov     lr, #0                          @ 1
53 1:      stmia   r0!, {r2, r3, ip, lr}           @ 4
54         stmia   r0!, {r2, r3, ip, lr}           @ 4
55         stmia   r0!, {r2, r3, ip, lr}           @ 4
56         stmia   r0!, {r2, r3, ip, lr}           @ 4
57         subs    r1, r1, #1                      @ 1
58         bne     1b                              @ 1
59         ldr     pc, [sp], #4
60
61         __INITDATA
62
63         .type   v3_user_fns, #object
64 ENTRY(v3_user_fns)
65         .long   v3_clear_user_page
66         .long   v3_copy_user_page
67         .size   v3_user_fns, . - v3_user_fns