Skip to content

Commit 6f599d2

Browse files
jacobly0Fri3dNstuff
authored andcommitted
x86_64: add a bunch of instruction encodings
Closes ziglang#19773
1 parent dba7ad9 commit 6f599d2

File tree

9 files changed

+1675
-491
lines changed

9 files changed

+1675
-491
lines changed

lib/std/zig/system/x86.zig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,7 @@ fn detectNativeFeatures(cpu: *Target.Cpu, os_tag: Target.Os.Tag) void {
419419
// detecting features using the "-march=native" flag.
420420
// For more info, see X86 ISA docs.
421421
setFeature(cpu, .pconfig, bit(leaf.edx, 18));
422+
setFeature(cpu, .uintr, bit(leaf.edx, 5));
422423

423424
// TODO I feel unsure about this check.
424425
// It doesn't really seem to check for 7.1, just for 7.

src/arch/x86_64/CodeGen.zig

Lines changed: 260 additions & 190 deletions
Large diffs are not rendered by default.

src/arch/x86_64/Disassembler.zig

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,21 @@ pub fn next(dis: *Disassembler) Error!?Instruction {
8080
.op2 = .{ .imm = imm },
8181
});
8282
},
83+
.ii => {
84+
const imm1 = try dis.parseImm(enc.data.ops[0]);
85+
const imm2 = try dis.parseImm(enc.data.ops[1]);
86+
return inst(enc, .{
87+
.op1 = .{ .imm = imm1 },
88+
.op2 = .{ .imm = imm2 },
89+
});
90+
},
91+
.ia => {
92+
const imm = try dis.parseImm(enc.data.ops[0]);
93+
return inst(enc, .{
94+
.op1 = .{ .imm = imm },
95+
.op2 = .{ .reg = .eax },
96+
});
97+
},
8398
.m, .mi, .m1, .mc => {
8499
const modrm = try dis.parseModRmByte();
85100
const act_enc = Encoding.findByOpcode(enc.opcode(), .{
@@ -241,7 +256,7 @@ pub fn next(dis: *Disassembler) Error!?Instruction {
241256
.op3 = op3,
242257
});
243258
},
244-
.rm0, .vmi, .rvm, .rvmr, .rvmi, .mvr, .rmv => unreachable, // TODO
259+
.rm0, .vm, .vmi, .rvm, .rvmr, .rvmi, .mvr, .rmv => unreachable, // TODO
245260
}
246261
}
247262

0 commit comments

Comments
 (0)