aboutsummaryrefslogtreecommitdiff
path: root/mips.c
diff options
context:
space:
mode:
Diffstat (limited to 'mips.c')
-rw-r--r--mips.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/mips.c b/mips.c
index e4039ee..3c5179d 100644
--- a/mips.c
+++ b/mips.c
@@ -345,16 +345,20 @@ void mips_generate(void) {
}
}
break;
- case BEQZ:
+ case BEQ:
+ case BNE:
{
int rs = mips_to_reg(i->src1, reg_v0);
- printf("\tbeqz $%d, _L%d\n", rs, i->dest->info.imm);
- }
- break;
- case BNEZ:
- {
- int rs = mips_to_reg(i->src1, reg_v0);
- printf("\tbnez $%d, _L%d\n", rs, i->dest->info.imm);
+ int rt;
+ const char *b = i->op == BEQ ? "beq" : "bne";
+ if (i->src2->kind == IMM)
+ printf("\t%s$%d, %d, _L%d\n", b, rs, i->src2->info.imm,
+ i->dest->info.imm);
+ else
+ {
+ rt = mips_to_reg(i->src2, reg_v1);
+ printf("\t%s$%d, $%d, _L%d\n", b, rs, rt, i->dest->info.imm);
+ }
}
break;
case GOTO: