diff options
author | Johnny Willemsen <jwillemsen@remedy.nl> | 2007-03-05 09:21:45 +0000 |
---|---|---|
committer | Johnny Willemsen <jwillemsen@remedy.nl> | 2007-03-05 09:21:45 +0000 |
commit | 8b9ff8c588c9720a9617314c9d8b8c2f6098cb7c (patch) | |
tree | 2edf3e0e65674f619d6c93edae3050b9768f53c4 /ACE/ace/Atomic_Op_Sparc.c | |
parent | 33d159459caae8f86536edeb9821d92d5e99d22e (diff) | |
download | ATCD-8b9ff8c588c9720a9617314c9d8b8c2f6098cb7c.tar.gz |
Mon Mar 5 09:21:12 UTC 2007 Johnny Willemsen <jwillemsen@remedy.nl>
Diffstat (limited to 'ACE/ace/Atomic_Op_Sparc.c')
-rw-r--r-- | ACE/ace/Atomic_Op_Sparc.c | 76 |
1 files changed, 75 insertions, 1 deletions
diff --git a/ACE/ace/Atomic_Op_Sparc.c b/ACE/ace/Atomic_Op_Sparc.c index f301de5b85f..6f1faf7aaac 100644 --- a/ACE/ace/Atomic_Op_Sparc.c +++ b/ACE/ace/Atomic_Op_Sparc.c @@ -9,7 +9,81 @@ #if defined (ACE_INCLUDE_ATOMIC_OP_SPARC) -# if defined (__sparcv9) +#if defined(__i386) && defined(__SUNPRO_C) +static void +__sunpro_asm_code() { + __asm("\n\ + .globl ace_atomic_add_long \n\ + .type ace_atomic_add_long,@function \n\ + .align 4 \n\ +ace_atomic_add_long: \n\ + movl 0x00000004(%esp), %edx \n\ + movl 0x00000008(%esp), %eax \n\ + lock; xadd %eax, (%edx) \n\ + addl %eax, 0x00000008(%esp) \n\ + ret \n\ + "); + + __asm("\n\ + .globl ace_atomic_swap_long \n\ + .type ace_atomic_swap_long,@function \n\ + .align 4 \n\ +ace_atomic_swap_long: \n\ + movl 0x00000004(%esp), %edx \n\ + movl 0x00000008(%esp), %eax \n\ + xchg %eax, (%edx) \n\ + ret \n\ + "); + + __asm("\n\ + .globl ace_atomic_swap_long \n\ + .type ace_atomic_swap_long,@function \n\ + .align 4 \n\ +ace_atomic_swap_add_long: \n\ + movl 0x00000004(%esp), %edx \n\ + movl 0x00000008(%esp), %eax \n\ + lock; xadd %eax, (%edx) \n\ + ret \n\ + "); +} + +#elif defined(__x86_64) && defined(__SUNPRO_C) + +static void +__sunpro_asm_code() { + __asm("\n\ + .globl ace_atomic_add_long \n\ + .type ace_atomic_add_long,@function \n\ + .align 16 \n\ +ace_atomic_add_long: \n\ + movq %rsi, %rax \n\ + lock; xaddq %rax, (%rdi) \n\ + addq %rsi, %rax \n\ + ret \n\ + "); + + __asm("\n\ + .globl ace_atomic_swap_long \n\ + .type ace_atomic_swap_long,@function \n\ + .align 16 \n\ +ace_atomic_swap_long: \n\ + xchgq %rsi, (%rdi) \n\ + movq %rsi, %rax \n\ + ret \n\ + "); + + __asm("\n\ + .globl ace_atomic_swap_add_long \n\ + .type ace_atomic_swap_add_long,@function \n\ + .align 16 \n\ +ace_atomic_swap_add_long: \n\ + lock; xaddq %rsi, (%rdi) \n\ + movq %rsi, %rax \n\ + ret \n\ + "); +} + +# elif defined (__sparcv9) unsigned long ace_atomic_add_long (volatile unsigned long *dest, long rhs) |