diff options
author | Teddy <ted.sybil@gmail.com> | 2014-05-05 06:10:29 +0800 |
---|---|---|
committer | Teddy <ted.sybil@gmail.com> | 2014-05-05 06:10:29 +0800 |
commit | 234bad3c4713b9795b9ec21b278fca78fcf65a1c (patch) | |
tree | 6df06ea5d1b7de141baa1f08d2f1779404ee3e28 /mips.c | |
parent | b26b06118a29dc717644f690722ec70b230e76a5 (diff) |
sne seq opt
Diffstat (limited to 'mips.c')
-rw-r--r-- | mips.c | 20 |
1 files changed, 12 insertions, 8 deletions
@@ -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: |