aboutsummaryrefslogtreecommitdiff
path: root/mips.c
diff options
context:
space:
mode:
authorTeddy <ted.sybil@gmail.com>2014-05-05 06:10:29 +0800
committerTeddy <ted.sybil@gmail.com>2014-05-05 06:10:29 +0800
commit234bad3c4713b9795b9ec21b278fca78fcf65a1c (patch)
tree6df06ea5d1b7de141baa1f08d2f1779404ee3e28 /mips.c
parentb26b06118a29dc717644f690722ec70b230e76a5 (diff)
sne seq opt
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: