OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [arch/] [m32r/] [lib/] [memcpy.S] - Rev 3

Compare with Previous | Blame | View Log

/*
 *  linux/arch/m32r/lib/memcpy.S
 *
 *  Copyright (C) 2001  Hiroyuki Kondo, and Hirokazu Takata
 *  Copyright (C) 2004  Hirokazu Takata
 *
 *  void *memcopy(void *dst, const void *src, int n);
 *
 *        dst: r0
 *        src: r1
 *        n  : r2
 */

        .text
#include <linux/linkage.h>
#include <asm/assembler.h>

#ifdef CONFIG_ISA_DUAL_ISSUE

        .text
ENTRY(memcpy)
memcopy:
        mv      r4, r0              ||  mv      r7, r0
        or      r7, r1              ||  cmpz    r2
        jc      r14                 ||  cmpeq   r0, r1  ; return if r2=0
        jc      r14                                     ; return if r0=r1

        and3    r7, r7, #3
        bnez    r7, byte_copy
        srl3    r3, r2, #2
        and3    r2, r2, #3
        beqz    r3, byte_copy
        addi    r4, #-4
word_copy:
        ld      r7, @r1+            ||  addi    r3, #-1
        st      r7, @+r4            ||  cmpz    r2
        bnez    r3, word_copy
        addi    r4, #4              ||  jc      r14     ; return if r2=0
#if defined(CONFIG_ISA_M32R2)
byte_copy:
        ldb     r7, @r1             ||  addi    r1, #1
        addi    r2, #-1             ||  stb     r7, @r4+
        bnez    r2, byte_copy
#elif defined(CONFIG_ISA_M32R)
byte_copy:
        ldb     r7, @r1             ||  addi    r1, #1
        addi    r2, #-1             ||  stb     r7, @r4
        addi    r4, #1
        bnez    r2, byte_copy
#else
#error unknown isa configuration
#endif
end_memcopy:
        jmp     r14

#else /* not CONFIG_ISA_DUAL_ISSUE */

        .text
ENTRY(memcpy)
memcopy:
        mv      r4, r0
        mv      r7, r0
        or      r7, r1
        beq     r0, r1, end_memcopy
        beqz    r2, end_memcopy

        and3    r7, r7, #3
        bnez    r7, byte_copy
        srl3    r3, r2, #2
        and3    r2, r2, #3
        beqz    r3, byte_copy
        addi    r4, #-4
word_copy:
        ld      r7, @r1+
        addi    r3, #-1
        st      r7, @+r4
        bnez    r3, word_copy
        beqz    r2, end_memcopy
        addi    r4, #4
byte_copy:
        ldb     r7, @r1
        addi    r1, #1
        addi    r2, #-1
        stb     r7, @r4
        addi    r4, #1
        bnez    r2, byte_copy
end_memcopy:
        jmp     r14

#endif /* not CONFIG_ISA_DUAL_ISSUE */

        .end

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.