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:
M | ir.c | | | 2 | +- |
M | ir.h | | | 2 | +- |
M | util.c | | | 30 | +++++++++++++++--------------- |
M | x64.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;