0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/linkage.h>
0011 #include <asm/assembler.h>
0012 #include <asm/unwind.h>
0013
0014 #define LDR1W_SHIFT 0
0015 #define STR1W_SHIFT 0
0016
0017 .macro ldr1w ptr reg abort
0018 W(ldr) \reg, [\ptr], #4
0019 .endm
0020
0021 .macro ldr4w ptr reg1 reg2 reg3 reg4 abort
0022 ldmia \ptr!, {\reg1, \reg2, \reg3, \reg4}
0023 .endm
0024
0025 .macro ldr8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort
0026 ldmia \ptr!, {\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8}
0027 .endm
0028
0029 .macro ldr1b ptr reg cond=al abort
0030 ldrb\cond \reg, [\ptr], #1
0031 .endm
0032
0033 .macro str1w ptr reg abort
0034 W(str) \reg, [\ptr], #4
0035 .endm
0036
0037 .macro str8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort
0038 stmia \ptr!, {\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8}
0039 .endm
0040
0041 .macro str1b ptr reg cond=al abort
0042 strb\cond \reg, [\ptr], #1
0043 .endm
0044
0045 .macro enter regs:vararg
0046 UNWIND( .save {r0, \regs} )
0047 stmdb sp!, {r0, \regs}
0048 .endm
0049
0050 .macro exit regs:vararg
0051 ldmfd sp!, {r0, \regs}
0052 .endm
0053
0054 .text
0055
0056
0057
0058 ENTRY(__memcpy)
0059 ENTRY(mmiocpy)
0060 WEAK(memcpy)
0061
0062 #include "copy_template.S"
0063
0064 ENDPROC(memcpy)
0065 ENDPROC(mmiocpy)
0066 ENDPROC(__memcpy)