mirror of
https://git.FreeBSD.org/src.git
synced 2025-02-04 17:15:50 +00:00
Futex is an aligned 32-bit integer. Use the proper instruction and
operand when dereferencing futex pointer.
This commit is contained in:
parent
6b16d66497
commit
c2bc5b15eb
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=284159
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user