authorgravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-01-02 00:50:33+01:00
committergravatar for kubkon@jakubkonka.comJakub Konka <kubkon@jakubkonka.com> 2022-01-04 01:21:23+01:00
log8628bb780f6d9c6b4667571b48f90d84374d2b59
tree439db130164cb752680ef1bcdc5941792d8eddb6
parent09bfc122fa07fd55a27f6933341c270c130e119a

stage2: use Encoder.prefix16BitMode() helper to encode 0x66 prefix


1 files changed, 11 insertions(+), 11 deletions(-)

src/arch/x86_64/Isel.zig+11-11
......@@ -1352,7 +1352,7 @@ fn lowerToIEnc(tag: Tag, imm: i32, code: *std.ArrayList(u8)) LoweringError!void
13521352 const opc = getOpCode(tag, .i, immOpSize(imm) == 8).?;
13531353 const encoder = try Encoder.init(code, 5);
13541354 if (immOpSize(imm) == 16) {
1355 encoder.opcode_1byte(0x66);
1355 encoder.prefix16BitMode();
13561356 }
13571357 opc.encode(encoder);
13581358 if (immOpSize(imm) == 8) {
......@@ -1371,7 +1371,7 @@ fn lowerToOEnc(tag: Tag, reg: Register, code: *std.ArrayList(u8)) LoweringError!
13711371 const opc = getOpCode(tag, .o, false).?;
13721372 const encoder = try Encoder.init(code, 3);
13731373 if (reg.size() == 16) {
1374 encoder.opcode_1byte(0x66);
1374 encoder.prefix16BitMode();
13751375 }
13761376 encoder.rex(.{
13771377 .w = false,
......@@ -1402,7 +1402,7 @@ fn lowerToMEnc(tag: Tag, reg_or_mem: RegisterOrMemory, code: *std.ArrayList(u8))
14021402 }
14031403 const encoder = try Encoder.init(code, 4);
14041404 if (reg.size() == 16) {
1405 encoder.opcode_1byte(0x66);
1405 encoder.prefix16BitMode();
14061406 }
14071407 encoder.rex(.{
14081408 .w = switch (reg) {
......@@ -1420,7 +1420,7 @@ fn lowerToMEnc(tag: Tag, reg_or_mem: RegisterOrMemory, code: *std.ArrayList(u8))
14201420 }
14211421 const encoder = try Encoder.init(code, 8);
14221422 if (mem_op.ptr_size == .word_ptr) {
1423 encoder.opcode_1byte(0x66);
1423 encoder.prefix16BitMode();
14241424 }
14251425 if (mem_op.reg) |reg| {
14261426 if (reg.size() != 64) {
......@@ -1467,7 +1467,7 @@ fn lowerToTdFdEnc(tag: Tag, reg: Register, moffs: i64, code: *std.ArrayList(u8),
14671467 getOpCode(tag, .fd, reg.size() == 8).?;
14681468 const encoder = try Encoder.init(code, 10);
14691469 if (reg.size() == 16) {
1470 encoder.opcode_1byte(0x66);
1470 encoder.prefix16BitMode();
14711471 }
14721472 encoder.rex(.{
14731473 .w = setRexWRegister(reg),
......@@ -1500,7 +1500,7 @@ fn lowerToOiEnc(tag: Tag, reg: Register, imm: i64, code: *std.ArrayList(u8)) Low
15001500 const opc = getOpCode(tag, .oi, reg.size() == 8).?;
15011501 const encoder = try Encoder.init(code, 10);
15021502 if (reg.size() == 16) {
1503 encoder.opcode_1byte(0x66);
1503 encoder.prefix16BitMode();
15041504 }
15051505 encoder.rex(.{
15061506 .w = setRexWRegister(reg),
......@@ -1537,7 +1537,7 @@ fn lowerToMiEnc(tag: Tag, reg_or_mem: RegisterOrMemory, imm: i32, code: *std.Arr
15371537 // 0x66 prefix switches to the non-default size; here we assume a switch from
15381538 // the default 32bits to 16bits operand-size.
15391539 // 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
1540 encoder.opcode_1byte(0x66);
1540 encoder.prefix16BitMode();
15411541 }
15421542 encoder.rex(.{
15431543 .w = setRexWRegister(dst_reg),
......@@ -1562,7 +1562,7 @@ fn lowerToMiEnc(tag: Tag, reg_or_mem: RegisterOrMemory, imm: i32, code: *std.Arr
15621562 const opc = getOpCode(tag, .mi, dst_mem.ptr_size == .byte_ptr).?;
15631563 const encoder = try Encoder.init(code, 12);
15641564 if (dst_mem.ptr_size == .word_ptr) {
1565 encoder.opcode_1byte(0x66);
1565 encoder.prefix16BitMode();
15661566 }
15671567 if (dst_mem.reg) |dst_reg| {
15681568 if (dst_reg.size() != 64) {
......@@ -1628,7 +1628,7 @@ fn lowerToRmEnc(
16281628 }
16291629 const encoder = try Encoder.init(code, 9);
16301630 if (reg.size() == 16) {
1631 encoder.opcode_1byte(0x66);
1631 encoder.prefix16BitMode();
16321632 }
16331633 if (src_mem.reg) |src_reg| {
16341634 // TODO handle 32-bit base register - requires prefix 0x67
......@@ -1688,7 +1688,7 @@ fn lowerToMrEnc(
16881688 }
16891689 const encoder = try Encoder.init(code, 9);
16901690 if (reg.size() == 16) {
1691 encoder.opcode_1byte(0x66);
1691 encoder.prefix16BitMode();
16921692 }
16931693 if (dst_mem.reg) |dst_reg| {
16941694 if (dst_reg.size() != 64) {
......@@ -1732,7 +1732,7 @@ fn lowerToRmiEnc(
17321732 const opc = getOpCode(tag, .rmi, false).?;
17331733 const encoder = try Encoder.init(code, 13);
17341734 if (reg.size() == 16) {
1735 encoder.opcode_1byte(0x66);
1735 encoder.prefix16BitMode();
17361736 }
17371737 switch (reg_or_mem) {
17381738 .register => |src_reg| {