import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / arch / arm / lib / copy_page.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 <asm/assembler.h>
14 #include <asm/constants.h>
15
16                 .text
17                 .align  5
18 /*
19  * StrongARM optimised copy_page routine
20  * now 1.78bytes/cycle, was 1.60 bytes/cycle (50MHz bus -> 89MB/s)
21  * Note that we probably achieve closer to the 100MB/s target with
22  * the core clock switching.
23  */
24 ENTRY(copy_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