X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fx86_64%2Flib%2Fmemcpy.S;fp=arch%2Fx86_64%2Flib%2Fmemcpy.S;h=5554948b55549e2c7837264ce9bcae6b552e5a94;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=9b10fb6a9fb75a15162f856c7271b1232d500f68;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/arch/x86_64/lib/memcpy.S b/arch/x86_64/lib/memcpy.S index 9b10fb6a9..5554948b5 100644 --- a/arch/x86_64/lib/memcpy.S +++ b/arch/x86_64/lib/memcpy.S @@ -1,9 +1,6 @@ /* Copyright 2002 Andi Kleen */ -#include -#include -#include - + #include /* * memcpy - Copy a memory block. * @@ -16,26 +13,12 @@ * rax original destination */ - ALIGN -memcpy_c: - CFI_STARTPROC - movq %rdi,%rax - movl %edx,%ecx - shrl $3,%ecx - andl $7,%edx - rep movsq - movl %edx,%ecx - rep movsb - ret - CFI_ENDPROC -ENDPROC(memcpy_c) - -ENTRY(__memcpy) -ENTRY(memcpy) - CFI_STARTPROC + .globl __memcpy + .globl memcpy + .p2align 4 +__memcpy: +memcpy: pushq %rbx - CFI_ADJUST_CFA_OFFSET 8 - CFI_REL_OFFSET rbx, 0 movq %rdi,%rax movl %edx,%ecx @@ -103,27 +86,36 @@ ENTRY(memcpy) .Lende: popq %rbx - CFI_ADJUST_CFA_OFFSET -8 - CFI_RESTORE rbx ret .Lfinal: - CFI_ENDPROC -ENDPROC(memcpy) -ENDPROC(__memcpy) /* Some CPUs run faster using the string copy instructions. It is also a lot simpler. Use this when possible */ - .section .altinstr_replacement,"ax" -1: .byte 0xeb /* jmp */ - .byte (memcpy_c - memcpy) - (2f - 1b) /* offset */ -2: - .previous .section .altinstructions,"a" .align 8 - .quad memcpy - .quad 1b - .byte X86_FEATURE_REP_GOOD - .byte .Lfinal - memcpy - .byte 2b - 1b + .quad memcpy + .quad memcpy_c + .byte X86_FEATURE_REP_GOOD + .byte .Lfinal-memcpy + .byte memcpy_c_end-memcpy_c + .previous + + .section .altinstr_replacement,"ax" + /* rdi destination + * rsi source + * rdx count + */ +memcpy_c: + movq %rdi,%rax + movl %edx,%ecx + shrl $3,%ecx + andl $7,%edx + rep + movsq + movl %edx,%ecx + rep + movsb + ret +memcpy_c_end: .previous