162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * linux/arch/arm/lib/memcpy.S 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Author: Nicolas Pitre 662306a36Sopenharmony_ci * Created: Sep 28, 2005 762306a36Sopenharmony_ci * Copyright: MontaVista Software, Inc. 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include <linux/linkage.h> 1162306a36Sopenharmony_ci#include <asm/assembler.h> 1262306a36Sopenharmony_ci#include <asm/unwind.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#define LDR1W_SHIFT 0 1562306a36Sopenharmony_ci#define STR1W_SHIFT 0 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci .macro ldr1w ptr reg abort 1862306a36Sopenharmony_ci W(ldr) \reg, [\ptr], #4 1962306a36Sopenharmony_ci .endm 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci .macro ldr4w ptr reg1 reg2 reg3 reg4 abort 2262306a36Sopenharmony_ci ldmia \ptr!, {\reg1, \reg2, \reg3, \reg4} 2362306a36Sopenharmony_ci .endm 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci .macro ldr8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort 2662306a36Sopenharmony_ci ldmia \ptr!, {\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8} 2762306a36Sopenharmony_ci .endm 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci .macro ldr1b ptr reg cond=al abort 3062306a36Sopenharmony_ci ldrb\cond \reg, [\ptr], #1 3162306a36Sopenharmony_ci .endm 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci .macro str1w ptr reg abort 3462306a36Sopenharmony_ci W(str) \reg, [\ptr], #4 3562306a36Sopenharmony_ci .endm 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci .macro str8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort 3862306a36Sopenharmony_ci stmia \ptr!, {\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8} 3962306a36Sopenharmony_ci .endm 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci .macro str1b ptr reg cond=al abort 4262306a36Sopenharmony_ci strb\cond \reg, [\ptr], #1 4362306a36Sopenharmony_ci .endm 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci .macro enter regs:vararg 4662306a36Sopenharmony_ciUNWIND( .save {r0, \regs} ) 4762306a36Sopenharmony_ci stmdb sp!, {r0, \regs} 4862306a36Sopenharmony_ci .endm 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci .macro exit regs:vararg 5162306a36Sopenharmony_ci ldmfd sp!, {r0, \regs} 5262306a36Sopenharmony_ci .endm 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci .text 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci/* Prototype: void *memcpy(void *dest, const void *src, size_t n); */ 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ciENTRY(__memcpy) 5962306a36Sopenharmony_ciENTRY(mmiocpy) 6062306a36Sopenharmony_ciWEAK(memcpy) 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#include "copy_template.S" 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ciENDPROC(memcpy) 6562306a36Sopenharmony_ciENDPROC(mmiocpy) 6662306a36Sopenharmony_ciENDPROC(__memcpy) 67