From 5c8612642b84d2d3f91e6bbe26f9cde2579997f7 Mon Sep 17 00:00:00 2001 From: Koakuma Date: Mon, 13 Jun 2022 00:27:51 +0700 Subject: [PATCH] stage2: sparc64: Use official encoding for `not rs2, rs1` --- src/arch/sparc64/Emit.zig | 2 +- src/arch/sparc64/Mir.zig | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/arch/sparc64/Emit.zig b/src/arch/sparc64/Emit.zig index a5dc3370fb..19eeec023f 100644 --- a/src/arch/sparc64/Emit.zig +++ b/src/arch/sparc64/Emit.zig @@ -203,7 +203,7 @@ fn mirArithmetic2Op(emit: *Emit, inst: Mir.Inst.Index) !void { .@"return" => try emit.writeInstruction(Instruction.@"return"(Register, rs1, rs2)), .cmp => try emit.writeInstruction(Instruction.subcc(Register, rs1, rs2, .g0)), .mov => try emit.writeInstruction(Instruction.@"or"(Register, .g0, rs2, rs1)), - .not => try emit.writeInstruction(Instruction.xnor(Register, .g0, rs2, rs1)), + .not => try emit.writeInstruction(Instruction.xnor(Register, rs2, .g0, rs1)), else => unreachable, } } diff --git a/src/arch/sparc64/Mir.zig b/src/arch/sparc64/Mir.zig index a3c25ff3d5..3ed2787d8d 100644 --- a/src/arch/sparc64/Mir.zig +++ b/src/arch/sparc64/Mir.zig @@ -158,8 +158,9 @@ pub const Inst = struct { /// This uses the arithmetic_2op field, with rs1 /// being the *destination* register. // TODO is it okay to abuse rs1 in this way? - // TODO this differs from official encoding for convenience, fix it later - not, // not rs2/imm, rs1 -> xnor %g0, rs2/imm, rs1 + // not rs2, rs1 -> xnor rs2, %g0, rs1 + // not imm, rs1 -> xnor %g0, imm, rs1 + not, }; /// The position of an MIR instruction within the `Mir` instructions array.