diff options
Diffstat (limited to 'codegen.sml')
| -rw-r--r-- | codegen.sml | 6 |
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 |
