diff options
author | ianh <ianh@13f79535-47bb-0310-9956-ffa450edef68> | 2002-02-17 19:57:07 +0000 |
---|---|---|
committer | ianh <ianh@13f79535-47bb-0310-9956-ffa450edef68> | 2002-02-17 19:57:07 +0000 |
commit | cab4abf6e8e6e5756314eb1d44d1ca684ebcece7 (patch) | |
tree | 3f3c8c4c9c4f5c0d25006f8434427c374532cc4a /atomic | |
parent | 7ba9f520c66305a9a02fd850bff9838716cc7e07 (diff) | |
download | libapr-cab4abf6e8e6e5756314eb1d44d1ca684ebcece7.tar.gz |
The assembly for atomic_add/dec for sun solaris
still need to figure out how to linkcleanly so it's not 'built' by default
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@62998 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'atomic')
-rw-r--r-- | atomic/solaris_sparc/apr_atomic_sparc.s | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/atomic/solaris_sparc/apr_atomic_sparc.s b/atomic/solaris_sparc/apr_atomic_sparc.s new file mode 100644 index 000000000..60413a88f --- /dev/null +++ b/atomic/solaris_sparc/apr_atomic_sparc.s @@ -0,0 +1,46 @@ +!* +!* +!* This code is based on the UltraSPARC atomics library by Mike Bennett +!* The Initial Developer of the Original Code is Mike Bennett, +!* mbennett@netcom.com, Copyright (C) 1999. All Rights Reserved. +!* This code is based on the sparc architecture Manual version 9 +!* section J.11 (page 333) +! +#include <sys/asm_linkage.h> +! %o0 [input] - the address of the value to increment +! %o1 [input] - the increment delta value +! %o2 [local] - work register (was %l0 in book) +! %o3 [local] - work register (was %l1 in book) +! %o0 [output] - contains return value +! +! +! + ENTRY(apr_atomic_add_sparc) + + ld [%o0], %o2 +_apr_atomic_add_sparc_loop: + add %o2, %o1, %o3 + cas [%o0], %o2, %o3 + cmp %o2, %o3 + bne,a _apr_atomic_add_sparc_loop + ld [%o0], %o2 + retl + mov %o3, %o0 + + SET_SIZE(apr_atomic_add_sparc) +! +! + ENTRY(apr_atomic_sub_sparc) + + ld [%o0], %o2 +_apr_atomic_sub_sparc_loop: + sub %o2, %o1, %o3 + cas [%o0], %o2, %o3 + cmp %o2, %o3 + bne,a _apr_atomic_sub_sparc_loop + ld [%o0], %o2 + retl + mov %o3, %o0 + + SET_SIZE(apr_atomic_sub_sparc) + |