summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorGlauber Costa <gcosta@redhat.com>2008-06-24 11:13:16 -0300
committerIngo Molnar <mingo@elte.hu>2008-07-09 09:14:01 +0200
commit9262875395cf22b5a90dd8a640e1070cedf55d0e (patch)
tree81b17b8f280817da70b4225409c65aaf1c824db9 /arch
parent9aa038815b5756e20a00b8e1efd5740434b37aea (diff)
downloadlinux-9262875395cf22b5a90dd8a640e1070cedf55d0e.tar.bz2
x86: adapt x86_64 getuser functions.
Instead of doing a sub after the addition, use the offset directly at the memory operand of the mov instructions. This is the way i386 do. 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>
Diffstat (limited to 'arch')
-rw-r--r--arch/x86/lib/getuser_64.S33
1 files changed, 12 insertions, 21 deletions
diff --git a/arch/x86/lib/getuser_64.S b/arch/x86/lib/getuser_64.S
index 2b003d313480..df37d3a9ba2a 100644
--- a/arch/x86/lib/getuser_64.S
+++ b/arch/x86/lib/getuser_64.S
@@ -47,49 +47,40 @@ ENDPROC(__get_user_1)
ENTRY(__get_user_2)
CFI_STARTPROC
- GET_THREAD_INFO(%rdx)
addq $1,%rax
- jc 20f
+ jc bad_get_user
+ GET_THREAD_INFO(%rdx)
cmpq threadinfo_addr_limit(%rdx),%rax
- jae 20f
- decq %rax
-2: movzwl (%rax),%edx
+ jae bad_get_user
+2: movzwl -1(%rax),%edx
xorl %eax,%eax
ret
-20: decq %rax
- jmp bad_get_user
CFI_ENDPROC
ENDPROC(__get_user_2)
ENTRY(__get_user_4)
CFI_STARTPROC
- GET_THREAD_INFO(%rdx)
addq $3,%rax
- jc 30f
+ jc bad_get_user
+ GET_THREAD_INFO(%rdx)
cmpq threadinfo_addr_limit(%rdx),%rax
- jae 30f
- subq $3,%rax
-3: movl (%rax),%edx
+ jae bad_get_user
+3: movl -3(%rax),%edx
xorl %eax,%eax
ret
-30: subq $3,%rax
- jmp bad_get_user
CFI_ENDPROC
ENDPROC(__get_user_4)
ENTRY(__get_user_8)
CFI_STARTPROC
- GET_THREAD_INFO(%rdx)
addq $7,%rax
- jc 40f
+ jc bad_get_user
+ GET_THREAD_INFO(%rdx)
cmpq threadinfo_addr_limit(%rdx),%rax
- jae 40f
- subq $7,%rax
-4: movq (%rax),%rdx
+ jae bad_get_user
+4: movq -7(%rax),%rdx
xorl %eax,%eax
ret
-40: subq $7,%rax
- jmp bad_get_user
CFI_ENDPROC
ENDPROC(__get_user_8)