diff options
Diffstat (limited to 'linker.sml')
| -rw-r--r-- | linker.sml | 61 |
1 files changed, 45 insertions, 16 deletions
@@ -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 |
