linux/arch/arm/lib/memcpy.S
<<
>>
Prefs
   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
  61ENTRY(__memcpy)
  62ENTRY(mmiocpy)
  63WEAK(memcpy)
  64
  65#include "copy_template.S"
  66
  67ENDPROC(memcpy)
  68ENDPROC(mmiocpy)
  69ENDPROC(__memcpy)
  70