Commit 14c0b8c548

Jacob Young <jacobly0@users.noreply.github.com>
2023-03-26 03:26:12
x86_64: remove unused Mir encodings
This also restores the size of Mir.Inst and simplifies logic in general.
1 parent a80be15
Changed files (3)
src/arch/x86_64/CodeGen.zig
@@ -668,20 +668,11 @@ fn asmMemoryRegisterImmediate(
     _ = try self.addInst(.{
         .tag = tag,
         .ops = switch (m) {
-            .sib => switch (imm) {
-                .signed => .mri_sib_s,
-                .unsigned => .mri_sib_u,
-            },
-            .rip => switch (imm) {
-                .signed => .mri_rip_s,
-                .unsigned => .mri_sib_u,
-            },
+            .sib => .mri_sib,
+            .rip => .mri_rip,
             else => unreachable,
         },
-        .data = .{ .rix = .{ .r = reg, .i = switch (imm) {
-            .signed => |s| @bitCast(u32, s),
-            .unsigned => |u| @intCast(u32, u),
-        }, .payload = switch (m) {
+        .data = .{ .rix = .{ .r = reg, .i = @intCast(u8, imm.unsigned), .payload = switch (m) {
             .sib => try self.addExtra(Mir.MemorySib.encode(m)),
             .rip => try self.addExtra(Mir.MemoryRip.encode(m)),
             else => unreachable,
src/arch/x86_64/Emit.zig
@@ -359,27 +359,17 @@ fn mirEncodeGeneric(emit: *Emit, tag: Mir.Inst.Tag, inst: Mir.Inst.Index) InnerE
             op2 = .{ .reg = data.rrx.r1 };
             op2 = .{ .reg = data.rrx.r2 };
         },
-        .mri_sib_u, .mri_sib_s => {
+        .mri_sib => {
             const msib = emit.mir.extraData(Mir.MemorySib, data.rix.payload).data;
-            const imm = switch (ops) {
-                .mri_sib_s => Immediate.s(@bitCast(i32, data.rix.i)),
-                .mri_sib_u, .lock_mi_rip_u => Immediate.u(data.rix.i),
-                else => unreachable,
-            };
             op1 = .{ .mem = Mir.MemorySib.decode(msib) };
             op2 = .{ .reg = data.rix.r };
-            op3 = .{ .imm = imm };
+            op3 = .{ .imm = Immediate.u(data.rix.i) };
         },
-        .mri_rip_u, .mri_rip_s => {
+        .mri_rip => {
             const mrip = emit.mir.extraData(Mir.MemoryRip, data.rix.payload).data;
-            const imm = switch (ops) {
-                .mri_rip_s => Immediate.s(@bitCast(i32, data.rix.i)),
-                .mri_rip_u, .lock_mi_rip_u => Immediate.u(data.rix.i),
-                else => unreachable,
-            };
             op1 = .{ .mem = Mir.MemoryRip.decode(mrip) };
             op2 = .{ .reg = data.rix.r };
-            op3 = .{ .imm = imm };
+            op3 = .{ .imm = Immediate.u(data.rix.i) };
         },
         else => return emit.fail("TODO handle generic encoding: {s}, {s}", .{
             @tagName(mnemonic),
src/arch/x86_64/Mir.zig
@@ -343,18 +343,12 @@ pub const Inst = struct {
         /// Memory (RIP), register, register operands.
         /// Uses `rrx` payload with extra data of type `MemoryRip`.
         mrr_rip,
-        /// Memory (SIB), register, immediate (unsigned) operands.
+        /// Memory (SIB), register, immediate (byte) operands.
         /// Uses `rix` payload with extra data of type `MemorySib`.
-        mri_sib_u,
-        /// Memory (RIP), register, immediate (unsigned) operands.
+        mri_sib,
+        /// Memory (RIP), register, immediate (byte) operands.
         /// Uses `rix` payload with extra data of type `MemoryRip`.
-        mri_rip_u,
-        /// Memory (SIB), register, immediate (signed) operands.
-        /// Uses `rix` payload with extra data of type `MemorySib`.
-        mri_sib_s,
-        /// Memory (RIP), register, immediate (signed) operands.
-        /// Uses `rix` payload with extra data of type `MemoryRip`.
-        mri_rip_s,
+        mri_rip,
         /// Rax, Memory moffs.
         /// Uses `payload` with extra data of type `MemoryMoffs`.
         rax_moffs,
@@ -481,10 +475,10 @@ pub const Inst = struct {
             r2: Register,
             payload: u32,
         },
-        /// Register, immediate, followed by Custom payload found in extra.
+        /// Register, byte immediate, followed by Custom payload found in extra.
         rix: struct {
             r: Register,
-            i: u32,
+            i: u8,
             payload: u32,
         },
         /// String instruction prefix and width.