summaryrefslogtreecommitdiffstats
path: root/codegen.sml
diff options
context:
space:
mode:
Diffstat (limited to 'codegen.sml')
-rw-r--r--codegen.sml6
1 files changed, 5 insertions, 1 deletions
diff --git a/codegen.sml b/codegen.sml
index c7f0f2d..30928d4 100644
--- a/codegen.sml
+++ b/codegen.sml
@@ -144,7 +144,11 @@ struct
in
bodyASM @ funcsASM
end
- | Syntax.CPrimop (Syntax.PExit, [arg], _, _)=> [Syntax.OExit (translateVal arg)]
+ | Syntax.CPrimop (Syntax.PExit, [arg], _, _) => [Syntax.OExit (translateVal arg)]
+ | Syntax.CPrimop (Syntax.PAdd, [x, y], [res], [k]) => Syntax.OAdd (translate res, translateVal x, translateVal y) :: go k
+ | Syntax.CPrimop (Syntax.PSub, [x, y], [res], [k]) => Syntax.OSub (translate res, translateVal x, translateVal y) :: go k
+ | Syntax.CPrimop (Syntax.PMul, [x, y], [res], [k]) => Syntax.OMul (translate res, translateVal x, translateVal y) :: go k
+ | Syntax.CPrimop (Syntax.PDiv, [x, y], [res], [k]) => Syntax.ODiv (translate res, translateVal x, translateVal y) :: go k
| _ => raise Fail ("malformed CPS:\n" ^ Syntax.cexpToString expr)
in go expr
end