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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [arch/] [x86_64/] [lib/] [memcpy.S] - Rev 1765

Compare with Previous | Blame | View Log

/* Copyright 2002 Andi Kleen */
        
/*
 * memcpy - Copy a memory block.
 *
 * Input:       
 * rdi destination
 * rsi source
 * rdx count
 * 
 * Output:
 * rax original destination
 */     

        .globl __memcpy
        .globl memcpy
        .p2align 4
__memcpy:
memcpy:         
        pushq %rbx
        movq %rdi,%rax

        movl %edx,%ecx
        shrl $6,%ecx
        jz .Lhandle_tail
        
        .p2align 4
.Lloop_64:
        decl %ecx

        movq (%rsi),%r11
        movq 8(%rsi),%r8

        movq %r11,(%rdi)
        movq %r8,1*8(%rdi)

        movq 2*8(%rsi),%r9
        movq 3*8(%rsi),%r10

        movq %r9,2*8(%rdi)
        movq %r10,3*8(%rdi)
                
        movq 4*8(%rsi),%r11
        movq 5*8(%rsi),%r8

        movq %r11,4*8(%rdi)
        movq %r8,5*8(%rdi)

        movq 6*8(%rsi),%r9
        movq 7*8(%rsi),%r10

        movq %r9,6*8(%rdi)
        movq %r10,7*8(%rdi)

        leaq 64(%rsi),%rsi
        leaq 64(%rdi),%rdi
        jnz  .Lloop_64

.Lhandle_tail:
        movl %edx,%ecx
        andl $63,%ecx
        shrl $3,%ecx
        jz   .Lhandle_7
        .p2align 4
.Lloop_8: 
        decl %ecx
        movq (%rsi),%r8
        movq %r8,(%rdi) 
        leaq 8(%rdi),%rdi
        leaq 8(%rsi),%rsi
        jnz  .Lloop_8

.Lhandle_7:
        movl %edx,%ecx
        andl $7,%ecx
        jz .Lende
        .p2align 4
.Lloop_1:
        movb (%rsi),%r8b
        movb %r8b,(%rdi) 
        incq %rdi
        incq %rsi
        decl %ecx
        jnz .Lloop_1
        
.Lende:         
        popq %rbx
        ret

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.