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