From 18534a64a6d36571d402f6c6bf0bbdb8bad4c37a Mon Sep 17 00:00:00 2001 From: Jonny Date: Wed, 26 Feb 2025 21:39:23 +0000 Subject: [PATCH] feat: Zero registers via XOR --- src/main/wacc/backend/asmGenerator.scala | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/wacc/backend/asmGenerator.scala b/src/main/wacc/backend/asmGenerator.scala index 0e0643e..54fc7db 100644 --- a/src/main/wacc/backend/asmGenerator.scala +++ b/src/main/wacc/backend/asmGenerator.scala @@ -73,7 +73,7 @@ object asmGenerator { funcPrologue(), Chain.one(stack.align()), main.foldMap(generateStmt(_)), - Chain.one(Move(RAX, ImmediateVal(0))), + Chain.one(Xor(RAX, RAX)), funcEpilogue(), generateBuiltInFuncs(), funcs.foldMap(generateUserFunc(_)) @@ -143,7 +143,7 @@ object asmGenerator { Chain( stack.align(), assemblyIR.Call(CLibFunc.PrintF), - Move(RDI, ImmediateVal(0)), + Xor(RDI, RDI), assemblyIR.Call(CLibFunc.Fflush) ) ) @@ -293,7 +293,10 @@ object asmGenerator { case _ => // Other array types TODO } - case BoolLiter(v) => chain += stack.push(ImmediateVal(if (v) 1 else 0)) + case BoolLiter(true) => chain += stack.push(ImmediateVal(1)) + case BoolLiter(false) => + chain += Xor(RAX, RAX) + chain += stack.push(RAX) case NullLiter() => chain += stack.push(ImmediateVal(0)) case ArrayElem(_, _) => // TODO: Implement handling case UnaryOp(x, op) =>