@@ -651,9 +651,137 @@ execApp' env ctxt f@(EP _ n _) args =
651651 primRes Fl (i1 - i2)
652652 getOp (UN "prim__subInt") [EConstant (I i1), EConstant (I i2)] =
653653 primRes I (i1 - i2)
654− -- DONE TO HERE
654+ getOp (UN "prim__toFloatB16") [EConstant (B16 i)] =
655+ primRes Fl (fromIntegral i)
656+ getOp (UN "prim__toFloatB32") [EConstant (B32 i)] =
657+ primRes Fl (fromIntegral i)
658+ getOp (UN "prim__toFloatB64") [EConstant (B64 i)] =
659+ primRes Fl (fromIntegral i)
660+ getOp (UN "prim__toFloatB8") [EConstant (B8 i)] =
661+ primRes Fl (fromIntegral i)
662+ getOp (UN "prim__toFloatBigInt") [EConstant (BI i)] =
663+ primRes Fl (fromIntegral i)
664+ getOp (UN "prim__toFloatInt") [EConstant (I i)] =
665+ primRes Fl (fromIntegral i)
666+ getOp (UN "prim__toStrB16") [EConstant (B16 i)] =
667+ primRes Str (show i)
668+ getOp (UN "prim__toStrB32") [EConstant (B32 i)] =
669+ primRes Str (show i)
670+ getOp (UN "prim__toStrB64") [EConstant (B64 i)] =
671+ primRes Str (show i)
672+ getOp (UN "prim__toStrB8") [EConstant (B8 i)] =
673+ primRes Str (show i)
674+ getOp (UN "prim__toStrBigInt") [EConstant (BI i)] =
675+ primRes Str (show i)
676+ getOp (UN "prim__toStrInt") [EConstant (I i)] =
677+ primRes Str (show i)
678+ getOp (UN "prim__truncB16_B8") [EConstant (B16 i)] =
679+ primRes B8 (fromIntegral i)
680+ getOp (UN "prim__truncB16_Int") [EConstant (B16 i)] =
681+ primRes I (fromIntegral i)
682+ getOp (UN "prim__truncB32_B16") [EConstant (B32 i)] =
683+ primRes B16 (fromIntegral i)
684+ getOp (UN "prim__truncB32_B8") [EConstant (B32 i)] =
685+ primRes B8 (fromIntegral i)
686+ getOp (UN "prim__truncB32_Int") [EConstant (B32 i)] =
687+ primRes I (fromIntegral i)
688+ getOp (UN "prim__truncB64_B16") [EConstant (B64 i)] =
689+ primRes B16 (fromIntegral i)
690+ getOp (UN "prim__truncB64_B32") [EConstant (B64 i)] =
691+ primRes B32 (fromIntegral i)
692+ getOp (UN "prim__truncB64_B8") [EConstant (B64 i)] =
693+ primRes B8 (fromIntegral i)
694+ getOp (UN "prim__truncB64_Int") [EConstant (B64 i)] =
695+ primRes I (fromIntegral i)
696+ getOp (UN "prim__truncBigInt_B16") [EConstant (BI i)] =
697+ primRes B16 (fromIntegral i)
698+ getOp (UN "prim__truncBigInt_B32") [EConstant (BI i)] =
699+ primRes B32 (fromIntegral i)
700+ getOp (UN "prim__truncBigInt_B64") [EConstant (BI i)] =
701+ primRes B64 (fromIntegral i)
702+ getOp (UN "prim__truncBigInt_B8") [EConstant (BI i)] =
703+ primRes B8 (fromIntegral i)
704+ getOp (UN "prim__truncBigInt_Int") [EConstant (BI i)] =
705+ primRes I (fromIntegral i)
706+ getOp (UN "prim__truncInt_B16") [EConstant (I i)] =
707+ primRes B16 (fromIntegral i)
708+ getOp (UN "prim__truncInt_B32") [EConstant (I i)] =
709+ primRes B32 (fromIntegral i)
710+ getOp (UN "prim__truncInt_B64") [EConstant (I i)] =
711+ primRes B64 (fromIntegral i)
712+ getOp (UN "prim__truncInt_B8") [EConstant (I i)] =
713+ primRes B8 (fromIntegral i)
714+ getOp (UN "prim__udivB16") [EConstant (B16 i1), EConstant (B16 i2)] =
715+ primRes B16 (i1 `div` i2)
716+ getOp (UN "prim__udivB32") [EConstant (B32 i1), EConstant (B32 i2)] =
717+ primRes B32 (i1 `div` i2)
718+ getOp (UN "prim__udivB64") [EConstant (B64 i1), EConstant (B64 i2)] =
719+ primRes B64 (i1 `div` i2)
720+ getOp (UN "prim__udivB8") [EConstant (B8 i1), EConstant (B8 i2)] =
721+ primRes B8 (i1 `div` i2)
722+ getOp (UN "prim__udivBigInt") [EConstant (BI i1), EConstant (BI i2)] =
723+ primRes BI (i1 `div` i2)
724+ getOp (UN "prim__udivInt") [EConstant (I i1), EConstant (I i2)] =
725+ primRes I (i1 `div` i2)
726+ getOp (UN "prim__uremB16") [EConstant (B16 i1), EConstant (B16 i2)] =
727+ primRes B16 (rem i1 i2)
728+ getOp (UN "prim__uremB32") [EConstant (B32 i1), EConstant (B32 i2)] =
729+ primRes B32 (rem i1 i2)
730+ getOp (UN "prim__uremB64") [EConstant (B64 i1), EConstant (B64 i2)] =
731+ primRes B64 (rem i1 i2)
732+ getOp (UN "prim__uremB8") [EConstant (B8 i1), EConstant (B8 i2)] =
733+ primRes B8 (rem i1 i2)
734+ getOp (UN "prim__uremBigInt") [EConstant (BI i1), EConstant (BI i2)] =
735+ primRes BI (rem i1 i2)
736+ getOp (UN "prim__uremInt") [EConstant (I i1), EConstant (I i2)] =
737+ primRes I (rem i1 i2)
738+ -- No implementation for prim__vm because the VM isn't available in interpreted code
739+ getOp (UN "prim__xorB16") [EConstant (B16 i1), EConstant (B16 i2)] =
740+ primRes B16 (i1 `xor` i2)
741+ getOp (UN "prim__xorB32") [EConstant (B32 i1), EConstant (B32 i2)] =
742+ primRes B32 (i1 `xor` i2)
743+ getOp (UN "prim__xorB64") [EConstant (B64 i1), EConstant (B64 i2)] =
744+ primRes B64 (i1 `xor` i2)
745+ getOp (UN "prim__xorB8") [EConstant (B8 i1), EConstant (B8 i2)] =
746+ primRes B8 (i1 `xor` i2)
747+ getOp (UN "prim__xorBigInt") [EConstant (BI i1), EConstant (BI i2)] =
748+ primRes BI (i1 `xor` i2)
655749 getOp (UN "prim__xorInt") [EConstant (I i1), EConstant (I i2)] =
656750 primRes I (i1 `xor` i2)
751+ getOp (UN "prim__zextB16_B32") [EConstant (B16 i)] =
752+ primRes B32 (fromIntegral i)
753+ getOp (UN "prim__zextB16_B64") [EConstant (B16 i)] =
754+ primRes B64 (fromIntegral i)
755+ getOp (UN "prim__zextB16_BigInt") [EConstant (B16 i)] =
756+ primRes BI (fromIntegral i)
757+ getOp (UN "prim__zextB16_Int") [EConstant (B16 i)] =
758+ primRes I (fromIntegral i)
759+ getOp (UN "prim__zextB32_B64") [EConstant (B32 i)] =
760+ primRes B64 (fromIntegral i)
761+ getOp (UN "prim__zextB32_BigInt") [EConstant (B32 i)] =
762+ primRes BI (fromIntegral i)
763+ getOp (UN "prim__zextB32_Int") [EConstant (B32 i)] =
764+ primRes I (fromIntegral i)
765+ getOp (UN "prim__zextB64_BigInt") [EConstant (B64 i)] =
766+ primRes BI (fromIntegral i)
767+ getOp (UN "prim__zextB8_B16") [EConstant (B8 i)] =
768+ primRes B16 (fromIntegral i)
769+ getOp (UN "prim__zextB8_B32") [EConstant (B8 i)] =
770+ primRes B32 (fromIntegral i)
771+ getOp (UN "prim__zextB8_B64") [EConstant (B8 i)] =
772+ primRes B64 (fromIntegral i)
773+ getOp (UN "prim__zextB8_BigInt") [EConstant (B8 i)] =
774+ primRes BI (fromIntegral i)
775+ getOp (UN "prim__zextB8_Int") [EConstant (B8 i)] =
776+ primRes I (fromIntegral i)
777+ getOp (UN "prim__zextInt_B16") [EConstant (I i)] =
778+ primRes B16 (fromIntegral i)
779+ getOp (UN "prim__zextInt_B32") [EConstant (I i)] =
780+ primRes B32 (fromIntegral i)
781+ getOp (UN "prim__zextInt_B64") [EConstant (I i)] =
782+ primRes B64 (fromIntegral i)
783+ getOp (UN "prim__zextInt_BigInt") [EConstant (I i)] =
784+ primRes BI (fromIntegral i)
657785 getOp n args = trace ("No prim " ++ show n ++ " for " ++ take 1000 (show args)) Nothing
658786
659787 primRes :: (a -> Const) -> a -> Maybe (Exec ExecVal)