From 909114bdce3930b3f2433903cb5690a584750684 Mon Sep 17 00:00:00 2001 From: Guy C Date: Mon, 24 Feb 2025 04:47:21 +0000 Subject: [PATCH] feat: implement basic while loop generation in asmGenerator --- src/main/wacc/backend/asmGenerator.scala | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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() }