18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2013 ARM Ltd. 48c2ecf20Sopenharmony_ci * Copyright (C) 2013 Linaro. 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * This code is based on glibc cortex strings work originally authored by Linaro 78c2ecf20Sopenharmony_ci * be found @ 88c2ecf20Sopenharmony_ci * 98c2ecf20Sopenharmony_ci * http://bazaar.launchpad.net/~linaro-toolchain-dev/cortex-strings/trunk/ 108c2ecf20Sopenharmony_ci * files/head:/src/aarch64/ 118c2ecf20Sopenharmony_ci */ 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <linux/linkage.h> 148c2ecf20Sopenharmony_ci#include <asm/assembler.h> 158c2ecf20Sopenharmony_ci#include <asm/cache.h> 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci/* 188c2ecf20Sopenharmony_ci * Copy a buffer from src to dest (alignment handled by the hardware) 198c2ecf20Sopenharmony_ci * 208c2ecf20Sopenharmony_ci * Parameters: 218c2ecf20Sopenharmony_ci * x0 - dest 228c2ecf20Sopenharmony_ci * x1 - src 238c2ecf20Sopenharmony_ci * x2 - n 248c2ecf20Sopenharmony_ci * Returns: 258c2ecf20Sopenharmony_ci * x0 - dest 268c2ecf20Sopenharmony_ci */ 278c2ecf20Sopenharmony_ci .macro ldrb1 reg, ptr, val 288c2ecf20Sopenharmony_ci ldrb \reg, [\ptr], \val 298c2ecf20Sopenharmony_ci .endm 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci .macro strb1 reg, ptr, val 328c2ecf20Sopenharmony_ci strb \reg, [\ptr], \val 338c2ecf20Sopenharmony_ci .endm 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci .macro ldrh1 reg, ptr, val 368c2ecf20Sopenharmony_ci ldrh \reg, [\ptr], \val 378c2ecf20Sopenharmony_ci .endm 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci .macro strh1 reg, ptr, val 408c2ecf20Sopenharmony_ci strh \reg, [\ptr], \val 418c2ecf20Sopenharmony_ci .endm 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci .macro ldr1 reg, ptr, val 448c2ecf20Sopenharmony_ci ldr \reg, [\ptr], \val 458c2ecf20Sopenharmony_ci .endm 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci .macro str1 reg, ptr, val 488c2ecf20Sopenharmony_ci str \reg, [\ptr], \val 498c2ecf20Sopenharmony_ci .endm 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci .macro ldp1 reg1, reg2, ptr, val 528c2ecf20Sopenharmony_ci ldp \reg1, \reg2, [\ptr], \val 538c2ecf20Sopenharmony_ci .endm 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci .macro stp1 reg1, reg2, ptr, val 568c2ecf20Sopenharmony_ci stp \reg1, \reg2, [\ptr], \val 578c2ecf20Sopenharmony_ci .endm 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ciSYM_FUNC_START_ALIAS(__memcpy) 608c2ecf20Sopenharmony_ciSYM_FUNC_START_WEAK_PI(memcpy) 618c2ecf20Sopenharmony_ci#include "copy_template.S" 628c2ecf20Sopenharmony_ci ret 638c2ecf20Sopenharmony_ciSYM_FUNC_END_PI(memcpy) 648c2ecf20Sopenharmony_ciEXPORT_SYMBOL(memcpy) 658c2ecf20Sopenharmony_ciSYM_FUNC_END_ALIAS(__memcpy) 668c2ecf20Sopenharmony_ciEXPORT_SYMBOL(__memcpy) 67