Skip to content

Commit 0270897

Browse files
committed
feat: add little optimization for O2
1 parent f58e068 commit 0270897

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/arch/z80/visitor/translator.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from src.arch.z80.visitor.unary_op_translator import UnaryOpTranslator
2323
from src.symbols import sym as symbols
2424
from src.symbols.arrayaccess import SymbolARRAYACCESS
25+
from src.symbols.binary import SymbolBINARY
2526
from src.symbols.id_ import ref
2627
from src.symbols.type_ import Type
2728

@@ -216,7 +217,7 @@ def visit_ARGUMENT(self, node):
216217
return
217218

218219
# ByRef argument
219-
if node.value.token != "ARRAYLOAD":
220+
if node.value.token not in ("ARRAYLOAD", "ARRAYACCESS"):
220221
scope = node.value.scope
221222
if node.t[0] == "_":
222223
t = optemps.new_t()
@@ -238,8 +239,18 @@ def visit_ARGUMENT(self, node):
238239
return
239240

240241
# Must compute Address of @array(...)
241-
node.value = SymbolARRAYACCESS.copy_from(node.value)
242-
node.value = symbols.UNARY("ADDRESS", node.value, node.lineno, type_=self.TYPE(gl.PTR_TYPE))
242+
if node.value.scope == SCOPE.global_ and self.O_LEVEL > 1: # Calculate offset if global variable
243+
node.value = SymbolBINARY.make_node(
244+
"PLUS",
245+
symbols.UNARY("ADDRESS", node.value.entry, node.value.lineno, type_=self.TYPE(gl.PTR_TYPE)),
246+
symbols.NUMBER(node.value.offset, lineno=node.value.lineno, type_=self.TYPE(gl.PTR_TYPE)),
247+
lineno=node.lineno,
248+
func=lambda x, y: x + y,
249+
)
250+
else:
251+
node.value = SymbolARRAYACCESS.copy_from(node.value)
252+
node.value = symbols.UNARY("ADDRESS", node.value, node.lineno, type_=self.TYPE(gl.PTR_TYPE))
253+
243254
yield node.value
244255

245256
def visit_ARRAYLOAD(self, node):

0 commit comments

Comments
 (0)