nooc

nooc programming language compiler
git clone git://git.nihaljere.xyz/nooc
Log | Files | Refs | LICENSE

commit c3c644ca25e8ae9be6aa62c7cf2dca86d254bead
parent 29daf364ea9ec51ef93858182e65731a74cd1025
Author: Nihal Jere <nihal@nihaljere.xyz>
Date:   Wed, 12 Jan 2022 20:59:06 -0600

ir: rename instr.id to instr.val

Diffstat:
Mir.c | 2+-
Mir.h | 2+-
Mutil.c | 30+++++++++++++++---------------
Mx64.c | 38+++++++++++++++++++-------------------
4 files changed, 36 insertions(+), 36 deletions(-)

diff --git a/ir.c b/ir.c @@ -18,7 +18,7 @@ extern struct exprs exprs; extern struct assgns assgns; extern struct toplevel toplevel; -#define PUTINS(op, val) ins = (struct instr){(op), (val)} ; bumpinterval(out, &ins, val) ; array_add(out, ins) ; +#define PUTINS(op, val) ins = (struct instr){(val), (op)} ; bumpinterval(out, &ins, val) ; array_add(out, ins) ; #define STARTINS(op, val) PUTINS((op), (val)) ; curi++ ; #define NEWTMP tmpi++; interval.start = curi + 1; interval.end = curi + 1; array_add((&out->intervals), interval); diff --git a/ir.h b/ir.h @@ -1,4 +1,5 @@ struct instr { + uint64_t val; enum { IR_NONE, @@ -26,7 +27,6 @@ struct instr { IR_SIZE, IR_EXTRA, } op; - uint64_t id; }; struct interval { diff --git a/util.c b/util.c @@ -139,53 +139,53 @@ dumpir(struct iproc *instrs) switch (instr->op) { case IR_IN: - fprintf(stderr, "in %lu\n", instr->id); + fprintf(stderr, "in %lu\n", instr->val); break; case IR_SIZE: - fprintf(stderr, "s%lu ", instr->id); + fprintf(stderr, "s%lu ", instr->val); break; case IR_IMM: - fprintf(stderr, "imm %lu\n", instr->id); + fprintf(stderr, "imm %lu\n", instr->val); break; case IR_ASSIGN: - fprintf(stderr, "%%%lu = ", instr->id); + fprintf(stderr, "%%%lu = ", instr->val); break; case IR_ALLOC: - fprintf(stderr, "alloc %lu\n", instr->id); + fprintf(stderr, "alloc %lu\n", instr->val); break; case IR_STORE: - fprintf(stderr, "store %%%lu", instr->id); + fprintf(stderr, "store %%%lu", instr->val); break; case IR_LOAD: - fprintf(stderr, "load %%%lu\n", instr->id); + fprintf(stderr, "load %%%lu\n", instr->val); break; case IR_ADD: - fprintf(stderr, "add %%%lu", instr->id); + fprintf(stderr, "add %%%lu", instr->val); break; case IR_CEQ: - fprintf(stderr, "ceq %%%lu", instr->id); + fprintf(stderr, "ceq %%%lu", instr->val); break; case IR_EXTRA: - fprintf(stderr, ", %%%lu\n", instr->id); + fprintf(stderr, ", %%%lu\n", instr->val); break; case IR_CALLARG: - fprintf(stderr, ", %%%lu", instr->id); + fprintf(stderr, ", %%%lu", instr->val); break; case IR_CALL: callarg = true; - fprintf(stderr, "call $%lu", instr->id); + fprintf(stderr, "call $%lu", instr->val); break; case IR_RETURN: fputs("return\n", stderr); break; case IR_CONDJUMP: - fprintf(stderr, "condjump :%lu", instr->id); + fprintf(stderr, "condjump :%lu", instr->val); break; case IR_JUMP: - fprintf(stderr, "jump :%lu\n", instr->id); + fprintf(stderr, "jump :%lu\n", instr->val); break; case IR_LABEL: - fprintf(stderr, "label :%lu\n", instr->id); + fprintf(stderr, "label :%lu\n", instr->val); break; default: fprintf(stderr, "%d\n", instr->op); diff --git a/x64.c b/x64.c @@ -683,7 +683,7 @@ emitblock(struct data *text, struct iproc *proc, struct instr *start, struct ins switch (ins->op) { // FIXME: we don't handle jumps backward yet case IR_JUMP: - total += jmp(text, emitblock(NULL, proc, ins + 1, end, ins->id)); + total += jmp(text, emitblock(NULL, proc, ins + 1, end, ins->val)); NEXT; break; case IR_RETURN: @@ -693,15 +693,15 @@ emitblock(struct data *text, struct iproc *proc, struct instr *start, struct ins NEXT; break; case IR_SIZE: - size = ins->id; + size = ins->val; NEXT; switch (ins->op) { case IR_STORE: - src = proc->intervals.data[ins->id].reg; + src = proc->intervals.data[ins->val].reg; NEXT; assert(ins->op == IR_EXTRA); - total += mov_mr64_r64(text, proc->intervals.data[ins->id].reg, src); + total += mov_mr64_r64(text, proc->intervals.data[ins->val].reg, src); NEXT; break; default: @@ -709,47 +709,47 @@ emitblock(struct data *text, struct iproc *proc, struct instr *start, struct ins } break; case IR_ASSIGN: - tmp = ins->id; - dest = proc->intervals.data[ins->id].reg; + tmp = ins->val; + dest = proc->intervals.data[ins->val].reg; NEXT; assert(ins->op == IR_SIZE); - size = ins->id; + size = ins->val; NEXT; switch (ins->op) { case IR_CEQ: - total += mov_r64_r64(text, dest, proc->intervals.data[ins->id].reg); + total += mov_r64_r64(text, dest, proc->intervals.data[ins->val].reg); NEXT; - total += cmp_r64_r64(text, dest, proc->intervals.data[ins->id].reg); + total += cmp_r64_r64(text, dest, proc->intervals.data[ins->val].reg); NEXT; if (ins->op == IR_CONDJUMP) { curi++; - label = ins->id; + label = ins->val; NEXT; assert(ins->op == IR_EXTRA); - if (ins->id == tmp) { + if (ins->val == tmp) { total += jne(text, emitblock(NULL, proc, ins + 1, end, label)); } NEXT; } break; case IR_ADD: - total += mov_r64_r64(text, dest, proc->intervals.data[ins->id].reg); + total += mov_r64_r64(text, dest, proc->intervals.data[ins->val].reg); NEXT; - total += add_r64_r64(text, dest, proc->intervals.data[ins->id].reg); + total += add_r64_r64(text, dest, proc->intervals.data[ins->val].reg); NEXT; break; case IR_IMM: - total += mov_r64_imm(text, dest, ins->id); + total += mov_r64_imm(text, dest, ins->val); NEXT; break; case IR_IN: - total += mov_disp8_r64_m64(text, dest, RBP, 8*ins->id + 16); + total += mov_disp8_r64_m64(text, dest, RBP, 8*ins->val + 16); NEXT; break; case IR_LOAD: - total += mov_r64_mr64(text, dest, proc->intervals.data[ins->id].reg); + total += mov_r64_mr64(text, dest, proc->intervals.data[ins->val].reg); NEXT; break; case IR_ALLOC: @@ -764,7 +764,7 @@ emitblock(struct data *text, struct iproc *proc, struct instr *start, struct ins break; case IR_CALL: count = 0; - dest = ins->id; + dest = ins->val; for (int i = 0; i < 16; i++) { if (active & (1 << i)) { @@ -775,7 +775,7 @@ emitblock(struct data *text, struct iproc *proc, struct instr *start, struct ins NEXT; while (ins->op == IR_CALLARG) { count++; - total += push_r64(text, proc->intervals.data[ins->id].reg); + total += push_r64(text, proc->intervals.data[ins->val].reg); NEXT; } @@ -791,7 +791,7 @@ emitblock(struct data *text, struct iproc *proc, struct instr *start, struct ins } break; case IR_LABEL: - if (ins->id == end_label) + if (ins->val == end_label) goto done; NEXT;