From c6e8ff282e879fa72291893e2295012e8f45efe1 Mon Sep 17 00:00:00 2001 From: wqz <1197460504@qq.com> Date: Mon, 19 Jun 2023 21:36:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=9E=E7=8E=B0=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=EF=BC=8C=E7=94=9F=E6=88=90=E7=9A=84=E6=B1=87=E7=BC=96?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=8F=AF=E4=BB=A5=E5=BE=97=E5=88=B0=E8=83=BD?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E6=89=A7=E8=A1=8C=E7=9A=84=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/backend/codegen.cpp | 9 +++++++-- src/backend/codegen.hpp | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/backend/codegen.cpp b/src/backend/codegen.cpp index c2acc8a..b995521 100644 --- a/src/backend/codegen.cpp +++ b/src/backend/codegen.cpp @@ -48,6 +48,7 @@ namespace backend { string code; code += space + ".global " + func->getName() + endl; + code += space + ".arm" + endl; code += space + ".p2align " + std::to_string(int_p2align) + endl; code += space + ".type " + func->getName() + ", %function" + endl; code += func->getName() + ":" + endl; @@ -242,12 +243,12 @@ namespace backend string lname, rname; auto lhs = bInst->getLhs(); if (isa(lhs)) - lname = to_string(dynamic_cast(lhs)->getInt()); + lname = "#" + to_string(dynamic_cast(lhs)->getInt()); else lname = "r" + lhs->getName(); auto rhs = bInst->getRhs(); if (isa(rhs)) - rname = to_string(dynamic_cast(rhs)->getInt()); + rname = "#" + to_string(dynamic_cast(rhs)->getInt()); else rname = "r" + rhs->getName(); auto res = stoi(bInst->getName()); @@ -296,6 +297,10 @@ namespace backend code += space + "mov\tr3, #" + to_string(constant_value) + endl; code += space + "str\tr3, [fp, #" + to_string(offset) + "]" + endl; } + else if (isa(value)) + { + code += space + "str\tr0, [fp, #" + to_string(offset) + "]" + endl; + } else { code += space + "str\tr" + value->getName() + ", [fp, #" + to_string(offset) + "]" + endl; diff --git a/src/backend/codegen.hpp b/src/backend/codegen.hpp index d566273..eb3e8f5 100644 --- a/src/backend/codegen.hpp +++ b/src/backend/codegen.hpp @@ -55,7 +55,7 @@ using std::vector; namespace backend { - static const string space = string(4, ' '); + static const string space = "\t"; static const string endl = "\n"; // only for armv7 static const int int_align = 4;