5VAL idris_b8CopyForGC(VM *vm, VAL a) {
6 uint8_t A = a->info.bits8;
7 VAL cl = allocate(sizeof(Closure), 1);
13VAL idris_b16CopyForGC(VM *vm, VAL a) {
14 uint16_t A = a->info.bits16;
15 VAL cl = allocate(sizeof(Closure), 1);
21VAL idris_b32CopyForGC(VM *vm, VAL a) {
22 uint32_t A = a->info.bits32;
23 VAL cl = allocate(sizeof(Closure), 1);
29VAL idris_b64CopyForGC(VM *vm, VAL a) {
30 uint64_t A = a->info.bits64;
31 VAL cl = allocate(sizeof(Closure), 1);
37VAL idris_b8(VM *vm, VAL a) {
38 uint8_t A = GETINT(a);
39 VAL cl = allocate(sizeof(Closure), 0);
41 cl->info.bits8 = (uint8_t) A;
45VAL idris_b16(VM *vm, VAL a) {
46 uint16_t A = GETINT(a);
47 VAL cl = allocate(sizeof(Closure), 0);
49 cl->info.bits16 = (uint16_t) A;
53VAL idris_b32(VM *vm, VAL a) {
54 uint32_t A = GETINT(a);
55 VAL cl = allocate(sizeof(Closure), 0);
57 cl->info.bits32 = (uint32_t) A;
61VAL idris_b64(VM *vm, VAL a) {
62 uint64_t A = GETINT(a);
63 VAL cl = allocate(sizeof(Closure), 0);
65 cl->info.bits64 = (uint64_t) A;
69VAL idris_castB32Int(VM *vm, VAL a) {
70 return MKINT((i_int)a->info.bits32);
73VAL idris_b8const(VM *vm, uint8_t a) {
74 VAL cl = allocate(sizeof(Closure), 0);
80VAL idris_b16const(VM *vm, uint16_t a) {
81 VAL cl = allocate(sizeof(Closure), 0);
87VAL idris_b32const(VM *vm, uint32_t a) {
88 VAL cl = allocate(sizeof(Closure), 0);
94VAL idris_b64const(VM *vm, uint64_t a) {
95 VAL cl = allocate(sizeof(Closure), 0);
101VAL idris_b8Plus(VM *vm, VAL a, VAL b) {
102 uint8_t A = a->info.bits8;
103 uint8_t B = b->info.bits8;
104 VAL cl = allocate(sizeof(Closure), 0);
106 cl->info.bits8 = A + B;
110VAL idris_b8Minus(VM *vm, VAL a, VAL b) {
111 uint8_t A = a->info.bits8;
112 uint8_t B = b->info.bits8;
113 VAL cl = allocate(sizeof(Closure), 0);
115 cl->info.bits8 = A - B;
119VAL idris_b8Times(VM *vm, VAL a, VAL b) {
120 uint8_t A = a->info.bits8;
121 uint8_t B = b->info.bits8;
122 VAL cl = allocate(sizeof(Closure), 0);
124 cl->info.bits8 = A * B;
128VAL idris_b8UDiv(VM *vm, VAL a, VAL b) {
129 uint8_t A = a->info.bits8;
130 uint8_t B = b->info.bits8;
131 VAL cl = allocate(sizeof(Closure), 0);
133 cl->info.bits8 = A / B;
137VAL idris_b8SDiv(VM *vm, VAL a, VAL b) {
138 uint8_t A = a->info.bits8;
139 uint8_t B = b->info.bits8;
140 VAL cl = allocate(sizeof(Closure), 0);
142 cl->info.bits8 = (uint8_t) (((int8_t) A) / ((int8_t) B));
146VAL idris_b8URem(VM *vm, VAL a, VAL b) {
147 uint8_t A = a->info.bits8;
148 uint8_t B = b->info.bits8;
149 VAL cl = allocate(sizeof(Closure), 0);
151 cl->info.bits8 = A % B;
155VAL idris_b8SRem(VM *vm, VAL a, VAL b) {
156 uint8_t A = a->info.bits8;
157 uint8_t B = b->info.bits8;
158 VAL cl = allocate(sizeof(Closure), 0);
160 cl->info.bits8 = (uint8_t) (((int8_t) A) % ((int8_t) B));
164VAL idris_b8Lt(VM *vm, VAL a, VAL b) {
165 return MKINT((i_int) (a->info.bits8 < b->info.bits8));
168VAL idris_b8Gt(VM *vm, VAL a, VAL b) {
169 return MKINT((i_int) (a->info.bits8 > b->info.bits8));
172VAL idris_b8Eq(VM *vm, VAL a, VAL b) {
173 return MKINT((i_int) (a->info.bits8 == b->info.bits8));
176VAL idris_b8Lte(VM *vm, VAL a, VAL b) {
177 return MKINT((i_int) (a->info.bits8 <= b->info.bits8));
180VAL idris_b8Gte(VM *vm, VAL a, VAL b) {
181 return MKINT((i_int) (a->info.bits8 >= b->info.bits8));
184VAL idris_b8Compl(VM *vm, VAL a) {
185 uint8_t A = a->info.bits8;
186 VAL cl = allocate(sizeof(Closure), 0);
188 cl->info.bits8 = ~ A;
192VAL idris_b8And(VM *vm, VAL a, VAL b) {
193 uint8_t A = a->info.bits8;
194 uint8_t B = b->info.bits8;
195 VAL cl = allocate(sizeof(Closure), 0);
197 cl->info.bits8 = A & B;
201VAL idris_b8Or(VM *vm, VAL a, VAL b) {
202 uint8_t A = a->info.bits8;
203 uint8_t B = b->info.bits8;
204 VAL cl = allocate(sizeof(Closure), 0);
206 cl->info.bits8 = A | B;
210VAL idris_b8Xor(VM *vm, VAL a, VAL b) {
211 uint8_t A = a->info.bits8;
212 uint8_t B = b->info.bits8;
213 VAL cl = allocate(sizeof(Closure), 0);
215 cl->info.bits8 = A ^ B;
219VAL idris_b8Shl(VM *vm, VAL a, VAL b) {
220 uint8_t A = a->info.bits8;
221 uint8_t B = b->info.bits8;
222 VAL cl = allocate(sizeof(Closure), 0);
224 cl->info.bits8 = A << B;
228VAL idris_b8LShr(VM *vm, VAL a, VAL b) {
229 uint8_t A = a->info.bits8;
230 uint8_t B = b->info.bits8;
231 VAL cl = allocate(sizeof(Closure), 0);
233 cl->info.bits8 = A >> B;
237VAL idris_b8AShr(VM *vm, VAL a, VAL b) {
238 uint8_t A = a->info.bits8;
239 uint8_t B = b->info.bits8;
240 VAL cl = allocate(sizeof(Closure), 0);
242 cl->info.bits8 = (uint8_t) (((int8_t) A) >> ((int8_t) B));
246VAL idris_b16Plus(VM *vm, VAL a, VAL b) {
247 uint16_t A = a->info.bits16;
248 uint16_t B = b->info.bits16;
249 VAL cl = allocate(sizeof(Closure), 0);
251 cl->info.bits16 = A + B;
255VAL idris_b16Minus(VM *vm, VAL a, VAL b) {
256 uint16_t A = a->info.bits16;
257 uint16_t B = b->info.bits16;
258 VAL cl = allocate(sizeof(Closure), 0);
260 cl->info.bits16 = A - B;
264VAL idris_b16Times(VM *vm, VAL a, VAL b) {
265 uint16_t A = a->info.bits16;
266 uint16_t B = b->info.bits16;
267 VAL cl = allocate(sizeof(Closure), 0);
269 cl->info.bits16 = A * B;
273VAL idris_b16UDiv(VM *vm, VAL a, VAL b) {
274 uint16_t A = a->info.bits16;
275 uint16_t B = b->info.bits16;
276 VAL cl = allocate(sizeof(Closure), 0);
278 cl->info.bits16 = A / B;
282VAL idris_b16SDiv(VM *vm, VAL a, VAL b) {
283 uint16_t A = a->info.bits16;
284 uint16_t B = b->info.bits16;
285 VAL cl = allocate(sizeof(Closure), 0);
287 cl->info.bits16 = (uint16_t) (((int16_t) A) / ((int16_t) B));
291VAL idris_b16URem(VM *vm, VAL a, VAL b) {
292 uint16_t A = a->info.bits16;
293 uint16_t B = b->info.bits16;
294 VAL cl = allocate(sizeof(Closure), 0);
296 cl->info.bits16 = A % B;
300VAL idris_b16SRem(VM *vm, VAL a, VAL b) {
301 uint16_t A = a->info.bits16;
302 uint16_t B = b->info.bits16;
303 VAL cl = allocate(sizeof(Closure), 0);
305 cl->info.bits16 = (uint16_t) (((int16_t) A) % ((int16_t) B));
309VAL idris_b16Lt(VM *vm, VAL a, VAL b) {
310 return MKINT((i_int) (a->info.bits16 < b->info.bits16));
313VAL idris_b16Gt(VM *vm, VAL a, VAL b) {
314 return MKINT((i_int) (a->info.bits16 > b->info.bits16));
317VAL idris_b16Eq(VM *vm, VAL a, VAL b) {
318 return MKINT((i_int) (a->info.bits16 == b->info.bits16));
321VAL idris_b16Lte(VM *vm, VAL a, VAL b) {
322 return MKINT((i_int) (a->info.bits16 <= b->info.bits16));
325VAL idris_b16Gte(VM *vm, VAL a, VAL b) {
326 return MKINT((i_int) (a->info.bits16 >= b->info.bits16));
329VAL idris_b16Compl(VM *vm, VAL a) {
330 uint16_t A = a->info.bits16;
331 VAL cl = allocate(sizeof(Closure), 0);
333 cl->info.bits16 = ~ A;
337VAL idris_b16And(VM *vm, VAL a, VAL b) {
338 uint16_t A = a->info.bits16;
339 uint16_t B = b->info.bits16;
340 VAL cl = allocate(sizeof(Closure), 0);
342 cl->info.bits16 = A & B;
346VAL idris_b16Or(VM *vm, VAL a, VAL b) {
347 uint16_t A = a->info.bits16;
348 uint16_t B = b->info.bits16;
349 VAL cl = allocate(sizeof(Closure), 0);
351 cl->info.bits16 = A | B;
355VAL idris_b16Xor(VM *vm, VAL a, VAL b) {
356 uint16_t A = a->info.bits16;
357 uint16_t B = b->info.bits16;
358 VAL cl = allocate(sizeof(Closure), 0);
360 cl->info.bits16 = A ^ B;
364VAL idris_b16Shl(VM *vm, VAL a, VAL b) {
365 uint16_t A = a->info.bits16;
366 uint16_t B = b->info.bits16;
367 VAL cl = allocate(sizeof(Closure), 0);
369 cl->info.bits16 = A << B;
373VAL idris_b16LShr(VM *vm, VAL a, VAL b) {
374 uint16_t A = a->info.bits16;
375 uint16_t B = b->info.bits16;
376 VAL cl = allocate(sizeof(Closure), 0);
378 cl->info.bits16 = A >> B;
382VAL idris_b16AShr(VM *vm, VAL a, VAL b) {
383 uint16_t A = a->info.bits16;
384 uint16_t B = b->info.bits16;
385 VAL cl = allocate(sizeof(Closure), 0);
387 cl->info.bits16 = (uint16_t) (((int16_t) A) >> ((int16_t) B));
391VAL idris_b32Plus(VM *vm, VAL a, VAL b) {
392 uint32_t A = a->info.bits32;
393 uint32_t B = b->info.bits32;
394 VAL cl = allocate(sizeof(Closure), 0);
396 cl->info.bits32 = A + B;
400VAL idris_b32Minus(VM *vm, VAL a, VAL b) {
401 uint32_t A = a->info.bits32;
402 uint32_t B = b->info.bits32;
403 VAL cl = allocate(sizeof(Closure), 0);
405 cl->info.bits32 = A - B;
409VAL idris_b32Times(VM *vm, VAL a, VAL b) {
410 uint32_t A = a->info.bits32;
411 uint32_t B = b->info.bits32;
412 VAL cl = allocate(sizeof(Closure), 0);
414 cl->info.bits32 = A * B;
418VAL idris_b32UDiv(VM *vm, VAL a, VAL b) {
419 uint32_t A = a->info.bits32;
420 uint32_t B = b->info.bits32;
421 VAL cl = allocate(sizeof(Closure), 0);
423 cl->info.bits32 = A / B;
427VAL idris_b32SDiv(VM *vm, VAL a, VAL b) {
428 uint32_t A = a->info.bits32;
429 uint32_t B = b->info.bits32;
430 VAL cl = allocate(sizeof(Closure), 0);
432 cl->info.bits32 = (uint32_t) (((int32_t) A) / ((int32_t) B));
436VAL idris_b32URem(VM *vm, VAL a, VAL b) {
437 uint32_t A = a->info.bits32;
438 uint32_t B = b->info.bits32;
439 VAL cl = allocate(sizeof(Closure), 0);
441 cl->info.bits32 = A % B;
445VAL idris_b32SRem(VM *vm, VAL a, VAL b) {
446 uint32_t A = a->info.bits32;
447 uint32_t B = b->info.bits32;
448 VAL cl = allocate(sizeof(Closure), 0);
450 cl->info.bits32 = (uint32_t) (((int32_t) A) % ((int32_t) B));
454VAL idris_b32Lt(VM *vm, VAL a, VAL b) {
455 return MKINT((i_int) (a->info.bits32 < b->info.bits32));
458VAL idris_b32Gt(VM *vm, VAL a, VAL b) {
459 return MKINT((i_int) (a->info.bits32 > b->info.bits32));
462VAL idris_b32Eq(VM *vm, VAL a, VAL b) {
463 return MKINT((i_int) (a->info.bits32 == b->info.bits32));
466VAL idris_b32Lte(VM *vm, VAL a, VAL b) {
467 return MKINT((i_int) (a->info.bits32 <= b->info.bits32));
470VAL idris_b32Gte(VM *vm, VAL a, VAL b) {
471 return MKINT((i_int) (a->info.bits32 >= b->info.bits32));
474VAL idris_b32Compl(VM *vm, VAL a) {
475 uint32_t A = a->info.bits32;
476 VAL cl = allocate(sizeof(Closure), 0);
478 cl->info.bits32 = ~ A;
482VAL idris_b32And(VM *vm, VAL a, VAL b) {
483 uint32_t A = a->info.bits32;
484 uint32_t B = b->info.bits32;
485 VAL cl = allocate(sizeof(Closure), 0);
487 cl->info.bits32 = A & B;
491VAL idris_b32Or(VM *vm, VAL a, VAL b) {
492 uint32_t A = a->info.bits32;
493 uint32_t B = b->info.bits32;
494 VAL cl = allocate(sizeof(Closure), 0);
496 cl->info.bits32 = A | B;
500VAL idris_b32Xor(VM *vm, VAL a, VAL b) {
501 uint32_t A = a->info.bits32;
502 uint32_t B = b->info.bits32;
503 VAL cl = allocate(sizeof(Closure), 0);
505 cl->info.bits32 = A ^ B;
509VAL idris_b32Shl(VM *vm, VAL a, VAL b) {
510 uint32_t A = a->info.bits32;
511 uint32_t B = b->info.bits32;
512 VAL cl = allocate(sizeof(Closure), 0);
514 cl->info.bits32 = A << B;
518VAL idris_b32LShr(VM *vm, VAL a, VAL b) {
519 uint32_t A = a->info.bits32;
520 uint32_t B = b->info.bits32;
521 VAL cl = allocate(sizeof(Closure), 0);
523 cl->info.bits32 = A >> B;
527VAL idris_b32AShr(VM *vm, VAL a, VAL b) {
528 uint32_t A = a->info.bits32;
529 uint32_t B = b->info.bits32;
530 VAL cl = allocate(sizeof(Closure), 0);
532 cl->info.bits32 = (uint32_t) (((int32_t)A) >> ((int32_t)B));
536VAL idris_b64Plus(VM *vm, VAL a, VAL b) {
537 uint64_t A = a->info.bits64;
538 uint64_t B = b->info.bits64;
539 VAL cl = allocate(sizeof(Closure), 0);
541 cl->info.bits64 = A + B;
545VAL idris_b64Minus(VM *vm, VAL a, VAL b) {
546 uint64_t A = a->info.bits64;
547 uint64_t B = b->info.bits64;
548 VAL cl = allocate(sizeof(Closure), 0);
550 cl->info.bits64 = A - B;
554VAL idris_b64Times(VM *vm, VAL a, VAL b) {
555 uint64_t A = a->info.bits64;
556 uint64_t B = b->info.bits64;
557 VAL cl = allocate(sizeof(Closure), 0);
559 cl->info.bits64 = A * B;
563VAL idris_b64UDiv(VM *vm, VAL a, VAL b) {
564 uint64_t A = a->info.bits64;
565 uint64_t B = b->info.bits64;
566 VAL cl = allocate(sizeof(Closure), 0);
568 cl->info.bits64 = A / B;
572VAL idris_b64SDiv(VM *vm, VAL a, VAL b) {
573 uint64_t A = a->info.bits64;
574 uint64_t B = b->info.bits64;
575 VAL cl = allocate(sizeof(Closure), 0);
577 cl->info.bits64 = (uint64_t) (((int64_t) A) / ((int64_t) B));
581VAL idris_b64URem(VM *vm, VAL a, VAL b) {
582 uint64_t A = a->info.bits64;
583 uint64_t B = b->info.bits64;
584 VAL cl = allocate(sizeof(Closure), 0);
586 cl->info.bits64 = A % B;
590VAL idris_b64SRem(VM *vm, VAL a, VAL b) {
591 uint64_t A = a->info.bits64;
592 uint64_t B = b->info.bits64;
593 VAL cl = allocate(sizeof(Closure), 0);
595 cl->info.bits64 = (uint64_t) (((int64_t) A) % ((int64_t) B));
599VAL idris_b64Lt(VM *vm, VAL a, VAL b) {
600 return MKINT((i_int) (a->info.bits64 < b->info.bits64));
603VAL idris_b64Gt(VM *vm, VAL a, VAL b) {
604 return MKINT((i_int) (a->info.bits64 > b->info.bits64));
607VAL idris_b64Eq(VM *vm, VAL a, VAL b) {
608 return MKINT((i_int) (a->info.bits64 == b->info.bits64));
611VAL idris_b64Lte(VM *vm, VAL a, VAL b) {
612 return MKINT((i_int) (a->info.bits64 <= b->info.bits64));
615VAL idris_b64Gte(VM *vm, VAL a, VAL b) {
616 return MKINT((i_int) (a->info.bits64 >= b->info.bits64));
619VAL idris_b64Compl(VM *vm, VAL a) {
620 uint64_t A = a->info.bits64;
621 VAL cl = allocate(sizeof(Closure), 0);
623 cl->info.bits64 = ~ A;
627VAL idris_b64And(VM *vm, VAL a, VAL b) {
628 uint64_t A = a->info.bits64;
629 uint64_t B = b->info.bits64;
630 VAL cl = allocate(sizeof(Closure), 0);
632 cl->info.bits64 = A & B;
636VAL idris_b64Or(VM *vm, VAL a, VAL b) {
637 uint64_t A = a->info.bits64;
638 uint64_t B = b->info.bits64;
639 VAL cl = allocate(sizeof(Closure), 0);
641 cl->info.bits64 = A | B;
645VAL idris_b64Xor(VM *vm, VAL a, VAL b) {
646 uint64_t A = a->info.bits64;
647 uint64_t B = b->info.bits64;
648 VAL cl = allocate(sizeof(Closure), 0);
650 cl->info.bits64 = A ^ B;
654VAL idris_b64Shl(VM *vm, VAL a, VAL b) {
655 uint64_t A = a->info.bits64;
656 uint64_t B = b->info.bits64;
657 VAL cl = allocate(sizeof(Closure), 0);
659 cl->info.bits64 = A << B;
663VAL idris_b64LShr(VM *vm, VAL a, VAL b) {
664 uint64_t A = a->info.bits64;
665 uint64_t B = b->info.bits64;
666 VAL cl = allocate(sizeof(Closure), 0);
668 cl->info.bits64 = A >> B;
672VAL idris_b64AShr(VM *vm, VAL a, VAL b) {
673 uint64_t A = a->info.bits64;
674 uint64_t B = b->info.bits64;
675 VAL cl = allocate(sizeof(Closure), 0);
677 cl->info.bits64 = (uint64_t) (((int64_t) A) >> ((int64_t) B));
681VAL idris_b8Z16(VM *vm, VAL a) {
682 uint8_t A = a->info.bits8;
683 VAL cl = allocate(sizeof(Closure), 0);
685 cl->info.bits16 = (uint16_t) A;
689VAL idris_b8Z32(VM *vm, VAL a) {
690 uint8_t A = a->info.bits8;
691 VAL cl = allocate(sizeof(Closure), 0);
693 cl->info.bits32 = (uint32_t) A;
697VAL idris_b8Z64(VM *vm, VAL a) {
698 uint8_t A = a->info.bits8;
699 VAL cl = allocate(sizeof(Closure), 0);
701 cl->info.bits64 = (uint64_t) A;
705VAL idris_b8S16(VM *vm, VAL a) {
706 uint8_t A = a->info.bits8;
707 VAL cl = allocate(sizeof(Closure), 0);
709 cl->info.bits16 = (uint16_t) (int16_t) (int8_t) A;
713VAL idris_b8S32(VM *vm, VAL a) {
714 uint8_t A = a->info.bits8;
715 VAL cl = allocate(sizeof(Closure), 0);
717 cl->info.bits32 = (uint32_t) (int32_t) (int8_t) A;
721VAL idris_b8S64(VM *vm, VAL a) {
722 uint8_t A = a->info.bits8;
723 VAL cl = allocate(sizeof(Closure), 0);
725 cl->info.bits64 = (uint64_t) (int64_t) (int8_t) A;
729VAL idris_b16Z32(VM *vm, VAL a) {
730 uint16_t A = a->info.bits16;
731 VAL cl = allocate(sizeof(Closure), 0);
733 cl->info.bits32 = (uint32_t) A;
737VAL idris_b16Z64(VM *vm, VAL a) {
738 uint16_t A = a->info.bits16;
739 VAL cl = allocate(sizeof(Closure), 0);
741 cl->info.bits64 = (uint64_t) A;
745VAL idris_b16S32(VM *vm, VAL a) {
746 uint16_t A = a->info.bits16;
747 VAL cl = allocate(sizeof(Closure), 0);
749 cl->info.bits32 = (uint32_t) (int32_t) (int16_t) A;
753VAL idris_b16S64(VM *vm, VAL a) {
754 uint16_t A = a->info.bits16;
755 VAL cl = allocate(sizeof(Closure), 0);
757 cl->info.bits64 = (uint64_t) (int64_t) (int16_t) A;
761VAL idris_b16T8(VM *vm, VAL a) {
762 uint16_t A = a->info.bits16;
763 VAL cl = allocate(sizeof(Closure), 0);
765 cl->info.bits8 = (uint8_t) A;
769VAL idris_b32Z64(VM *vm, VAL a) {
770 uint32_t A = a->info.bits32;
771 VAL cl = allocate(sizeof(Closure), 0);
773 cl->info.bits64 = (uint64_t) A;
777VAL idris_b32S64(VM *vm, VAL a) {
778 uint32_t A = a->info.bits32;
779 VAL cl = allocate(sizeof(Closure), 0);
781 cl->info.bits64 = (uint64_t) (int64_t) (int32_t) A;
785VAL idris_b32T8(VM *vm, VAL a) {
786 uint32_t A = a->info.bits32;
787 VAL cl = allocate(sizeof(Closure), 0);
789 cl->info.bits8 = (uint8_t) A;
793VAL idris_b32T16(VM *vm, VAL a) {
794 uint32_t A = a->info.bits32;
795 VAL cl = allocate(sizeof(Closure), 0);
797 cl->info.bits16 = (uint16_t) A;
801VAL idris_b64T8(VM *vm, VAL a) {
802 uint64_t A = a->info.bits64;
803 VAL cl = allocate(sizeof(Closure), 0);
805 cl->info.bits8 = (uint8_t) A;
809VAL idris_b64T16(VM *vm, VAL a) {
810 uint64_t A = a->info.bits64;
811 VAL cl = allocate(sizeof(Closure), 0);
813 cl->info.bits16 = (uint16_t) A;
817VAL idris_b64T32(VM *vm, VAL a) {
818 uint64_t A = a->info.bits64;
819 VAL cl = allocate(sizeof(Closure), 0);
821 cl->info.bits32 = (uint32_t) A;
826VAL idris_IDXB8x16(VM* vm, VAL vec, VAL idx) {
827 __m128i sse = *vec->info.bits128p;
829 _mm_storeu_si128((__m128i*)&data, sse);
830 return MKB8(vm, data[idx->info.bits32]);
833VAL idris_IDXB16x8(VM* vm, VAL vec, VAL idx) {
834 __m128i sse = *vec->info.bits128p;
836 _mm_storeu_si128((__m128i*)&data, sse);
837 return MKB16(vm, data[idx->info.bits32]);
840VAL idris_IDXB32x4(VM* vm, VAL vec, VAL idx) {
841 __m128i sse = *vec->info.bits128p;
843 _mm_storeu_si128((__m128i*)&data, sse);
844 return MKB32(vm, data[idx->info.bits32]);
847VAL idris_IDXB64x2(VM* vm, VAL vec, VAL idx) {
848 __m128i sse = *vec->info.bits128p;
850 _mm_storeu_si128((__m128i*)&data, sse);
851 return MKB64(vm, data[idx->info.bits32]);
854VAL idris_b8x16CopyForGC(VM *vm, VAL vec) {
855 __m128i sse = *vec->info.bits128p;
856 VAL cl = allocate(sizeof(Closure) + 16 + sizeof(__m128i), 1);
858 cl->info.bits128p = (__m128i*)ALIGN((uintptr_t)cl + sizeof(Closure), 16);
859 assert ((uintptr_t)cl->info.bits128p % 16 == 0);
860 *cl->info.bits128p = sse;
864VAL idris_b16x8CopyForGC(VM *vm, VAL vec) {
865 __m128i sse = *vec->info.bits128p;
866 VAL cl = allocate(sizeof(Closure) + 16 + sizeof(__m128i), 1);
868 cl->info.bits128p = (__m128i*)ALIGN((uintptr_t)cl + sizeof(Closure), 16);
869 assert ((uintptr_t)cl->info.bits128p % 16 == 0);
870 *cl->info.bits128p = sse;
874VAL idris_b32x4CopyForGC(VM *vm, VAL vec) {
875 __m128i sse = *vec->info.bits128p;
876 VAL cl = allocate(sizeof(Closure) + 16 + sizeof(__m128i), 1);
878 cl->info.bits128p = (__m128i*)ALIGN((uintptr_t)cl + sizeof(Closure), 16);
879 assert ((uintptr_t)cl->info.bits128p % 16 == 0);
880 *cl->info.bits128p = sse;
884VAL idris_b64x2CopyForGC(VM *vm, VAL vec) {
885 __m128i sse = *vec->info.bits128p;
886 VAL cl = allocate(sizeof(Closure) + 16 + sizeof(__m128i), 1);
888 cl->info.bits128p = (__m128i*)ALIGN((uintptr_t)cl + sizeof(Closure), 16);
889 assert ((uintptr_t)cl->info.bits128p % 16 == 0);
890 *cl->info.bits128p = sse;
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list