Merge tag 'timers-urgent-2020-12-27' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / arch / arm / lib / memcpy.S
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 reg1 reg2
46         stmdb sp!, {r0, \reg1, \reg2}
47         .endm
48
49         .macro usave reg1 reg2
50         UNWIND( .save   {r0, \reg1, \reg2}      )
51         .endm
52
53         .macro exit reg1 reg2
54         ldmfd sp!, {r0, \reg1, \reg2}
55         .endm
56
57         .text
58
59 /* Prototype: void *memcpy(void *dest, const void *src, size_t n); */
60
61 ENTRY(__memcpy)
62 ENTRY(mmiocpy)
63 WEAK(memcpy)
64
65 #include "copy_template.S"
66
67 ENDPROC(memcpy)
68 ENDPROC(mmiocpy)
69 ENDPROC(__memcpy)