commit fd0e69ba135f7fc6fc9dc95917128fbc99b806ed
parent 1c41819e40c2bc91f7495ba692e528fdaff4a25d
Author: Nihal Jere <nihal@nihaljere.xyz>
Date: Fri, 4 Feb 2022 18:45:29 -0600
x64: pick store size using temp size
Diffstat:
M | x64.c | | | 17 | ++++++++++++++++- |
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/x64.c b/x64.c
@@ -885,7 +885,22 @@ emitblock(struct data *const text, const struct iproc *const proc, const struct
NEXT;
assert(ins->op == IR_EXTRA);
assert(ins->valtype == VT_TEMP);
- total += mov_mr64_r64(text, proc->temps.data[ins->val].reg, src);
+ switch (proc->temps.data[ins->val].size) {
+ case 8:
+ total += mov_mr64_r64(text, proc->temps.data[ins->val].reg, src);
+ break;
+ case 4:
+ total += mov_mr32_r32(text, proc->temps.data[ins->val].reg, src);
+ break;
+ case 2:
+ total += mov_mr16_r16(text, proc->temps.data[ins->val].reg, src);
+ break;
+ case 1:
+ total += mov_mr8_r8(text, proc->temps.data[ins->val].reg, src);
+ break;
+ default:
+ die("x64: emitblock: IR_STORE: bad size");
+ }
NEXT;
break;
case IR_ASSIGN: