#include <stdint.h>
-uint32_t Atomic_generic_compare_and_swap_32(volatile uint32_t *p, uint32_t oldval, uint32_t newval);
-uint64_t Atomic_generic_compare_and_swap_64(volatile uint64_t *p, uint64_t oldval, uint64_t newval);
-void* Atomic_generic_compare_and_swap_ptr(volatile void** p, void* oldval, void* newval);
-void Atomic_generic_memory_barrier(void);
+#ifdef __cplusplus
+
+class Atomic {
+public:
+ // Generic functions.
+ static uint32_t generic_compare_and_swap(volatile uint32_t *p, uint32_t oldval, uint32_t newval);
+ static uint64_t generic_compare_and_swap(volatile uint64_t *p, uint64_t oldval, uint64_t newval);
+ static void* generic_compare_and_swap(volatile void** p, void* oldval, void* newval);
+ static void generic_memory_barrier(void);
+
+ // Machine dependent functions.
+ static uint32_t compare_and_swap(volatile uint32_t *p, uint32_t oldval, uint32_t newval);
+ static uint64_t compare_and_swap(volatile uint64_t *p, uint64_t oldval, uint64_t newval);
+ static void* compare_and_swap(volatile void** p, void* oldval, void* newval);
+ static void memory_barrier(void);
+ static void write_memory_barrier(void);
+ static void instruction_barrier(void);
+};
// Include machine dependent implementation.
#include "md-atomic.hpp"
-#endif /* _ATOMIC_HPP */
+#else
+
+// Legacy C interface.
+
+uint32_t Atomic_compare_and_swap_32(volatile uint32_t *p, uint32_t oldval, uint32_t newval);
+uint64_t Atomic_compare_and_swap_64(volatile uint64_t *p, uint64_t oldval, uint64_t newval);
+void* Atomic_compare_and_swap_ptr(volatile void** p, void* oldval, void* newval);
+void Atomic_memory_barrier(void);
+void Atomic_write_memory_barrier(void);
+void Atomic_instruction_barrier(void);
+
+#endif
+
+#endif // _ATOMIC_HPP
/*