Fix mysterious unremovable file part 2 ?
[cacao.git] / src / vm / jit / powerpc / machine-instr.h
1 #ifndef _MACHINE_INSTR_H
2 #define _MACHINE_INSTR_H
3
4 static inline long compare_and_swap(long *p, long oldval, long newval)
5 {
6   long ret, temp;
7
8   __asm__ __volatile__ ("\n\
9 1:  lwarx  %0,0,%4 \n\
10     subf.  %1,%0,%2 \n\
11     bne-   2f \n\
12     or     %1,%3,%3 \n\
13     stwcx. %1,0,%4 \n\
14     bne-   1b \n\
15 2: \n\
16 "   : "=&r"(ret), "=&r"(temp)
17     : "r"(oldval), "r"(newval), "r"(p) : "cr0", "memory");
18
19   return ret;
20 }
21
22 #define STORE_ORDER_BARRIER() __asm__ __volatile__ ("" : : : "memory");
23 #define MEMORY_BARRIER_AFTER_ATOMIC() __asm__ __volatile__ ("isync" : : : "memory");
24 #define MEMORY_BARRIER() __asm__ __volatile__ ( "sync" : : : "memory" );
25
26 #endif