Commit 8628bb780f

Jakub Konka <kubkon@jakubkonka.com>
2022-01-02 00:50:33
stage2: use Encoder.prefix16BitMode() helper to encode 0x66 prefix
1 parent 09bfc12
Changed files (1)
src
arch
x86_64
src/arch/x86_64/Isel.zig
@@ -1352,7 +1352,7 @@ fn lowerToIEnc(tag: Tag, imm: i32, code: *std.ArrayList(u8)) LoweringError!void
     const opc = getOpCode(tag, .i, immOpSize(imm) == 8).?;
     const encoder = try Encoder.init(code, 5);
     if (immOpSize(imm) == 16) {
-        encoder.opcode_1byte(0x66);
+        encoder.prefix16BitMode();
     }
     opc.encode(encoder);
     if (immOpSize(imm) == 8) {
@@ -1371,7 +1371,7 @@ fn lowerToOEnc(tag: Tag, reg: Register, code: *std.ArrayList(u8)) LoweringError!
     const opc = getOpCode(tag, .o, false).?;
     const encoder = try Encoder.init(code, 3);
     if (reg.size() == 16) {
-        encoder.opcode_1byte(0x66);
+        encoder.prefix16BitMode();
     }
     encoder.rex(.{
         .w = false,
@@ -1402,7 +1402,7 @@ fn lowerToMEnc(tag: Tag, reg_or_mem: RegisterOrMemory, code: *std.ArrayList(u8))
             }
             const encoder = try Encoder.init(code, 4);
             if (reg.size() == 16) {
-                encoder.opcode_1byte(0x66);
+                encoder.prefix16BitMode();
             }
             encoder.rex(.{
                 .w = switch (reg) {
@@ -1420,7 +1420,7 @@ fn lowerToMEnc(tag: Tag, reg_or_mem: RegisterOrMemory, code: *std.ArrayList(u8))
             }
             const encoder = try Encoder.init(code, 8);
             if (mem_op.ptr_size == .word_ptr) {
-                encoder.opcode_1byte(0x66);
+                encoder.prefix16BitMode();
             }
             if (mem_op.reg) |reg| {
                 if (reg.size() != 64) {
@@ -1467,7 +1467,7 @@ fn lowerToTdFdEnc(tag: Tag, reg: Register, moffs: i64, code: *std.ArrayList(u8),
         getOpCode(tag, .fd, reg.size() == 8).?;
     const encoder = try Encoder.init(code, 10);
     if (reg.size() == 16) {
-        encoder.opcode_1byte(0x66);
+        encoder.prefix16BitMode();
     }
     encoder.rex(.{
         .w = setRexWRegister(reg),
@@ -1500,7 +1500,7 @@ fn lowerToOiEnc(tag: Tag, reg: Register, imm: i64, code: *std.ArrayList(u8)) Low
     const opc = getOpCode(tag, .oi, reg.size() == 8).?;
     const encoder = try Encoder.init(code, 10);
     if (reg.size() == 16) {
-        encoder.opcode_1byte(0x66);
+        encoder.prefix16BitMode();
     }
     encoder.rex(.{
         .w = setRexWRegister(reg),
@@ -1537,7 +1537,7 @@ fn lowerToMiEnc(tag: Tag, reg_or_mem: RegisterOrMemory, imm: i32, code: *std.Arr
                 // 0x66 prefix switches to the non-default size; here we assume a switch from
                 // the default 32bits to 16bits operand-size.
                 // More info: https://www.cs.uni-potsdam.de/desn/lehre/ss15/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf#page=32&zoom=auto,-159,773
-                encoder.opcode_1byte(0x66);
+                encoder.prefix16BitMode();
             }
             encoder.rex(.{
                 .w = setRexWRegister(dst_reg),
@@ -1562,7 +1562,7 @@ fn lowerToMiEnc(tag: Tag, reg_or_mem: RegisterOrMemory, imm: i32, code: *std.Arr
             const opc = getOpCode(tag, .mi, dst_mem.ptr_size == .byte_ptr).?;
             const encoder = try Encoder.init(code, 12);
             if (dst_mem.ptr_size == .word_ptr) {
-                encoder.opcode_1byte(0x66);
+                encoder.prefix16BitMode();
             }
             if (dst_mem.reg) |dst_reg| {
                 if (dst_reg.size() != 64) {
@@ -1628,7 +1628,7 @@ fn lowerToRmEnc(
             }
             const encoder = try Encoder.init(code, 9);
             if (reg.size() == 16) {
-                encoder.opcode_1byte(0x66);
+                encoder.prefix16BitMode();
             }
             if (src_mem.reg) |src_reg| {
                 // TODO handle 32-bit base register - requires prefix 0x67
@@ -1688,7 +1688,7 @@ fn lowerToMrEnc(
             }
             const encoder = try Encoder.init(code, 9);
             if (reg.size() == 16) {
-                encoder.opcode_1byte(0x66);
+                encoder.prefix16BitMode();
             }
             if (dst_mem.reg) |dst_reg| {
                 if (dst_reg.size() != 64) {
@@ -1732,7 +1732,7 @@ fn lowerToRmiEnc(
     const opc = getOpCode(tag, .rmi, false).?;
     const encoder = try Encoder.init(code, 13);
     if (reg.size() == 16) {
-        encoder.opcode_1byte(0x66);
+        encoder.prefix16BitMode();
     }
     switch (reg_or_mem) {
         .register => |src_reg| {