mirror of
https://github.com/ziglang/zig.git
synced 2026-02-12 20:37:54 +00:00
x86_64: remove scratch data tags
This commit is contained in:
parent
c23e80e671
commit
3681da25f8
@ -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,
|
||||
} },
|
||||
},
|
||||
|
||||
@ -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 => {
|
||||
|
||||
@ -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 = ._,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user