diff options
| author | Jacob Young <jacobly0@users.noreply.github.com> | 2023-03-25 21:26:12 -0400 |
|---|---|---|
| committer | Jacob Young <jacobly0@users.noreply.github.com> | 2023-03-25 21:26:18 -0400 |
| commit | 14c0b8c54863a4f88ffc0e6a740998bc0ebe89d5 (patch) | |
| tree | 3be5e5f1bd8e660a97618e0a193310afdb124167 | |
| parent | a80be15cd494dbd25874db8ef63c1cbbcdfc732a (diff) | |
| download | zig-14c0b8c54863a4f88ffc0e6a740998bc0ebe89d5.tar.gz zig-14c0b8c54863a4f88ffc0e6a740998bc0ebe89d5.zip | |
x86_64: remove unused Mir encodings
This also restores the size of Mir.Inst and simplifies logic in general.
| -rw-r--r-- | src/arch/x86_64/CodeGen.zig | 15 | ||||
| -rw-r--r-- | src/arch/x86_64/Emit.zig | 18 | ||||
| -rw-r--r-- | src/arch/x86_64/Mir.zig | 18 |
3 files changed, 13 insertions, 38 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig index a2c5b291bf..08b6a9950f 100644 --- a/src/arch/x86_64/CodeGen.zig +++ b/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, diff --git a/src/arch/x86_64/Emit.zig b/src/arch/x86_64/Emit.zig index b4218f48a9..b65d22807a 100644 --- a/src/arch/x86_64/Emit.zig +++ b/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), diff --git a/src/arch/x86_64/Mir.zig b/src/arch/x86_64/Mir.zig index 9b2fa2e969..a6a4115814 100644 --- a/src/arch/x86_64/Mir.zig +++ b/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. |
