on master help sign in
Add support for the primitive prim__negFloat : Float -> Float
commite1371f7f67c3099a9bac52364ff5c837527dcb72 authorMarkus Pfeiffer <markus.pfeiffer@morphism.de> dateMon 22 Sep 2014, 11:25 (12 years ago) parenta557fc8
3 files changed+9−1
src/IRTS/CodegenC.hs+1 src/IRTS/Lang.hs+1−1 src/Idris/Primitives.hs+7
src/IRTS/CodegenC.hs+1
@@ -474,6 +474,7 @@ doOp v LFATan [x] = v ++ flUnOp "atan" (creg x)
474474doOp v LFSqrt [x] = v ++ flUnOp "sqrt" (creg x)
475475doOp v LFFloor [x] = v ++ flUnOp "floor" (creg x)
476476doOp v LFCeil [x] = v ++ flUnOp "ceil" (creg x)
477+doOp v LNegFloat [x] = v ++ "MKFLOAT(vm, -GETFLOAT(" ++ (creg x) ++ "))"
477478
478479doOp v LStrHead [x] = v ++ "idris_strHead(vm, " ++ creg x ++ ")"
479480doOp 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
5252 | LBitCast ArithTy ArithTy -- Only for values of equal width
5353
5454 | LFExp | LFLog | LFSin | LFCos | LFTan | LFASin | LFACos | LFATan
55− | LFSqrt | LFFloor | LFCeil
55+ | LFSqrt | LFFloor | LFCeil | LNegFloat
5656
5757 -- construction element extraction element insertion
5858 | LMkVec NativeTy Int | LIdxVec NativeTy Int | LUpdateVec NativeTy Int
src/Idris/Primitives.hs+7
@@ -95,6 +95,9 @@ primitives =
9595 iCoerce ITNative (ITFixed IT64) "trunc" trunc LTrunc,
9696 iCoerce ITBig ITChar "trunc" trunc LTrunc,
9797
98+
99+ Prim (sUN "prim__negFloat") (ty [(AType ATFloat)] (AType ATFloat)) 1 (c_negFloat)
100+ (1, LNegFloat) total,
98101 Prim (sUN "prim__addFloat") (ty [(AType ATFloat), (AType ATFloat)] (AType ATFloat)) 2 (fBin (+))
99102 (2, LPlus ATFloat) total,
100103 Prim (sUN "prim__subFloat") (ty [(AType ATFloat), (AType ATFloat)] (AType ATFloat)) 2 (fBin (-))
@@ -660,6 +663,10 @@ c_intToChar _ = Nothing
660663c_charToInt [(Ch x)] = Just . I . fromEnum $ x
661664c_charToInt _ = Nothing
662665
666+c_negFloat :: [Const] -> Maybe Const
667+c_negFloat [Fl x] = Just $ Fl (negate x)
668+c_negFloat _ = Nothing
669+
663670c_floatToStr :: [Const] -> Maybe Const
664671c_floatToStr [Fl x] = Just $ Str (show x)
665672c_floatToStr _ = Nothing