diff options
Diffstat (limited to 'src/corelib/arch/x86_64/qatomic_sun.s')
-rw-r--r-- | src/corelib/arch/x86_64/qatomic_sun.s | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/corelib/arch/x86_64/qatomic_sun.s b/src/corelib/arch/x86_64/qatomic_sun.s new file mode 100644 index 0000000000..37969e61cb --- /dev/null +++ b/src/corelib/arch/x86_64/qatomic_sun.s @@ -0,0 +1,91 @@ + .code64 + + .globl q_atomic_increment + .type q_atomic_increment,@function + .section .text, "ax" + .align 16 +q_atomic_increment: + lock + incl (%rdi) + setne %al + ret + .size q_atomic_increment,.-q_atomic_increment + + .globl q_atomic_decrement + .type q_atomic_decrement,@function + .section .text, "ax" + .align 16 +q_atomic_decrement: + lock + decl (%rdi) + setne %al + ret + .size q_atomic_decrement,.-q_atomic_decrement + + .globl q_atomic_test_and_set_int + .type q_atomic_test_and_set_int, @function + .section .text, "ax" + .align 16 +q_atomic_test_and_set_int: + movl %esi,%eax + lock + cmpxchgl %edx,(%rdi) + movl $0,%eax + sete %al + ret + .size q_atomic_test_and_set_int, . - q_atomic_test_and_set_int + + .globl q_atomic_set_int + .type q_atomic_set_int,@function + .section .text, "ax" + .align 16 +q_atomic_set_int: + xchgl %esi,(%rdi) + movl %esi,%eax + ret + .size q_atomic_set_int,.-q_atomic_set_int + + .globl q_atomic_fetch_and_add_int + .type q_atomic_fetch_and_add_int,@function + .section .text, "ax" + .align 16 +q_atomic_fetch_and_add_int: + lock + xaddl %esi,(%rdi) + movl %esi, %eax + ret + .size q_atomic_fetch_and_add_int,.-q_atomic_fetch_and_add_int + + .globl q_atomic_test_and_set_ptr + .type q_atomic_test_and_set_ptr, @function + .section .text, "ax" + .align 16 +q_atomic_test_and_set_ptr: + movq %rsi,%rax + lock + cmpxchgq %rdx,(%rdi) + movq $0, %rax + sete %al + ret + .size q_atomic_test_and_set_ptr, . - q_atomic_test_and_set_ptr + + .globl q_atomic_set_ptr + .type q_atomic_set_ptr,@function + .section .text, "ax" + .align 16 +q_atomic_set_ptr: + xchgq %rsi,(%rdi) + movq %rsi,%rax + ret + .size q_atomic_set_ptr,.-q_atomic_set_ptr + + .globl q_atomic_fetch_and_add_ptr + .type q_atomic_fetch_and_add_ptr,@function + .section .text, "ax" + .align 16 +q_atomic_fetch_and_add_ptr: + lock + xaddq %rsi,(%rdi) + movq %rsi,%rax + ret + .size q_atomic_fetch_and_add_ptr,.-q_atomic_fetch_and_add_ptr |