/*1* linux/arch/m32r/lib/memcpy.S2*3* Copyright (C) 2001 Hiroyuki Kondo, and Hirokazu Takata4* Copyright (C) 2004 Hirokazu Takata5*6* void *memcopy(void *dst, const void *src, int n);7*8* dst: r09* src: r110* n : r211*/1213.text14#include <linux/linkage.h>15#include <asm/assembler.h>1617#ifdef CONFIG_ISA_DUAL_ISSUE1819.text20ENTRY(memcpy)21memcopy:22mv r4, r0 || mv r7, r023or r7, r1 || cmpz r224jc r14 || cmpeq r0, r1 ; return if r2=025jc r14 ; return if r0=r12627and3 r7, r7, #328bnez r7, byte_copy29srl3 r3, r2, #230and3 r2, r2, #331beqz r3, byte_copy32addi r4, #-433word_copy:34ld r7, @r1+ || addi r3, #-135st r7, @+r4 || cmpz r236bnez r3, word_copy37addi r4, #4 || jc r14 ; return if r2=038#if defined(CONFIG_ISA_M32R2)39byte_copy:40ldb r7, @r1 || addi r1, #141addi r2, #-1 || stb r7, @r4+42bnez r2, byte_copy43#elif defined(CONFIG_ISA_M32R)44byte_copy:45ldb r7, @r1 || addi r1, #146addi r2, #-1 || stb r7, @r447addi r4, #148bnez r2, byte_copy49#else50#error unknown isa configuration51#endif52end_memcopy:53jmp r145455#else /* not CONFIG_ISA_DUAL_ISSUE */5657.text58ENTRY(memcpy)59memcopy:60mv r4, r061mv r7, r062or r7, r163beq r0, r1, end_memcopy64beqz r2, end_memcopy6566and3 r7, r7, #367bnez r7, byte_copy68srl3 r3, r2, #269and3 r2, r2, #370beqz r3, byte_copy71addi r4, #-472word_copy:73ld r7, @r1+74addi r3, #-175st r7, @+r476bnez r3, word_copy77beqz r2, end_memcopy78addi r4, #479byte_copy:80ldb r7, @r181addi r1, #182addi r2, #-183stb r7, @r484addi r4, #185bnez r2, byte_copy86end_memcopy:87jmp r148889#endif /* not CONFIG_ISA_DUAL_ISSUE */9091.end929394