on master help sign in
Fixed the C codegen's bitfield comparison primitives
602a3d9Benjamin Saunders
rts/idris_bitstring.c+20−80
@@ -110,38 +110,23 @@ VAL idris_b8SRem(VM *vm, VAL a, VAL b) {
110}
110}
111
111
112VAL idris_b8Lt(VM *vm, VAL a, VAL b) {
112VAL idris_b8Lt(VM *vm, VAL a, VAL b) {
113− VAL cl = allocate(vm, sizeof(Closure), 0);
114− SETTY(cl, BITS8);
115− cl->info.bits8 = a->info.bits8 < b->info.bits8;
113+ return MKINT(a->info.bits8 < b->info.bits8);
116− return cl;
117}
114}
118
115
119VAL idris_b8Gt(VM *vm, VAL a, VAL b) {
116VAL idris_b8Gt(VM *vm, VAL a, VAL b) {
120− VAL cl = allocate(vm, sizeof(Closure), 0);
121− SETTY(cl, BITS8);
122− cl->info.bits8 = a->info.bits8 > b->info.bits8;
117+ return MKINT(a->info.bits8 > b->info.bits8);
123− return cl;
124}
118}
125
119
126VAL idris_b8Eq(VM *vm, VAL a, VAL b) {
120VAL idris_b8Eq(VM *vm, VAL a, VAL b) {
127− VAL cl = allocate(vm, sizeof(Closure), 0);
128− SETTY(cl, BITS8);
129− cl->info.bits8 = a->info.bits8 == b->info.bits8;
121+ return MKINT(a->info.bits8 == b->info.bits8);
130− return cl;
131}
122}
132
123
133VAL idris_b8Lte(VM *vm, VAL a, VAL b) {
124VAL idris_b8Lte(VM *vm, VAL a, VAL b) {
134− VAL cl = allocate(vm, sizeof(Closure), 0);
135− SETTY(cl, BITS8);
136− cl->info.bits8 = a->info.bits8 <= b->info.bits8;
125+ return MKINT(a->info.bits8 <= b->info.bits8);
137− return cl;
138}
126}
139
127
140VAL idris_b8Gte(VM *vm, VAL a, VAL b) {
128VAL idris_b8Gte(VM *vm, VAL a, VAL b) {
141− VAL cl = allocate(vm, sizeof(Closure), 0);
142− SETTY(cl, BITS8);
143− cl->info.bits8 = a->info.bits8 >= b->info.bits8;
129+ return MKINT(a->info.bits8 >= b->info.bits8);
144− return cl;
145}
130}
146
131
147VAL idris_b8Compl(VM *vm, VAL a) {
132VAL idris_b8Compl(VM *vm, VAL a) {
@@ -245,38 +230,23 @@ VAL idris_b16SRem(VM *vm, VAL a, VAL b) {
245}
230}
246
231
247VAL idris_b16Lt(VM *vm, VAL a, VAL b) {
232VAL idris_b16Lt(VM *vm, VAL a, VAL b) {
248− VAL cl = allocate(vm, sizeof(Closure), 0);
249− SETTY(cl, BITS16);
250− cl->info.bits16 = a->info.bits16 < b->info.bits16;
233+ return MKINT(a->info.bits16 < b->info.bits16);
251− return cl;
252}
234}
253
235
254VAL idris_b16Gt(VM *vm, VAL a, VAL b) {
236VAL idris_b16Gt(VM *vm, VAL a, VAL b) {
255− VAL cl = allocate(vm, sizeof(Closure), 0);
256− SETTY(cl, BITS16);
257− cl->info.bits16 = a->info.bits16 > b->info.bits16;
237+ return MKINT(a->info.bits16 > b->info.bits16);
258− return cl;
259}
238}
260
239
261VAL idris_b16Eq(VM *vm, VAL a, VAL b) {
240VAL idris_b16Eq(VM *vm, VAL a, VAL b) {
262− VAL cl = allocate(vm, sizeof(Closure), 0);
263− SETTY(cl, BITS16);
264− cl->info.bits16 = a->info.bits16 == b->info.bits16;
241+ return MKINT(a->info.bits16 == b->info.bits16);
265− return cl;
266}
242}
267
243
268VAL idris_b16Lte(VM *vm, VAL a, VAL b) {
244VAL idris_b16Lte(VM *vm, VAL a, VAL b) {
269− VAL cl = allocate(vm, sizeof(Closure), 0);
270− SETTY(cl, BITS16);
271− cl->info.bits16 = a->info.bits16 <= b->info.bits16;
245+ return MKINT(a->info.bits16 <= b->info.bits16);
272− return cl;
273}
246}
274
247
275VAL idris_b16Gte(VM *vm, VAL a, VAL b) {
248VAL idris_b16Gte(VM *vm, VAL a, VAL b) {
276− VAL cl = allocate(vm, sizeof(Closure), 0);
277− SETTY(cl, BITS16);
278− cl->info.bits16 = a->info.bits16 >= b->info.bits16;
249+ return MKINT(a->info.bits16 >= b->info.bits16);
279− return cl;
280}
250}
281
251
282VAL idris_b16Compl(VM *vm, VAL a) {
252VAL idris_b16Compl(VM *vm, VAL a) {
@@ -380,38 +350,23 @@ VAL idris_b32SRem(VM *vm, VAL a, VAL b) {
380}
350}
381
351
382VAL idris_b32Lt(VM *vm, VAL a, VAL b) {
352VAL idris_b32Lt(VM *vm, VAL a, VAL b) {
383− VAL cl = allocate(vm, sizeof(Closure), 0);
384− SETTY(cl, BITS32);
385− cl->info.bits32 = a->info.bits32 < b->info.bits32;
353+ return MKINT(a->info.bits32 < b->info.bits32);
386− return cl;
387}
354}
388
355
389VAL idris_b32Gt(VM *vm, VAL a, VAL b) {
356VAL idris_b32Gt(VM *vm, VAL a, VAL b) {
390− VAL cl = allocate(vm, sizeof(Closure), 0);
391− SETTY(cl, BITS32);
392− cl->info.bits32 = a->info.bits32 > b->info.bits32;
357+ return MKINT(a->info.bits32 > b->info.bits32);
393− return cl;
394}
358}
395
359
396VAL idris_b32Eq(VM *vm, VAL a, VAL b) {
360VAL idris_b32Eq(VM *vm, VAL a, VAL b) {
397− VAL cl = allocate(vm, sizeof(Closure), 0);
398− SETTY(cl, BITS32);
399− cl->info.bits32 = a->info.bits32 == b->info.bits32;
361+ return MKINT(a->info.bits32 == b->info.bits32);
400− return cl;
401}
362}
402
363
403VAL idris_b32Lte(VM *vm, VAL a, VAL b) {
364VAL idris_b32Lte(VM *vm, VAL a, VAL b) {
404− VAL cl = allocate(vm, sizeof(Closure), 0);
405− SETTY(cl, BITS32);
406− cl->info.bits32 = a->info.bits32 <= b->info.bits32;
365+ return MKINT(a->info.bits32 <= b->info.bits32);
407− return cl;
408}
366}
409
367
410VAL idris_b32Gte(VM *vm, VAL a, VAL b) {
368VAL idris_b32Gte(VM *vm, VAL a, VAL b) {
411− VAL cl = allocate(vm, sizeof(Closure), 0);
412− SETTY(cl, BITS32);
413− cl->info.bits32 = a->info.bits32 >= b->info.bits32;
369+ return MKINT(a->info.bits32 >= b->info.bits32);
414− return cl;
415}
370}
416
371
417VAL idris_b32Compl(VM *vm, VAL a) {
372VAL idris_b32Compl(VM *vm, VAL a) {
@@ -515,38 +470,23 @@ VAL idris_b64SRem(VM *vm, VAL a, VAL b) {
515}
470}
516
471
517VAL idris_b64Lt(VM *vm, VAL a, VAL b) {
472VAL idris_b64Lt(VM *vm, VAL a, VAL b) {
518− VAL cl = allocate(vm, sizeof(Closure), 0);
519− SETTY(cl, BITS64);
520− cl->info.bits64 = a->info.bits64 < b->info.bits64;
473+ return MKINT(a->info.bits64 < b->info.bits64);
521− return cl;
522}
474}
523
475
524VAL idris_b64Gt(VM *vm, VAL a, VAL b) {
476VAL idris_b64Gt(VM *vm, VAL a, VAL b) {
525− VAL cl = allocate(vm, sizeof(Closure), 0);
526− SETTY(cl, BITS64);
527− cl->info.bits64 = a->info.bits64 > b->info.bits64;
477+ return MKINT(a->info.bits64 > b->info.bits64);
528− return cl;
529}
478}
530
479
531VAL idris_b64Eq(VM *vm, VAL a, VAL b) {
480VAL idris_b64Eq(VM *vm, VAL a, VAL b) {
532− VAL cl = allocate(vm, sizeof(Closure), 0);
533− SETTY(cl, BITS64);
534− cl->info.bits64 = a->info.bits64 == b->info.bits64;
481+ return MKINT(a->info.bits64 == b->info.bits64);
535− return cl;
536}
482}
537
483
538VAL idris_b64Lte(VM *vm, VAL a, VAL b) {
484VAL idris_b64Lte(VM *vm, VAL a, VAL b) {
539− VAL cl = allocate(vm, sizeof(Closure), 0);
540− SETTY(cl, BITS64);
541− cl->info.bits64 = a->info.bits64 <= b->info.bits64;
485+ return MKINT(a->info.bits64 <= b->info.bits64);
542− return cl;
543}
486}
544
487
545VAL idris_b64Gte(VM *vm, VAL a, VAL b) {
488VAL idris_b64Gte(VM *vm, VAL a, VAL b) {
546− VAL cl = allocate(vm, sizeof(Closure), 0);
547− SETTY(cl, BITS64);
548− cl->info.bits64 = a->info.bits64 >= b->info.bits64;
489+ return MKINT(a->info.bits64 >= b->info.bits64);
549− return cl;
550}
490}
551
491
552VAL idris_b64Compl(VM *vm, VAL a) {
492VAL idris_b64Compl(VM *vm, VAL a) {