diff --git a/src/main/wacc/backend/asmGenerator.scala b/src/main/wacc/backend/asmGenerator.scala index ec16435..c8981af 100644 --- a/src/main/wacc/backend/asmGenerator.scala +++ b/src/main/wacc/backend/asmGenerator.scala @@ -105,6 +105,18 @@ object asmGenerator { elseBranch.flatMap(generateStmt) ++ List(LabelDef(endLabel)) } + case While(cond, body) => { + val startLabel = labelGenerator.getLabel() + val endLabel = labelGenerator.getLabel() + List(LabelDef(startLabel)) ++ + evalExprIntoReg(cond, Register(RegSize.R64, RegName.AX)) ++ + List( + Compare(Register(RegSize.R64, RegName.AX), ImmediateVal(0)), + Jump(LabelArg(endLabel), Cond.Equal) + ) ++ + body.flatMap(generateStmt) ++ + List(Jump(LabelArg(startLabel)), LabelDef(endLabel)) + } case _ => List() }