@@ -2,131 +2,94 @@
3#include "idris_rts.h"
3#include "idris_rts.h"
5−VAL idris_b8(VM *vm, VAL a) {
5+VAL idris_b8const(VM *vm, uint8_t a) {
6− uint8_t A = GETINT(a);
6+ Bits8 * cl = iallocate(vm, sizeof(*cl), 0);
7− VAL cl = allocate(sizeof(Closure), 0);
8 SETTY(cl, CT_BITS8);
7 SETTY(cl, CT_BITS8);
9− cl->info.bits8 = (uint8_t) A;
8+ cl->bits8 = a;
10− return cl;
9+ return (VAL)cl;
13−VAL idris_b16(VM *vm, VAL a) {
12+VAL idris_b16const(VM *vm, uint16_t a) {
14− uint16_t A = GETINT(a);
13+ Bits16 * cl = iallocate(vm, sizeof(*cl), 0);
15− VAL cl = allocate(sizeof(Closure), 0);
16 SETTY(cl, CT_BITS16);
14 SETTY(cl, CT_BITS16);
17− cl->info.bits16 = (uint16_t) A;
15+ cl->bits16 = a;
18− return cl;
16+ return (VAL)cl;
21−VAL idris_b32(VM *vm, VAL a) {
19+VAL idris_b32const(VM *vm, uint32_t a) {
22− uint32_t A = GETINT(a);
20+ Bits32 * cl = iallocate(vm, sizeof(*cl), 0);
23− VAL cl = allocate(sizeof(Closure), 0);
24 SETTY(cl, CT_BITS32);
21 SETTY(cl, CT_BITS32);
25− cl->info.bits32 = (uint32_t) A;
22+ cl->bits32 = a;
26− return cl;
23+ return (VAL)cl;
29−VAL idris_b64(VM *vm, VAL a) {
26+VAL idris_b64const(VM *vm, uint64_t a) {
30− uint64_t A = GETINT(a);
27+ Bits64 * cl = iallocate(vm, sizeof(*cl), 0);
31− VAL cl = allocate(sizeof(Closure), 0);
32 SETTY(cl, CT_BITS64);
28 SETTY(cl, CT_BITS64);
33− cl->info.bits64 = (uint64_t) A;
29+ cl->bits64 = a;
34− return cl;
30+ return (VAL)cl;
37−VAL idris_castB32Int(VM *vm, VAL a) {
33+VAL idris_b8(VM *vm, VAL a) {
38− return MKINT(GETBITS32(a));
34+ return idris_b8const(vm, GETINT(a));
41−VAL idris_b8const(VM *vm, uint8_t a) {
37+VAL idris_b16(VM *vm, VAL a) {
42− VAL cl = allocate(sizeof(Closure), 0);
38+ return idris_b16const(vm, GETINT(a));
48−VAL idris_b16const(VM *vm, uint16_t a) {
41+VAL idris_b32(VM *vm, VAL a) {
49− VAL cl = allocate(sizeof(Closure), 0);
42+ return idris_b32const(vm, GETINT(a));
50− SETTY(cl, CT_BITS16);
55−VAL idris_b32const(VM *vm, uint32_t a) {
45+VAL idris_b64(VM *vm, VAL a) {
56− VAL cl = allocate(sizeof(Closure), 0);
46+ return idris_b64const(vm, GETINT(a));
57− SETTY(cl, CT_BITS32);
62−VAL idris_b64const(VM *vm, uint64_t a) {
49+VAL idris_castB32Int(VM *vm, VAL a) {
63− VAL cl = allocate(sizeof(Closure), 0);
64− SETTY(cl, CT_BITS64);
66− return cl;
50+ return MKINT(GETBITS32(a));
69VAL idris_b8Plus(VM *vm, VAL a, VAL b) {
53VAL idris_b8Plus(VM *vm, VAL a, VAL b) {
70 uint8_t A = GETBITS8(a);
54 uint8_t A = GETBITS8(a);
71 uint8_t B = GETBITS8(b);
55 uint8_t B = GETBITS8(b);
72− VAL cl = allocate(sizeof(Closure), 0);
56+ return idris_b8const(vm, A + B);
74− cl->info.bits8 = A + B;
78VAL idris_b8Minus(VM *vm, VAL a, VAL b) {
59VAL idris_b8Minus(VM *vm, VAL a, VAL b) {
79 uint8_t A = GETBITS8(a);
60 uint8_t A = GETBITS8(a);
80 uint8_t B = GETBITS8(b);
61 uint8_t B = GETBITS8(b);
81− VAL cl = allocate(sizeof(Closure), 0);
62+ return idris_b8const(vm, A - B);
83− cl->info.bits8 = A - B;
87VAL idris_b8Times(VM *vm, VAL a, VAL b) {
65VAL idris_b8Times(VM *vm, VAL a, VAL b) {
88 uint8_t A = GETBITS8(a);
66 uint8_t A = GETBITS8(a);
89 uint8_t B = GETBITS8(b);
67 uint8_t B = GETBITS8(b);
90− VAL cl = allocate(sizeof(Closure), 0);
68+ return idris_b8const(vm, A * B);
92− cl->info.bits8 = A * B;
96VAL idris_b8UDiv(VM *vm, VAL a, VAL b) {
71VAL idris_b8UDiv(VM *vm, VAL a, VAL b) {
97 uint8_t A = GETBITS8(a);
72 uint8_t A = GETBITS8(a);
98 uint8_t B = GETBITS8(b);
73 uint8_t B = GETBITS8(b);
99− VAL cl = allocate(sizeof(Closure), 0);
74+ return idris_b8const(vm, A / B);
100− SETTY(cl, CT_BITS8);
101− cl->info.bits8 = A / B;
105VAL idris_b8SDiv(VM *vm, VAL a, VAL b) {
77VAL idris_b8SDiv(VM *vm, VAL a, VAL b) {
106− uint8_t A = GETBITS8(a);
78+ int8_t A = GETBITS8(a);
107− uint8_t B = GETBITS8(b);
79+ int8_t B = GETBITS8(b);
108− VAL cl = allocate(sizeof(Closure), 0);
80+ return idris_b8const(vm, A / B);
109− SETTY(cl, CT_BITS8);
110− cl->info.bits8 = (uint8_t) (((int8_t) A) / ((int8_t) B));
114VAL idris_b8URem(VM *vm, VAL a, VAL b) {
83VAL idris_b8URem(VM *vm, VAL a, VAL b) {
115 uint8_t A = GETBITS8(a);
84 uint8_t A = GETBITS8(a);
116 uint8_t B = GETBITS8(b);
85 uint8_t B = GETBITS8(b);
117− VAL cl = allocate(sizeof(Closure), 0);
86+ return idris_b8const(vm, A % B);
118− SETTY(cl, CT_BITS8);
119− cl->info.bits8 = A % B;
123VAL idris_b8SRem(VM *vm, VAL a, VAL b) {
89VAL idris_b8SRem(VM *vm, VAL a, VAL b) {
124− uint8_t A = GETBITS8(a);
90+ int8_t A = GETBITS8(a);
125− uint8_t B = GETBITS8(b);
91+ int8_t B = GETBITS8(b);
126− VAL cl = allocate(sizeof(Closure), 0);
92+ return idris_b8const(vm, A % B);
127− SETTY(cl, CT_BITS8);
128− cl->info.bits8 = (uint8_t) (((int8_t) A) % ((int8_t) B));
132VAL idris_b8Lt(VM *vm, VAL a, VAL b) {
95VAL idris_b8Lt(VM *vm, VAL a, VAL b) {
@@ -151,127 +114,85 @@ VAL idris_b8Gte(VM *vm, VAL a, VAL b) {
152VAL idris_b8Compl(VM *vm, VAL a) {
115VAL idris_b8Compl(VM *vm, VAL a) {
153 uint8_t A = GETBITS8(a);
116 uint8_t A = GETBITS8(a);
154− VAL cl = allocate(sizeof(Closure), 0);
117+ return idris_b8const(vm, ~ A);
155− SETTY(cl, CT_BITS8);
156− cl->info.bits8 = ~ A;
160VAL idris_b8And(VM *vm, VAL a, VAL b) {
120VAL idris_b8And(VM *vm, VAL a, VAL b) {
161 uint8_t A = GETBITS8(a);
121 uint8_t A = GETBITS8(a);
162 uint8_t B = GETBITS8(b);
122 uint8_t B = GETBITS8(b);
163− VAL cl = allocate(sizeof(Closure), 0);
123+ return idris_b8const(vm, A & B);
164− SETTY(cl, CT_BITS8);
165− cl->info.bits8 = A & B;
169VAL idris_b8Or(VM *vm, VAL a, VAL b) {
126VAL idris_b8Or(VM *vm, VAL a, VAL b) {
170 uint8_t A = GETBITS8(a);
127 uint8_t A = GETBITS8(a);
171 uint8_t B = GETBITS8(b);
128 uint8_t B = GETBITS8(b);
172− VAL cl = allocate(sizeof(Closure), 0);
129+ return idris_b8const(vm, A | B);
173− SETTY(cl, CT_BITS8);
174− cl->info.bits8 = A | B;
178VAL idris_b8Xor(VM *vm, VAL a, VAL b) {
132VAL idris_b8Xor(VM *vm, VAL a, VAL b) {
179 uint8_t A = GETBITS8(a);
133 uint8_t A = GETBITS8(a);
180 uint8_t B = GETBITS8(b);
134 uint8_t B = GETBITS8(b);
181− VAL cl = allocate(sizeof(Closure), 0);
135+ return idris_b8const(vm, A ^ B);
182− SETTY(cl, CT_BITS8);
183− cl->info.bits8 = A ^ B;
187VAL idris_b8Shl(VM *vm, VAL a, VAL b) {
138VAL idris_b8Shl(VM *vm, VAL a, VAL b) {
188 uint8_t A = GETBITS8(a);
139 uint8_t A = GETBITS8(a);
189 uint8_t B = GETBITS8(b);
140 uint8_t B = GETBITS8(b);
190− VAL cl = allocate(sizeof(Closure), 0);
141+ return idris_b8const(vm, A << B);
191− SETTY(cl, CT_BITS8);
192− cl->info.bits8 = A << B;
196VAL idris_b8LShr(VM *vm, VAL a, VAL b) {
144VAL idris_b8LShr(VM *vm, VAL a, VAL b) {
197 uint8_t A = GETBITS8(a);
145 uint8_t A = GETBITS8(a);
198 uint8_t B = GETBITS8(b);
146 uint8_t B = GETBITS8(b);
199− VAL cl = allocate(sizeof(Closure), 0);
147+ return idris_b8const(vm, A >> B);
200− SETTY(cl, CT_BITS8);
201− cl->info.bits8 = A >> B;
205VAL idris_b8AShr(VM *vm, VAL a, VAL b) {
150VAL idris_b8AShr(VM *vm, VAL a, VAL b) {
206− uint8_t A = GETBITS8(a);
151+ int8_t A = GETBITS8(a);
207− uint8_t B = GETBITS8(b);
152+ int8_t B = GETBITS8(b);
208− VAL cl = allocate(sizeof(Closure), 0);
153+ return idris_b8const(vm, A >> B);
209− SETTY(cl, CT_BITS8);
210− cl->info.bits8 = (uint8_t) (((int8_t) A) >> ((int8_t) B));
214VAL idris_b16Plus(VM *vm, VAL a, VAL b) {
156VAL idris_b16Plus(VM *vm, VAL a, VAL b) {
215 uint16_t A = GETBITS16(a);
157 uint16_t A = GETBITS16(a);
216 uint16_t B = GETBITS16(b);
158 uint16_t B = GETBITS16(b);
217− VAL cl = allocate(sizeof(Closure), 0);
159+ return idris_b16const(vm, A + B);
218− SETTY(cl, CT_BITS16);
219− cl->info.bits16 = A + B;
223VAL idris_b16Minus(VM *vm, VAL a, VAL b) {
162VAL idris_b16Minus(VM *vm, VAL a, VAL b) {
224 uint16_t A = GETBITS16(a);
163 uint16_t A = GETBITS16(a);
225 uint16_t B = GETBITS16(b);
164 uint16_t B = GETBITS16(b);
226− VAL cl = allocate(sizeof(Closure), 0);
165+ return idris_b16const(vm, A - B);
227− SETTY(cl, CT_BITS16);
228− cl->info.bits16 = A - B;
232VAL idris_b16Times(VM *vm, VAL a, VAL b) {
168VAL idris_b16Times(VM *vm, VAL a, VAL b) {
233 uint16_t A = GETBITS16(a);
169 uint16_t A = GETBITS16(a);
234 uint16_t B = GETBITS16(b);
170 uint16_t B = GETBITS16(b);
235− VAL cl = allocate(sizeof(Closure), 0);
171+ return idris_b16const(vm, A * B);
236− SETTY(cl, CT_BITS16);
237− cl->info.bits16 = A * B;
241VAL idris_b16UDiv(VM *vm, VAL a, VAL b) {
174VAL idris_b16UDiv(VM *vm, VAL a, VAL b) {
242 uint16_t A = GETBITS16(a);
175 uint16_t A = GETBITS16(a);
243 uint16_t B = GETBITS16(b);
176 uint16_t B = GETBITS16(b);
244− VAL cl = allocate(sizeof(Closure), 0);
177+ return idris_b16const(vm, A / B);
245− SETTY(cl, CT_BITS16);
246− cl->info.bits16 = A / B;
250VAL idris_b16SDiv(VM *vm, VAL a, VAL b) {
180VAL idris_b16SDiv(VM *vm, VAL a, VAL b) {
251− uint16_t A = GETBITS16(a);
181+ int16_t A = GETBITS16(a);
252− uint16_t B = GETBITS16(b);
182+ int16_t B = GETBITS16(b);
253− VAL cl = allocate(sizeof(Closure), 0);
183+ return idris_b16const(vm, A / B);
254− SETTY(cl, CT_BITS16);
255− cl->info.bits16 = (uint16_t) (((int16_t) A) / ((int16_t) B));
259VAL idris_b16URem(VM *vm, VAL a, VAL b) {
186VAL idris_b16URem(VM *vm, VAL a, VAL b) {
260 uint16_t A = GETBITS16(a);
187 uint16_t A = GETBITS16(a);
261 uint16_t B = GETBITS16(b);
188 uint16_t B = GETBITS16(b);
262− VAL cl = allocate(sizeof(Closure), 0);
189+ return idris_b16const(vm, A % B);
263− SETTY(cl, CT_BITS16);
264− cl->info.bits16 = A % B;
268VAL idris_b16SRem(VM *vm, VAL a, VAL b) {
192VAL idris_b16SRem(VM *vm, VAL a, VAL b) {
269− uint16_t A = GETBITS16(a);
193+ int16_t A = GETBITS16(a);
270− uint16_t B = GETBITS16(b);
194+ int16_t B = GETBITS16(b);
271− VAL cl = allocate(sizeof(Closure), 0);
195+ return idris_b16const(vm, A % B);
272− SETTY(cl, CT_BITS16);
273− cl->info.bits16 = (uint16_t) (((int16_t) A) % ((int16_t) B));
277VAL idris_b16Lt(VM *vm, VAL a, VAL b) {
198VAL idris_b16Lt(VM *vm, VAL a, VAL b) {
@@ -296,127 +217,85 @@ VAL idris_b16Gte(VM *vm, VAL a, VAL b) {
297VAL idris_b16Compl(VM *vm, VAL a) {
218VAL idris_b16Compl(VM *vm, VAL a) {
298 uint16_t A = GETBITS16(a);
219 uint16_t A = GETBITS16(a);
299− VAL cl = allocate(sizeof(Closure), 0);
220+ return idris_b16const(vm, ~ A);
300− SETTY(cl, CT_BITS16);
301− cl->info.bits16 = ~ A;
305VAL idris_b16And(VM *vm, VAL a, VAL b) {
223VAL idris_b16And(VM *vm, VAL a, VAL b) {
306 uint16_t A = GETBITS16(a);
224 uint16_t A = GETBITS16(a);
307 uint16_t B = GETBITS16(b);
225 uint16_t B = GETBITS16(b);
308− VAL cl = allocate(sizeof(Closure), 0);
226+ return idris_b16const(vm, A & B);
309− SETTY(cl, CT_BITS16);
310− cl->info.bits16 = A & B;
314VAL idris_b16Or(VM *vm, VAL a, VAL b) {
229VAL idris_b16Or(VM *vm, VAL a, VAL b) {
315 uint16_t A = GETBITS16(a);
230 uint16_t A = GETBITS16(a);
316 uint16_t B = GETBITS16(b);
231 uint16_t B = GETBITS16(b);
317− VAL cl = allocate(sizeof(Closure), 0);
232+ return idris_b16const(vm, A | B);
318− SETTY(cl, CT_BITS16);
319− cl->info.bits16 = A | B;
323VAL idris_b16Xor(VM *vm, VAL a, VAL b) {
235VAL idris_b16Xor(VM *vm, VAL a, VAL b) {
324 uint16_t A = GETBITS16(a);
236 uint16_t A = GETBITS16(a);
325 uint16_t B = GETBITS16(b);
237 uint16_t B = GETBITS16(b);
326− VAL cl = allocate(sizeof(Closure), 0);
238+ return idris_b16const(vm, A ^ B);
327− SETTY(cl, CT_BITS16);
328− cl->info.bits16 = A ^ B;
332VAL idris_b16Shl(VM *vm, VAL a, VAL b) {
241VAL idris_b16Shl(VM *vm, VAL a, VAL b) {
333 uint16_t A = GETBITS16(a);
242 uint16_t A = GETBITS16(a);
334 uint16_t B = GETBITS16(b);
243 uint16_t B = GETBITS16(b);
335− VAL cl = allocate(sizeof(Closure), 0);
244+ return idris_b16const(vm, A << B);
336− SETTY(cl, CT_BITS16);
337− cl->info.bits16 = A << B;
341VAL idris_b16LShr(VM *vm, VAL a, VAL b) {
247VAL idris_b16LShr(VM *vm, VAL a, VAL b) {
342 uint16_t A = GETBITS16(a);
248 uint16_t A = GETBITS16(a);
343 uint16_t B = GETBITS16(b);
249 uint16_t B = GETBITS16(b);
344− VAL cl = allocate(sizeof(Closure), 0);
250+ return idris_b16const(vm, A >> B);
345− SETTY(cl, CT_BITS16);
346− cl->info.bits16 = A >> B;
350VAL idris_b16AShr(VM *vm, VAL a, VAL b) {
253VAL idris_b16AShr(VM *vm, VAL a, VAL b) {
351− uint16_t A = GETBITS16(a);
254+ int16_t A = GETBITS16(a);
352− uint16_t B = GETBITS16(b);
255+ int16_t B = GETBITS16(b);
353− VAL cl = allocate(sizeof(Closure), 0);
256+ return idris_b16const(vm, A >> B);
354− SETTY(cl, CT_BITS16);
355− cl->info.bits16 = (uint16_t) (((int16_t) A) >> ((int16_t) B));
359VAL idris_b32Plus(VM *vm, VAL a, VAL b) {
259VAL idris_b32Plus(VM *vm, VAL a, VAL b) {
360 uint32_t A = GETBITS32(a);
260 uint32_t A = GETBITS32(a);
361 uint32_t B = GETBITS32(b);
261 uint32_t B = GETBITS32(b);
362− VAL cl = allocate(sizeof(Closure), 0);
262+ return idris_b32const(vm, A + B);
363− SETTY(cl, CT_BITS32);
364− cl->info.bits32 = A + B;
368VAL idris_b32Minus(VM *vm, VAL a, VAL b) {
265VAL idris_b32Minus(VM *vm, VAL a, VAL b) {
369 uint32_t A = GETBITS32(a);
266 uint32_t A = GETBITS32(a);
370 uint32_t B = GETBITS32(b);
267 uint32_t B = GETBITS32(b);
371− VAL cl = allocate(sizeof(Closure), 0);
268+ return idris_b32const(vm, A - B);
372− SETTY(cl, CT_BITS32);
373− cl->info.bits32 = A - B;
377VAL idris_b32Times(VM *vm, VAL a, VAL b) {
271VAL idris_b32Times(VM *vm, VAL a, VAL b) {
378 uint32_t A = GETBITS32(a);
272 uint32_t A = GETBITS32(a);
379 uint32_t B = GETBITS32(b);
273 uint32_t B = GETBITS32(b);
380− VAL cl = allocate(sizeof(Closure), 0);
274+ return idris_b32const(vm, A * B);
381− SETTY(cl, CT_BITS32);
382− cl->info.bits32 = A * B;
386VAL idris_b32UDiv(VM *vm, VAL a, VAL b) {
277VAL idris_b32UDiv(VM *vm, VAL a, VAL b) {
387 uint32_t A = GETBITS32(a);
278 uint32_t A = GETBITS32(a);
388 uint32_t B = GETBITS32(b);
279 uint32_t B = GETBITS32(b);
389− VAL cl = allocate(sizeof(Closure), 0);
280+ return idris_b32const(vm, A / B);
390− SETTY(cl, CT_BITS32);
391− cl->info.bits32 = A / B;
395VAL idris_b32SDiv(VM *vm, VAL a, VAL b) {
283VAL idris_b32SDiv(VM *vm, VAL a, VAL b) {
396− uint32_t A = GETBITS32(a);
284+ int32_t A = GETBITS32(a);
397− uint32_t B = GETBITS32(b);
285+ int32_t B = GETBITS32(b);
398− VAL cl = allocate(sizeof(Closure), 0);
286+ return idris_b32const(vm, A / B);
399− SETTY(cl, CT_BITS32);
400− cl->info.bits32 = (uint32_t) (((int32_t) A) / ((int32_t) B));
404VAL idris_b32URem(VM *vm, VAL a, VAL b) {
289VAL idris_b32URem(VM *vm, VAL a, VAL b) {
405 uint32_t A = GETBITS32(a);
290 uint32_t A = GETBITS32(a);
406 uint32_t B = GETBITS32(b);
291 uint32_t B = GETBITS32(b);
407− VAL cl = allocate(sizeof(Closure), 0);
292+ return idris_b32const(vm, A % B);
408− SETTY(cl, CT_BITS32);
409− cl->info.bits32 = A % B;
413VAL idris_b32SRem(VM *vm, VAL a, VAL b) {
295VAL idris_b32SRem(VM *vm, VAL a, VAL b) {
414− uint32_t A = GETBITS32(a);
296+ int32_t A = GETBITS32(a);
415− uint32_t B = GETBITS32(b);
297+ int32_t B = GETBITS32(b);
416− VAL cl = allocate(sizeof(Closure), 0);
298+ return idris_b32const(vm, A % B);
417− SETTY(cl, CT_BITS32);
418− cl->info.bits32 = (uint32_t) (((int32_t) A) % ((int32_t) B));
422VAL idris_b32Lt(VM *vm, VAL a, VAL b) {
301VAL idris_b32Lt(VM *vm, VAL a, VAL b) {
@@ -441,353 +320,246 @@ VAL idris_b32Gte(VM *vm, VAL a, VAL b) {
442VAL idris_b32Compl(VM *vm, VAL a) {
321VAL idris_b32Compl(VM *vm, VAL a) {
443 uint32_t A = GETBITS32(a);
322 uint32_t A = GETBITS32(a);
444− VAL cl = allocate(sizeof(Closure), 0);
323+ return idris_b32const(vm, ~ A);
445− SETTY(cl, CT_BITS32);
446− cl->info.bits32 = ~ A;
450VAL idris_b32And(VM *vm, VAL a, VAL b) {
326VAL idris_b32And(VM *vm, VAL a, VAL b) {
451 uint32_t A = GETBITS32(a);
327 uint32_t A = GETBITS32(a);
452 uint32_t B = GETBITS32(b);
328 uint32_t B = GETBITS32(b);
453− VAL cl = allocate(sizeof(Closure), 0);
329+ return idris_b32const(vm, A & B);
454− SETTY(cl, CT_BITS32);
455− cl->info.bits32 = A & B;
459VAL idris_b32Or(VM *vm, VAL a, VAL b) {
332VAL idris_b32Or(VM *vm, VAL a, VAL b) {
460 uint32_t A = GETBITS32(a);
333 uint32_t A = GETBITS32(a);
461 uint32_t B = GETBITS32(b);
334 uint32_t B = GETBITS32(b);
462− VAL cl = allocate(sizeof(Closure), 0);
335+ return idris_b32const(vm, A | B);
463− SETTY(cl, CT_BITS32);
464− cl->info.bits32 = A | B;
468VAL idris_b32Xor(VM *vm, VAL a, VAL b) {
338VAL idris_b32Xor(VM *vm, VAL a, VAL b) {
469 uint32_t A = GETBITS32(a);
339 uint32_t A = GETBITS32(a);
470 uint32_t B = GETBITS32(b);
340 uint32_t B = GETBITS32(b);
471− VAL cl = allocate(sizeof(Closure), 0);
341+ return idris_b32const(vm, A ^ B);
472− SETTY(cl, CT_BITS32);
473− cl->info.bits32 = A ^ B;
477VAL idris_b32Shl(VM *vm, VAL a, VAL b) {
344VAL idris_b32Shl(VM *vm, VAL a, VAL b) {
478 uint32_t A = GETBITS32(a);
345 uint32_t A = GETBITS32(a);
479 uint32_t B = GETBITS32(b);
346 uint32_t B = GETBITS32(b);
480− VAL cl = allocate(sizeof(Closure), 0);
347+ return idris_b32const(vm, A << B);
481− SETTY(cl, CT_BITS32);
482− cl->info.bits32 = A << B;
486VAL idris_b32LShr(VM *vm, VAL a, VAL b) {
350VAL idris_b32LShr(VM *vm, VAL a, VAL b) {
487 uint32_t A = GETBITS32(a);
351 uint32_t A = GETBITS32(a);
488 uint32_t B = GETBITS32(b);
352 uint32_t B = GETBITS32(b);
489− VAL cl = allocate(sizeof(Closure), 0);
353+ return idris_b32const(vm, A >> B);
490− SETTY(cl, CT_BITS32);
491− cl->info.bits32 = A >> B;
495VAL idris_b32AShr(VM *vm, VAL a, VAL b) {
356VAL idris_b32AShr(VM *vm, VAL a, VAL b) {
496− uint32_t A = GETBITS32(a);
357+ int32_t A = GETBITS32(a);
497− uint32_t B = GETBITS32(b);
358+ int32_t B = GETBITS32(b);
498− VAL cl = allocate(sizeof(Closure), 0);
359+ return idris_b32const(vm, A >> B);
499− SETTY(cl, CT_BITS32);
500− cl->info.bits32 = (uint32_t) (((int32_t)A) >> ((int32_t)B));
504VAL idris_b64Plus(VM *vm, VAL a, VAL b) {
362VAL idris_b64Plus(VM *vm, VAL a, VAL b) {
505 uint64_t A = GETBITS64(a);
363 uint64_t A = GETBITS64(a);
506 uint64_t B = GETBITS64(b);
364 uint64_t B = GETBITS64(b);
507− VAL cl = allocate(sizeof(Closure), 0);
365+ return idris_b64const(vm, A + B);
508− SETTY(cl, CT_BITS64);
509− cl->info.bits64 = A + B;
513VAL idris_b64Minus(VM *vm, VAL a, VAL b) {
368VAL idris_b64Minus(VM *vm, VAL a, VAL b) {
514 uint64_t A = GETBITS64(a);
369 uint64_t A = GETBITS64(a);
515 uint64_t B = GETBITS64(b);
370 uint64_t B = GETBITS64(b);
516− VAL cl = allocate(sizeof(Closure), 0);
371+ return idris_b64const(vm, A - B);
517− SETTY(cl, CT_BITS64);
518− cl->info.bits64 = A - B;
522VAL idris_b64Times(VM *vm, VAL a, VAL b) {
374VAL idris_b64Times(VM *vm, VAL a, VAL b) {
523 uint64_t A = GETBITS64(a);
375 uint64_t A = GETBITS64(a);
524 uint64_t B = GETBITS64(b);
376 uint64_t B = GETBITS64(b);
525− VAL cl = allocate(sizeof(Closure), 0);
377+ return idris_b64const(vm, A * B);
526− SETTY(cl, CT_BITS64);
527− cl->info.bits64 = A * B;
531VAL idris_b64UDiv(VM *vm, VAL a, VAL b) {
380VAL idris_b64UDiv(VM *vm, VAL a, VAL b) {
532 uint64_t A = GETBITS64(a);
381 uint64_t A = GETBITS64(a);
533 uint64_t B = GETBITS64(b);
382 uint64_t B = GETBITS64(b);
534− VAL cl = allocate(sizeof(Closure), 0);
383+ return idris_b64const(vm, A / B);
535− SETTY(cl, CT_BITS64);
536− cl->info.bits64 = A / B;
540VAL idris_b64SDiv(VM *vm, VAL a, VAL b) {
386VAL idris_b64SDiv(VM *vm, VAL a, VAL b) {
541− uint64_t A = GETBITS64(a);
387+ int64_t A = GETBITS64(a);
542− uint64_t B = GETBITS64(b);
388+ int64_t B = GETBITS64(b);
543− VAL cl = allocate(sizeof(Closure), 0);
389+ return idris_b64const(vm, A / B);
544− SETTY(cl, CT_BITS64);
545− cl->info.bits64 = (uint64_t) (((int64_t) A) / ((int64_t) B));
549VAL idris_b64URem(VM *vm, VAL a, VAL b) {
392VAL idris_b64URem(VM *vm, VAL a, VAL b) {
550 uint64_t A = GETBITS64(a);
393 uint64_t A = GETBITS64(a);
551 uint64_t B = GETBITS64(b);
394 uint64_t B = GETBITS64(b);
552− VAL cl = allocate(sizeof(Closure), 0);
395+ return idris_b64const(vm, A % B);
553− SETTY(cl, CT_BITS64);
554− cl->info.bits64 = A % B;
558VAL idris_b64SRem(VM *vm, VAL a, VAL b) {
398VAL idris_b64SRem(VM *vm, VAL a, VAL b) {
559− uint64_t A = GETBITS64(a);
399+ int64_t A = GETBITS64(a);
560− uint64_t B = GETBITS64(b);
400+ int64_t B = GETBITS64(b);
561− VAL cl = allocate(sizeof(Closure), 0);
401+ return idris_b64const(vm, A % B);
562− SETTY(cl, CT_BITS64);
563− cl->info.bits64 = (uint64_t) (((int64_t) A) % ((int64_t) B));
567VAL idris_b64Lt(VM *vm, VAL a, VAL b) {
404VAL idris_b64Lt(VM *vm, VAL a, VAL b) {
405+ uint64_t A = GETBITS64(a);
406+ uint64_t B = GETBITS64(b);
568− return MKINT((i_int) (a->info.bits64 < b->info.bits64));
407+ return MKINT((i_int) (A < B));
571VAL idris_b64Gt(VM *vm, VAL a, VAL b) {
410VAL idris_b64Gt(VM *vm, VAL a, VAL b) {
411+ uint64_t A = GETBITS64(a);
412+ uint64_t B = GETBITS64(b);
572− return MKINT((i_int) (a->info.bits64 > b->info.bits64));
413+ return MKINT((i_int) (A > B));
575VAL idris_b64Eq(VM *vm, VAL a, VAL b) {
416VAL idris_b64Eq(VM *vm, VAL a, VAL b) {
417+ uint64_t A = GETBITS64(a);
418+ uint64_t B = GETBITS64(b);
576− return MKINT((i_int) (a->info.bits64 == b->info.bits64));
419+ return MKINT((i_int) (A == B));
579VAL idris_b64Lte(VM *vm, VAL a, VAL b) {
422VAL idris_b64Lte(VM *vm, VAL a, VAL b) {
423+ uint64_t A = GETBITS64(a);
424+ uint64_t B = GETBITS64(b);
580− return MKINT((i_int) (a->info.bits64 <= b->info.bits64));
425+ return MKINT((i_int) (A <= B));
583VAL idris_b64Gte(VM *vm, VAL a, VAL b) {
428VAL idris_b64Gte(VM *vm, VAL a, VAL b) {
429+ uint64_t A = GETBITS64(a);
430+ uint64_t B = GETBITS64(b);
584− return MKINT((i_int) (a->info.bits64 >= b->info.bits64));
431+ return MKINT((i_int) (A >= B));
587VAL idris_b64Compl(VM *vm, VAL a) {
434VAL idris_b64Compl(VM *vm, VAL a) {
588 uint64_t A = GETBITS64(a);
435 uint64_t A = GETBITS64(a);
589− VAL cl = allocate(sizeof(Closure), 0);
436+ return idris_b64const(vm, ~ A);
590− SETTY(cl, CT_BITS64);
591− cl->info.bits64 = ~ A;
595VAL idris_b64And(VM *vm, VAL a, VAL b) {
439VAL idris_b64And(VM *vm, VAL a, VAL b) {
596 uint64_t A = GETBITS64(a);
440 uint64_t A = GETBITS64(a);
597 uint64_t B = GETBITS64(b);
441 uint64_t B = GETBITS64(b);
598− VAL cl = allocate(sizeof(Closure), 0);
442+ return idris_b64const(vm, A & B);
599− SETTY(cl, CT_BITS64);
600− cl->info.bits64 = A & B;
604VAL idris_b64Or(VM *vm, VAL a, VAL b) {
445VAL idris_b64Or(VM *vm, VAL a, VAL b) {
605 uint64_t A = GETBITS64(a);
446 uint64_t A = GETBITS64(a);
606 uint64_t B = GETBITS64(b);
447 uint64_t B = GETBITS64(b);
607− VAL cl = allocate(sizeof(Closure), 0);
448+ return idris_b64const(vm, A | B);
608− SETTY(cl, CT_BITS64);
609− cl->info.bits64 = A | B;
613VAL idris_b64Xor(VM *vm, VAL a, VAL b) {
451VAL idris_b64Xor(VM *vm, VAL a, VAL b) {
614 uint64_t A = GETBITS64(a);
452 uint64_t A = GETBITS64(a);
615 uint64_t B = GETBITS64(b);
453 uint64_t B = GETBITS64(b);
616− VAL cl = allocate(sizeof(Closure), 0);
454+ return idris_b64const(vm, A ^ B);
617− SETTY(cl, CT_BITS64);
618− cl->info.bits64 = A ^ B;
622VAL idris_b64Shl(VM *vm, VAL a, VAL b) {
457VAL idris_b64Shl(VM *vm, VAL a, VAL b) {
623 uint64_t A = GETBITS64(a);
458 uint64_t A = GETBITS64(a);
624 uint64_t B = GETBITS64(b);
459 uint64_t B = GETBITS64(b);
625− VAL cl = allocate(sizeof(Closure), 0);
460+ return idris_b64const(vm, A << B);
626− SETTY(cl, CT_BITS64);
627− cl->info.bits64 = A << B;
631VAL idris_b64LShr(VM *vm, VAL a, VAL b) {
463VAL idris_b64LShr(VM *vm, VAL a, VAL b) {
632 uint64_t A = GETBITS64(a);
464 uint64_t A = GETBITS64(a);
633 uint64_t B = GETBITS64(b);
465 uint64_t B = GETBITS64(b);
634− VAL cl = allocate(sizeof(Closure), 0);
466+ return idris_b64const(vm, A >> B);
635− SETTY(cl, CT_BITS64);
636− cl->info.bits64 = A >> B;
640VAL idris_b64AShr(VM *vm, VAL a, VAL b) {
469VAL idris_b64AShr(VM *vm, VAL a, VAL b) {
641− uint64_t A = GETBITS64(a);
470+ int64_t A = GETBITS64(a);
642− uint64_t B = GETBITS64(b);
471+ int64_t B = GETBITS64(b);
643− VAL cl = allocate(sizeof(Closure), 0);
472+ return idris_b64const(vm, A >> B);
644− SETTY(cl, CT_BITS64);
645− cl->info.bits64 = (uint64_t) (((int64_t) A) >> ((int64_t) B));
649VAL idris_b8Z16(VM *vm, VAL a) {
475VAL idris_b8Z16(VM *vm, VAL a) {
650 uint8_t A = GETBITS8(a);
476 uint8_t A = GETBITS8(a);
651− VAL cl = allocate(sizeof(Closure), 0);
477+ return idris_b16const(vm, A);
652− SETTY(cl, CT_BITS16);
653− cl->info.bits16 = (uint16_t) A;
657VAL idris_b8Z32(VM *vm, VAL a) {
480VAL idris_b8Z32(VM *vm, VAL a) {
658 uint8_t A = GETBITS8(a);
481 uint8_t A = GETBITS8(a);
659− VAL cl = allocate(sizeof(Closure), 0);
482+ return idris_b32const(vm, A);
660− SETTY(cl, CT_BITS32);
661− cl->info.bits32 = (uint32_t) A;
665VAL idris_b8Z64(VM *vm, VAL a) {
485VAL idris_b8Z64(VM *vm, VAL a) {
666 uint8_t A = GETBITS8(a);
486 uint8_t A = GETBITS8(a);
667− VAL cl = allocate(sizeof(Closure), 0);
487+ return idris_b64const(vm, A);
668− SETTY(cl, CT_BITS64);
669− cl->info.bits64 = (uint64_t) A;
673VAL idris_b8S16(VM *vm, VAL a) {
490VAL idris_b8S16(VM *vm, VAL a) {
674− uint8_t A = GETBITS8(a);
491+ int8_t A = GETBITS8(a);
675− VAL cl = allocate(sizeof(Closure), 0);
492+ return idris_b16const(vm, (int16_t) A);
676− SETTY(cl, CT_BITS16);
677− cl->info.bits16 = (uint16_t) (int16_t) (int8_t) A;
681VAL idris_b8S32(VM *vm, VAL a) {
495VAL idris_b8S32(VM *vm, VAL a) {
682− uint8_t A = GETBITS8(a);
496+ int8_t A = GETBITS8(a);
683− VAL cl = allocate(sizeof(Closure), 0);
497+ return idris_b32const(vm, (int32_t) A);
684− SETTY(cl, CT_BITS32);
685− cl->info.bits32 = (uint32_t) (int32_t) (int8_t) A;
689VAL idris_b8S64(VM *vm, VAL a) {
500VAL idris_b8S64(VM *vm, VAL a) {
690− uint8_t A = GETBITS8(a);
501+ int8_t A = GETBITS8(a);
691− VAL cl = allocate(sizeof(Closure), 0);
502+ return idris_b64const(vm, (int64_t) A);
692− SETTY(cl, CT_BITS64);
693− cl->info.bits64 = (uint64_t) (int64_t) (int8_t) A;
697VAL idris_b16Z32(VM *vm, VAL a) {
505VAL idris_b16Z32(VM *vm, VAL a) {
698 uint16_t A = GETBITS16(a);
506 uint16_t A = GETBITS16(a);
699− VAL cl = allocate(sizeof(Closure), 0);
507+ return idris_b32const(vm, (uint32_t) A);
700− SETTY(cl, CT_BITS32);
701− cl->info.bits32 = (uint32_t) A;
705VAL idris_b16Z64(VM *vm, VAL a) {
510VAL idris_b16Z64(VM *vm, VAL a) {
706 uint16_t A = GETBITS16(a);
511 uint16_t A = GETBITS16(a);
707− VAL cl = allocate(sizeof(Closure), 0);
512+ return idris_b64const(vm, (uint64_t) A);
708− SETTY(cl, CT_BITS64);
709− cl->info.bits64 = (uint64_t) A;
713VAL idris_b16S32(VM *vm, VAL a) {
515VAL idris_b16S32(VM *vm, VAL a) {
714− uint16_t A = GETBITS16(a);
516+ int16_t A = GETBITS16(a);
715− VAL cl = allocate(sizeof(Closure), 0);
517+ return idris_b32const(vm, (int32_t) A);
716− SETTY(cl, CT_BITS32);
717− cl->info.bits32 = (uint32_t) (int32_t) (int16_t) A;
721VAL idris_b16S64(VM *vm, VAL a) {
520VAL idris_b16S64(VM *vm, VAL a) {
722− uint16_t A = GETBITS16(a);
521+ int16_t A = GETBITS16(a);
723− VAL cl = allocate(sizeof(Closure), 0);
522+ return idris_b64const(vm, (int64_t) A);
724− SETTY(cl, CT_BITS64);
725− cl->info.bits64 = (uint64_t) (int64_t) (int16_t) A;
729VAL idris_b16T8(VM *vm, VAL a) {
525VAL idris_b16T8(VM *vm, VAL a) {
730 uint16_t A = GETBITS16(a);
526 uint16_t A = GETBITS16(a);
731− VAL cl = allocate(sizeof(Closure), 0);
527+ return idris_b8const(vm, (uint8_t) A);
732− SETTY(cl, CT_BITS8);
733− cl->info.bits8 = (uint8_t) A;
737VAL idris_b32Z64(VM *vm, VAL a) {
530VAL idris_b32Z64(VM *vm, VAL a) {
738 uint32_t A = GETBITS32(a);
531 uint32_t A = GETBITS32(a);
739− VAL cl = allocate(sizeof(Closure), 0);
532+ return idris_b64const(vm, (uint64_t) A);
740− SETTY(cl, CT_BITS64);
741− cl->info.bits64 = (uint64_t) A;
745VAL idris_b32S64(VM *vm, VAL a) {
535VAL idris_b32S64(VM *vm, VAL a) {
746− uint32_t A = GETBITS32(a);
536+ int32_t A = GETBITS32(a);
747− VAL cl = allocate(sizeof(Closure), 0);
537+ return idris_b64const(vm, (int64_t) A);
748− SETTY(cl, CT_BITS64);
749− cl->info.bits64 = (uint64_t) (int64_t) (int32_t) A;
753VAL idris_b32T8(VM *vm, VAL a) {
540VAL idris_b32T8(VM *vm, VAL a) {
754 uint32_t A = GETBITS32(a);
541 uint32_t A = GETBITS32(a);
755− VAL cl = allocate(sizeof(Closure), 0);
542+ return idris_b8const(vm, (uint8_t) A);
756− SETTY(cl, CT_BITS8);
757− cl->info.bits8 = (uint8_t) A;
761VAL idris_b32T16(VM *vm, VAL a) {
545VAL idris_b32T16(VM *vm, VAL a) {
762 uint32_t A = GETBITS32(a);
546 uint32_t A = GETBITS32(a);
763− VAL cl = allocate(sizeof(Closure), 0);
547+ return idris_b16const(vm, (uint16_t) A);
764− SETTY(cl, CT_BITS16);
765− cl->info.bits16 = (uint16_t) A;
769VAL idris_b64T8(VM *vm, VAL a) {
550VAL idris_b64T8(VM *vm, VAL a) {
770 uint64_t A = GETBITS64(a);
551 uint64_t A = GETBITS64(a);
771− VAL cl = allocate(sizeof(Closure), 0);
552+ return idris_b8const(vm, (uint8_t) A);
772− SETTY(cl, CT_BITS8);
773− cl->info.bits8 = (uint8_t) A;
777VAL idris_b64T16(VM *vm, VAL a) {
555VAL idris_b64T16(VM *vm, VAL a) {
778 uint64_t A = GETBITS64(a);
556 uint64_t A = GETBITS64(a);
779− VAL cl = allocate(sizeof(Closure), 0);
557+ return idris_b16const(vm, (uint16_t) A);
780− SETTY(cl, CT_BITS16);
781− cl->info.bits16 = (uint16_t) A;
785VAL idris_b64T32(VM *vm, VAL a) {
560VAL idris_b64T32(VM *vm, VAL a) {
786 uint64_t A = GETBITS64(a);
561 uint64_t A = GETBITS64(a);
787− VAL cl = allocate(sizeof(Closure), 0);
562+ return idris_b32const(vm, (uint32_t) A);
788− SETTY(cl, CT_BITS32);
789− cl->info.bits32 = (uint32_t) A;
793VAL idris_peekB8(VM* vm, VAL ptr, VAL offset) {
565VAL idris_peekB8(VM* vm, VAL ptr, VAL offset) {