x86: don't clobber r8 nor use rcx.
authorGlauber Costa <gcosta@redhat.com>
Fri, 13 Jun 2008 19:35:52 +0000 (16:35 -0300)
committerIngo Molnar <mingo@elte.hu>
Wed, 9 Jul 2008 07:13:59 +0000 (09:13 +0200)
There's really no reason to clobber r8 or pass the address in rcx.
We can safely use only two registers (which we already have to touch anyway)
to do the job.

Signed-off-by: Glauber Costa <gcosta@redhat.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/lib/getuser_64.S
include/asm-x86/uaccess_64.h

index 5448876261f8734b2b4367c3295dd074c8d33542..2b003d313480fba488ed80fc8b58d069b8ff37d7 100644 (file)
        .text
 ENTRY(__get_user_1)
        CFI_STARTPROC
-       GET_THREAD_INFO(%r8)
-       cmpq threadinfo_addr_limit(%r8),%rcx
+       GET_THREAD_INFO(%rdx)
+       cmpq threadinfo_addr_limit(%rdx),%rax
        jae bad_get_user
-1:     movzb (%rcx),%edx
+1:     movzb (%rax),%edx
        xorl %eax,%eax
        ret
        CFI_ENDPROC
@@ -47,48 +47,48 @@ ENDPROC(__get_user_1)
 
 ENTRY(__get_user_2)
        CFI_STARTPROC
-       GET_THREAD_INFO(%r8)
-       addq $1,%rcx
+       GET_THREAD_INFO(%rdx)
+       addq $1,%rax
        jc 20f
-       cmpq threadinfo_addr_limit(%r8),%rcx
+       cmpq threadinfo_addr_limit(%rdx),%rax
        jae 20f
-       decq   %rcx
-2:     movzwl (%rcx),%edx
+       decq   %rax
+2:     movzwl (%rax),%edx
        xorl %eax,%eax
        ret
-20:    decq    %rcx
+20:    decq    %rax
        jmp     bad_get_user
        CFI_ENDPROC
 ENDPROC(__get_user_2)
 
 ENTRY(__get_user_4)
        CFI_STARTPROC
-       GET_THREAD_INFO(%r8)
-       addq $3,%rcx
+       GET_THREAD_INFO(%rdx)
+       addq $3,%rax
        jc 30f
-       cmpq threadinfo_addr_limit(%r8),%rcx
+       cmpq threadinfo_addr_limit(%rdx),%rax
        jae 30f
-       subq $3,%rcx
-3:     movl (%rcx),%edx
+       subq $3,%rax
+3:     movl (%rax),%edx
        xorl %eax,%eax
        ret
-30:    subq $3,%rcx
+30:    subq $3,%rax
        jmp bad_get_user
        CFI_ENDPROC
 ENDPROC(__get_user_4)
 
 ENTRY(__get_user_8)
        CFI_STARTPROC
-       GET_THREAD_INFO(%r8)
-       addq $7,%rcx
+       GET_THREAD_INFO(%rdx)
+       addq $7,%rax
        jc 40f
-       cmpq threadinfo_addr_limit(%r8),%rcx
+       cmpq threadinfo_addr_limit(%rdx),%rax
        jae     40f
-       subq    $7,%rcx
-4:     movq (%rcx),%rdx
+       subq    $7,%rax
+4:     movq (%rax),%rdx
        xorl %eax,%eax
        ret
-40:    subq $7,%rcx
+40:    subq $7,%rax
        jmp bad_get_user
        CFI_ENDPROC
 ENDPROC(__get_user_8)
index b8a2f43399032e1ce617e38a35eb28919f08a287..a2d49078e19cad6a5d0a1997583351833b9947ec 100644 (file)
@@ -90,8 +90,7 @@ extern int fixup_exception(struct pt_regs *regs);
 #define __get_user_x(size, ret, x, ptr)                      \
        asm volatile("call __get_user_" #size         \
                     : "=a" (ret),"=d" (x)            \
-                    : "c" (ptr)                      \
-                    : "r8")
+                    : "0" (ptr))                     \
 
 /* Careful: we have to cast the result to the type of the pointer
  * for sign reasons */