authorgravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-05-28 09:05:57+07:00
committergravatar for koachan@protonmail.comKoakuma <koachan@protonmail.com> 2022-06-06 20:34:53+07:00
log3220e0b61c127b60188a040b5f4679765e8f6f40
tree8aea23feed2c7c46c0fcbcbbda857f2b2c8e90ce
parent9db81fee5df6abcf1eb1212ecc005d22f7b2ca32

stage2: sparc64: Proper handling of compare flags


1 files changed, 6 insertions(+), 0 deletions(-)

src/arch/sparc64/CodeGen.zig+6
......@@ -2029,6 +2029,7 @@ fn binOpImmediate(
20292029 defer if (new_lhs_lock) |reg| self.register_manager.unlockReg(reg);
20302030
20312031 const dest_reg = switch (mir_tag) {
2032 .cmp => undefined, // cmp has no destination register
20322033 else => if (metadata) |md| blk: {
20332034 if (lhs_is_register and self.reuseOperand(
20342035 md.inst,
......@@ -2148,6 +2149,7 @@ fn binOpRegister(
21482149 defer if (new_rhs_lock) |reg| self.register_manager.unlockReg(reg);
21492150
21502151 const dest_reg = switch (mir_tag) {
2152 .cmp => undefined, // cmp has no destination register
21512153 else => if (metadata) |md| blk: {
21522154 if (lhs_is_register and self.reuseOperand(md.inst, md.lhs, 0, lhs)) {
21532155 break :blk lhs_reg;
......@@ -3064,6 +3066,10 @@ fn processDeath(self: *Self, inst: Air.Inst.Index) void {
30643066 .register => |reg| {
30653067 self.register_manager.freeReg(reg);
30663068 },
3069 .register_with_overflow => |rwo| {
3070 self.register_manager.freeReg(rwo.reg);
3071 self.compare_flags_inst = null;
3072 },
30673073 .compare_flags_signed, .compare_flags_unsigned => {
30683074 self.compare_flags_inst = null;
30693075 },