x86_64: Fix atomic functions

This commit is contained in:
Pawel Dziepak 2013-11-20 15:11:00 +01:00
parent c4ac37a35e
commit 57d5d678f2

View File

@ -21,7 +21,8 @@ FUNCTION_END(atomic_set)
/* int32 atomic_get_and_set(int32* value, int32 newValue) */ /* int32 atomic_get_and_set(int32* value, int32 newValue) */
FUNCTION(atomic_get_and_set): FUNCTION(atomic_get_and_set):
xchgl %esi, (%rdi) movl %esi, %eax
xchgl %eax, (%rdi)
ret ret
FUNCTION_END(atomic_get_and_set) FUNCTION_END(atomic_get_and_set)
@ -37,8 +38,9 @@ FUNCTION_END(atomic_test_and_set)
/* int32 atomic_add(int32* value, int32 addValue) */ /* int32 atomic_add(int32* value, int32 addValue) */
FUNCTION(atomic_add): FUNCTION(atomic_add):
movl %esi, %eax
lock lock
xaddl %esi, (%rdi) xaddl %eax, (%rdi)
ret ret
FUNCTION_END(atomic_add) FUNCTION_END(atomic_add)
@ -75,6 +77,7 @@ FUNCTION_END(atomic_or)
FUNCTION(atomic_get): FUNCTION(atomic_get):
movl (%rdi), %eax movl (%rdi), %eax
lfence lfence
ret
FUNCTION_END(atomic_get) FUNCTION_END(atomic_get)
@ -88,7 +91,8 @@ FUNCTION_END(atomic_set64)
/* int64 atomic_get_and_set64(int64* value, int64 newValue) */ /* int64 atomic_get_and_set64(int64* value, int64 newValue) */
FUNCTION(atomic_get_and_set64): FUNCTION(atomic_get_and_set64):
xchgq %rsi, (%rdi) movq %rsi, %rax
xchgq %rax, (%rdi)
ret ret
FUNCTION_END(atomic_get_and_set64) FUNCTION_END(atomic_get_and_set64)
@ -144,5 +148,6 @@ FUNCTION_END(atomic_or64)
FUNCTION(atomic_get64): FUNCTION(atomic_get64):
movq (%rdi), %rax movq (%rdi), %rax
lfence lfence
ret
FUNCTION_END(atomic_get64) FUNCTION_END(atomic_get64)