diff options
Diffstat (limited to 'firmware/target/mips/ingenic_x1000/x1000/macro.h')
-rw-r--r-- | firmware/target/mips/ingenic_x1000/x1000/macro.h | 356 |
1 files changed, 356 insertions, 0 deletions
diff --git a/firmware/target/mips/ingenic_x1000/x1000/macro.h b/firmware/target/mips/ingenic_x1000/x1000/macro.h new file mode 100644 index 0000000000..bfe8708a91 --- /dev/null +++ b/firmware/target/mips/ingenic_x1000/x1000/macro.h | |||
@@ -0,0 +1,356 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * This file was automatically generated by headergen, DO NOT EDIT it. | ||
9 | * headergen version: 3.0.0 | ||
10 | * | ||
11 | * Copyright (C) 2015 by the authors | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or | ||
14 | * modify it under the terms of the GNU General Public License | ||
15 | * as published by the Free Software Foundation; either version 2 | ||
16 | * of the License, or (at your option) any later version. | ||
17 | * | ||
18 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
19 | * KIND, either express or implied. | ||
20 | * | ||
21 | ****************************************************************************/ | ||
22 | #ifndef __HEADERGEN_MACRO_H__ | ||
23 | #define __HEADERGEN_MACRO_H__ | ||
24 | |||
25 | #include <stdint.h> | ||
26 | |||
27 | #define __VAR_OR1(prefix, suffix) \ | ||
28 | (prefix##suffix) | ||
29 | #define __VAR_OR2(pre, s1, s2) \ | ||
30 | (__VAR_OR1(pre, s1) | __VAR_OR1(pre, s2)) | ||
31 | #define __VAR_OR3(pre, s1, s2, s3) \ | ||
32 | (__VAR_OR1(pre, s1) | __VAR_OR2(pre, s2, s3)) | ||
33 | #define __VAR_OR4(pre, s1, s2, s3, s4) \ | ||
34 | (__VAR_OR2(pre, s1, s2) | __VAR_OR2(pre, s3, s4)) | ||
35 | #define __VAR_OR5(pre, s1, s2, s3, s4, s5) \ | ||
36 | (__VAR_OR2(pre, s1, s2) | __VAR_OR3(pre, s3, s4, s5)) | ||
37 | #define __VAR_OR6(pre, s1, s2, s3, s4, s5, s6) \ | ||
38 | (__VAR_OR3(pre, s1, s2, s3) | __VAR_OR3(pre, s4, s5, s6)) | ||
39 | #define __VAR_OR7(pre, s1, s2, s3, s4, s5, s6, s7) \ | ||
40 | (__VAR_OR3(pre, s1, s2, s3) | __VAR_OR4(pre, s4, s5, s6, s7)) | ||
41 | #define __VAR_OR8(pre, s1, s2, s3, s4, s5, s6, s7, s8) \ | ||
42 | (__VAR_OR4(pre, s1, s2, s3, s4) | __VAR_OR4(pre, s5, s6, s7, s8)) | ||
43 | #define __VAR_OR9(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9) \ | ||
44 | (__VAR_OR4(pre, s1, s2, s3, s4) | __VAR_OR5(pre, s5, s6, s7, s8, s9)) | ||
45 | #define __VAR_OR10(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10) \ | ||
46 | (__VAR_OR5(pre, s1, s2, s3, s4, s5) | __VAR_OR5(pre, s6, s7, s8, s9, s10)) | ||
47 | #define __VAR_OR11(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11) \ | ||
48 | (__VAR_OR5(pre, s1, s2, s3, s4, s5) | __VAR_OR6(pre, s6, s7, s8, s9, s10, s11)) | ||
49 | #define __VAR_OR12(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12) \ | ||
50 | (__VAR_OR6(pre, s1, s2, s3, s4, s5, s6) | __VAR_OR6(pre, s7, s8, s9, s10, s11, s12)) | ||
51 | #define __VAR_OR13(pre, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13) \ | ||
52 | (__VAR_OR6(pre, s1, s2, s3, s4, s5, s6) | __VAR_OR7(pre, s7, s8, s9, s10, s11, s12, s13)) | ||
53 | |||
54 | #define __VAR_NARGS(...) __VAR_NARGS_(__VA_ARGS__, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1) | ||
55 | #define __VAR_NARGS_(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, N, ...) N | ||
56 | |||
57 | #define __VAR_EXPAND(macro, prefix, ...) __VAR_EXPAND_(macro, __VAR_NARGS(__VA_ARGS__), prefix, __VA_ARGS__) | ||
58 | #define __VAR_EXPAND_(macro, cnt, prefix, ...) __VAR_EXPAND__(macro, cnt, prefix, __VA_ARGS__) | ||
59 | #define __VAR_EXPAND__(macro, cnt, prefix, ...) __VAR_EXPAND___(macro##cnt, prefix, __VA_ARGS__) | ||
60 | #define __VAR_EXPAND___(macro, prefix, ...) macro(prefix, __VA_ARGS__) | ||
61 | |||
62 | #define JIO_8_RO(op, name, ...) JIO_8_RO_##op(name, __VA_ARGS__) | ||
63 | #define JIO_8_RO_RD(name, ...) (*(const volatile uint8_t *)(JA_##name)) | ||
64 | #define JIO_8_RO_WR(name, val) _Static_assert(0, #name " is read-only") | ||
65 | #define JIO_8_RO_RMW(name, vand, vor) _Static_assert(0, #name " is read-only") | ||
66 | #define JIO_8_RO_VAR(name, ...) (*(const volatile uint8_t *)(JA_##name)) | ||
67 | |||
68 | #define JIO_16_RO(op, name, ...) JIO_16_RO_##op(name, __VA_ARGS__) | ||
69 | #define JIO_16_RO_RD(name, ...) (*(const volatile uint16_t *)(JA_##name)) | ||
70 | #define JIO_16_RO_WR(name, val) _Static_assert(0, #name " is read-only") | ||
71 | #define JIO_16_RO_RMW(name, vand, vor) _Static_assert(0, #name " is read-only") | ||
72 | #define JIO_16_RO_VAR(name, ...) (*(const volatile uint16_t *)(JA_##name)) | ||
73 | |||
74 | #define JIO_32_RO(op, name, ...) JIO_32_RO_##op(name, __VA_ARGS__) | ||
75 | #define JIO_32_RO_RD(name, ...) (*(const volatile uint32_t *)(JA_##name)) | ||
76 | #define JIO_32_RO_WR(name, val) _Static_assert(0, #name " is read-only") | ||
77 | #define JIO_32_RO_RMW(name, vand, vor) _Static_assert(0, #name " is read-only") | ||
78 | #define JIO_32_RO_VAR(name, ...) (*(const volatile uint32_t *)(JA_##name)) | ||
79 | |||
80 | #define JIO_8_RW(op, name, ...) JIO_8_RW_##op(name, __VA_ARGS__) | ||
81 | #define JIO_8_RW_RD(name, ...) (*(volatile uint8_t *)(JA_##name)) | ||
82 | #define JIO_8_RW_WR(name, val) (*(volatile uint8_t *)(JA_##name)) = (val) | ||
83 | #define JIO_8_RW_RMW(name, vand, vor) JIO_8_RW_WR(name, (JIO_8_RW_RD(name) & (vand)) | (vor)) | ||
84 | #define JIO_8_RW_VAR(name, ...) (*(volatile uint8_t *)(JA_##name)) | ||
85 | |||
86 | #define JIO_16_RW(op, name, ...) JIO_16_RW_##op(name, __VA_ARGS__) | ||
87 | #define JIO_16_RW_RD(name, ...) (*(volatile uint16_t *)(JA_##name)) | ||
88 | #define JIO_16_RW_WR(name, val) (*(volatile uint16_t *)(JA_##name)) = (val) | ||
89 | #define JIO_16_RW_RMW(name, vand, vor) JIO_16_RW_WR(name, (JIO_16_RW_RD(name) & (vand)) | (vor)) | ||
90 | #define JIO_16_RW_VAR(name, ...) (*(volatile uint16_t *)(JA_##name)) | ||
91 | |||
92 | #define JIO_32_RW(op, name, ...) JIO_32_RW_##op(name, __VA_ARGS__) | ||
93 | #define JIO_32_RW_RD(name, ...) (*(volatile uint32_t *)(JA_##name)) | ||
94 | #define JIO_32_RW_WR(name, val) (*(volatile uint32_t *)(JA_##name)) = (val) | ||
95 | #define JIO_32_RW_RMW(name, vand, vor) JIO_32_RW_WR(name, (JIO_32_RW_RD(name) & (vand)) | (vor)) | ||
96 | #define JIO_32_RW_VAR(name, ...) (*(volatile uint32_t *)(JA_##name)) | ||
97 | |||
98 | #define JIO_8_WO(op, name, ...) JIO_8_WO_##op(name, __VA_ARGS__) | ||
99 | #define JIO_8_WO_RD(name, ...) ({_Static_assert(0, #name " is write-only"); 0;}) | ||
100 | #define JIO_8_WO_WR(name, val) (*(volatile uint8_t *)(JA_##name)) = (val) | ||
101 | #define JIO_8_WO_RMW(name, vand, vor) JIO_8_WO_WR(name, vor) | ||
102 | #define JIO_8_WO_VAR(name, ...) (*(volatile uint8_t *)(JA_##name)) | ||
103 | |||
104 | #define JIO_16_WO(op, name, ...) JIO_16_WO_##op(name, __VA_ARGS__) | ||
105 | #define JIO_16_WO_RD(name, ...) ({_Static_assert(0, #name " is write-only"); 0;}) | ||
106 | #define JIO_16_WO_WR(name, val) (*(volatile uint16_t *)(JA_##name)) = (val) | ||
107 | #define JIO_16_WO_RMW(name, vand, vor) JIO_16_WO_WR(name, vor) | ||
108 | #define JIO_16_WO_VAR(name, ...) (*(volatile uint16_t *)(JA_##name)) | ||
109 | |||
110 | #define JIO_32_WO(op, name, ...) JIO_32_WO_##op(name, __VA_ARGS__) | ||
111 | #define JIO_32_WO_RD(name, ...) ({_Static_assert(0, #name " is write-only"); 0;}) | ||
112 | #define JIO_32_WO_WR(name, val) (*(volatile uint32_t *)(JA_##name)) = (val) | ||
113 | #define JIO_32_WO_RMW(name, vand, vor) JIO_32_WO_WR(name, vor) | ||
114 | #define JIO_32_WO_VAR(name, ...) (*(volatile uint32_t *)(JA_##name)) | ||
115 | |||
116 | |||
117 | /** __jz_variant | ||
118 | * | ||
119 | * usage: __jz_variant(register, variant_prefix, variant_postfix) | ||
120 | * | ||
121 | * effect: expands to register variant given as argument | ||
122 | * note: internal usage | ||
123 | * note: register must be fully qualified if indexed | ||
124 | * | ||
125 | * example: __jz_variant(ICOLL_CTRL, , _SET) | ||
126 | * example: __jz_variant(ICOLL_ENABLE(3), , _CLR) | ||
127 | */ | ||
128 | #define __jz_variant(name, varp, vars) __jz_variant_(JN_##name, JI_##name, varp, vars) | ||
129 | #define __jz_variant_(...) __jz_variant__(__VA_ARGS__) | ||
130 | #define __jz_variant__(name, index, varp, vars) varp##name##vars index | ||
131 | |||
132 | /** jz_orf | ||
133 | * | ||
134 | * usage: jz_orf(register, f1(v1), f2(v2), ...) | ||
135 | * | ||
136 | * effect: expands to the register value where each field fi has value vi. | ||
137 | * Informally: reg_f1(v1) | reg_f2(v2) | ... | ||
138 | * note: enumerated values for fields can be obtained by using the syntax: | ||
139 | * f1_V(name) | ||
140 | * | ||
141 | * example: jz_orf(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED)) | ||
142 | */ | ||
143 | #define jz_orf(reg, ...) __VAR_EXPAND(__VAR_OR, BF_##reg##_, __VA_ARGS__) | ||
144 | |||
145 | /** __jz_orfm | ||
146 | * | ||
147 | * usage: __jz_orfm(register, f1(v1), f2(v2), ...) | ||
148 | * | ||
149 | * effect: expands to the register value where each field fi has maximum value (vi is ignored). | ||
150 | * note: internal usage | ||
151 | * | ||
152 | * example: __jz_orfm(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED)) | ||
153 | */ | ||
154 | #define __jz_orfm(reg, ...) __VAR_EXPAND(__VAR_OR, BFM_##reg##_, __VA_ARGS__) | ||
155 | |||
156 | /** jz_orm | ||
157 | * | ||
158 | * usage: jz_orm(register, f1, f2, ...) | ||
159 | * | ||
160 | * effect: expands to the register value where each field fi is set to its maximum value. | ||
161 | * Informally: reg_f1_mask | reg_f2_mask | ... | ||
162 | * | ||
163 | * example: jz_orm(ICOLL_CTRL, SFTRST, CLKGATE) | ||
164 | */ | ||
165 | #define jz_orm(reg, ...) __VAR_EXPAND(__VAR_OR, BM_##reg##_, __VA_ARGS__) | ||
166 | |||
167 | |||
168 | /** jz_read | ||
169 | * | ||
170 | * usage: jz_read(register) | ||
171 | * | ||
172 | * effect: read a register and return its value | ||
173 | * note: register must be fully qualified if indexed | ||
174 | * | ||
175 | * example: jz_read(ICOLL_STATUS) | ||
176 | * jz_read(ICOLL_ENABLE(42)) | ||
177 | */ | ||
178 | #define jz_read(name) JT_##name(RD, name) | ||
179 | |||
180 | /** jz_vreadf | ||
181 | * | ||
182 | * usage: jz_vreadf(value, register, field) | ||
183 | * | ||
184 | * effect: given a register value, return the value of a particular field | ||
185 | * note: this macro does NOT read any register | ||
186 | * | ||
187 | * example: jz_vreadf(0xc0000000, ICOLL_CTRL, SFTRST) | ||
188 | * jz_vreadf(0x46ff, ICOLL_ENABLE, CPU0_PRIO) | ||
189 | */ | ||
190 | #define jz_vreadf(val, name, field) (((val) & BM_##name##_##field) >> BP_##name##_##field) | ||
191 | |||
192 | /** jz_readf | ||
193 | * | ||
194 | * usage: jz_readf(register, field) | ||
195 | * | ||
196 | * effect: read a register and return the value of a particular field | ||
197 | * note: register must be fully qualified if indexed | ||
198 | * | ||
199 | * example: jz_readf(ICOLL_CTRL, SFTRST) | ||
200 | * jz_readf(ICOLL_ENABLE(3), CPU0_PRIO) | ||
201 | */ | ||
202 | #define jz_readf(name, field) jz_readf_(jz_read(name), JN_##name, field) | ||
203 | #define jz_readf_(...) jz_vreadf(__VA_ARGS__) | ||
204 | |||
205 | /** jz_write | ||
206 | * | ||
207 | * usage: jz_write(register, value) | ||
208 | * | ||
209 | * effect: write a register | ||
210 | * note: register must be fully qualified if indexed | ||
211 | * | ||
212 | * example: jz_write(ICOLL_CTRL, 0x42) | ||
213 | * jz_write(ICOLL_ENABLE_SET(3), 0x37) | ||
214 | */ | ||
215 | #define jz_write(name, val) JT_##name(WR, name, val) | ||
216 | |||
217 | /** jz_writef | ||
218 | * | ||
219 | * usage: jz_writef(register, f1(v1), f2(v2), ...) | ||
220 | * | ||
221 | * effect: change the register value so that field fi has value vi | ||
222 | * note: register must be fully qualified if indexed | ||
223 | * note: this macro may perform a read-modify-write | ||
224 | * | ||
225 | * example: jz_writef(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED)) | ||
226 | * jz_writef(ICOLL_ENABLE(3), CPU0_PRIO(1), CPU0_TYPE_V(FIQ)) | ||
227 | */ | ||
228 | #define jz_writef(name, ...) jz_writef_(name, JN_##name, __VA_ARGS__) | ||
229 | #define jz_writef_(name, name2, ...) JT_##name(RMW, name, ~__jz_orfm(name2, __VA_ARGS__), jz_orf(name2, __VA_ARGS__)) | ||
230 | |||
231 | /** jz_overwritef | ||
232 | * | ||
233 | * usage: jz_overwritef(register, f1(v1), f2(v2), ...) | ||
234 | * | ||
235 | * effect: change the register value so that field fi has value vi and other fields have value zero | ||
236 | * thus this macro is equivalent to: | ||
237 | * jz_write(register, jz_orf(register, f1(v1), ...)) | ||
238 | * note: register must be fully qualified if indexed | ||
239 | * note: this macro will overwrite the register (it is NOT a read-modify-write) | ||
240 | * | ||
241 | * example: jz_overwritef(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED)) | ||
242 | * jz_overwritef(ICOLL_ENABLE(3), CPU0_PRIO(1), CPU0_TYPE_V(FIQ)) | ||
243 | */ | ||
244 | #define jz_overwritef(name, ...) jz_overwritef_(name, JN_##name, __VA_ARGS__) | ||
245 | #define jz_overwritef_(name, name2, ...) JT_##name(WR, name, jz_orf(name2, __VA_ARGS__)) | ||
246 | |||
247 | /** jz_vwritef | ||
248 | * | ||
249 | * usage: jz_vwritef(var, register, f1(v1), f2(v2), ...) | ||
250 | * | ||
251 | * effect: change the variable value so that field fi has value vi | ||
252 | * note: this macro will perform a read-modify-write | ||
253 | * | ||
254 | * example: jz_vwritef(var, ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED)) | ||
255 | * jz_vwritef(var, ICOLL_ENABLE, CPU0_PRIO(1), CPU0_TYPE_V(FIQ)) | ||
256 | */ | ||
257 | #define jz_vwritef(var, name, ...) (var) = jz_orf(name, __VA_ARGS__) | (~__jz_orfm(name, __VA_ARGS__) & (var)) | ||
258 | |||
259 | /** jz_setf | ||
260 | * | ||
261 | * usage: jz_setf(register, f1, f2, ...) | ||
262 | * | ||
263 | * effect: change the register value so that field fi has maximum value | ||
264 | * IMPORTANT: this macro performs a write to the set variant of the register | ||
265 | * note: register must be fully qualified if indexed | ||
266 | * | ||
267 | * example: jz_setf(ICOLL_CTRL, SFTRST, CLKGATE) | ||
268 | * jz_setf(ICOLL_ENABLE(3), CPU0_PRIO, CPU0_TYPE) | ||
269 | */ | ||
270 | #define jz_setf(name, ...) jz_setf_(__jz_variant(name, , _SET), JN_##name, __VA_ARGS__) | ||
271 | #define jz_setf_(name, name2, ...) jz_write(name, jz_orm(name2, __VA_ARGS__)) | ||
272 | |||
273 | /** jz_clrf | ||
274 | * | ||
275 | * usage: jz_clrf(register, f1, f2, ...) | ||
276 | * | ||
277 | * effect: change the register value so that field fi has value zero | ||
278 | * IMPORTANT: this macro performs a write to the clr variant of the register | ||
279 | * note: register must be fully qualified if indexed | ||
280 | * | ||
281 | * example: jz_clrf(ICOLL_CTRL, SFTRST, CLKGATE) | ||
282 | * jz_clrf(ICOLL_ENABLE(3), CPU0_PRIO, CPU0_TYPE) | ||
283 | */ | ||
284 | #define jz_clrf(name, ...) jz_clrf_(__jz_variant(name, , _CLR), JN_##name, __VA_ARGS__) | ||
285 | #define jz_clrf_(name, name2, ...) jz_write(name, jz_orm(name2, __VA_ARGS__)) | ||
286 | |||
287 | /** jz_set | ||
288 | * | ||
289 | * usage: jz_set(register, set_value) | ||
290 | * | ||
291 | * effect: set some bits using set variant | ||
292 | * note: register must be fully qualified if indexed | ||
293 | * | ||
294 | * example: jz_set(ICOLL_CTRL, 0x42) | ||
295 | * jz_set(ICOLL_ENABLE(3), 0x37) | ||
296 | */ | ||
297 | #define jz_set(name, sval) jz_set_(__jz_variant(name, , _SET), sval) | ||
298 | #define jz_set_(sname, sval) jz_write(sname, sval) | ||
299 | |||
300 | /** jz_clr | ||
301 | * | ||
302 | * usage: jz_clr(register, clr_value) | ||
303 | * | ||
304 | * effect: clear some bits using clr variant | ||
305 | * note: register must be fully qualified if indexed | ||
306 | * | ||
307 | * example: jz_clr(ICOLL_CTRL, 0x42) | ||
308 | * jz_clr(ICOLL_ENABLE(3), 0x37) | ||
309 | */ | ||
310 | #define jz_clr(name, cval) jz_clr_(__jz_variant(name, , _CLR), cval) | ||
311 | #define jz_clr_(cname, cval) jz_write(cname, cval) | ||
312 | |||
313 | /** jz_cs | ||
314 | * | ||
315 | * usage: jz_cs(register, clear_value, set_value) | ||
316 | * | ||
317 | * effect: clear some bits using clr variant and then set some using set variant | ||
318 | * note: register must be fully qualified if indexed | ||
319 | * | ||
320 | * example: jz_cs(ICOLL_CTRL, 0xff, 0x42) | ||
321 | * jz_cs(ICOLL_ENABLE(3), 0xff, 0x37) | ||
322 | */ | ||
323 | #define jz_cs(name, cval, sval) jz_cs_(__jz_variant(name, , _CLR), __jz_variant(name, , _SET), cval, sval) | ||
324 | #define jz_cs_(cname, sname, cval, sval) do { jz_write(cname, cval); jz_write(sname, sval); } while(0) | ||
325 | |||
326 | /** jz_csf | ||
327 | * | ||
328 | * usage: jz_csf(register, f1(v1), f2(v2), ...) | ||
329 | * | ||
330 | * effect: change the register value so that field fi has value vi using clr and set variants | ||
331 | * note: register must be fully qualified if indexed | ||
332 | * note: this macro will NOT perform a read-modify-write and is thus safer | ||
333 | * IMPORTANT: this macro will set some fields to 0 temporarily, make sure this is acceptable | ||
334 | * | ||
335 | * example: jz_csf(ICOLL_CTRL, SFTRST(1), CLKGATE(0), TZ_LOCK_V(UNLOCKED)) | ||
336 | * jz_csf(ICOLL_ENABLE(3), CPU0_PRIO(1), CPU0_TYPE_V(FIQ)) | ||
337 | */ | ||
338 | #define jz_csf(name, ...) jz_csf_(name, JN_##name, __VA_ARGS__) | ||
339 | #define jz_csf_(name, name2, ...) jz_cs(name, __jz_orfm(name2, __VA_ARGS__), jz_orf(name2, __VA_ARGS__)) | ||
340 | |||
341 | /** jz_reg | ||
342 | * | ||
343 | * usage: jz_reg(register) | ||
344 | * | ||
345 | * effect: return a variable-like expression that can be read/written | ||
346 | * note: register must be fully qualified if indexed | ||
347 | * note: read-only registers will yield a constant expression | ||
348 | * | ||
349 | * example: unsigned x = jz_reg(ICOLL_STATUS) | ||
350 | * unsigned x = jz_reg(ICOLL_ENABLE(42)) | ||
351 | * jz_reg(ICOLL_ENABLE(42)) = 64 | ||
352 | */ | ||
353 | #define jz_reg(name) JT_##name(VAR, name) | ||
354 | |||
355 | |||
356 | #endif /* __HEADERGEN_MACRO_H__*/ | ||