1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * linux/arch/arm/lib/memcpy.S |
4 | * |
5 | * Author: Nicolas Pitre |
6 | * Created: Sep 28, 2005 |
7 | * Copyright: MontaVista Software, Inc. |
8 | */ |
9 | |
10 | #include <linux/linkage.h> |
11 | #include <asm/assembler.h> |
12 | #include <asm/unwind.h> |
13 | |
14 | #define LDR1W_SHIFT 0 |
15 | #define STR1W_SHIFT 0 |
16 | |
17 | .macro ldr1w ptr reg abort |
18 | W(ldr) \reg, [\ptr], #4 |
19 | .endm |
20 | |
21 | .macro ldr4w ptr reg1 reg2 reg3 reg4 abort |
22 | ldmia \ptr!, {\reg1, \reg2, \reg3, \reg4} |
23 | .endm |
24 | |
25 | .macro ldr8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort |
26 | ldmia \ptr!, {\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8} |
27 | .endm |
28 | |
29 | .macro ldr1b ptr reg cond=al abort |
30 | ldrb\cond \reg, [\ptr], #1 |
31 | .endm |
32 | |
33 | .macro str1w ptr reg abort |
34 | W(str) \reg, [\ptr], #4 |
35 | .endm |
36 | |
37 | .macro str8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort |
38 | stmia \ptr!, {\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8} |
39 | .endm |
40 | |
41 | .macro str1b ptr reg cond=al abort |
42 | strb\cond \reg, [\ptr], #1 |
43 | .endm |
44 | |
45 | .macro enter regs:vararg |
46 | UNWIND( .save {r0, \regs} ) |
47 | stmdb sp!, {r0, \regs} |
48 | .endm |
49 | |
50 | .macro exit regs:vararg |
51 | ldmfd sp!, {r0, \regs} |
52 | .endm |
53 | |
54 | .text |
55 | |
56 | /* Prototype: void *memcpy(void *dest, const void *src, size_t n); */ |
57 | |
58 | ENTRY(__memcpy) |
59 | ENTRY(mmiocpy) |
60 | WEAK(memcpy) |
61 | |
62 | #include "copy_template.S" |
63 | |
64 | ENDPROC(memcpy) |
65 | ENDPROC(mmiocpy) |
66 | ENDPROC(__memcpy) |
67 | |