From 5737e8430d43b3b5bd448f761cd2f3c35707a174 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Sun, 28 Apr 2024 15:06:43 -0700 Subject: Add case over int. --- codegen.sml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'codegen.sml') diff --git a/codegen.sml b/codegen.sml index 30928d4..a4fef6c 100644 --- a/codegen.sml +++ b/codegen.sml @@ -2,8 +2,8 @@ structure CodeGen = struct fun enumerate l = ListPair.zip (List.tabulate (length l, (fn x => x)), l) - (* There are 8 registers *) - val tempReg = 7 + (* There are 256 registers *) + val tempReg = 255 structure VarMap = Map (type k = Syntax.var val cmp = Int.compare) @@ -149,6 +149,17 @@ struct | 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 + | Syntax.CPrimop (Syntax.PLess, [x, y], [res], [k]) => Syntax.OLess (translate res, translateVal x, translateVal y) :: go k + | Syntax.CPrimop (Syntax.PEq, [x, y], [res], [k]) => Syntax.OEq (translate res, translateVal x, translateVal y) :: go k + | Syntax.CPrimop (Syntax.PIf, [b], [], [k1, k2]) => + let + val trueLabel = Gensym.new () + in + Syntax.OIf (translateVal b, trueLabel) + :: go k2 + @ Syntax.OLabel trueLabel + :: go k1 + end | _ => raise Fail ("malformed CPS:\n" ^ Syntax.cexpToString expr) in go expr end -- cgit v1.3.1