From 9ca50540e6b9d77f4e3737c575e101fc9b6b3604 Mon Sep 17 00:00:00 2001 From: Guy C Date: Wed, 26 Feb 2025 01:10:14 +0000 Subject: [PATCH] fix: fixed implementation of if statement code gen --- src/main/wacc/backend/asmGenerator.scala | 16 ++++------------ src/test/wacc/examples.scala | 2 +- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/main/wacc/backend/asmGenerator.scala b/src/main/wacc/backend/asmGenerator.scala index da34592..f3df8a5 100644 --- a/src/main/wacc/backend/asmGenerator.scala +++ b/src/main/wacc/backend/asmGenerator.scala @@ -166,8 +166,8 @@ object asmGenerator { val endLabel = labelGenerator.getLabel() chain ++= evalExprOntoStack(cond) - chain += Compare(stack.head(SizeDir.Word), ImmediateVal(0)) - chain += stack.drop() + chain += stack.pop(RAX) + chain += Compare(RAX, ImmediateVal(0)) chain += Jump(LabelArg(elseLabel), Cond.Equal) chain ++= thenBranch.foldMap(generateStmt) @@ -183,8 +183,8 @@ object asmGenerator { chain += LabelDef(startLabel) chain ++= evalExprOntoStack(cond) - chain += Compare(stack.head(SizeDir.Word), ImmediateVal(0)) - chain += stack.drop() + chain += stack.pop(RAX) + chain += Compare(RAX, ImmediateVal(0)) chain += Jump(LabelArg(endLabel), Cond.Equal) chain ++= body.foldMap(generateStmt) @@ -251,20 +251,12 @@ object asmGenerator { chain += stack.push(RAX) case BinaryOperator.Div => - // chain += stack.pop(RDX) - // chain += stack.pop(RAX) - // chain += stack.push(RDX) - // chain += stack.push(RAX) chain += CDQ() chain += Divide(stack.head(SizeDir.Word)) chain += stack.drop() chain += stack.push(RAX) case BinaryOperator.Mod => - // chain += stack.pop(RDX) - // chain += stack.pop(RAX) - // chain += stack.push(RDX) - // chain += stack.push(RAX) chain += CDQ() chain += Divide(stack.head(SizeDir.Word)) chain += stack.drop() diff --git a/src/test/wacc/examples.scala b/src/test/wacc/examples.scala index c3189bb..e8a0e28 100644 --- a/src/test/wacc/examples.scala +++ b/src/test/wacc/examples.scala @@ -92,7 +92,7 @@ class ParallelExamplesSpec extends AnyFlatSpec with BeforeAndAfterAll with Paral "^.*wacc-examples/valid/expressions.*$", "^.*wacc-examples/valid/function/nested_functions.*$", "^.*wacc-examples/valid/function/simple_functions.*$", - "^.*wacc-examples/valid/if.*$", + // "^.*wacc-examples/valid/if.*$", "^.*wacc-examples/valid/IO/print.*$", // "^.*wacc-examples/valid/IO/read.*$", "^.*wacc-examples/valid/IO/IOLoop.wacc.*$",