authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-12 01:16:52-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-05-15 03:07:51-04:00
log3681da25f865d499cffe923b7f0721cf759d3591
tree329952ecd7bb6f5947f96b79e446e372ab3c7006
parentc23e80e671686278ea2ea23d164a2c0839ca372c

x86_64: remove scratch data tags


3 files changed, 26 insertions(+), 38 deletions(-)

src/arch/x86_64/CodeGen.zig+4-4
......@@ -1079,9 +1079,9 @@ fn asmSetccRegister(self: *Self, reg: Register, cc: bits.Condition) !void {
10791079 .fixes = Mir.Inst.Fixes.fromCondition(cc),
10801080 .r1 = reg,
10811081 } },
1082 .z_and_np, .nz_or_p => .{ .r_scratch = .{
1082 .z_and_np, .nz_or_p => .{ .rr = .{
10831083 .r1 = reg,
1084 .scratch_reg = (try self.register_manager.allocReg(null, gp)).to8(),
1084 .r2 = (try self.register_manager.allocReg(null, gp)).to8(),
10851085 } },
10861086 },
10871087 });
......@@ -1120,8 +1120,8 @@ fn asmSetccMemory(self: *Self, m: Memory, cc: bits.Condition) !void {
11201120 .fixes = Mir.Inst.Fixes.fromCondition(cc),
11211121 .payload = payload,
11221122 } },
1123 .z_and_np, .nz_or_p => .{ .x_scratch = .{
1124 .scratch_reg = (try self.register_manager.allocReg(null, gp)).to8(),
1123 .z_and_np, .nz_or_p => .{ .rx = .{
1124 .r1 = (try self.register_manager.allocReg(null, gp)).to8(),
11251125 .payload = payload,
11261126 } },
11271127 },
src/arch/x86_64/Lower.zig+16-16
......@@ -95,54 +95,54 @@ pub fn lowerMir(lower: *Lower, index: Mir.Inst.Index) Error!struct {
9595 },
9696 .pseudo_set_z_and_np_r => {
9797 try lower.emit(.none, .setz, &.{
98 .{ .reg = inst.data.r_scratch.r1 },
98 .{ .reg = inst.data.rr.r1 },
9999 });
100100 try lower.emit(.none, .setnp, &.{
101 .{ .reg = inst.data.r_scratch.scratch_reg },
101 .{ .reg = inst.data.rr.r2 },
102102 });
103103 try lower.emit(.none, .@"and", &.{
104 .{ .reg = inst.data.r_scratch.r1 },
105 .{ .reg = inst.data.r_scratch.scratch_reg },
104 .{ .reg = inst.data.rr.r1 },
105 .{ .reg = inst.data.rr.r2 },
106106 });
107107 },
108108 .pseudo_set_z_and_np_m_sib,
109109 .pseudo_set_z_and_np_m_rip,
110110 => {
111111 try lower.emit(.none, .setz, &.{
112 .{ .mem = lower.mem(inst.ops, inst.data.x_scratch.payload) },
112 .{ .mem = lower.mem(inst.ops, inst.data.rx.payload) },
113113 });
114114 try lower.emit(.none, .setnp, &.{
115 .{ .reg = inst.data.x_scratch.scratch_reg },
115 .{ .reg = inst.data.rx.r1 },
116116 });
117117 try lower.emit(.none, .@"and", &.{
118 .{ .mem = lower.mem(inst.ops, inst.data.x_scratch.payload) },
119 .{ .reg = inst.data.x_scratch.scratch_reg },
118 .{ .mem = lower.mem(inst.ops, inst.data.rx.payload) },
119 .{ .reg = inst.data.rx.r1 },
120120 });
121121 },
122122 .pseudo_set_nz_or_p_r => {
123123 try lower.emit(.none, .setnz, &.{
124 .{ .reg = inst.data.r_scratch.r1 },
124 .{ .reg = inst.data.rr.r1 },
125125 });
126126 try lower.emit(.none, .setp, &.{
127 .{ .reg = inst.data.r_scratch.scratch_reg },
127 .{ .reg = inst.data.rr.r2 },
128128 });
129129 try lower.emit(.none, .@"or", &.{
130 .{ .reg = inst.data.r_scratch.r1 },
131 .{ .reg = inst.data.r_scratch.scratch_reg },
130 .{ .reg = inst.data.rr.r1 },
131 .{ .reg = inst.data.rr.r2 },
132132 });
133133 },
134134 .pseudo_set_nz_or_p_m_sib,
135135 .pseudo_set_nz_or_p_m_rip,
136136 => {
137137 try lower.emit(.none, .setnz, &.{
138 .{ .mem = lower.mem(inst.ops, inst.data.x_scratch.payload) },
138 .{ .mem = lower.mem(inst.ops, inst.data.rx.payload) },
139139 });
140140 try lower.emit(.none, .setp, &.{
141 .{ .reg = inst.data.x_scratch.scratch_reg },
141 .{ .reg = inst.data.rx.r1 },
142142 });
143143 try lower.emit(.none, .@"or", &.{
144 .{ .mem = lower.mem(inst.ops, inst.data.x_scratch.payload) },
145 .{ .reg = inst.data.x_scratch.scratch_reg },
144 .{ .mem = lower.mem(inst.ops, inst.data.rx.payload) },
145 .{ .reg = inst.data.rx.r1 },
146146 });
147147 },
148148 .pseudo_j_z_and_np_inst => {
src/arch/x86_64/Mir.zig+6-18
......@@ -711,27 +711,27 @@ pub const Inst = struct {
711711 pseudo_cmov_nz_or_p_rm_rip,
712712 /// Set byte if zero flag set and parity flag not set
713713 /// Requires a scratch register!
714 /// Uses `r_scratch` payload.
714 /// Uses `rr` payload.
715715 pseudo_set_z_and_np_r,
716716 /// Set byte if zero flag set and parity flag not set
717717 /// Requires a scratch register!
718 /// Uses `x_scratch` payload.
718 /// Uses `rx` payload.
719719 pseudo_set_z_and_np_m_sib,
720720 /// Set byte if zero flag set and parity flag not set
721721 /// Requires a scratch register!
722 /// Uses `x_scratch` payload.
722 /// Uses `rx` payload.
723723 pseudo_set_z_and_np_m_rip,
724724 /// Set byte if zero flag not set or parity flag set
725725 /// Requires a scratch register!
726 /// Uses `r_scratch` payload.
726 /// Uses `rr` payload.
727727 pseudo_set_nz_or_p_r,
728728 /// Set byte if zero flag not set or parity flag set
729729 /// Requires a scratch register!
730 /// Uses `x_scratch` payload.
730 /// Uses `rx` payload.
731731 pseudo_set_nz_or_p_m_sib,
732732 /// Set byte if zero flag not set or parity flag set
733733 /// Requires a scratch register!
734 /// Uses `x_scratch` payload.
734 /// Uses `rx` payload.
735735 pseudo_set_nz_or_p_m_rip,
736736 /// Jump if zero flag set and parity flag not set
737737 /// Uses `inst` payload.
......@@ -836,18 +836,6 @@ pub const Inst = struct {
836836 i: u8,
837837 payload: u32,
838838 },
839 /// Register, scratch register
840 r_scratch: struct {
841 fixes: Fixes = ._,
842 r1: Register,
843 scratch_reg: Register,
844 },
845 /// Scratch register, followed by Custom payload found in extra.
846 x_scratch: struct {
847 fixes: Fixes = ._,
848 scratch_reg: Register,
849 payload: u32,
850 },
851839 /// Custom payload found in extra.
852840 x: struct {
853841 fixes: Fixes = ._,