aboutsummaryrefslogtreecommitdiff
path: root/ABC/Machine
diff options
context:
space:
mode:
Diffstat (limited to 'ABC/Machine')
-rw-r--r--ABC/Machine/BStack.dcl1
-rw-r--r--ABC/Machine/BStack.icl4
-rw-r--r--ABC/Machine/Instructions.dcl1
-rw-r--r--ABC/Machine/Instructions.icl4
4 files changed, 10 insertions, 0 deletions
diff --git a/ABC/Machine/BStack.dcl b/ABC/Machine/BStack.dcl
index 0af277b..900e856 100644
--- a/ABC/Machine/BStack.dcl
+++ b/ABC/Machine/BStack.dcl
@@ -36,4 +36,5 @@ bs_eqIi :: Int BSrc BStack -> BStack
bs_gtI :: BStack -> BStack
bs_ltI :: BStack -> BStack
bs_mulI :: BStack -> BStack
+bs_remI :: BStack -> BStack
bs_subI :: BStack -> BStack
diff --git a/ABC/Machine/BStack.icl b/ABC/Machine/BStack.icl
index 70a1f1a..70007fd 100644
--- a/ABC/Machine/BStack.icl
+++ b/ABC/Machine/BStack.icl
@@ -102,6 +102,10 @@ bs_mulI :: BStack -> BStack
bs_mulI [Int m:Int n:s] = bs_pushI (m * n) s
bs_mulI _ = abortn "bs_mulI: no integers"
+bs_remI :: BStack -> BStack
+bs_remI [Int m:Int n:s] = bs_pushI (m rem n) s
+bs_remI _ = abortn "bs_remI: no integers"
+
bs_subI :: BStack -> BStack
bs_subI [Int m:Int n:s] = bs_pushI (m - n) s
bs_subI _ = abortn "bs_subI: no integers"
diff --git a/ABC/Machine/Instructions.dcl b/ABC/Machine/Instructions.dcl
index f0cc5b2..5140c98 100644
--- a/ABC/Machine/Instructions.dcl
+++ b/ABC/Machine/Instructions.dcl
@@ -62,4 +62,5 @@ gtI :: State -> State
incI :: State -> State
ltI :: State -> State
mulI :: State -> State
+remI :: State -> State
subI :: State -> State
diff --git a/ABC/Machine/Instructions.icl b/ABC/Machine/Instructions.icl
index 3ca55af..42dcb62 100644
--- a/ABC/Machine/Instructions.icl
+++ b/ABC/Machine/Instructions.icl
@@ -385,6 +385,10 @@ mulI :: State -> State
mulI st=:{bstack}
= {st & bstack=bs_mulI bstack}
+remI :: State -> State
+remI st=:{bstack}
+ = {st & bstack=bs_remI bstack}
+
subI :: State -> State
subI st=:{bstack}
= {st & bstack=bs_subI bstack}