summaryrefslogtreecommitdiff
path: root/atomic
diff options
context:
space:
mode:
authorianh <ianh@13f79535-47bb-0310-9956-ffa450edef68>2002-02-17 19:57:07 +0000
committerianh <ianh@13f79535-47bb-0310-9956-ffa450edef68>2002-02-17 19:57:07 +0000
commitcab4abf6e8e6e5756314eb1d44d1ca684ebcece7 (patch)
tree3f3c8c4c9c4f5c0d25006f8434427c374532cc4a /atomic
parent7ba9f520c66305a9a02fd850bff9838716cc7e07 (diff)
downloadlibapr-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.s46
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)
+