x86_64: remove scratch data tags

This commit is contained in:
Jacob Young 2023-05-12 01:16:52 -04:00
parent c23e80e671
commit 3681da25f8
3 changed files with 26 additions and 38 deletions

View File

@ -1079,9 +1079,9 @@ fn asmSetccRegister(self: *Self, reg: Register, cc: bits.Condition) !void {
.fixes = Mir.Inst.Fixes.fromCondition(cc),
.r1 = reg,
} },
.z_and_np, .nz_or_p => .{ .r_scratch = .{
.z_and_np, .nz_or_p => .{ .rr = .{
.r1 = reg,
.scratch_reg = (try self.register_manager.allocReg(null, gp)).to8(),
.r2 = (try self.register_manager.allocReg(null, gp)).to8(),
} },
},
});
@ -1120,8 +1120,8 @@ fn asmSetccMemory(self: *Self, m: Memory, cc: bits.Condition) !void {
.fixes = Mir.Inst.Fixes.fromCondition(cc),
.payload = payload,
} },
.z_and_np, .nz_or_p => .{ .x_scratch = .{
.scratch_reg = (try self.register_manager.allocReg(null, gp)).to8(),
.z_and_np, .nz_or_p => .{ .rx = .{
.r1 = (try self.register_manager.allocReg(null, gp)).to8(),
.payload = payload,
} },
},

View File

@ -95,54 +95,54 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
},
.pseudo_set_z_and_np_r => {
try lower.emit(.none, .setz, &.{
.{ .reg = inst.data.r_scratch.r1 },
.{ .reg = inst.data.rr.r1 },
});
try lower.emit(.none, .setnp, &.{
.{ .reg = inst.data.r_scratch.scratch_reg },
.{ .reg = inst.data.rr.r2 },
});
try lower.emit(.none, .@"and", &.{
.{ .reg = inst.data.r_scratch.r1 },
.{ .reg = inst.data.r_scratch.scratch_reg },
.{ .reg = inst.data.rr.r1 },
.{ .reg = inst.data.rr.r2 },
});
},
.pseudo_set_z_and_np_m_sib,
.pseudo_set_z_and_np_m_rip,
=> {
try lower.emit(.none, .setz, &.{
.{ .mem = lower.mem(inst.ops, inst.data.x_scratch.payload) },
.{ .mem = lower.mem(inst.ops, inst.data.rx.payload) },
});
try lower.emit(.none, .setnp, &.{
.{ .reg = inst.data.x_scratch.scratch_reg },
.{ .reg = inst.data.rx.r1 },
});
try lower.emit(.none, .@"and", &.{
.{ .mem = lower.mem(inst.ops, inst.data.x_scratch.payload) },
.{ .reg = inst.data.x_scratch.scratch_reg },
.{ .mem = lower.mem(inst.ops, inst.data.rx.payload) },
.{ .reg = inst.data.rx.r1 },
});
},
.pseudo_set_nz_or_p_r => {
try lower.emit(.none, .setnz, &.{
.{ .reg = inst.data.r_scratch.r1 },
.{ .reg = inst.data.rr.r1 },
});
try lower.emit(.none, .setp, &.{
.{ .reg = inst.data.r_scratch.scratch_reg },
.{ .reg = inst.data.rr.r2 },
});
try lower.emit(.none, .@"or", &.{
.{ .reg = inst.data.r_scratch.r1 },
.{ .reg = inst.data.r_scratch.scratch_reg },
.{ .reg = inst.data.rr.r1 },
.{ .reg = inst.data.rr.r2 },
});
},
.pseudo_set_nz_or_p_m_sib,
.pseudo_set_nz_or_p_m_rip,
=> {
try lower.emit(.none, .setnz, &.{
.{ .mem = lower.mem(inst.ops, inst.data.x_scratch.payload) },
.{ .mem = lower.mem(inst.ops, inst.data.rx.payload) },
});
try lower.emit(.none, .setp, &.{
.{ .reg = inst.data.x_scratch.scratch_reg },
.{ .reg = inst.data.rx.r1 },
});
try lower.emit(.none, .@"or", &.{
.{ .mem = lower.mem(inst.ops, inst.data.x_scratch.payload) },
.{ .reg = inst.data.x_scratch.scratch_reg },
.{ .mem = lower.mem(inst.ops, inst.data.rx.payload) },
.{ .reg = inst.data.rx.r1 },
});
},
.pseudo_j_z_and_np_inst => {

View File

@ -711,27 +711,27 @@ pub const Inst = struct {
pseudo_cmov_nz_or_p_rm_rip,
/// Set byte if zero flag set and parity flag not set
/// Requires a scratch register!
/// Uses `r_scratch` payload.
/// Uses `rr` payload.
pseudo_set_z_and_np_r,
/// Set byte if zero flag set and parity flag not set
/// Requires a scratch register!
/// Uses `x_scratch` payload.
/// Uses `rx` payload.
pseudo_set_z_and_np_m_sib,
/// Set byte if zero flag set and parity flag not set
/// Requires a scratch register!
/// Uses `x_scratch` payload.
/// Uses `rx` payload.
pseudo_set_z_and_np_m_rip,
/// Set byte if zero flag not set or parity flag set
/// Requires a scratch register!
/// Uses `r_scratch` payload.
/// Uses `rr` payload.
pseudo_set_nz_or_p_r,
/// Set byte if zero flag not set or parity flag set
/// Requires a scratch register!
/// Uses `x_scratch` payload.
/// Uses `rx` payload.
pseudo_set_nz_or_p_m_sib,
/// Set byte if zero flag not set or parity flag set
/// Requires a scratch register!
/// Uses `x_scratch` payload.
/// Uses `rx` payload.
pseudo_set_nz_or_p_m_rip,
/// Jump if zero flag set and parity flag not set
/// Uses `inst` payload.
@ -836,18 +836,6 @@ pub const Inst = struct {
i: u8,
payload: u32,
},
/// Register, scratch register
r_scratch: struct {
fixes: Fixes = ._,
r1: Register,
scratch_reg: Register,
},
/// Scratch register, followed by Custom payload found in extra.
x_scratch: struct {
fixes: Fixes = ._,
scratch_reg: Register,
payload: u32,
},
/// Custom payload found in extra.
x: struct {
fixes: Fixes = ._,