mirror of
https://github.com/ziglang/zig.git
synced 2025-12-27 16:43:07 +00:00
stage2: remove obsolete MOV variant 0b11
* variant `0b11` when both `reg1 != .none` and `reg2 != .none` is identical to `0b00` therefore it can safely be removed * fix proper destination register size calculation when setting register from another source register
This commit is contained in:
parent
4a40c0a80c
commit
71c5eebd32
@ -2968,9 +2968,8 @@ fn genSetReg(self: *Self, ty: Type, reg: Register, mcv: MCValue) InnerError!void
|
||||
_ = try self.addInst(.{
|
||||
.tag = .mov,
|
||||
.ops = (Mir.Ops{
|
||||
.reg1 = reg,
|
||||
.reg1 = registerAlias(reg, @divExact(src_reg.size(), 8)),
|
||||
.reg2 = src_reg,
|
||||
.flags = 0b11,
|
||||
}).encode(),
|
||||
.data = undefined,
|
||||
});
|
||||
|
||||
@ -1119,17 +1119,7 @@ fn mirMovImpl(
|
||||
encoder.imm32(imm_op);
|
||||
break :blk;
|
||||
}
|
||||
// mov reg1, reg2
|
||||
// RM
|
||||
const opc: u8 = if (ops.reg1.size() == 8) 0x8a else 0x8b;
|
||||
const encoder = try Encoder.init(code, 3);
|
||||
encoder.rex(.{
|
||||
.w = ops.reg1.size() == 64 and ops.reg2.size() == 64,
|
||||
.r = ops.reg1.isExtended(),
|
||||
.b = ops.reg2.isExtended(),
|
||||
});
|
||||
encoder.opcode_1byte(opc);
|
||||
encoder.modRm_direct(ops.reg1.lowId(), ops.reg2.lowId());
|
||||
return EmitResult.err(allocator, src_loc, "TODO unused variant: mov reg1, reg2, 0b11", .{});
|
||||
},
|
||||
}
|
||||
return EmitResult.ok();
|
||||
|
||||
@ -145,7 +145,7 @@ pub const Inst = struct {
|
||||
/// 0b10 [reg1 + imm32], reg2
|
||||
/// 0b10 [reg1 + 0], imm32
|
||||
/// 0b11 [reg1 + imm32], imm32
|
||||
/// 0b11 reg1, reg2 (RM)
|
||||
/// 0b11 AVAILABLE
|
||||
/// Notes:
|
||||
/// * If reg2 is `none` then it means Data field `imm` is used as the immediate.
|
||||
/// * When two imm32 values are required, Data field `payload` points at `ImmPair`.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user