1 #ifndef _GENPOSIX_CPU_DEF_H
2 #define _GENPOSIX_CPU_DEF_H
16 #define set_bit(nr,v) (__sync_fetch_and_or(v,(1<<(nr))))
17 #define clear_bit(nr,v) (__sync_fetch_and_and(v,~(1<<(nr))))
18 #define test_and_set_bit(nr,v) \
19 ({ typeof(*(v)) __bitmsk = 1<<(nr); \
20 __sync_fetch_and_or(v,__bitmsk)&__bitmsk?1:0; \
23 #define atomic_clear_mask_b1(mask, v) __sync_fetch_and_and(v,~(mask))
24 #define atomic_set_mask_b1(mask, v) __sync_fetch_and_or(v,(mask))
26 #define atomic_clear_mask_w1(mask, v) __sync_fetch_and_and(v,~(mask))
27 #define atomic_set_mask_w1(mask, v) __sync_fetch_and_or(v,(mask))
29 #define atomic_clear_mask_w(mask, v) __sync_fetch_and_and(v,~(mask))
30 #define atomic_set_mask_w(mask, v) __sync_fetch_and_or(v,(mask))
32 #define atomic_clear_mask(mask, v) __sync_fetch_and_and(v,~(mask))
33 #define atomic_set_mask(mask, v) __sync_fetch_and_or(v,(mask))
35 /* Arithmetic functions */
36 #define sat_add_slsl(__x,__y) \
39 tmp = (__x) + (__y); \
40 if ((__x) > 0 && (__y) > 0 && tmp < 0) \
42 else if ((__x) < 0 && (__y) < 0 && tmp >= 0) \
47 #ifndef __memory_barrier
48 #define __memory_barrier() \
49 __asm__ __volatile__("": : : "memory")
52 /*masked fields macros*/
53 #define __val2mfld(mask,val) (((mask)&~((mask)<<1))*(val)&(mask))
54 #define __mfld2val(mask,val) (((val)&(mask))/((mask)&~((mask)<<1)))
56 #endif /* _GENPOSIX_CPU_DEF_H */