feat: x86 code generation implementation without runtime checking #29

Merged
gk1623 merged 58 commits from asm-gen into master 2025-02-27 18:54:57 +00:00
5 changed files with 389 additions and 196 deletions
Showing only changes of commit 909114bdce - Show all commits

View File

@@ -105,6 +105,18 @@ object asmGenerator {
elseBranch.flatMap(generateStmt) ++ elseBranch.flatMap(generateStmt) ++
List(LabelDef(endLabel)) 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() case _ => List()
} }