ps5: generate_expression

This commit is contained in:
2026-03-31 13:18:45 +02:00
parent bdd3d3b6aa
commit 8201269c73
2 changed files with 6 additions and 1 deletions

View File

@@ -29,6 +29,7 @@
#define EMIT(fmt, ...) printf("\t" fmt "\n" __VA_OPT__(, ) __VA_ARGS__)
#define MOVQ(src, dst) EMIT("movq %s, %s", (src), (dst))
#define MOVQ_IMM(imm, dst) EMIT("movq $%ld, %s", (int64_t)(imm), (dst))
#define PUSHQ(src) EMIT("pushq %s", (src))
#define POPQ(src) EMIT("popq %s", (src))

View File

@@ -1,3 +1,4 @@
#include "symbol_table.h"
#include "vslc.h"
// This header defines a bunch of macros we can use to emit assembly to stdout
@@ -168,9 +169,12 @@ static void generate_expression(node_t* expression)
// (The candidates are NUMBER_LITERAL, IDENTIFIER, ARRAY_INDEXING, OPERATOR and FUNCTION_CALL)
switch (expression->type) {
case NUMBER_LITERAL:
MOVQ_IMM(expression->data.number_literal, RAX);
break;
case IDENTIFIER:
symbol_t *sym = expression->symbol;
symbol_t *value = symbol_hashmap_lookup(sym->function_symtable->hashmap, sym->name);
MOVQ_IMM(value->node->data.number_literal, RAX);
break;
case ARRAY_INDEXING:
break;