summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordchagin <dchagin@FreeBSD.org>2016-01-09 18:19:18 +0000
committerdchagin <dchagin@FreeBSD.org>2016-01-09 18:19:18 +0000
commitd1e4a825ff80ebcf1d5650ac9ec87e31ebbdf8ac (patch)
treed361bbd129b437df017fb9acfb79424d89d858b3
parentea82ee5fc1a9293c788007934ded32603845e258 (diff)
downloadFreeBSD-src-d1e4a825ff80ebcf1d5650ac9ec87e31ebbdf8ac.zip
FreeBSD-src-d1e4a825ff80ebcf1d5650ac9ec87e31ebbdf8ac.tar.gz
MFC r284159:
Futex is an aligned 32-bit integer. Use the proper instruction and operand when dereferencing futex pointer.
-rw-r--r--sys/amd64/linux/linux_support.s48
1 files changed, 24 insertions, 24 deletions
diff --git a/sys/amd64/linux/linux_support.s b/sys/amd64/linux/linux_support.s
index f809d11..2a3ba1a 100644
--- a/sys/amd64/linux/linux_support.s
+++ b/sys/amd64/linux/linux_support.s
@@ -45,9 +45,9 @@ ENTRY(futex_xchgl)
movq $VM_MAXUSER_ADDRESS-4,%rax
cmpq %rax,%rsi
ja futex_fault
- xchgq %rdi,(%rsi)
- movq %rdi,(%rdx)
- xorq %rax,%rax
+ xchgl %edi,(%rsi)
+ movl %edi,(%rdx)
+ xorl %eax,%eax
movq %rax,PCB_ONFAULT(%r8)
ret
@@ -60,9 +60,9 @@ ENTRY(futex_addl)
#ifdef SMP
lock
#endif
- xaddq %rdi,(%rsi)
- movq %rdi,(%rdx)
- xorq %rax,%rax
+ xaddl %edi,(%rsi)
+ movl %edi,(%rdx)
+ xorl %eax,%eax
movq %rax,PCB_ONFAULT(%r8)
ret
@@ -72,16 +72,16 @@ ENTRY(futex_orl)
movq $VM_MAXUSER_ADDRESS-4,%rax
cmpq %rax,%rsi
ja futex_fault
- movq (%rsi),%rax
-1: movq %rax,%rcx
- orq %rdi,%rcx
+ movl (%rsi),%eax
+1: movl %eax,%ecx
+ orl %edi,%ecx
#ifdef SMP
lock
#endif
- cmpxchgq %rcx,(%rsi)
+ cmpxchgl %ecx,(%rsi)
jnz 1b
- movq %rax,(%rdx)
- xorq %rax,%rax
+ movl %eax,(%rdx)
+ xorl %eax,%eax
movq %rax,PCB_ONFAULT(%r8)
ret
@@ -91,16 +91,16 @@ ENTRY(futex_andl)
movq $VM_MAXUSER_ADDRESS-4,%rax
cmpq %rax,%rsi
ja futex_fault
- movq (%rsi),%rax
-1: movq %rax,%rcx
- andq %rdi,%rcx
+ movl (%rsi),%eax
+1: movl %eax,%ecx
+ andl %edi,%ecx
#ifdef SMP
lock
#endif
- cmpxchgq %rcx,(%rsi)
+ cmpxchgl %ecx,(%rsi)
jnz 1b
- movq %rax,(%rdx)
- xorq %rax,%rax
+ movl %eax,(%rdx)
+ xorl %eax,%eax
movq %rax,PCB_ONFAULT(%r8)
ret
@@ -110,15 +110,15 @@ ENTRY(futex_xorl)
movq $VM_MAXUSER_ADDRESS-4,%rax
cmpq %rax,%rsi
ja futex_fault
- movq (%rsi),%rax
-1: movq %rax,%rcx
- xorq %rdi,%rcx
+ movl (%rsi),%eax
+1: movl %eax,%ecx
+ xorl %edi,%ecx
#ifdef SMP
lock
#endif
- cmpxchgq %rcx,(%rsi)
+ cmpxchgl %ecx,(%rsi)
jnz 1b
- movq %rax,(%rdx)
- xorq %rax,%rax
+ movl %eax,(%rdx)
+ xorl %eax,%eax
movq %rax,PCB_ONFAULT(%r8)
ret
OpenPOWER on IntegriCloud