@@ -3,7 +3,7 @@
33#include "idris_rts.h"
44
55VAL idris_b8CopyForGC(VM *vm, VAL a) {
6− uint8_t A = a->info.bits8;
6+ uint8_t A = GETBITS8(a);
77 VAL cl = allocate(sizeof(Closure), 1);
88 SETTY(cl, CT_BITS8);
99 cl->info.bits8 = A;
@@ -11,7 +11,7 @@ VAL idris_b8CopyForGC(VM *vm, VAL a) {
1111}
1212
1313VAL idris_b16CopyForGC(VM *vm, VAL a) {
14− uint16_t A = a->info.bits16;
14+ uint16_t A = GETBITS16(a);
1515 VAL cl = allocate(sizeof(Closure), 1);
1616 SETTY(cl, CT_BITS16);
1717 cl->info.bits16 = A;
@@ -19,7 +19,7 @@ VAL idris_b16CopyForGC(VM *vm, VAL a) {
1919}
2020
2121VAL idris_b32CopyForGC(VM *vm, VAL a) {
22− uint32_t A = a->info.bits32;
22+ uint32_t A = GETBITS32(a);
2323 VAL cl = allocate(sizeof(Closure), 1);
2424 SETTY(cl, CT_BITS32);
2525 cl->info.bits32 = A;
@@ -27,7 +27,7 @@ VAL idris_b32CopyForGC(VM *vm, VAL a) {
2727}
2828
2929VAL idris_b64CopyForGC(VM *vm, VAL a) {
30− uint64_t A = a->info.bits64;
30+ uint64_t A = GETBITS64(a);
3131 VAL cl = allocate(sizeof(Closure), 1);
3232 SETTY(cl, CT_BITS64);
3333 cl->info.bits64 = A;
@@ -67,7 +67,7 @@ VAL idris_b64(VM *vm, VAL a) {
6767}
6868
6969VAL idris_castB32Int(VM *vm, VAL a) {
70− return MKINT((i_int)a->info.bits32);
70+ return MKINT(GETBITS32(a));
7171}
7272
7373VAL idris_b8const(VM *vm, uint8_t a) {
@@ -99,8 +99,8 @@ VAL idris_b64const(VM *vm, uint64_t a) {
9999}
100100
101101VAL idris_b8Plus(VM *vm, VAL a, VAL b) {
102− uint8_t A = a->info.bits8;
103− uint8_t B = b->info.bits8;
102+ uint8_t A = GETBITS8(a);
103+ uint8_t B = GETBITS8(b);
104104 VAL cl = allocate(sizeof(Closure), 0);
105105 SETTY(cl, CT_BITS8);
106106 cl->info.bits8 = A + B;
@@ -108,8 +108,8 @@ VAL idris_b8Plus(VM *vm, VAL a, VAL b) {
108108}
109109
110110VAL idris_b8Minus(VM *vm, VAL a, VAL b) {
111− uint8_t A = a->info.bits8;
112− uint8_t B = b->info.bits8;
111+ uint8_t A = GETBITS8(a);
112+ uint8_t B = GETBITS8(b);
113113 VAL cl = allocate(sizeof(Closure), 0);
114114 SETTY(cl, CT_BITS8);
115115 cl->info.bits8 = A - B;
@@ -117,8 +117,8 @@ VAL idris_b8Minus(VM *vm, VAL a, VAL b) {
117117}
118118
119119VAL idris_b8Times(VM *vm, VAL a, VAL b) {
120− uint8_t A = a->info.bits8;
121− uint8_t B = b->info.bits8;
120+ uint8_t A = GETBITS8(a);
121+ uint8_t B = GETBITS8(b);
122122 VAL cl = allocate(sizeof(Closure), 0);
123123 SETTY(cl, CT_BITS8);
124124 cl->info.bits8 = A * B;
@@ -126,8 +126,8 @@ VAL idris_b8Times(VM *vm, VAL a, VAL b) {
126126}
127127
128128VAL idris_b8UDiv(VM *vm, VAL a, VAL b) {
129− uint8_t A = a->info.bits8;
130− uint8_t B = b->info.bits8;
129+ uint8_t A = GETBITS8(a);
130+ uint8_t B = GETBITS8(b);
131131 VAL cl = allocate(sizeof(Closure), 0);
132132 SETTY(cl, CT_BITS8);
133133 cl->info.bits8 = A / B;
@@ -135,8 +135,8 @@ VAL idris_b8UDiv(VM *vm, VAL a, VAL b) {
135135}
136136
137137VAL idris_b8SDiv(VM *vm, VAL a, VAL b) {
138− uint8_t A = a->info.bits8;
139− uint8_t B = b->info.bits8;
138+ uint8_t A = GETBITS8(a);
139+ uint8_t B = GETBITS8(b);
140140 VAL cl = allocate(sizeof(Closure), 0);
141141 SETTY(cl, CT_BITS8);
142142 cl->info.bits8 = (uint8_t) (((int8_t) A) / ((int8_t) B));
@@ -144,8 +144,8 @@ VAL idris_b8SDiv(VM *vm, VAL a, VAL b) {
144144}
145145
146146VAL idris_b8URem(VM *vm, VAL a, VAL b) {
147− uint8_t A = a->info.bits8;
148− uint8_t B = b->info.bits8;
147+ uint8_t A = GETBITS8(a);
148+ uint8_t B = GETBITS8(b);
149149 VAL cl = allocate(sizeof(Closure), 0);
150150 SETTY(cl, CT_BITS8);
151151 cl->info.bits8 = A % B;
@@ -153,8 +153,8 @@ VAL idris_b8URem(VM *vm, VAL a, VAL b) {
153153}
154154
155155VAL idris_b8SRem(VM *vm, VAL a, VAL b) {
156− uint8_t A = a->info.bits8;
157− uint8_t B = b->info.bits8;
156+ uint8_t A = GETBITS8(a);
157+ uint8_t B = GETBITS8(b);
158158 VAL cl = allocate(sizeof(Closure), 0);
159159 SETTY(cl, CT_BITS8);
160160 cl->info.bits8 = (uint8_t) (((int8_t) A) % ((int8_t) B));
@@ -162,27 +162,27 @@ VAL idris_b8SRem(VM *vm, VAL a, VAL b) {
162162}
163163
164164VAL idris_b8Lt(VM *vm, VAL a, VAL b) {
165− return MKINT((i_int) (a->info.bits8 < b->info.bits8));
165+ return MKINT((i_int) (GETBITS8(a) < GETBITS8(b)));
166166}
167167
168168VAL idris_b8Gt(VM *vm, VAL a, VAL b) {
169− return MKINT((i_int) (a->info.bits8 > b->info.bits8));
169+ return MKINT((i_int) (GETBITS8(a) > GETBITS8(b)));
170170}
171171
172172VAL idris_b8Eq(VM *vm, VAL a, VAL b) {
173− return MKINT((i_int) (a->info.bits8 == b->info.bits8));
173+ return MKINT((i_int) (GETBITS8(a) == GETBITS8(b)));
174174}
175175
176176VAL idris_b8Lte(VM *vm, VAL a, VAL b) {
177− return MKINT((i_int) (a->info.bits8 <= b->info.bits8));
177+ return MKINT((i_int) (GETBITS8(a) <= GETBITS8(b)));
178178}
179179
180180VAL idris_b8Gte(VM *vm, VAL a, VAL b) {
181− return MKINT((i_int) (a->info.bits8 >= b->info.bits8));
181+ return MKINT((i_int) (GETBITS8(a) >= GETBITS8(b)));
182182}
183183
184184VAL idris_b8Compl(VM *vm, VAL a) {
185− uint8_t A = a->info.bits8;
185+ uint8_t A = GETBITS8(a);
186186 VAL cl = allocate(sizeof(Closure), 0);
187187 SETTY(cl, CT_BITS8);
188188 cl->info.bits8 = ~ A;
@@ -190,8 +190,8 @@ VAL idris_b8Compl(VM *vm, VAL a) {
190190}
191191
192192VAL idris_b8And(VM *vm, VAL a, VAL b) {
193− uint8_t A = a->info.bits8;
194− uint8_t B = b->info.bits8;
193+ uint8_t A = GETBITS8(a);
194+ uint8_t B = GETBITS8(b);
195195 VAL cl = allocate(sizeof(Closure), 0);
196196 SETTY(cl, CT_BITS8);
197197 cl->info.bits8 = A & B;
@@ -199,8 +199,8 @@ VAL idris_b8And(VM *vm, VAL a, VAL b) {
199199}
200200
201201VAL idris_b8Or(VM *vm, VAL a, VAL b) {
202− uint8_t A = a->info.bits8;
203− uint8_t B = b->info.bits8;
202+ uint8_t A = GETBITS8(a);
203+ uint8_t B = GETBITS8(b);
204204 VAL cl = allocate(sizeof(Closure), 0);
205205 SETTY(cl, CT_BITS8);
206206 cl->info.bits8 = A | B;
@@ -208,8 +208,8 @@ VAL idris_b8Or(VM *vm, VAL a, VAL b) {
208208}
209209
210210VAL idris_b8Xor(VM *vm, VAL a, VAL b) {
211− uint8_t A = a->info.bits8;
212− uint8_t B = b->info.bits8;
211+ uint8_t A = GETBITS8(a);
212+ uint8_t B = GETBITS8(b);
213213 VAL cl = allocate(sizeof(Closure), 0);
214214 SETTY(cl, CT_BITS8);
215215 cl->info.bits8 = A ^ B;
@@ -217,8 +217,8 @@ VAL idris_b8Xor(VM *vm, VAL a, VAL b) {
217217}
218218
219219VAL idris_b8Shl(VM *vm, VAL a, VAL b) {
220− uint8_t A = a->info.bits8;
221− uint8_t B = b->info.bits8;
220+ uint8_t A = GETBITS8(a);
221+ uint8_t B = GETBITS8(b);
222222 VAL cl = allocate(sizeof(Closure), 0);
223223 SETTY(cl, CT_BITS8);
224224 cl->info.bits8 = A << B;
@@ -226,8 +226,8 @@ VAL idris_b8Shl(VM *vm, VAL a, VAL b) {
226226}
227227
228228VAL idris_b8LShr(VM *vm, VAL a, VAL b) {
229− uint8_t A = a->info.bits8;
230− uint8_t B = b->info.bits8;
229+ uint8_t A = GETBITS8(a);
230+ uint8_t B = GETBITS8(b);
231231 VAL cl = allocate(sizeof(Closure), 0);
232232 SETTY(cl, CT_BITS8);
233233 cl->info.bits8 = A >> B;
@@ -235,8 +235,8 @@ VAL idris_b8LShr(VM *vm, VAL a, VAL b) {
235235}
236236
237237VAL idris_b8AShr(VM *vm, VAL a, VAL b) {
238− uint8_t A = a->info.bits8;
239− uint8_t B = b->info.bits8;
238+ uint8_t A = GETBITS8(a);
239+ uint8_t B = GETBITS8(b);
240240 VAL cl = allocate(sizeof(Closure), 0);
241241 SETTY(cl, CT_BITS8);
242242 cl->info.bits8 = (uint8_t) (((int8_t) A) >> ((int8_t) B));
@@ -244,8 +244,8 @@ VAL idris_b8AShr(VM *vm, VAL a, VAL b) {
244244}
245245
246246VAL idris_b16Plus(VM *vm, VAL a, VAL b) {
247− uint16_t A = a->info.bits16;
248− uint16_t B = b->info.bits16;
247+ uint16_t A = GETBITS16(a);
248+ uint16_t B = GETBITS16(b);
249249 VAL cl = allocate(sizeof(Closure), 0);
250250 SETTY(cl, CT_BITS16);
251251 cl->info.bits16 = A + B;
@@ -253,8 +253,8 @@ VAL idris_b16Plus(VM *vm, VAL a, VAL b) {
253253}
254254
255255VAL idris_b16Minus(VM *vm, VAL a, VAL b) {
256− uint16_t A = a->info.bits16;
257− uint16_t B = b->info.bits16;
256+ uint16_t A = GETBITS16(a);
257+ uint16_t B = GETBITS16(b);
258258 VAL cl = allocate(sizeof(Closure), 0);
259259 SETTY(cl, CT_BITS16);
260260 cl->info.bits16 = A - B;
@@ -262,8 +262,8 @@ VAL idris_b16Minus(VM *vm, VAL a, VAL b) {
262262}
263263
264264VAL idris_b16Times(VM *vm, VAL a, VAL b) {
265− uint16_t A = a->info.bits16;
266− uint16_t B = b->info.bits16;
265+ uint16_t A = GETBITS16(a);
266+ uint16_t B = GETBITS16(b);
267267 VAL cl = allocate(sizeof(Closure), 0);
268268 SETTY(cl, CT_BITS16);
269269 cl->info.bits16 = A * B;
@@ -271,8 +271,8 @@ VAL idris_b16Times(VM *vm, VAL a, VAL b) {
271271}
272272
273273VAL idris_b16UDiv(VM *vm, VAL a, VAL b) {
274− uint16_t A = a->info.bits16;
275− uint16_t B = b->info.bits16;
274+ uint16_t A = GETBITS16(a);
275+ uint16_t B = GETBITS16(b);
276276 VAL cl = allocate(sizeof(Closure), 0);
277277 SETTY(cl, CT_BITS16);
278278 cl->info.bits16 = A / B;
@@ -280,8 +280,8 @@ VAL idris_b16UDiv(VM *vm, VAL a, VAL b) {
280280}
281281
282282VAL idris_b16SDiv(VM *vm, VAL a, VAL b) {
283− uint16_t A = a->info.bits16;
284− uint16_t B = b->info.bits16;
283+ uint16_t A = GETBITS16(a);
284+ uint16_t B = GETBITS16(b);
285285 VAL cl = allocate(sizeof(Closure), 0);
286286 SETTY(cl, CT_BITS16);
287287 cl->info.bits16 = (uint16_t) (((int16_t) A) / ((int16_t) B));
@@ -289,8 +289,8 @@ VAL idris_b16SDiv(VM *vm, VAL a, VAL b) {
289289}
290290
291291VAL idris_b16URem(VM *vm, VAL a, VAL b) {
292− uint16_t A = a->info.bits16;
293− uint16_t B = b->info.bits16;
292+ uint16_t A = GETBITS16(a);
293+ uint16_t B = GETBITS16(b);
294294 VAL cl = allocate(sizeof(Closure), 0);
295295 SETTY(cl, CT_BITS16);
296296 cl->info.bits16 = A % B;
@@ -298,8 +298,8 @@ VAL idris_b16URem(VM *vm, VAL a, VAL b) {
298298}
299299
300300VAL idris_b16SRem(VM *vm, VAL a, VAL b) {
301− uint16_t A = a->info.bits16;
302− uint16_t B = b->info.bits16;
301+ uint16_t A = GETBITS16(a);
302+ uint16_t B = GETBITS16(b);
303303 VAL cl = allocate(sizeof(Closure), 0);
304304 SETTY(cl, CT_BITS16);
305305 cl->info.bits16 = (uint16_t) (((int16_t) A) % ((int16_t) B));
@@ -307,27 +307,27 @@ VAL idris_b16SRem(VM *vm, VAL a, VAL b) {
307307}
308308
309309VAL idris_b16Lt(VM *vm, VAL a, VAL b) {
310− return MKINT((i_int) (a->info.bits16 < b->info.bits16));
310+ return MKINT((i_int) (GETBITS16(a) < GETBITS16(b)));
311311}
312312
313313VAL idris_b16Gt(VM *vm, VAL a, VAL b) {
314− return MKINT((i_int) (a->info.bits16 > b->info.bits16));
314+ return MKINT((i_int) (GETBITS16(a) > GETBITS16(b)));
315315}
316316
317317VAL idris_b16Eq(VM *vm, VAL a, VAL b) {
318− return MKINT((i_int) (a->info.bits16 == b->info.bits16));
318+ return MKINT((i_int) (GETBITS16(a) == GETBITS16(b)));
319319}
320320
321321VAL idris_b16Lte(VM *vm, VAL a, VAL b) {
322− return MKINT((i_int) (a->info.bits16 <= b->info.bits16));
322+ return MKINT((i_int) (GETBITS16(a) <= GETBITS16(b)));
323323}
324324
325325VAL idris_b16Gte(VM *vm, VAL a, VAL b) {
326− return MKINT((i_int) (a->info.bits16 >= b->info.bits16));
326+ return MKINT((i_int) (GETBITS16(a) >= GETBITS16(b)));
327327}
328328
329329VAL idris_b16Compl(VM *vm, VAL a) {
330− uint16_t A = a->info.bits16;
330+ uint16_t A = GETBITS16(a);
331331 VAL cl = allocate(sizeof(Closure), 0);
332332 SETTY(cl, CT_BITS16);
333333 cl->info.bits16 = ~ A;
@@ -335,8 +335,8 @@ VAL idris_b16Compl(VM *vm, VAL a) {
335335}
336336
337337VAL idris_b16And(VM *vm, VAL a, VAL b) {
338− uint16_t A = a->info.bits16;
339− uint16_t B = b->info.bits16;
338+ uint16_t A = GETBITS16(a);
339+ uint16_t B = GETBITS16(b);
340340 VAL cl = allocate(sizeof(Closure), 0);
341341 SETTY(cl, CT_BITS16);
342342 cl->info.bits16 = A & B;
@@ -344,8 +344,8 @@ VAL idris_b16And(VM *vm, VAL a, VAL b) {
344344}
345345
346346VAL idris_b16Or(VM *vm, VAL a, VAL b) {
347− uint16_t A = a->info.bits16;
348− uint16_t B = b->info.bits16;
347+ uint16_t A = GETBITS16(a);
348+ uint16_t B = GETBITS16(b);
349349 VAL cl = allocate(sizeof(Closure), 0);
350350 SETTY(cl, CT_BITS16);
351351 cl->info.bits16 = A | B;
@@ -353,8 +353,8 @@ VAL idris_b16Or(VM *vm, VAL a, VAL b) {
353353}
354354
355355VAL idris_b16Xor(VM *vm, VAL a, VAL b) {
356− uint16_t A = a->info.bits16;
357− uint16_t B = b->info.bits16;
356+ uint16_t A = GETBITS16(a);
357+ uint16_t B = GETBITS16(b);
358358 VAL cl = allocate(sizeof(Closure), 0);
359359 SETTY(cl, CT_BITS16);
360360 cl->info.bits16 = A ^ B;
@@ -362,8 +362,8 @@ VAL idris_b16Xor(VM *vm, VAL a, VAL b) {
362362}
363363
364364VAL idris_b16Shl(VM *vm, VAL a, VAL b) {
365− uint16_t A = a->info.bits16;
366− uint16_t B = b->info.bits16;
365+ uint16_t A = GETBITS16(a);
366+ uint16_t B = GETBITS16(b);
367367 VAL cl = allocate(sizeof(Closure), 0);
368368 SETTY(cl, CT_BITS16);
369369 cl->info.bits16 = A << B;
@@ -371,8 +371,8 @@ VAL idris_b16Shl(VM *vm, VAL a, VAL b) {
371371}
372372
373373VAL idris_b16LShr(VM *vm, VAL a, VAL b) {
374− uint16_t A = a->info.bits16;
375− uint16_t B = b->info.bits16;
374+ uint16_t A = GETBITS16(a);
375+ uint16_t B = GETBITS16(b);
376376 VAL cl = allocate(sizeof(Closure), 0);
377377 SETTY(cl, CT_BITS16);
378378 cl->info.bits16 = A >> B;
@@ -380,8 +380,8 @@ VAL idris_b16LShr(VM *vm, VAL a, VAL b) {
380380}
381381
382382VAL idris_b16AShr(VM *vm, VAL a, VAL b) {
383− uint16_t A = a->info.bits16;
384− uint16_t B = b->info.bits16;
383+ uint16_t A = GETBITS16(a);
384+ uint16_t B = GETBITS16(b);
385385 VAL cl = allocate(sizeof(Closure), 0);
386386 SETTY(cl, CT_BITS16);
387387 cl->info.bits16 = (uint16_t) (((int16_t) A) >> ((int16_t) B));
@@ -389,8 +389,8 @@ VAL idris_b16AShr(VM *vm, VAL a, VAL b) {
389389}
390390
391391VAL idris_b32Plus(VM *vm, VAL a, VAL b) {
392− uint32_t A = a->info.bits32;
393− uint32_t B = b->info.bits32;
392+ uint32_t A = GETBITS32(a);
393+ uint32_t B = GETBITS32(b);
394394 VAL cl = allocate(sizeof(Closure), 0);
395395 SETTY(cl, CT_BITS32);
396396 cl->info.bits32 = A + B;
@@ -398,8 +398,8 @@ VAL idris_b32Plus(VM *vm, VAL a, VAL b) {
398398}
399399
400400VAL idris_b32Minus(VM *vm, VAL a, VAL b) {
401− uint32_t A = a->info.bits32;
402− uint32_t B = b->info.bits32;
401+ uint32_t A = GETBITS32(a);
402+ uint32_t B = GETBITS32(b);
403403 VAL cl = allocate(sizeof(Closure), 0);
404404 SETTY(cl, CT_BITS32);
405405 cl->info.bits32 = A - B;
@@ -407,8 +407,8 @@ VAL idris_b32Minus(VM *vm, VAL a, VAL b) {
407407}
408408
409409VAL idris_b32Times(VM *vm, VAL a, VAL b) {
410− uint32_t A = a->info.bits32;
411− uint32_t B = b->info.bits32;
410+ uint32_t A = GETBITS32(a);
411+ uint32_t B = GETBITS32(b);
412412 VAL cl = allocate(sizeof(Closure), 0);
413413 SETTY(cl, CT_BITS32);
414414 cl->info.bits32 = A * B;
@@ -416,8 +416,8 @@ VAL idris_b32Times(VM *vm, VAL a, VAL b) {
416416}
417417
418418VAL idris_b32UDiv(VM *vm, VAL a, VAL b) {
419− uint32_t A = a->info.bits32;
420− uint32_t B = b->info.bits32;
419+ uint32_t A = GETBITS32(a);
420+ uint32_t B = GETBITS32(b);
421421 VAL cl = allocate(sizeof(Closure), 0);
422422 SETTY(cl, CT_BITS32);
423423 cl->info.bits32 = A / B;
@@ -425,8 +425,8 @@ VAL idris_b32UDiv(VM *vm, VAL a, VAL b) {
425425}
426426
427427VAL idris_b32SDiv(VM *vm, VAL a, VAL b) {
428− uint32_t A = a->info.bits32;
429− uint32_t B = b->info.bits32;
428+ uint32_t A = GETBITS32(a);
429+ uint32_t B = GETBITS32(b);
430430 VAL cl = allocate(sizeof(Closure), 0);
431431 SETTY(cl, CT_BITS32);
432432 cl->info.bits32 = (uint32_t) (((int32_t) A) / ((int32_t) B));
@@ -434,8 +434,8 @@ VAL idris_b32SDiv(VM *vm, VAL a, VAL b) {
434434}
435435
436436VAL idris_b32URem(VM *vm, VAL a, VAL b) {
437− uint32_t A = a->info.bits32;
438− uint32_t B = b->info.bits32;
437+ uint32_t A = GETBITS32(a);
438+ uint32_t B = GETBITS32(b);
439439 VAL cl = allocate(sizeof(Closure), 0);
440440 SETTY(cl, CT_BITS32);
441441 cl->info.bits32 = A % B;
@@ -443,8 +443,8 @@ VAL idris_b32URem(VM *vm, VAL a, VAL b) {
443443}
444444
445445VAL idris_b32SRem(VM *vm, VAL a, VAL b) {
446− uint32_t A = a->info.bits32;
447− uint32_t B = b->info.bits32;
446+ uint32_t A = GETBITS32(a);
447+ uint32_t B = GETBITS32(b);
448448 VAL cl = allocate(sizeof(Closure), 0);
449449 SETTY(cl, CT_BITS32);
450450 cl->info.bits32 = (uint32_t) (((int32_t) A) % ((int32_t) B));
@@ -452,27 +452,27 @@ VAL idris_b32SRem(VM *vm, VAL a, VAL b) {
452452}
453453
454454VAL idris_b32Lt(VM *vm, VAL a, VAL b) {
455− return MKINT((i_int) (a->info.bits32 < b->info.bits32));
455+ return MKINT((i_int) (GETBITS32(a) < GETBITS32(b)));
456456}
457457
458458VAL idris_b32Gt(VM *vm, VAL a, VAL b) {
459− return MKINT((i_int) (a->info.bits32 > b->info.bits32));
459+ return MKINT((i_int) (GETBITS32(a) > GETBITS32(b)));
460460}
461461
462462VAL idris_b32Eq(VM *vm, VAL a, VAL b) {
463− return MKINT((i_int) (a->info.bits32 == b->info.bits32));
463+ return MKINT((i_int) (GETBITS32(a) == GETBITS32(b)));
464464}
465465
466466VAL idris_b32Lte(VM *vm, VAL a, VAL b) {
467− return MKINT((i_int) (a->info.bits32 <= b->info.bits32));
467+ return MKINT((i_int) (GETBITS32(a) <= GETBITS32(b)));
468468}
469469
470470VAL idris_b32Gte(VM *vm, VAL a, VAL b) {
471− return MKINT((i_int) (a->info.bits32 >= b->info.bits32));
471+ return MKINT((i_int) (GETBITS32(a) >= GETBITS32(b)));
472472}
473473
474474VAL idris_b32Compl(VM *vm, VAL a) {
475− uint32_t A = a->info.bits32;
475+ uint32_t A = GETBITS32(a);
476476 VAL cl = allocate(sizeof(Closure), 0);
477477 SETTY(cl, CT_BITS32);
478478 cl->info.bits32 = ~ A;
@@ -480,8 +480,8 @@ VAL idris_b32Compl(VM *vm, VAL a) {
480480}
481481
482482VAL idris_b32And(VM *vm, VAL a, VAL b) {
483− uint32_t A = a->info.bits32;
484− uint32_t B = b->info.bits32;
483+ uint32_t A = GETBITS32(a);
484+ uint32_t B = GETBITS32(b);
485485 VAL cl = allocate(sizeof(Closure), 0);
486486 SETTY(cl, CT_BITS32);
487487 cl->info.bits32 = A & B;
@@ -489,8 +489,8 @@ VAL idris_b32And(VM *vm, VAL a, VAL b) {
489489}
490490
491491VAL idris_b32Or(VM *vm, VAL a, VAL b) {
492− uint32_t A = a->info.bits32;
493− uint32_t B = b->info.bits32;
492+ uint32_t A = GETBITS32(a);
493+ uint32_t B = GETBITS32(b);
494494 VAL cl = allocate(sizeof(Closure), 0);
495495 SETTY(cl, CT_BITS32);
496496 cl->info.bits32 = A | B;
@@ -498,8 +498,8 @@ VAL idris_b32Or(VM *vm, VAL a, VAL b) {
498498}
499499
500500VAL idris_b32Xor(VM *vm, VAL a, VAL b) {
501− uint32_t A = a->info.bits32;
502− uint32_t B = b->info.bits32;
501+ uint32_t A = GETBITS32(a);
502+ uint32_t B = GETBITS32(b);
503503 VAL cl = allocate(sizeof(Closure), 0);
504504 SETTY(cl, CT_BITS32);
505505 cl->info.bits32 = A ^ B;
@@ -507,8 +507,8 @@ VAL idris_b32Xor(VM *vm, VAL a, VAL b) {
507507}
508508
509509VAL idris_b32Shl(VM *vm, VAL a, VAL b) {
510− uint32_t A = a->info.bits32;
511− uint32_t B = b->info.bits32;
510+ uint32_t A = GETBITS32(a);
511+ uint32_t B = GETBITS32(b);
512512 VAL cl = allocate(sizeof(Closure), 0);
513513 SETTY(cl, CT_BITS32);
514514 cl->info.bits32 = A << B;
@@ -516,8 +516,8 @@ VAL idris_b32Shl(VM *vm, VAL a, VAL b) {
516516}
517517
518518VAL idris_b32LShr(VM *vm, VAL a, VAL b) {
519− uint32_t A = a->info.bits32;
520− uint32_t B = b->info.bits32;
519+ uint32_t A = GETBITS32(a);
520+ uint32_t B = GETBITS32(b);
521521 VAL cl = allocate(sizeof(Closure), 0);
522522 SETTY(cl, CT_BITS32);
523523 cl->info.bits32 = A >> B;
@@ -525,8 +525,8 @@ VAL idris_b32LShr(VM *vm, VAL a, VAL b) {
525525}
526526
527527VAL idris_b32AShr(VM *vm, VAL a, VAL b) {
528− uint32_t A = a->info.bits32;
529− uint32_t B = b->info.bits32;
528+ uint32_t A = GETBITS32(a);
529+ uint32_t B = GETBITS32(b);
530530 VAL cl = allocate(sizeof(Closure), 0);
531531 SETTY(cl, CT_BITS32);
532532 cl->info.bits32 = (uint32_t) (((int32_t)A) >> ((int32_t)B));
@@ -534,8 +534,8 @@ VAL idris_b32AShr(VM *vm, VAL a, VAL b) {
534534}
535535
536536VAL idris_b64Plus(VM *vm, VAL a, VAL b) {
537− uint64_t A = a->info.bits64;
538− uint64_t B = b->info.bits64;
537+ uint64_t A = GETBITS64(a);
538+ uint64_t B = GETBITS64(b);
539539 VAL cl = allocate(sizeof(Closure), 0);
540540 SETTY(cl, CT_BITS64);
541541 cl->info.bits64 = A + B;
@@ -543,8 +543,8 @@ VAL idris_b64Plus(VM *vm, VAL a, VAL b) {
543543}
544544
545545VAL idris_b64Minus(VM *vm, VAL a, VAL b) {
546− uint64_t A = a->info.bits64;
547− uint64_t B = b->info.bits64;
546+ uint64_t A = GETBITS64(a);
547+ uint64_t B = GETBITS64(b);
548548 VAL cl = allocate(sizeof(Closure), 0);
549549 SETTY(cl, CT_BITS64);
550550 cl->info.bits64 = A - B;
@@ -552,8 +552,8 @@ VAL idris_b64Minus(VM *vm, VAL a, VAL b) {
552552}
553553
554554VAL idris_b64Times(VM *vm, VAL a, VAL b) {
555− uint64_t A = a->info.bits64;
556− uint64_t B = b->info.bits64;
555+ uint64_t A = GETBITS64(a);
556+ uint64_t B = GETBITS64(b);
557557 VAL cl = allocate(sizeof(Closure), 0);
558558 SETTY(cl, CT_BITS64);
559559 cl->info.bits64 = A * B;
@@ -561,8 +561,8 @@ VAL idris_b64Times(VM *vm, VAL a, VAL b) {
561561}
562562
563563VAL idris_b64UDiv(VM *vm, VAL a, VAL b) {
564− uint64_t A = a->info.bits64;
565− uint64_t B = b->info.bits64;
564+ uint64_t A = GETBITS64(a);
565+ uint64_t B = GETBITS64(b);
566566 VAL cl = allocate(sizeof(Closure), 0);
567567 SETTY(cl, CT_BITS64);
568568 cl->info.bits64 = A / B;
@@ -570,8 +570,8 @@ VAL idris_b64UDiv(VM *vm, VAL a, VAL b) {
570570}
571571
572572VAL idris_b64SDiv(VM *vm, VAL a, VAL b) {
573− uint64_t A = a->info.bits64;
574− uint64_t B = b->info.bits64;
573+ uint64_t A = GETBITS64(a);
574+ uint64_t B = GETBITS64(b);
575575 VAL cl = allocate(sizeof(Closure), 0);
576576 SETTY(cl, CT_BITS64);
577577 cl->info.bits64 = (uint64_t) (((int64_t) A) / ((int64_t) B));
@@ -579,8 +579,8 @@ VAL idris_b64SDiv(VM *vm, VAL a, VAL b) {
579579}
580580
581581VAL idris_b64URem(VM *vm, VAL a, VAL b) {
582− uint64_t A = a->info.bits64;
583− uint64_t B = b->info.bits64;
582+ uint64_t A = GETBITS64(a);
583+ uint64_t B = GETBITS64(b);
584584 VAL cl = allocate(sizeof(Closure), 0);
585585 SETTY(cl, CT_BITS64);
586586 cl->info.bits64 = A % B;
@@ -588,8 +588,8 @@ VAL idris_b64URem(VM *vm, VAL a, VAL b) {
588588}
589589
590590VAL idris_b64SRem(VM *vm, VAL a, VAL b) {
591− uint64_t A = a->info.bits64;
592− uint64_t B = b->info.bits64;
591+ uint64_t A = GETBITS64(a);
592+ uint64_t B = GETBITS64(b);
593593 VAL cl = allocate(sizeof(Closure), 0);
594594 SETTY(cl, CT_BITS64);
595595 cl->info.bits64 = (uint64_t) (((int64_t) A) % ((int64_t) B));
@@ -617,7 +617,7 @@ VAL idris_b64Gte(VM *vm, VAL a, VAL b) {
617617}
618618
619619VAL idris_b64Compl(VM *vm, VAL a) {
620− uint64_t A = a->info.bits64;
620+ uint64_t A = GETBITS64(a);
621621 VAL cl = allocate(sizeof(Closure), 0);
622622 SETTY(cl, CT_BITS64);
623623 cl->info.bits64 = ~ A;
@@ -625,8 +625,8 @@ VAL idris_b64Compl(VM *vm, VAL a) {
625625}
626626
627627VAL idris_b64And(VM *vm, VAL a, VAL b) {
628− uint64_t A = a->info.bits64;
629− uint64_t B = b->info.bits64;
628+ uint64_t A = GETBITS64(a);
629+ uint64_t B = GETBITS64(b);
630630 VAL cl = allocate(sizeof(Closure), 0);
631631 SETTY(cl, CT_BITS64);
632632 cl->info.bits64 = A & B;
@@ -634,8 +634,8 @@ VAL idris_b64And(VM *vm, VAL a, VAL b) {
634634}
635635
636636VAL idris_b64Or(VM *vm, VAL a, VAL b) {
637− uint64_t A = a->info.bits64;
638− uint64_t B = b->info.bits64;
637+ uint64_t A = GETBITS64(a);
638+ uint64_t B = GETBITS64(b);
639639 VAL cl = allocate(sizeof(Closure), 0);
640640 SETTY(cl, CT_BITS64);
641641 cl->info.bits64 = A | B;
@@ -643,8 +643,8 @@ VAL idris_b64Or(VM *vm, VAL a, VAL b) {
643643}
644644
645645VAL idris_b64Xor(VM *vm, VAL a, VAL b) {
646− uint64_t A = a->info.bits64;
647− uint64_t B = b->info.bits64;
646+ uint64_t A = GETBITS64(a);
647+ uint64_t B = GETBITS64(b);
648648 VAL cl = allocate(sizeof(Closure), 0);
649649 SETTY(cl, CT_BITS64);
650650 cl->info.bits64 = A ^ B;
@@ -652,8 +652,8 @@ VAL idris_b64Xor(VM *vm, VAL a, VAL b) {
652652}
653653
654654VAL idris_b64Shl(VM *vm, VAL a, VAL b) {
655− uint64_t A = a->info.bits64;
656− uint64_t B = b->info.bits64;
655+ uint64_t A = GETBITS64(a);
656+ uint64_t B = GETBITS64(b);
657657 VAL cl = allocate(sizeof(Closure), 0);
658658 SETTY(cl, CT_BITS64);
659659 cl->info.bits64 = A << B;
@@ -661,8 +661,8 @@ VAL idris_b64Shl(VM *vm, VAL a, VAL b) {
661661}
662662
663663VAL idris_b64LShr(VM *vm, VAL a, VAL b) {
664− uint64_t A = a->info.bits64;
665− uint64_t B = b->info.bits64;
664+ uint64_t A = GETBITS64(a);
665+ uint64_t B = GETBITS64(b);
666666 VAL cl = allocate(sizeof(Closure), 0);
667667 SETTY(cl, CT_BITS64);
668668 cl->info.bits64 = A >> B;
@@ -670,8 +670,8 @@ VAL idris_b64LShr(VM *vm, VAL a, VAL b) {
670670}
671671
672672VAL idris_b64AShr(VM *vm, VAL a, VAL b) {
673− uint64_t A = a->info.bits64;
674− uint64_t B = b->info.bits64;
673+ uint64_t A = GETBITS64(a);
674+ uint64_t B = GETBITS64(b);
675675 VAL cl = allocate(sizeof(Closure), 0);
676676 SETTY(cl, CT_BITS64);
677677 cl->info.bits64 = (uint64_t) (((int64_t) A) >> ((int64_t) B));
@@ -679,7 +679,7 @@ VAL idris_b64AShr(VM *vm, VAL a, VAL b) {
679679}
680680
681681VAL idris_b8Z16(VM *vm, VAL a) {
682− uint8_t A = a->info.bits8;
682+ uint8_t A = GETBITS8(a);
683683 VAL cl = allocate(sizeof(Closure), 0);
684684 SETTY(cl, CT_BITS16);
685685 cl->info.bits16 = (uint16_t) A;
@@ -687,7 +687,7 @@ VAL idris_b8Z16(VM *vm, VAL a) {
687687}
688688
689689VAL idris_b8Z32(VM *vm, VAL a) {
690− uint8_t A = a->info.bits8;
690+ uint8_t A = GETBITS8(a);
691691 VAL cl = allocate(sizeof(Closure), 0);
692692 SETTY(cl, CT_BITS32);
693693 cl->info.bits32 = (uint32_t) A;
@@ -695,7 +695,7 @@ VAL idris_b8Z32(VM *vm, VAL a) {
695695}
696696
697697VAL idris_b8Z64(VM *vm, VAL a) {
698− uint8_t A = a->info.bits8;
698+ uint8_t A = GETBITS8(a);
699699 VAL cl = allocate(sizeof(Closure), 0);
700700 SETTY(cl, CT_BITS64);
701701 cl->info.bits64 = (uint64_t) A;
@@ -703,7 +703,7 @@ VAL idris_b8Z64(VM *vm, VAL a) {
703703}
704704
705705VAL idris_b8S16(VM *vm, VAL a) {
706− uint8_t A = a->info.bits8;
706+ uint8_t A = GETBITS8(a);
707707 VAL cl = allocate(sizeof(Closure), 0);
708708 SETTY(cl, CT_BITS16);
709709 cl->info.bits16 = (uint16_t) (int16_t) (int8_t) A;
@@ -711,7 +711,7 @@ VAL idris_b8S16(VM *vm, VAL a) {
711711}
712712
713713VAL idris_b8S32(VM *vm, VAL a) {
714− uint8_t A = a->info.bits8;
714+ uint8_t A = GETBITS8(a);
715715 VAL cl = allocate(sizeof(Closure), 0);
716716 SETTY(cl, CT_BITS32);
717717 cl->info.bits32 = (uint32_t) (int32_t) (int8_t) A;
@@ -719,7 +719,7 @@ VAL idris_b8S32(VM *vm, VAL a) {
719719}
720720
721721VAL idris_b8S64(VM *vm, VAL a) {
722− uint8_t A = a->info.bits8;
722+ uint8_t A = GETBITS8(a);
723723 VAL cl = allocate(sizeof(Closure), 0);
724724 SETTY(cl, CT_BITS64);
725725 cl->info.bits64 = (uint64_t) (int64_t) (int8_t) A;
@@ -727,7 +727,7 @@ VAL idris_b8S64(VM *vm, VAL a) {
727727}
728728
729729VAL idris_b16Z32(VM *vm, VAL a) {
730− uint16_t A = a->info.bits16;
730+ uint16_t A = GETBITS16(a);
731731 VAL cl = allocate(sizeof(Closure), 0);
732732 SETTY(cl, CT_BITS32);
733733 cl->info.bits32 = (uint32_t) A;
@@ -735,7 +735,7 @@ VAL idris_b16Z32(VM *vm, VAL a) {
735735}
736736
737737VAL idris_b16Z64(VM *vm, VAL a) {
738− uint16_t A = a->info.bits16;
738+ uint16_t A = GETBITS16(a);
739739 VAL cl = allocate(sizeof(Closure), 0);
740740 SETTY(cl, CT_BITS64);
741741 cl->info.bits64 = (uint64_t) A;
@@ -743,7 +743,7 @@ VAL idris_b16Z64(VM *vm, VAL a) {
743743}
744744
745745VAL idris_b16S32(VM *vm, VAL a) {
746− uint16_t A = a->info.bits16;
746+ uint16_t A = GETBITS16(a);
747747 VAL cl = allocate(sizeof(Closure), 0);
748748 SETTY(cl, CT_BITS32);
749749 cl->info.bits32 = (uint32_t) (int32_t) (int16_t) A;
@@ -751,7 +751,7 @@ VAL idris_b16S32(VM *vm, VAL a) {
751751}
752752
753753VAL idris_b16S64(VM *vm, VAL a) {
754− uint16_t A = a->info.bits16;
754+ uint16_t A = GETBITS16(a);
755755 VAL cl = allocate(sizeof(Closure), 0);
756756 SETTY(cl, CT_BITS64);
757757 cl->info.bits64 = (uint64_t) (int64_t) (int16_t) A;
@@ -759,7 +759,7 @@ VAL idris_b16S64(VM *vm, VAL a) {
759759}
760760
761761VAL idris_b16T8(VM *vm, VAL a) {
762− uint16_t A = a->info.bits16;
762+ uint16_t A = GETBITS16(a);
763763 VAL cl = allocate(sizeof(Closure), 0);
764764 SETTY(cl, CT_BITS8);
765765 cl->info.bits8 = (uint8_t) A;
@@ -767,7 +767,7 @@ VAL idris_b16T8(VM *vm, VAL a) {
767767}
768768
769769VAL idris_b32Z64(VM *vm, VAL a) {
770− uint32_t A = a->info.bits32;
770+ uint32_t A = GETBITS32(a);
771771 VAL cl = allocate(sizeof(Closure), 0);
772772 SETTY(cl, CT_BITS64);
773773 cl->info.bits64 = (uint64_t) A;
@@ -775,7 +775,7 @@ VAL idris_b32Z64(VM *vm, VAL a) {
775775}
776776
777777VAL idris_b32S64(VM *vm, VAL a) {
778− uint32_t A = a->info.bits32;
778+ uint32_t A = GETBITS32(a);
779779 VAL cl = allocate(sizeof(Closure), 0);
780780 SETTY(cl, CT_BITS64);
781781 cl->info.bits64 = (uint64_t) (int64_t) (int32_t) A;
@@ -783,7 +783,7 @@ VAL idris_b32S64(VM *vm, VAL a) {
783783}
784784
785785VAL idris_b32T8(VM *vm, VAL a) {
786− uint32_t A = a->info.bits32;
786+ uint32_t A = GETBITS32(a);
787787 VAL cl = allocate(sizeof(Closure), 0);
788788 SETTY(cl, CT_BITS8);
789789 cl->info.bits8 = (uint8_t) A;
@@ -791,7 +791,7 @@ VAL idris_b32T8(VM *vm, VAL a) {
791791}
792792
793793VAL idris_b32T16(VM *vm, VAL a) {
794− uint32_t A = a->info.bits32;
794+ uint32_t A = GETBITS32(a);
795795 VAL cl = allocate(sizeof(Closure), 0);
796796 SETTY(cl, CT_BITS16);
797797 cl->info.bits16 = (uint16_t) A;
@@ -799,7 +799,7 @@ VAL idris_b32T16(VM *vm, VAL a) {
799799}
800800
801801VAL idris_b64T8(VM *vm, VAL a) {
802− uint64_t A = a->info.bits64;
802+ uint64_t A = GETBITS64(a);
803803 VAL cl = allocate(sizeof(Closure), 0);
804804 SETTY(cl, CT_BITS8);
805805 cl->info.bits8 = (uint8_t) A;
@@ -807,7 +807,7 @@ VAL idris_b64T8(VM *vm, VAL a) {
807807}
808808
809809VAL idris_b64T16(VM *vm, VAL a) {
810− uint64_t A = a->info.bits64;
810+ uint64_t A = GETBITS64(a);
811811 VAL cl = allocate(sizeof(Closure), 0);
812812 SETTY(cl, CT_BITS16);
813813 cl->info.bits16 = (uint16_t) A;
@@ -815,7 +815,7 @@ VAL idris_b64T16(VM *vm, VAL a) {
815815}
816816
817817VAL idris_b64T32(VM *vm, VAL a) {
818− uint64_t A = a->info.bits64;
818+ uint64_t A = GETBITS64(a);
819819 VAL cl = allocate(sizeof(Closure), 0);
820820 SETTY(cl, CT_BITS32);
821821 cl->info.bits32 = (uint32_t) A;