feat: implement basic while loop generation in asmGenerator

This commit is contained in:
Guy C 2025-02-24 04:47:21 +00:00
parent 2bed722a4f
commit 909114bdce

View File

@ -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()
}