Fix mysterious unremovable file part 2 ?
[cacao.git] / src / vm / jit / sparc64 / machine-instr.h
1 #ifndef _MACHINE_INSTR_H
2 #define _MACHINE_INSTR_H
3
4 #include "toolbox/logging.h"
5
6 static inline long
7 __attribute__ ((unused))
8 compare_and_swap (volatile long *p, long oldval, long newval)
9 {
10   long ret;
11   /*dolog("compare_and_swap(%p [%d], %d, %d)", p, *p, oldval, newval);*/
12
13   __asm__ __volatile__ (
14     "mov %3,%0\n\t"
15     "casx [%4],%2,%0\n\t"
16     : "=&r"(ret), "=m"(*p) 
17     : "r"(oldval), "r"(newval), "r"(p));
18
19   /*dolog("compare_and_swap() return=%d mem=%d", ret, *p);*/
20   return ret;
21 }
22
23 #define STORE_ORDER_BARRIER() __asm__ __volatile__ ("wmb" : : : "memory");
24 #define MEMORY_BARRIER_AFTER_ATOMIC() __asm__ __volatile__ ("mb" : : : "memory");
25 #define MEMORY_BARRIER() __asm__ __volatile__ ( \
26                 "membar 0x0F" : : : "memory" );
27
28 #endif