on master help sign in
Add support for the primitive prim__negFloat : Float -> Float
e1371f7Markus Pfeiffer
src/IRTS/CodegenC.hs+1
@@ -474,6 +474,7 @@ doOp v LFATan [x] = v ++ flUnOp "atan" (creg x)
474doOp v LFSqrt [x] = v ++ flUnOp "sqrt" (creg x)
474doOp v LFSqrt [x] = v ++ flUnOp "sqrt" (creg x)
475doOp v LFFloor [x] = v ++ flUnOp "floor" (creg x)
475doOp v LFFloor [x] = v ++ flUnOp "floor" (creg x)
476doOp v LFCeil [x] = v ++ flUnOp "ceil" (creg x)
476doOp v LFCeil [x] = v ++ flUnOp "ceil" (creg x)
477+doOp v LNegFloat [x] = v ++ "MKFLOAT(vm, -GETFLOAT(" ++ (creg x) ++ "))"
477
478
478doOp v LStrHead [x] = v ++ "idris_strHead(vm, " ++ creg x ++ ")"
479doOp v LStrHead [x] = v ++ "idris_strHead(vm, " ++ creg x ++ ")"
479doOp v LStrTail [x] = v ++ "idris_strTail(vm, " ++ creg x ++ ")"
480doOp v LStrTail [x] = v ++ "idris_strTail(vm, " ++ creg x ++ ")"
src/IRTS/Lang.hs+1−1
@@ -52,7 +52,7 @@ data PrimFn = LPlus ArithTy | LMinus ArithTy | LTimes ArithTy
52 | LBitCast ArithTy ArithTy -- Only for values of equal width
52 | LBitCast ArithTy ArithTy -- Only for values of equal width
53
53
54 | LFExp | LFLog | LFSin | LFCos | LFTan | LFASin | LFACos | LFATan
54 | LFExp | LFLog | LFSin | LFCos | LFTan | LFASin | LFACos | LFATan
55− | LFSqrt | LFFloor | LFCeil
55+ | LFSqrt | LFFloor | LFCeil | LNegFloat
56
56
57 -- construction element extraction element insertion
57 -- construction element extraction element insertion
58 | LMkVec NativeTy Int | LIdxVec NativeTy Int | LUpdateVec NativeTy Int
58 | LMkVec NativeTy Int | LIdxVec NativeTy Int | LUpdateVec NativeTy Int
src/Idris/Primitives.hs+7
@@ -95,6 +95,9 @@ primitives =
95 iCoerce ITNative (ITFixed IT64) "trunc" trunc LTrunc,
95 iCoerce ITNative (ITFixed IT64) "trunc" trunc LTrunc,
96 iCoerce ITBig ITChar "trunc" trunc LTrunc,
96 iCoerce ITBig ITChar "trunc" trunc LTrunc,
97
97
98+
99+ Prim (sUN "prim__negFloat") (ty [(AType ATFloat)] (AType ATFloat)) 1 (c_negFloat)
100+ (1, LNegFloat) total,
98 Prim (sUN "prim__addFloat") (ty [(AType ATFloat), (AType ATFloat)] (AType ATFloat)) 2 (fBin (+))
101 Prim (sUN "prim__addFloat") (ty [(AType ATFloat), (AType ATFloat)] (AType ATFloat)) 2 (fBin (+))
99 (2, LPlus ATFloat) total,
102 (2, LPlus ATFloat) total,
100 Prim (sUN "prim__subFloat") (ty [(AType ATFloat), (AType ATFloat)] (AType ATFloat)) 2 (fBin (-))
103 Prim (sUN "prim__subFloat") (ty [(AType ATFloat), (AType ATFloat)] (AType ATFloat)) 2 (fBin (-))
@@ -660,6 +663,10 @@ c_intToChar _ = Nothing
660c_charToInt [(Ch x)] = Just . I . fromEnum $ x
663c_charToInt [(Ch x)] = Just . I . fromEnum $ x
661c_charToInt _ = Nothing
664c_charToInt _ = Nothing
662
665
666+c_negFloat :: [Const] -> Maybe Const
667+c_negFloat [Fl x] = Just $ Fl (negate x)
668+c_negFloat _ = Nothing
669+
663c_floatToStr :: [Const] -> Maybe Const
670c_floatToStr :: [Const] -> Maybe Const
664c_floatToStr [Fl x] = Just $ Str (show x)
671c_floatToStr [Fl x] = Just $ Str (show x)
665c_floatToStr _ = Nothing
672c_floatToStr _ = Nothing