From 9f5889c1263d63b953b3a324da07321deef5ca58 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Sat, 27 Apr 2024 08:28:40 -0700 Subject: Add integer arithmetic. --- linker.sml | 61 +++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 16 deletions(-) (limited to 'linker.sml') 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 -- cgit v1.3.1