Linux-2.6.12-rc2
[linux-2.6/next.git] / arch / arm26 / lib / copy_page.S
blob2d79ee12ea1f736391f5e6fdd4a56d8f901ee883
1 /*
2  *  linux/arch/arm26/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 <asm/assembler.h>
14 #include <asm/asm_offsets.h>
16                 .text
17                 .align  5
19  * ARMv3 optimised copy_user_page
20  *
21  * FIXME: rmk do we need to handle cache stuff...
22  * FIXME: im is this right on ARM26?
23  */
24 ENTRY(__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         LOADREGS(fd, sp!, {r4, pc})             @       3
40         .align  5
42  * ARMv3 optimised clear_user_page
43  *
44  * FIXME: rmk do we need to handle cache stuff...
45  */
46 ENTRY(__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
61         .section ".init.text", #alloc, #execinstr