[PATCH 07/39] don't clobber r8 nor use rcx

From: Glauber Costa
Date: Fri Jun 27 2008 - 17:37:44 EST


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@xxxxxxxxxx>
---
arch/x86/lib/getuser_64.S | 42 +++++++++++++++++++++---------------------
include/asm-x86/uaccess_64.h | 3 +--
2 files changed, 22 insertions(+), 23 deletions(-)

diff --git a/arch/x86/lib/getuser_64.S b/arch/x86/lib/getuser_64.S
index 5448876..2b003d3 100644
--- a/arch/x86/lib/getuser_64.S
+++ b/arch/x86/lib/getuser_64.S
@@ -36,10 +36,10 @@
.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)
diff --git a/include/asm-x86/uaccess_64.h b/include/asm-x86/uaccess_64.h
index 83382c1..9049f4e 100644
--- a/include/asm-x86/uaccess_64.h
+++ b/include/asm-x86/uaccess_64.h
@@ -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 */
--
1.5.5.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/