feat: implement basic while loop generation in asmGenerator
This commit is contained in:
parent
2bed722a4f
commit
909114bdce
@ -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()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user