ps5: fix unsafe STASH() by using stack

This commit is contained in:
2026-04-01 19:48:29 +02:00
parent edb799ed39
commit 9590ea43f1

View File

@@ -214,8 +214,9 @@ static void generate_expression(node_t* expression)
break;
case ARRAY_INDEXING:
generate_base_address(expression->children[0]); // identifier child
STASH();
PUSHQ(RAX);
generate_expression(expression->children[1]); // index expression
POPQ(RCX);
EMIT("leaq (%s, %s, 8), %s", RCX, RAX, RAX); // rcx + 8*rax -> rax
EMIT("movq (%s), %s", RAX, RAX); // deref rax
break;
@@ -288,8 +289,9 @@ static void generate_assignment_statement(node_t* statement)
EMIT("movq %s, (%s)", RCX, RAX);
} else if (child->type == ARRAY_INDEXING) {
generate_base_address(child->children[0]);
STASH();
PUSHQ(RAX);
generate_expression(child->children[1]);
POPQ(RCX);
EMIT("leaq (%s, %s, 8), %s", RCX, RAX, RCX);
generate_expression(statement->children[1]);
EMIT("movq %s, (%s)", RAX, RCX); // save the value in rax to the address of identifier[index]