summaryrefslogtreecommitdiffstats
path: root/linker.sml
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2024-06-02 09:17:55 -0700
committerRose Hogenson <rosehogenson@posteo.net>2024-06-02 09:17:55 -0700
commit22b8b7e2478e3b205c89cc7a700058bfe39175f2 (patch)
treead6cf17b8729ab9af71d4d731162e738f3a7b057 /linker.sml
parent90c4eac546d2c950b27a84ef0e390ac33a1a347d (diff)
downloadsml-22b8b7e2478e3b205c89cc7a700058bfe39175f2.tar.zst
Add strings and IO.
Diffstat (limited to 'linker.sml')
-rw-r--r--linker.sml17
1 files changed, 16 insertions, 1 deletions
diff --git a/linker.sml b/linker.sml
index d576c24..684451d 100644
--- a/linker.sml
+++ b/linker.sml
@@ -47,7 +47,6 @@ struct
fun writeValue w (Syntax.VVar v) = writeVar w v
| writeValue w (Syntax.VLabel l) = writeInt w (getOpt (IntMap.lookup l m, 0))
| writeValue w (Syntax.VInt i) = writeInt w i
- | writeValue w (Syntax.VString _) = raise Fail "I don't support strings yet"
in
case oper of
Syntax.OAlloc (r, v) =>
@@ -108,6 +107,22 @@ struct
writeValue w condition ;
writeValue w (Syntax.VLabel label))
| Syntax.OLabel _ => ()
+ | Syntax.ORead (r, ptr, off, len) =>
+ (makeOpcode w 14 (isConst off) (isConst len) ;
+ writeVar w r ;
+ writeVar w ptr ;
+ writeValue w off ;
+ writeValue w len)
+ | Syntax.OWrite (ptr, off, len) =>
+ (makeOpcode w 15 (isConst off) (isConst len) ;
+ writeVar w ptr ;
+ writeValue w off ;
+ writeValue w len)
+ | Syntax.OWriteErr (ptr, off, len) =>
+ (makeOpcode w 16 (isConst off) (isConst len) ;
+ writeVar w ptr ;
+ writeValue w off ;
+ writeValue w len)
end
fun link (program : Syntax.opcode list) : Word8Vector.vector =