File tree Expand file tree Collapse file tree 1 file changed +11
-5
lines changed
lib/LibRISCV/Effects/Expressions/Default Expand file tree Collapse file tree 1 file changed +11
-5
lines changed Original file line number Diff line number Diff line change @@ -16,6 +16,12 @@ import Data.Word (Word8)
1616import LibRISCV.Effects.Expressions.Expr (Expr (.. ))
1717import LibRISCV.Effects.Expressions.Language (ExprEval (.. ))
1818
19+ trueConst :: BV
20+ trueConst = bitVec 32 (1 :: Int32 )
21+
22+ falseConst :: BV
23+ falseConst = bitVec 32 (0 :: Int32 )
24+
1925-- | Evaluate an 'Expr' abstraction which encapsulates a concrete 'BV'.
2026evalE :: Expr BV -> BV
2127evalE (FromImm a) = a
@@ -27,11 +33,11 @@ evalE (Add e1 e2) = evalE e1 + evalE e2
2733evalE (Sub e1 e2) =
2834 fromIntegral $
2935 (fromIntegral (evalE e1) :: Int32 ) - fromIntegral (evalE e2)
30- evalE (Eq e1 e2) = bool 0 1 $ (fromIntegral (evalE e1) :: Int32 ) == fromIntegral (evalE e2)
31- evalE (Slt e1 e2) = bool 0 1 $ (fromIntegral (evalE e1) :: Int32 ) < fromIntegral (evalE e2)
32- evalE (Sge e1 e2) = bool 0 1 $ (fromIntegral (evalE e1) :: Int32 ) >= fromIntegral (evalE e2)
33- evalE (Ult e1 e2) = bool 0 1 $ evalE e1 < evalE e2
34- evalE (Uge e1 e2) = bool 0 1 $ evalE e1 >= evalE e2
36+ evalE (Eq e1 e2) = bool falseConst trueConst $ (fromIntegral (evalE e1) :: Int32 ) == fromIntegral (evalE e2)
37+ evalE (Slt e1 e2) = bool falseConst trueConst $ (fromIntegral (evalE e1) :: Int32 ) < fromIntegral (evalE e2)
38+ evalE (Sge e1 e2) = bool falseConst trueConst $ (fromIntegral (evalE e1) :: Int32 ) >= fromIntegral (evalE e2)
39+ evalE (Ult e1 e2) = bool falseConst trueConst $ evalE e1 < evalE e2
40+ evalE (Uge e1 e2) = bool falseConst trueConst $ evalE e1 >= evalE e2
3541evalE (And e1 e2) = evalE e1 .&. evalE e2
3642evalE (Or e1 e2) = evalE e1 .|. evalE e2
3743evalE (Xor e1 e2) = evalE e1 `xor` evalE e2
You can’t perform that action at this time.
0 commit comments