Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  *  linux/arch/arm/lib/memcpy.S
0004  *
0005  *  Author: Nicolas Pitre
0006  *  Created:    Sep 28, 2005
0007  *  Copyright:  MontaVista Software, Inc.
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 /* Prototype: void *memcpy(void *dest, const void *src, size_t n); */
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)