]> rtime.felk.cvut.cz Git - fpga/rpi-motor-control-pxmc.git/blob - src/system_opt/cpu_def.h
RPi PXMC Test: do not use cumulative current computation in currentcal command.
[fpga/rpi-motor-control-pxmc.git] / src / system_opt / cpu_def.h
1 #ifndef _GENPOSIX_CPU_DEF_H
2 #define _GENPOSIX_CPU_DEF_H
3
4 #ifndef CODE
5   #define CODE
6 #endif
7
8 #ifndef XDATA
9   #define XDATA
10 #endif
11
12 #ifndef DATA
13   #define DATA
14 #endif
15
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; \
21   })
22
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))
25
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))
28
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))
31
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))
34
35 /* Arithmetic functions */
36 #define sat_add_slsl(__x,__y)                                   \
37         do {                                                    \
38                 typeof(__x) tmp;                                \
39                 tmp = (__x) + (__y);                            \
40                 if ((__x) > 0 && (__y) > 0 && tmp < 0)          \
41                         tmp = +0x7fffffff;                      \
42                 else if ((__x) < 0 && (__y) < 0 && tmp >= 0)    \
43                         tmp = -0x80000000;                      \
44                 (__x) = tmp;                                    \
45         } while (0)
46
47 #ifndef __memory_barrier
48 #define __memory_barrier() \
49 __asm__ __volatile__("": : : "memory")
50 #endif
51
52 /*masked fields macros*/
53 #define __val2mfld(mask,val) (((mask)&~((mask)<<1))*(val)&(mask))
54 #define __mfld2val(mask,val) (((val)&(mask))/((mask)&~((mask)<<1)))
55
56 #endif /* _GENPOSIX_CPU_DEF_H */