X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fx86_64%2Flib%2Fcopy_page.S;fp=arch%2Fx86_64%2Flib%2Fcopy_page.S;h=8fa19d96a7eefde6b7d591fba46705486055818f;hb=64ba3f394c830ec48a1c31b53dcae312c56f1604;hp=76288295b3eb3a964c2cfc3b2be2fc1884f184bb;hpb=be1e6109ac94a859551f8e1774eb9a8469fe055c;p=linux-2.6.git diff --git a/arch/x86_64/lib/copy_page.S b/arch/x86_64/lib/copy_page.S index 76288295b..8fa19d96a 100644 --- a/arch/x86_64/lib/copy_page.S +++ b/arch/x86_64/lib/copy_page.S @@ -1,32 +1,17 @@ /* Written 2003 by Andi Kleen, based on a kernel by Evandro Menezes */ -#include -#include - - ALIGN -copy_page_c: - CFI_STARTPROC - movl $4096/8,%ecx - rep movsq - ret - CFI_ENDPROC -ENDPROC(copy_page_c) - /* Don't use streaming store because it's better when the target ends up in cache. */ /* Could vary the prefetch distance based on SMP/UP */ -ENTRY(copy_page) - CFI_STARTPROC + .globl copy_page + .p2align 4 +copy_page: subq $3*8,%rsp - CFI_ADJUST_CFA_OFFSET 3*8 movq %rbx,(%rsp) - CFI_REL_OFFSET rbx, 0 movq %r12,1*8(%rsp) - CFI_REL_OFFSET r12, 1*8 movq %r13,2*8(%rsp) - CFI_REL_OFFSET r13, 2*8 movl $(4096/64)-5,%ecx .p2align 4 @@ -87,33 +72,30 @@ ENTRY(copy_page) jnz .Loop2 movq (%rsp),%rbx - CFI_RESTORE rbx movq 1*8(%rsp),%r12 - CFI_RESTORE r12 movq 2*8(%rsp),%r13 - CFI_RESTORE r13 addq $3*8,%rsp - CFI_ADJUST_CFA_OFFSET -3*8 ret -.Lcopy_page_end: - CFI_ENDPROC -ENDPROC(copy_page) /* Some CPUs run faster using the string copy instructions. It is also a lot simpler. Use this when possible */ #include - .section .altinstr_replacement,"ax" -1: .byte 0xeb /* jmp */ - .byte (copy_page_c - copy_page) - (2f - 1b) /* offset */ -2: - .previous .section .altinstructions,"a" .align 8 - .quad copy_page - .quad 1b - .byte X86_FEATURE_REP_GOOD - .byte .Lcopy_page_end - copy_page - .byte 2b - 1b + .quad copy_page + .quad copy_page_c + .byte X86_FEATURE_REP_GOOD + .byte copy_page_c_end-copy_page_c + .byte copy_page_c_end-copy_page_c + .previous + + .section .altinstr_replacement,"ax" +copy_page_c: + movl $4096/8,%ecx + rep + movsq + ret +copy_page_c_end: .previous