libxmp/libxmpf in Omni Compiler  1.3.4
xmp_index_macro.h
Go to the documentation of this file.
1 #ifndef _XMP_INDEX_MACRO
2 #define _XMP_INDEX_MACRO
3 
4 // ------------------------------------------------------------------------------------------------------------------------------
5 #define _XMP_M_CEILi(a_, b_) (((a_) % (b_)) == 0 ? ((a_) / (b_)) : ((a_) / (b_)) + 1)
6 
7 // ------------------------------------------------------------------------------------------------------------------------------
8 #define _XMP_M_LTOG_TEMPLATE_BLOCK(_l, _m, _N, _P, _p) \
9 (((_p) * _XMP_M_CEILi(_N, _P)) + (_l) + (_m))
10 
11 #define _XMP_M_LTOG_TEMPLATE_CYCLIC(_l, _m, _P, _p) \
12 (((_l) * (_P)) + (_p) + (_m))
13 
14 #define _XMP_M_LTOG_TEMPLATE_BLOCK_CYCLIC(_l, _b, _m, _P, _p) \
15 ((((_l) / (_b)) * (_b) * (_P)) + ((_b) * (_p)) + ((_l) % (_b)) + (_m))
16 
17 #define _XMP_M_LTOG_TEMPLATE_GBLOCK(_l, _x) \
18 ((_l) + (_x))
19 
20 // ------------------------------------------------------------------------------------------------------------------------------
21 #define _XMP_M_CALC_INDEX_BLOCK(_i, _x) \
22 ((_i) - (_x))
23 
24 #define _XMP_M_CALC_INDEX_CYCLIC(_i, _p) \
25 ((_i) / (_p))
26 
27 #define _XMP_M_CALC_INDEX_BLOCK_CYCLIC(_i, _p, _w) \
28 (((_w) * ((_i) / ((_p) * (_w)))) + ((_i) % (_w)))
29 
30 #define _XMP_M_CALC_INDEX_GBLOCK(_i, _x) \
31 ((_i) - (_x))
32 // ------------------------------------------------------------------------------------------------------------------------------
33 #define _XMP_M_GET_ELMT_1(_addr, _i1) \
34 (*((_addr) + (_i1)))
35 
36 #define _XMP_M_GET_ELMT_2(_addr, _i1, _i2, _acc1) \
37 (*((_addr) + (_i1) * (_acc1) + (_i2)))
38 
39 #define _XMP_M_GET_ELMT_3(_addr, _i1, _i2, _i3, _acc1, _acc2) \
40 (*((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3)))
41 
42 #define _XMP_M_GET_ELMT_4(_addr, _i1, _i2, _i3, _i4, _acc1, _acc2, _acc3) \
43 (*((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4)))
44 
45 #define _XMP_M_GET_ELMT_5(_addr, _i1, _i2, _i3, _i4, _i5, _acc1, _acc2, _acc3, _acc4) \
46 (*((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4) + (_i5)))
47 
48 #define _XMP_M_GET_ELMT_6(_addr, _i1, _i2, _i3, _i4, _i5, _i6, _acc1, _acc2, _acc3, _acc4, _acc5) \
49 (*((_addr) + (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4) + (_i5) * (_acc5) + (_i6)))
50 
51 #define _XMP_M_GET_ELMT_7(_addr, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _acc1, _acc2, _acc3, _acc4, _acc5, _acc6) \
52 (*((_addr) + (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4) + (_i5) * (_acc5) + (_i6) * (_acc6) + (_i7)))
53 
54 // ------------------------------------------------------------------------------------------------------------------------------
55 #define _XMP_M_GET_ADDR_E_1(_addr, _i1) \
56 ((_addr) + (_i1))
57 
58 #define _XMP_M_GET_ADDR_E_2(_addr, _i1, _i2, _acc1) \
59 ((_addr) + (_i1) * (_acc1) + (_i2))
60 
61 #define _XMP_M_GET_ADDR_E_3(_addr, _i1, _i2, _i3, _acc1, _acc2) \
62 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3))
63 
64 #define _XMP_M_GET_ADDR_E_4(_addr, _i1, _i2, _i3, _i4, _acc1, _acc2, _acc3) \
65 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4))
66 
67 #define _XMP_M_GET_ADDR_E_5(_addr, _i1, _i2, _i3, _i4, _i5, _acc1, _acc2, _acc3, _acc4) \
68 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4) + (_i5))
69 
70 #define _XMP_M_GET_ADDR_E_6(_addr, _i1, _i2, _i3, _i4, _i5, _i6, _acc1, _acc2, _acc3, _acc4, _acc5) \
71 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4) + (_i5) * (_acc5) + (_i6))
72 
73 #define _XMP_M_GET_ADDR_E_7(_addr, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _acc1, _acc2, _acc3, _acc4, _acc5, _acc6) \
74 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4) + (_i5) * (_acc5) + (_i6) * (_acc6) + (_i7))
75 
76 // ------------------------------------------------------------------------------------------------------------------------------
77 #define _XMP_M_GET_ADDR_0(_addr) \
78 (_addr)
79 
80 #define _XMP_M_GET_ADDR_1(_addr, _i1, _acc1) \
81 ((_addr) + (_i1) * (_acc1)))
82 
83 #define _XMP_M_GET_ADDR_2(_addr, _i1, _i2, _acc1, _acc2) \
84 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2)))
85 
86 #define _XMP_M_GET_ADDR_3(_addr, _i1, _i2, _i3, _acc1, _acc2, _acc3) \
87 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3)))
88 
89 #define _XMP_M_GET_ADDR_4(_addr, _i1, _i2, _i3, _i4, _acc1, _acc2, _acc3, _acc4) \
90 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4)))
91 
92 #define _XMP_M_GET_ADDR_5(_addr, _i1, _i2, _i3, _i4, _i5, _acc1, _acc2, _acc3, _acc4, _acc5) \
93 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4) + (_i5) * (_acc5)))
94 
95 #define _XMP_M_GET_ADDR_6(_addr, _i1, _i2, _i3, _i4, _i5, _i6, _acc1, _acc2, _acc3, _acc4, _acc5, _acc6) \
96 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4) + (_i5) * (_acc5) + (_i6) * (_acc6)))
97 
98 #define _XMP_M_GET_ADDR_7(_addr, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _acc1, _acc2, _acc3, _acc4, _acc5, _acc6, _acc7) \
99 ((_addr) + (_i1) * (_acc1) + (_i2) * (_acc2) + (_i3) * (_acc3) + (_i4) * (_acc4) + (_i5) * (_acc5) + (_i6) * (_acc6) + (_i7) * (_acc7)))
100 
101 // ------------------------------------------------------------------------------------------------------------------------------
102 #define _XMP_M_TEMPLATE_INFO(_desc, _dim) \
103 (((struct _XMP_template_type *)(_desc))->info[(_dim)])
104 
105 #define _XMP_M_ARRAY_INFO(_desc, _dim) \
106 (((struct _XMP_array_type *)(_desc))->info[(_dim)])
107 
108 #endif // _XMP_INDEX_MACRO