[kaffe] [PATCH] IA-64 synchronization primitives
Gwenole Beauchesne
gbeauchesne@mandrakesoft.com
Thu May 15 10:35:02 2003
Hi,
Since the IA-64 ABI defines synchronisation primitives like
__sync_bool_compare_and_swap (7.4.3), I moved COMPARE_AND_EXCHANGE macro
to common.h.
BTW, both gcc & ecc have them in <ia64intrin.h>.
2003-05-13 Gwenole Beauchesne <gbeauchesne@mandrakesoft.com>
* config/ia64/linux/md.h (COMPARE_AND_EXCHANGE): Move to...
* config/ia64/common.h: ... here.
The Intel Itanium Processor-specific ABI defines
__sync_bool_compare_and_swap primitive (7.4.3).
--- kaffe-1.1/config/ia64/linux/md.h.ia64intrin 2003-05-15 21:51:34.000000000 +0200
+++ kaffe-1.1/config/ia64/linux/md.h 2003-05-15 23:23:32.000000000 +0200
@@ -38,20 +38,4 @@ extern void IA64_context_restore(jmp_buf
#define GET_SIGNAL_CONTEXT_POINTER(sc) (sc)
#define SIGNAL_PC(scp) ((scp)->sc_ip & ~0x3ULL)
-#ifdef HAVE_IA64INTRIN_H
-
-#include <ia64intrin.h>
-#undef COMPARE_AND_EXCHANGE
-#define COMPARE_AND_EXCHANGE(A, O, N) \
- __sync_bool_compare_and_swap((A), (O), (N))
-
-#else
-
-#include <asm/atomic.h>
-#undef COMPARE_AND_EXCHANGE
-#define COMPARE_AND_EXCHANGE(A, O, N) \
- (cmpxchg((A), (O), (N)) == (O))
-
-#endif /* HAVE_IA64INTRIN_H */
-
#endif
--- kaffe-1.1/config/ia64/common.h.ia64intrin 2003-05-14 20:59:09.000000000 +0200
+++ kaffe-1.1/config/ia64/common.h 2003-05-15 23:26:54.000000000 +0200
@@ -19,4 +19,20 @@
#include "sysdepCallMethod.h"
#endif
+/*
+ * Do an atomic compare and exchange. The address 'A' is checked
+ * against value 'O' and if they match it's exchanged with value 'N'.
+ * We return '1' if the exchange is sucessful, otherwise 0.
+ */
+
+#ifdef HAVE_IA64INTRIN_H
+#include <ia64intrin.h>
+#endif
+
+/* Intel Itanium Processor-specific ABI defines
+ __sync_bool_compare_and_swap primitive (7.4.3). */
+#undef COMPARE_AND_EXCHANGE
+#define COMPARE_AND_EXCHANGE(A, O, N) \
+ __sync_bool_compare_and_swap((A), (O), (N))
+
#endif