Skip to content

Commit

Permalink
x86: don't clobber r8 nor use rcx.
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Glauber Costa authored and Ingo Molnar committed Jul 9, 2008
1 parent f8dd0d3 commit edf1016
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 23 deletions.
42 changes: 21 additions & 21 deletions arch/x86/lib/getuser_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -36,59 +36,59 @@
.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
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)
Expand Down
3 changes: 1 addition & 2 deletions include/asm-x86/uaccess_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit edf1016

Please sign in to comment.