src/arm/emitter-inlines.h (view raw)
1#ifndef EMITTER_INLINES_H
2#define EMITTER_INLINES_H
3
4#define DO_4(DIRECTIVE) \
5 DIRECTIVE, \
6 DIRECTIVE, \
7 DIRECTIVE, \
8 DIRECTIVE
9
10#define DO_8(DIRECTIVE) \
11 DIRECTIVE, \
12 DIRECTIVE, \
13 DIRECTIVE, \
14 DIRECTIVE, \
15 DIRECTIVE, \
16 DIRECTIVE, \
17 DIRECTIVE, \
18 DIRECTIVE
19
20#define DO_256(DIRECTIVE) \
21 DO_4(DO_8(DO_8(DIRECTIVE)))
22
23#define DO_INTERLACE(LEFT, RIGHT) \
24 LEFT, \
25 RIGHT
26
27#define APPLY(F, ...) F(__VA_ARGS__)
28
29#define COUNT_CALL_1(EMITTER, PREFIX, ...) \
30 EMITTER(PREFIX ## 0, 0, __VA_ARGS__) \
31 EMITTER(PREFIX ## 1, 1, __VA_ARGS__)
32
33#define COUNT_CALL_2(EMITTER, PREFIX, ...) \
34 COUNT_CALL_1(EMITTER, PREFIX, __VA_ARGS__) \
35 EMITTER(PREFIX ## 2, 2, __VA_ARGS__) \
36 EMITTER(PREFIX ## 3, 3, __VA_ARGS__)
37
38#define COUNT_CALL_3(EMITTER, PREFIX, ...) \
39 COUNT_CALL_2(EMITTER, PREFIX, __VA_ARGS__) \
40 EMITTER(PREFIX ## 4, 4, __VA_ARGS__) \
41 EMITTER(PREFIX ## 5, 5, __VA_ARGS__) \
42 EMITTER(PREFIX ## 6, 6, __VA_ARGS__) \
43 EMITTER(PREFIX ## 7, 7, __VA_ARGS__)
44
45#define COUNT_CALL_4(EMITTER, PREFIX, ...) \
46 COUNT_CALL_3(EMITTER, PREFIX, __VA_ARGS__) \
47 EMITTER(PREFIX ## 8, 8, __VA_ARGS__) \
48 EMITTER(PREFIX ## 9, 9, __VA_ARGS__) \
49 EMITTER(PREFIX ## A, 10, __VA_ARGS__) \
50 EMITTER(PREFIX ## B, 11, __VA_ARGS__) \
51 EMITTER(PREFIX ## C, 12, __VA_ARGS__) \
52 EMITTER(PREFIX ## D, 13, __VA_ARGS__) \
53 EMITTER(PREFIX ## E, 14, __VA_ARGS__) \
54 EMITTER(PREFIX ## F, 15, __VA_ARGS__)
55
56#define COUNT_CALL_5(EMITTER, PREFIX, ...) \
57 COUNT_CALL_4(EMITTER, PREFIX ## 0, __VA_ARGS__) \
58 EMITTER(PREFIX ## 10, 16, __VA_ARGS__) \
59 EMITTER(PREFIX ## 11, 17, __VA_ARGS__) \
60 EMITTER(PREFIX ## 12, 18, __VA_ARGS__) \
61 EMITTER(PREFIX ## 13, 19, __VA_ARGS__) \
62 EMITTER(PREFIX ## 14, 20, __VA_ARGS__) \
63 EMITTER(PREFIX ## 15, 21, __VA_ARGS__) \
64 EMITTER(PREFIX ## 16, 22, __VA_ARGS__) \
65 EMITTER(PREFIX ## 17, 23, __VA_ARGS__) \
66 EMITTER(PREFIX ## 18, 24, __VA_ARGS__) \
67 EMITTER(PREFIX ## 19, 25, __VA_ARGS__) \
68 EMITTER(PREFIX ## 1A, 26, __VA_ARGS__) \
69 EMITTER(PREFIX ## 1B, 27, __VA_ARGS__) \
70 EMITTER(PREFIX ## 1C, 28, __VA_ARGS__) \
71 EMITTER(PREFIX ## 1D, 29, __VA_ARGS__) \
72 EMITTER(PREFIX ## 1E, 30, __VA_ARGS__) \
73 EMITTER(PREFIX ## 1F, 31, __VA_ARGS__) \
74
75#define COUNT_1(EMITTER, PREFIX) \
76 EMITTER(PREFIX ## 0) \
77 EMITTER(PREFIX ## 1)
78
79#define COUNT_2(EMITTER, PREFIX) \
80 COUNT_1(EMITTER, PREFIX) \
81 EMITTER(PREFIX ## 2) \
82 EMITTER(PREFIX ## 3)
83
84#define COUNT_3(EMITTER, PREFIX) \
85 COUNT_2(EMITTER, PREFIX) \
86 EMITTER(PREFIX ## 4) \
87 EMITTER(PREFIX ## 5) \
88 EMITTER(PREFIX ## 6) \
89 EMITTER(PREFIX ## 7)
90
91#define COUNT_4(EMITTER, PREFIX) \
92 COUNT_3(EMITTER, PREFIX) \
93 EMITTER(PREFIX ## 8) \
94 EMITTER(PREFIX ## 9) \
95 EMITTER(PREFIX ## A) \
96 EMITTER(PREFIX ## B) \
97 EMITTER(PREFIX ## C) \
98 EMITTER(PREFIX ## D) \
99 EMITTER(PREFIX ## E) \
100 EMITTER(PREFIX ## F)
101
102#define COUNT_5(EMITTER, PREFIX) \
103 COUNT_4(EMITTER, PREFIX ## 0) \
104 EMITTER(PREFIX ## 10) \
105 EMITTER(PREFIX ## 11) \
106 EMITTER(PREFIX ## 12) \
107 EMITTER(PREFIX ## 13) \
108 EMITTER(PREFIX ## 14) \
109 EMITTER(PREFIX ## 15) \
110 EMITTER(PREFIX ## 16) \
111 EMITTER(PREFIX ## 17) \
112 EMITTER(PREFIX ## 18) \
113 EMITTER(PREFIX ## 19) \
114 EMITTER(PREFIX ## 1A) \
115 EMITTER(PREFIX ## 1B) \
116 EMITTER(PREFIX ## 1C) \
117 EMITTER(PREFIX ## 1D) \
118 EMITTER(PREFIX ## 1E) \
119 EMITTER(PREFIX ## 1F) \
120
121#define ECHO(...) __VA_ARGS__,
122#define ECHO_4(...) \
123 ECHO(__VA_ARGS__) \
124 ECHO(__VA_ARGS__) \
125 ECHO(__VA_ARGS__) \
126 ECHO(__VA_ARGS__)
127
128#endif