summaryrefslogtreecommitdiffstats
path: root/linker.sml
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2024-04-27 08:28:40 -0700
committerRose Hogenson <rosehogenson@posteo.net>2024-04-27 08:28:40 -0700
commit9f5889c1263d63b953b3a324da07321deef5ca58 (patch)
treeeb4a9be038660ced671da9fbb4617812f7cd2125 /linker.sml
parent1d35d3c0780b1f5392517fe3c1e30950de79efb4 (diff)
downloadsml-9f5889c1263d63b953b3a324da07321deef5ca58.tar.zst
Add integer arithmetic.
Diffstat (limited to 'linker.sml')
-rw-r--r--linker.sml61
1 files changed, 45 insertions, 16 deletions
diff --git a/linker.sml b/linker.sml
index c8f67e6..927bf48 100644
--- a/linker.sml
+++ b/linker.sml
@@ -51,28 +51,57 @@ struct
in
case oper of
Syntax.OAlloc (r, v) =>
- (makeOpcode w 1 (isConst v) false ;
- writeVar w r ;
- writeValue w v)
+ ( makeOpcode w 1 (isConst v) false
+ ; writeVar w r
+ ; writeValue w v
+ )
| Syntax.OCall =>
makeOpcode w 2 false false
| Syntax.OPoke (off, p, v) =>
- (makeOpcode w 3 (isConst v) false ;
- writeOffset w off ;
- writeVar w p ;
- writeValue w v)
+ ( makeOpcode w 3 (isConst v) false
+ ; writeOffset w off
+ ; writeVar w p
+ ; writeValue w v
+ )
| Syntax.OPeek (r, off, v) =>
- (makeOpcode w 4 (isConst v) false ;
- writeVar w r ;
- writeOffset w off ;
- writeValue w v)
+ ( makeOpcode w 4 (isConst v) false
+ ; writeVar w r
+ ; writeOffset w off
+ ; writeValue w v
+ )
| Syntax.OShuf (r, v) =>
- (makeOpcode w 5 (isConst v) false ;
- writeVar w r ;
- writeValue w v)
+ ( makeOpcode w 5 (isConst v) false
+ ; writeVar w r
+ ; writeValue w v
+ )
| Syntax.OExit v =>
- (makeOpcode w 6 (isConst v) false ;
- writeValue w v)
+ ( makeOpcode w 6 (isConst v) false
+ ; writeValue w v
+ )
+ | Syntax.OAdd (r, v1, v2) =>
+ ( makeOpcode w 7 (isConst v1) (isConst v2)
+ ; writeVar w r
+ ; writeValue w v1
+ ; writeValue w v2
+ )
+ | Syntax.OSub (r, v1, v2) =>
+ ( makeOpcode w 8 (isConst v1) (isConst v2)
+ ; writeVar w r
+ ; writeValue w v1
+ ; writeValue w v2
+ )
+ | Syntax.OMul (r, v1, v2) =>
+ ( makeOpcode w 9 (isConst v1) (isConst v2)
+ ; writeVar w r
+ ; writeValue w v1
+ ; writeValue w v2
+ )
+ | Syntax.ODiv (r, v1, v2) =>
+ ( makeOpcode w 10 (isConst v1) (isConst v2)
+ ; writeVar w r
+ ; writeValue w v1
+ ; writeValue w v2
+ )
| Syntax.OLabel _ => ()
end