Commit c865c8fb2a

Jacob Young <jacobly0@users.noreply.github.com>
2023-03-18 06:37:13
x86_64: implement float division intrinsics
1 parent b6eebb7
src/arch/x86_64/CodeGen.zig
@@ -3538,12 +3538,37 @@ fn genBinOp(
             else => return self.fail("TODO implement genBinOp for {s} {}", .{ @tagName(tag), lhs_ty.fmt(self.bin_file.options.module.?) }),
         }, lhs_ty, dst_mcv, src_mcv),
 
-        .div_float => try self.genBinOpMir(switch (lhs_ty.tag()) {
+        .div_float,
+        .div_exact,
+        => try self.genBinOpMir(switch (lhs_ty.tag()) {
             .f32 => .divss,
             .f64 => .divsd,
             else => return self.fail("TODO implement genBinOp for {s} {}", .{ @tagName(tag), lhs_ty.fmt(self.bin_file.options.module.?) }),
         }, lhs_ty, dst_mcv, src_mcv),
 
+        .div_trunc,
+        .div_floor,
+        => {
+            try self.genBinOpMir(switch (lhs_ty.tag()) {
+                .f32 => .divss,
+                .f64 => .divsd,
+                else => return self.fail("TODO implement genBinOp for {s} {}", .{ @tagName(tag), lhs_ty.fmt(self.bin_file.options.module.?) }),
+            }, lhs_ty, dst_mcv, src_mcv);
+            if (Target.x86.featureSetHas(self.target.cpu.features, .sse4_1)) {
+                const abi_size = @intCast(u32, lhs_ty.abiSize(self.target.*));
+                const dst_alias = registerAlias(dst_mcv.register, abi_size);
+                try self.asmRegisterRegisterImmediate(switch (lhs_ty.tag()) {
+                    .f32 => .roundss,
+                    .f64 => .roundsd,
+                    else => unreachable,
+                }, dst_alias, dst_alias, Immediate.u(switch (tag) {
+                    .div_trunc => 0b1_0_11,
+                    .div_floor => 0b1_0_01,
+                    else => unreachable,
+                }));
+            } else return self.fail("TODO implement round without sse4_1", .{});
+        },
+
         .ptr_add,
         .ptr_sub,
         => {
src/arch/x86_64/Emit.zig
@@ -115,6 +115,7 @@ pub fn lowerMir(emit: *Emit) InnerError!void {
             .minss,
             .movss,
             .mulss,
+            .roundss,
             .subss,
             .ucomiss,
             .addsd,
@@ -124,6 +125,7 @@ pub fn lowerMir(emit: *Emit) InnerError!void {
             .minsd,
             .movsd,
             .mulsd,
+            .roundsd,
             .subsd,
             .ucomisd,
             => try emit.mirEncodeGeneric(tag, inst),
src/arch/x86_64/Encoding.zig
@@ -19,8 +19,8 @@ op1: Op,
 op2: Op,
 op3: Op,
 op4: Op,
-opc_len: u2,
-opc: [3]u8,
+opc_len: u3,
+opc: [7]u8,
 modrm_ext: u3,
 mode: Mode,
 
@@ -69,18 +69,19 @@ pub fn findByMnemonic(mnemonic: Mnemonic, args: struct {
     var candidates: [10]Encoding = undefined;
     var count: usize = 0;
     for (table) |entry| {
-        const enc = Encoding{
+        var enc = Encoding{
             .mnemonic = entry[0],
             .op_en = entry[1],
             .op1 = entry[2],
             .op2 = entry[3],
             .op3 = entry[4],
             .op4 = entry[5],
-            .opc_len = entry[6],
-            .opc = .{ entry[7], entry[8], entry[9] },
-            .modrm_ext = entry[10],
-            .mode = entry[11],
+            .opc_len = @intCast(u3, entry[6].len),
+            .opc = undefined,
+            .modrm_ext = entry[7],
+            .mode = entry[8],
         };
+        std.mem.copy(u8, &enc.opc, entry[6]);
         if (enc.mnemonic == mnemonic and
             input_op1.isSubset(enc.op1, enc.mode) and
             input_op2.isSubset(enc.op2, enc.mode) and
@@ -184,7 +185,7 @@ pub fn findByOpcode(opc: []const u8, prefixes: struct {
         if (match) {
             if (prefixes.rex.w) {
                 switch (enc.mode) {
-                    .fpu, .sse, .sse2, .none => {},
+                    .fpu, .sse, .sse2, .sse4_1, .none => {},
                     .long, .rex => return enc,
                 }
             } else if (prefixes.rex.present and !prefixes.rex.isSet()) {
@@ -357,6 +358,9 @@ pub const Mnemonic = enum {
     mulsd,
     subsd,
     ucomisd,
+    // SSE4.1
+    roundss,
+    roundsd,
     // zig fmt: on
 };
 
@@ -550,7 +554,7 @@ pub const Op = enum {
             else => {
                 if (op.isRegister() and target.isRegister()) {
                     switch (mode) {
-                        .sse, .sse2 => return op.isFloatingPointRegister() and target.isFloatingPointRegister(),
+                        .sse, .sse2, .sse4_1 => return op.isFloatingPointRegister() and target.isFloatingPointRegister(),
                         else => switch (target) {
                             .cl, .al, .ax, .eax, .rax => return op == target,
                             else => return op.bitSize() == target.bitSize(),
@@ -592,4 +596,5 @@ pub const Mode = enum {
     long,
     sse,
     sse2,
+    sse4_1,
 };
src/arch/x86_64/encodings.zig
@@ -4,638 +4,640 @@ const OpEn = Encoding.OpEn;
 const Op = Encoding.Op;
 const Mode = Encoding.Mode;
 
-const opcode_len = u2;
 const modrm_ext = u3;
 
-const Entry = struct { Mnemonic, OpEn, Op, Op, Op, Op, opcode_len, u8, u8, u8, modrm_ext, Mode };
+const Entry = struct { Mnemonic, OpEn, Op, Op, Op, Op, []const u8, modrm_ext, Mode };
 
 // TODO move this into a .zon file when Zig is capable of importing .zon files
 // zig fmt: off
 pub const table = &[_]Entry{
     // General-purpose
-    .{ .adc, .zi, .al,   .imm8,   .none, .none, 1, 0x14, 0x00, 0x00, 0, .none  },
-    .{ .adc, .zi, .ax,   .imm16,  .none, .none, 1, 0x15, 0x00, 0x00, 0, .none  },
-    .{ .adc, .zi, .eax,  .imm32,  .none, .none, 1, 0x15, 0x00, 0x00, 0, .none  },
-    .{ .adc, .zi, .rax,  .imm32s, .none, .none, 1, 0x15, 0x00, 0x00, 0, .long  },
-    .{ .adc, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 2, .none  },
-    .{ .adc, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 2, .rex   },
-    .{ .adc, .mi, .rm16, .imm16,  .none, .none, 1, 0x81, 0x00, 0x00, 2, .none  },
-    .{ .adc, .mi, .rm32, .imm32,  .none, .none, 1, 0x81, 0x00, 0x00, 2, .none  },
-    .{ .adc, .mi, .rm64, .imm32s, .none, .none, 1, 0x81, 0x00, 0x00, 2, .long  },
-    .{ .adc, .mi, .rm16, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 2, .none  },
-    .{ .adc, .mi, .rm32, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 2, .none  },
-    .{ .adc, .mi, .rm64, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 2, .long  },
-    .{ .adc, .mr, .rm8,  .r8,     .none, .none, 1, 0x10, 0x00, 0x00, 0, .none  },
-    .{ .adc, .mr, .rm8,  .r8,     .none, .none, 1, 0x10, 0x00, 0x00, 0, .rex   },
-    .{ .adc, .mr, .rm16, .r16,    .none, .none, 1, 0x11, 0x00, 0x00, 0, .none  },
-    .{ .adc, .mr, .rm32, .r32,    .none, .none, 1, 0x11, 0x00, 0x00, 0, .none  },
-    .{ .adc, .mr, .rm64, .r64,    .none, .none, 1, 0x11, 0x00, 0x00, 0, .long  },
-    .{ .adc, .rm, .r8,   .rm8,    .none, .none, 1, 0x12, 0x00, 0x00, 0, .none  },
-    .{ .adc, .rm, .r8,   .rm8,    .none, .none, 1, 0x12, 0x00, 0x00, 0, .rex   },
-    .{ .adc, .rm, .r16,  .rm16,   .none, .none, 1, 0x13, 0x00, 0x00, 0, .none  },
-    .{ .adc, .rm, .r32,  .rm32,   .none, .none, 1, 0x13, 0x00, 0x00, 0, .none  },
-    .{ .adc, .rm, .r64,  .rm64,   .none, .none, 1, 0x13, 0x00, 0x00, 0, .long  },
-
-    .{ .add, .zi, .al,   .imm8,   .none, .none, 1, 0x04, 0x00, 0x00, 0, .none  },
-    .{ .add, .zi, .ax,   .imm16,  .none, .none, 1, 0x05, 0x00, 0x00, 0, .none  },
-    .{ .add, .zi, .eax,  .imm32,  .none, .none, 1, 0x05, 0x00, 0x00, 0, .none  },
-    .{ .add, .zi, .rax,  .imm32s, .none, .none, 1, 0x05, 0x00, 0x00, 0, .long  },
-    .{ .add, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 0, .none  },
-    .{ .add, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 0, .rex   },
-    .{ .add, .mi, .rm16, .imm16,  .none, .none, 1, 0x81, 0x00, 0x00, 0, .none  },
-    .{ .add, .mi, .rm32, .imm32,  .none, .none, 1, 0x81, 0x00, 0x00, 0, .none  },
-    .{ .add, .mi, .rm64, .imm32s, .none, .none, 1, 0x81, 0x00, 0x00, 0, .long  },
-    .{ .add, .mi, .rm16, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 0, .none  },
-    .{ .add, .mi, .rm32, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 0, .none  },
-    .{ .add, .mi, .rm64, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 0, .long  },
-    .{ .add, .mr, .rm8,  .r8,     .none, .none, 1, 0x00, 0x00, 0x00, 0, .none  },
-    .{ .add, .mr, .rm8,  .r8,     .none, .none, 1, 0x00, 0x00, 0x00, 0, .rex   },
-    .{ .add, .mr, .rm16, .r16,    .none, .none, 1, 0x01, 0x00, 0x00, 0, .none  },
-    .{ .add, .mr, .rm32, .r32,    .none, .none, 1, 0x01, 0x00, 0x00, 0, .none  },
-    .{ .add, .mr, .rm64, .r64,    .none, .none, 1, 0x01, 0x00, 0x00, 0, .long  },
-    .{ .add, .rm, .r8,   .rm8,    .none, .none, 1, 0x02, 0x00, 0x00, 0, .none  },
-    .{ .add, .rm, .r8,   .rm8,    .none, .none, 1, 0x02, 0x00, 0x00, 0, .rex   },
-    .{ .add, .rm, .r16,  .rm16,   .none, .none, 1, 0x03, 0x00, 0x00, 0, .none  },
-    .{ .add, .rm, .r32,  .rm32,   .none, .none, 1, 0x03, 0x00, 0x00, 0, .none  },
-    .{ .add, .rm, .r64,  .rm64,   .none, .none, 1, 0x03, 0x00, 0x00, 0, .long  },
-
-    .{ .@"and", .zi, .al,   .imm8,   .none, .none, 1, 0x24, 0x00, 0x00, 0, .none  },
-    .{ .@"and", .zi, .ax,   .imm16,  .none, .none, 1, 0x25, 0x00, 0x00, 0, .none  },
-    .{ .@"and", .zi, .eax,  .imm32,  .none, .none, 1, 0x25, 0x00, 0x00, 0, .none  },
-    .{ .@"and", .zi, .rax,  .imm32s, .none, .none, 1, 0x25, 0x00, 0x00, 0, .long  },
-    .{ .@"and", .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 4, .none  },
-    .{ .@"and", .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 4, .rex   },
-    .{ .@"and", .mi, .rm16, .imm16,  .none, .none, 1, 0x81, 0x00, 0x00, 4, .none  },
-    .{ .@"and", .mi, .rm32, .imm32,  .none, .none, 1, 0x81, 0x00, 0x00, 4, .none  },
-    .{ .@"and", .mi, .rm64, .imm32s, .none, .none, 1, 0x81, 0x00, 0x00, 4, .long  },
-    .{ .@"and", .mi, .rm16, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 4, .none  },
-    .{ .@"and", .mi, .rm32, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 4, .none  },
-    .{ .@"and", .mi, .rm64, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 4, .long  },
-    .{ .@"and", .mr, .rm8,  .r8,     .none, .none, 1, 0x20, 0x00, 0x00, 0, .none  },
-    .{ .@"and", .mr, .rm8,  .r8,     .none, .none, 1, 0x20, 0x00, 0x00, 0, .rex   },
-    .{ .@"and", .mr, .rm16, .r16,    .none, .none, 1, 0x21, 0x00, 0x00, 0, .none  },
-    .{ .@"and", .mr, .rm32, .r32,    .none, .none, 1, 0x21, 0x00, 0x00, 0, .none  },
-    .{ .@"and", .mr, .rm64, .r64,    .none, .none, 1, 0x21, 0x00, 0x00, 0, .long  },
-    .{ .@"and", .rm, .r8,   .rm8,    .none, .none, 1, 0x22, 0x00, 0x00, 0, .none  },
-    .{ .@"and", .rm, .r8,   .rm8,    .none, .none, 1, 0x22, 0x00, 0x00, 0, .rex   },
-    .{ .@"and", .rm, .r16,  .rm16,   .none, .none, 1, 0x23, 0x00, 0x00, 0, .none  },
-    .{ .@"and", .rm, .r32,  .rm32,   .none, .none, 1, 0x23, 0x00, 0x00, 0, .none  },
-    .{ .@"and", .rm, .r64,  .rm64,   .none, .none, 1, 0x23, 0x00, 0x00, 0, .long  },
+    .{ .adc, .zi, .al,   .imm8,   .none, .none, &.{ 0x14 }, 0, .none  },
+    .{ .adc, .zi, .ax,   .imm16,  .none, .none, &.{ 0x15 }, 0, .none  },
+    .{ .adc, .zi, .eax,  .imm32,  .none, .none, &.{ 0x15 }, 0, .none  },
+    .{ .adc, .zi, .rax,  .imm32s, .none, .none, &.{ 0x15 }, 0, .long  },
+    .{ .adc, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 2, .none  },
+    .{ .adc, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 2, .rex   },
+    .{ .adc, .mi, .rm16, .imm16,  .none, .none, &.{ 0x81 }, 2, .none  },
+    .{ .adc, .mi, .rm32, .imm32,  .none, .none, &.{ 0x81 }, 2, .none  },
+    .{ .adc, .mi, .rm64, .imm32s, .none, .none, &.{ 0x81 }, 2, .long  },
+    .{ .adc, .mi, .rm16, .imm8s,  .none, .none, &.{ 0x83 }, 2, .none  },
+    .{ .adc, .mi, .rm32, .imm8s,  .none, .none, &.{ 0x83 }, 2, .none  },
+    .{ .adc, .mi, .rm64, .imm8s,  .none, .none, &.{ 0x83 }, 2, .long  },
+    .{ .adc, .mr, .rm8,  .r8,     .none, .none, &.{ 0x10 }, 0, .none  },
+    .{ .adc, .mr, .rm8,  .r8,     .none, .none, &.{ 0x10 }, 0, .rex   },
+    .{ .adc, .mr, .rm16, .r16,    .none, .none, &.{ 0x11 }, 0, .none  },
+    .{ .adc, .mr, .rm32, .r32,    .none, .none, &.{ 0x11 }, 0, .none  },
+    .{ .adc, .mr, .rm64, .r64,    .none, .none, &.{ 0x11 }, 0, .long  },
+    .{ .adc, .rm, .r8,   .rm8,    .none, .none, &.{ 0x12 }, 0, .none  },
+    .{ .adc, .rm, .r8,   .rm8,    .none, .none, &.{ 0x12 }, 0, .rex   },
+    .{ .adc, .rm, .r16,  .rm16,   .none, .none, &.{ 0x13 }, 0, .none  },
+    .{ .adc, .rm, .r32,  .rm32,   .none, .none, &.{ 0x13 }, 0, .none  },
+    .{ .adc, .rm, .r64,  .rm64,   .none, .none, &.{ 0x13 }, 0, .long  },
+
+    .{ .add, .zi, .al,   .imm8,   .none, .none, &.{ 0x04 }, 0, .none  },
+    .{ .add, .zi, .ax,   .imm16,  .none, .none, &.{ 0x05 }, 0, .none  },
+    .{ .add, .zi, .eax,  .imm32,  .none, .none, &.{ 0x05 }, 0, .none  },
+    .{ .add, .zi, .rax,  .imm32s, .none, .none, &.{ 0x05 }, 0, .long  },
+    .{ .add, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 0, .none  },
+    .{ .add, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 0, .rex   },
+    .{ .add, .mi, .rm16, .imm16,  .none, .none, &.{ 0x81 }, 0, .none  },
+    .{ .add, .mi, .rm32, .imm32,  .none, .none, &.{ 0x81 }, 0, .none  },
+    .{ .add, .mi, .rm64, .imm32s, .none, .none, &.{ 0x81 }, 0, .long  },
+    .{ .add, .mi, .rm16, .imm8s,  .none, .none, &.{ 0x83 }, 0, .none  },
+    .{ .add, .mi, .rm32, .imm8s,  .none, .none, &.{ 0x83 }, 0, .none  },
+    .{ .add, .mi, .rm64, .imm8s,  .none, .none, &.{ 0x83 }, 0, .long  },
+    .{ .add, .mr, .rm8,  .r8,     .none, .none, &.{ 0x00 }, 0, .none  },
+    .{ .add, .mr, .rm8,  .r8,     .none, .none, &.{ 0x00 }, 0, .rex   },
+    .{ .add, .mr, .rm16, .r16,    .none, .none, &.{ 0x01 }, 0, .none  },
+    .{ .add, .mr, .rm32, .r32,    .none, .none, &.{ 0x01 }, 0, .none  },
+    .{ .add, .mr, .rm64, .r64,    .none, .none, &.{ 0x01 }, 0, .long  },
+    .{ .add, .rm, .r8,   .rm8,    .none, .none, &.{ 0x02 }, 0, .none  },
+    .{ .add, .rm, .r8,   .rm8,    .none, .none, &.{ 0x02 }, 0, .rex   },
+    .{ .add, .rm, .r16,  .rm16,   .none, .none, &.{ 0x03 }, 0, .none  },
+    .{ .add, .rm, .r32,  .rm32,   .none, .none, &.{ 0x03 }, 0, .none  },
+    .{ .add, .rm, .r64,  .rm64,   .none, .none, &.{ 0x03 }, 0, .long  },
+
+    .{ .@"and", .zi, .al,   .imm8,   .none, .none, &.{ 0x24 }, 0, .none  },
+    .{ .@"and", .zi, .ax,   .imm16,  .none, .none, &.{ 0x25 }, 0, .none  },
+    .{ .@"and", .zi, .eax,  .imm32,  .none, .none, &.{ 0x25 }, 0, .none  },
+    .{ .@"and", .zi, .rax,  .imm32s, .none, .none, &.{ 0x25 }, 0, .long  },
+    .{ .@"and", .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 4, .none  },
+    .{ .@"and", .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 4, .rex   },
+    .{ .@"and", .mi, .rm16, .imm16,  .none, .none, &.{ 0x81 }, 4, .none  },
+    .{ .@"and", .mi, .rm32, .imm32,  .none, .none, &.{ 0x81 }, 4, .none  },
+    .{ .@"and", .mi, .rm64, .imm32s, .none, .none, &.{ 0x81 }, 4, .long  },
+    .{ .@"and", .mi, .rm16, .imm8s,  .none, .none, &.{ 0x83 }, 4, .none  },
+    .{ .@"and", .mi, .rm32, .imm8s,  .none, .none, &.{ 0x83 }, 4, .none  },
+    .{ .@"and", .mi, .rm64, .imm8s,  .none, .none, &.{ 0x83 }, 4, .long  },
+    .{ .@"and", .mr, .rm8,  .r8,     .none, .none, &.{ 0x20 }, 0, .none  },
+    .{ .@"and", .mr, .rm8,  .r8,     .none, .none, &.{ 0x20 }, 0, .rex   },
+    .{ .@"and", .mr, .rm16, .r16,    .none, .none, &.{ 0x21 }, 0, .none  },
+    .{ .@"and", .mr, .rm32, .r32,    .none, .none, &.{ 0x21 }, 0, .none  },
+    .{ .@"and", .mr, .rm64, .r64,    .none, .none, &.{ 0x21 }, 0, .long  },
+    .{ .@"and", .rm, .r8,   .rm8,    .none, .none, &.{ 0x22 }, 0, .none  },
+    .{ .@"and", .rm, .r8,   .rm8,    .none, .none, &.{ 0x22 }, 0, .rex   },
+    .{ .@"and", .rm, .r16,  .rm16,   .none, .none, &.{ 0x23 }, 0, .none  },
+    .{ .@"and", .rm, .r32,  .rm32,   .none, .none, &.{ 0x23 }, 0, .none  },
+    .{ .@"and", .rm, .r64,  .rm64,   .none, .none, &.{ 0x23 }, 0, .long  },
 
     // This is M encoding according to Intel, but D makes more sense here.
-    .{ .call, .d, .rel32, .none, .none, .none, 1, 0xe8, 0x00, 0x00, 0, .none },
-    .{ .call, .m, .rm64,  .none, .none, .none, 1, 0xff, 0x00, 0x00, 2, .none },
-
-    .{ .cbw,  .np, .o16, .none, .none, .none, 1, 0x98, 0x00, 0x00, 0, .none  },
-    .{ .cwde, .np, .o32, .none, .none, .none, 1, 0x98, 0x00, 0x00, 0, .none  },
-    .{ .cdqe, .np, .o64, .none, .none, .none, 1, 0x98, 0x00, 0x00, 0, .long  },
-
-    .{ .cwd, .np, .o16, .none, .none, .none, 1, 0x99, 0x00, 0x00, 0, .none  },
-    .{ .cdq, .np, .o32, .none, .none, .none, 1, 0x99, 0x00, 0x00, 0, .none  },
-    .{ .cqo, .np, .o64, .none, .none, .none, 1, 0x99, 0x00, 0x00, 0, .long  },
-
-    .{ .cmova,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x47, 0x00, 0, .none  },
-    .{ .cmova,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x47, 0x00, 0, .none  },
-    .{ .cmova,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x47, 0x00, 0, .long  },
-    .{ .cmovae,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x43, 0x00, 0, .none  },
-    .{ .cmovae,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x43, 0x00, 0, .none  },
-    .{ .cmovae,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x43, 0x00, 0, .long  },
-    .{ .cmovb,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x42, 0x00, 0, .none  },
-    .{ .cmovb,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x42, 0x00, 0, .none  },
-    .{ .cmovb,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x42, 0x00, 0, .long  },
-    .{ .cmovbe,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x46, 0x00, 0, .none  },
-    .{ .cmovbe,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x46, 0x00, 0, .none  },
-    .{ .cmovbe,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x46, 0x00, 0, .long  },
-    .{ .cmovc,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x42, 0x00, 0, .none  },
-    .{ .cmovc,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x42, 0x00, 0, .none  },
-    .{ .cmovc,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x42, 0x00, 0, .long  },
-    .{ .cmove,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x44, 0x00, 0, .none  },
-    .{ .cmove,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x44, 0x00, 0, .none  },
-    .{ .cmove,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x44, 0x00, 0, .long  },
-    .{ .cmovg,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4f, 0x00, 0, .none  },
-    .{ .cmovg,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4f, 0x00, 0, .none  },
-    .{ .cmovg,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4f, 0x00, 0, .long  },
-    .{ .cmovge,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4d, 0x00, 0, .none  },
-    .{ .cmovge,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4d, 0x00, 0, .none  },
-    .{ .cmovge,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4d, 0x00, 0, .long  },
-    .{ .cmovl,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4c, 0x00, 0, .none  },
-    .{ .cmovl,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4c, 0x00, 0, .none  },
-    .{ .cmovl,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4c, 0x00, 0, .long  },
-    .{ .cmovle,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4e, 0x00, 0, .none  },
-    .{ .cmovle,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4e, 0x00, 0, .none  },
-    .{ .cmovle,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4e, 0x00, 0, .long  },
-    .{ .cmovna,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x46, 0x00, 0, .none  },
-    .{ .cmovna,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x46, 0x00, 0, .none  },
-    .{ .cmovna,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x46, 0x00, 0, .long  },
-    .{ .cmovnae, .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x42, 0x00, 0, .none  },
-    .{ .cmovnae, .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x42, 0x00, 0, .none  },
-    .{ .cmovnae, .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x42, 0x00, 0, .long  },
-    .{ .cmovnb,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x43, 0x00, 0, .none  },
-    .{ .cmovnb,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x43, 0x00, 0, .none  },
-    .{ .cmovnb,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x43, 0x00, 0, .long  },
-    .{ .cmovnbe, .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x47, 0x00, 0, .none  },
-    .{ .cmovnbe, .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x47, 0x00, 0, .none  },
-    .{ .cmovnbe, .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x47, 0x00, 0, .long  },
-    .{ .cmovnc,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x43, 0x00, 0, .none  },
-    .{ .cmovnc,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x43, 0x00, 0, .none  },
-    .{ .cmovnc,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x43, 0x00, 0, .long  },
-    .{ .cmovne,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x45, 0x00, 0, .none  },
-    .{ .cmovne,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x45, 0x00, 0, .none  },
-    .{ .cmovne,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x45, 0x00, 0, .long  },
-    .{ .cmovng,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4e, 0x00, 0, .none  },
-    .{ .cmovng,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4e, 0x00, 0, .none  },
-    .{ .cmovng,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4e, 0x00, 0, .long  },
-    .{ .cmovnge, .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4c, 0x00, 0, .none  },
-    .{ .cmovnge, .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4c, 0x00, 0, .none  },
-    .{ .cmovnge, .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4c, 0x00, 0, .long  },
-    .{ .cmovnl,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4d, 0x00, 0, .none  },
-    .{ .cmovnl,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4d, 0x00, 0, .none  },
-    .{ .cmovnl,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4d, 0x00, 0, .long  },
-    .{ .cmovnle, .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4f, 0x00, 0, .none  },
-    .{ .cmovnle, .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4f, 0x00, 0, .none  },
-    .{ .cmovnle, .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4f, 0x00, 0, .long  },
-    .{ .cmovno,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x41, 0x00, 0, .none  },
-    .{ .cmovno,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x41, 0x00, 0, .none  },
-    .{ .cmovno,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x41, 0x00, 0, .long  },
-    .{ .cmovnp,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4b, 0x00, 0, .none  },
-    .{ .cmovnp,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4b, 0x00, 0, .none  },
-    .{ .cmovnp,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4b, 0x00, 0, .long  },
-    .{ .cmovns,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x49, 0x00, 0, .none  },
-    .{ .cmovns,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x49, 0x00, 0, .none  },
-    .{ .cmovns,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x49, 0x00, 0, .long  },
-    .{ .cmovnz,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x45, 0x00, 0, .none  },
-    .{ .cmovnz,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x45, 0x00, 0, .none  },
-    .{ .cmovnz,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x45, 0x00, 0, .long  },
-    .{ .cmovo,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x40, 0x00, 0, .none  },
-    .{ .cmovo,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x40, 0x00, 0, .none  },
-    .{ .cmovo,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x40, 0x00, 0, .long  },
-    .{ .cmovp,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4a, 0x00, 0, .none  },
-    .{ .cmovp,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4a, 0x00, 0, .none  },
-    .{ .cmovp,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4a, 0x00, 0, .long  },
-    .{ .cmovpe,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4a, 0x00, 0, .none  },
-    .{ .cmovpe,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4a, 0x00, 0, .none  },
-    .{ .cmovpe,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4a, 0x00, 0, .long  },
-    .{ .cmovpo,  .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x4b, 0x00, 0, .none  },
-    .{ .cmovpo,  .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x4b, 0x00, 0, .none  },
-    .{ .cmovpo,  .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x4b, 0x00, 0, .long  },
-    .{ .cmovs,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x48, 0x00, 0, .none  },
-    .{ .cmovs,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x48, 0x00, 0, .none  },
-    .{ .cmovs,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x48, 0x00, 0, .long  },
-    .{ .cmovz,   .rm, .r16, .rm16, .none, .none, 2, 0x0f, 0x44, 0x00, 0, .none  },
-    .{ .cmovz,   .rm, .r32, .rm32, .none, .none, 2, 0x0f, 0x44, 0x00, 0, .none  },
-    .{ .cmovz,   .rm, .r64, .rm64, .none, .none, 2, 0x0f, 0x44, 0x00, 0, .long  },
-
-    .{ .cmp, .zi, .al,   .imm8,   .none, .none, 1, 0x3c, 0x00, 0x00, 0, .none  },
-    .{ .cmp, .zi, .ax,   .imm16,  .none, .none, 1, 0x3d, 0x00, 0x00, 0, .none  },
-    .{ .cmp, .zi, .eax,  .imm32,  .none, .none, 1, 0x3d, 0x00, 0x00, 0, .none  },
-    .{ .cmp, .zi, .rax,  .imm32s, .none, .none, 1, 0x3d, 0x00, 0x00, 0, .long  },
-    .{ .cmp, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 7, .none  },
-    .{ .cmp, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 7, .rex   },
-    .{ .cmp, .mi, .rm16, .imm16,  .none, .none, 1, 0x81, 0x00, 0x00, 7, .none  },
-    .{ .cmp, .mi, .rm32, .imm32,  .none, .none, 1, 0x81, 0x00, 0x00, 7, .none  },
-    .{ .cmp, .mi, .rm64, .imm32s, .none, .none, 1, 0x81, 0x00, 0x00, 7, .long  },
-    .{ .cmp, .mi, .rm16, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 7, .none  },
-    .{ .cmp, .mi, .rm32, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 7, .none  },
-    .{ .cmp, .mi, .rm64, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 7, .long  },
-    .{ .cmp, .mr, .rm8,  .r8,     .none, .none, 1, 0x38, 0x00, 0x00, 0, .none  },
-    .{ .cmp, .mr, .rm8,  .r8,     .none, .none, 1, 0x38, 0x00, 0x00, 0, .rex   },
-    .{ .cmp, .mr, .rm16, .r16,    .none, .none, 1, 0x39, 0x00, 0x00, 0, .none  },
-    .{ .cmp, .mr, .rm32, .r32,    .none, .none, 1, 0x39, 0x00, 0x00, 0, .none  },
-    .{ .cmp, .mr, .rm64, .r64,    .none, .none, 1, 0x39, 0x00, 0x00, 0, .long  },
-    .{ .cmp, .rm, .r8,   .rm8,    .none, .none, 1, 0x3a, 0x00, 0x00, 0, .none  },
-    .{ .cmp, .rm, .r8,   .rm8,    .none, .none, 1, 0x3a, 0x00, 0x00, 0, .rex   },
-    .{ .cmp, .rm, .r16,  .rm16,   .none, .none, 1, 0x3b, 0x00, 0x00, 0, .none  },
-    .{ .cmp, .rm, .r32,  .rm32,   .none, .none, 1, 0x3b, 0x00, 0x00, 0, .none  },
-    .{ .cmp, .rm, .r64,  .rm64,   .none, .none, 1, 0x3b, 0x00, 0x00, 0, .long  },
-
-    .{ .div, .m, .rm8,  .none, .none, .none, 1, 0xf6, 0x00, 0x00, 6, .none  },
-    .{ .div, .m, .rm8,  .none, .none, .none, 1, 0xf6, 0x00, 0x00, 6, .rex   },
-    .{ .div, .m, .rm16, .none, .none, .none, 1, 0xf7, 0x00, 0x00, 6, .none  },
-    .{ .div, .m, .rm32, .none, .none, .none, 1, 0xf7, 0x00, 0x00, 6, .none  },
-    .{ .div, .m, .rm64, .none, .none, .none, 1, 0xf7, 0x00, 0x00, 6, .long  },
-
-    .{ .fisttp, .m, .m16, .none, .none, .none, 1, 0xdf, 0x00, 0x00, 1, .fpu },
-    .{ .fisttp, .m, .m32, .none, .none, .none, 1, 0xdb, 0x00, 0x00, 1, .fpu },
-    .{ .fisttp, .m, .m64, .none, .none, .none, 1, 0xdd, 0x00, 0x00, 1, .fpu },
-
-    .{ .fld, .m, .m32, .none, .none, .none, 1, 0xd9, 0x00, 0x00, 0, .fpu },
-    .{ .fld, .m, .m64, .none, .none, .none, 1, 0xdd, 0x00, 0x00, 0, .fpu },
-    .{ .fld, .m, .m80, .none, .none, .none, 1, 0xdb, 0x00, 0x00, 5, .fpu },
-
-    .{ .idiv, .m, .rm8,  .none, .none, .none, 1, 0xf6, 0x00, 0x00, 7, .none  },
-    .{ .idiv, .m, .rm8,  .none, .none, .none, 1, 0xf6, 0x00, 0x00, 7, .rex   },
-    .{ .idiv, .m, .rm16, .none, .none, .none, 1, 0xf7, 0x00, 0x00, 7, .none  },
-    .{ .idiv, .m, .rm32, .none, .none, .none, 1, 0xf7, 0x00, 0x00, 7, .none  },
-    .{ .idiv, .m, .rm64, .none, .none, .none, 1, 0xf7, 0x00, 0x00, 7, .long  },
-
-    .{ .imul, .m,   .rm8,  .none, .none,   .none, 1, 0xf6, 0x00, 0x00, 5, .none  },
-    .{ .imul, .m,   .rm8,  .none, .none,   .none, 1, 0xf6, 0x00, 0x00, 5, .rex   },
-    .{ .imul, .m,   .rm16, .none, .none,   .none, 1, 0xf7, 0x00, 0x00, 5, .none  },
-    .{ .imul, .m,   .rm32, .none, .none,   .none, 1, 0xf7, 0x00, 0x00, 5, .none  },
-    .{ .imul, .m,   .rm64, .none, .none,   .none, 1, 0xf7, 0x00, 0x00, 5, .long  },
-    .{ .imul, .rm,  .r16,  .rm16, .none,   .none, 2, 0x0f, 0xaf, 0x00, 0, .none  },
-    .{ .imul, .rm,  .r32,  .rm32, .none,   .none, 2, 0x0f, 0xaf, 0x00, 0, .none  },
-    .{ .imul, .rm,  .r64,  .rm64, .none,   .none, 2, 0x0f, 0xaf, 0x00, 0, .long  },
-    .{ .imul, .rmi, .r16,  .rm16, .imm8s,  .none, 1, 0x6b, 0x00, 0x00, 0, .none  },
-    .{ .imul, .rmi, .r32,  .rm32, .imm8s,  .none, 1, 0x6b, 0x00, 0x00, 0, .none  },
-    .{ .imul, .rmi, .r64,  .rm64, .imm8s,  .none, 1, 0x6b, 0x00, 0x00, 0, .long  },
-    .{ .imul, .rmi, .r16,  .rm16, .imm16,  .none, 1, 0x69, 0x00, 0x00, 0, .none  },
-    .{ .imul, .rmi, .r32,  .rm32, .imm32,  .none, 1, 0x69, 0x00, 0x00, 0, .none  },
-    .{ .imul, .rmi, .r64,  .rm64, .imm32,  .none, 1, 0x69, 0x00, 0x00, 0, .long  },
-
-    .{ .int3, .np, .none, .none, .none, .none, 1, 0xcc, 0x00, 0x00, 0, .none },
-
-    .{ .ja,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x87, 0x00, 0, .none },
-    .{ .jae,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x83, 0x00, 0, .none },
-    .{ .jb,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x82, 0x00, 0, .none },
-    .{ .jbe,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x86, 0x00, 0, .none },
-    .{ .jc,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x82, 0x00, 0, .none },
-    .{ .jrcxz, .d, .rel32, .none, .none, .none, 1, 0xe3, 0x00, 0x00, 0, .none },
-    .{ .je,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x84, 0x00, 0, .none },
-    .{ .jg,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8f, 0x00, 0, .none },
-    .{ .jge,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8d, 0x00, 0, .none },
-    .{ .jl,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8c, 0x00, 0, .none },
-    .{ .jle,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8e, 0x00, 0, .none },
-    .{ .jna,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x86, 0x00, 0, .none },
-    .{ .jnae,  .d, .rel32, .none, .none, .none, 2, 0x0f, 0x82, 0x00, 0, .none },
-    .{ .jnb,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x83, 0x00, 0, .none },
-    .{ .jnbe,  .d, .rel32, .none, .none, .none, 2, 0x0f, 0x87, 0x00, 0, .none },
-    .{ .jnc,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x83, 0x00, 0, .none },
-    .{ .jne,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x85, 0x00, 0, .none },
-    .{ .jng,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8e, 0x00, 0, .none },
-    .{ .jnge,  .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8c, 0x00, 0, .none },
-    .{ .jnl,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8d, 0x00, 0, .none },
-    .{ .jnle,  .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8f, 0x00, 0, .none },
-    .{ .jno,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x81, 0x00, 0, .none },
-    .{ .jnp,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8b, 0x00, 0, .none },
-    .{ .jns,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x89, 0x00, 0, .none },
-    .{ .jnz,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x85, 0x00, 0, .none },
-    .{ .jo,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x80, 0x00, 0, .none },
-    .{ .jp,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8a, 0x00, 0, .none },
-    .{ .jpe,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8a, 0x00, 0, .none },
-    .{ .jpo,   .d, .rel32, .none, .none, .none, 2, 0x0f, 0x8b, 0x00, 0, .none },
-    .{ .js,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x88, 0x00, 0, .none },
-    .{ .jz,    .d, .rel32, .none, .none, .none, 2, 0x0f, 0x84, 0x00, 0, .none },
-
-    .{ .jmp, .d, .rel32, .none, .none, .none, 1, 0xe9, 0x00, 0x00, 0, .none },
-    .{ .jmp, .m, .rm64,  .none, .none, .none, 1, 0xff, 0x00, 0x00, 4, .none },
-
-    .{ .lea, .rm, .r16, .m, .none, .none, 1, 0x8d, 0x00, 0x00, 0, .none  },
-    .{ .lea, .rm, .r32, .m, .none, .none, 1, 0x8d, 0x00, 0x00, 0, .none  },
-    .{ .lea, .rm, .r64, .m, .none, .none, 1, 0x8d, 0x00, 0x00, 0, .long  },
-
-    .{ .mov, .mr, .rm8,   .r8,     .none, .none, 1, 0x88, 0x00, 0x00, 0, .none  },
-    .{ .mov, .mr, .rm8,   .r8,     .none, .none, 1, 0x88, 0x00, 0x00, 0, .rex   },
-    .{ .mov, .mr, .rm16,  .r16,    .none, .none, 1, 0x89, 0x00, 0x00, 0, .none  },
-    .{ .mov, .mr, .rm32,  .r32,    .none, .none, 1, 0x89, 0x00, 0x00, 0, .none  },
-    .{ .mov, .mr, .rm64,  .r64,    .none, .none, 1, 0x89, 0x00, 0x00, 0, .long  },
-    .{ .mov, .rm, .r8,    .rm8,    .none, .none, 1, 0x8a, 0x00, 0x00, 0, .none  },
-    .{ .mov, .rm, .r8,    .rm8,    .none, .none, 1, 0x8a, 0x00, 0x00, 0, .rex   },
-    .{ .mov, .rm, .r16,   .rm16,   .none, .none, 1, 0x8b, 0x00, 0x00, 0, .none  },
-    .{ .mov, .rm, .r32,   .rm32,   .none, .none, 1, 0x8b, 0x00, 0x00, 0, .none  },
-    .{ .mov, .rm, .r64,   .rm64,   .none, .none, 1, 0x8b, 0x00, 0x00, 0, .long  },
-    .{ .mov, .mr, .rm16,  .sreg,   .none, .none, 1, 0x8c, 0x00, 0x00, 0, .none  },
-    .{ .mov, .mr, .rm64,  .sreg,   .none, .none, 1, 0x8c, 0x00, 0x00, 0, .long  },
-    .{ .mov, .rm, .sreg,  .rm16,   .none, .none, 1, 0x8e, 0x00, 0x00, 0, .none  },
-    .{ .mov, .rm, .sreg,  .rm64,   .none, .none, 1, 0x8e, 0x00, 0x00, 0, .long  },
-    .{ .mov, .fd, .al,    .moffs,  .none, .none, 1, 0xa0, 0x00, 0x00, 0, .none  },
-    .{ .mov, .fd, .ax,    .moffs,  .none, .none, 1, 0xa1, 0x00, 0x00, 0, .none  },
-    .{ .mov, .fd, .eax,   .moffs,  .none, .none, 1, 0xa1, 0x00, 0x00, 0, .none  },
-    .{ .mov, .fd, .rax,   .moffs,  .none, .none, 1, 0xa1, 0x00, 0x00, 0, .long  },
-    .{ .mov, .td, .moffs, .al,     .none, .none, 1, 0xa2, 0x00, 0x00, 0, .none  },
-    .{ .mov, .td, .moffs, .ax,     .none, .none, 1, 0xa3, 0x00, 0x00, 0, .none  },
-    .{ .mov, .td, .moffs, .eax,    .none, .none, 1, 0xa3, 0x00, 0x00, 0, .none  },
-    .{ .mov, .td, .moffs, .rax,    .none, .none, 1, 0xa3, 0x00, 0x00, 0, .long  },
-    .{ .mov, .oi, .r8,    .imm8,   .none, .none, 1, 0xb0, 0x00, 0x00, 0, .none  },
-    .{ .mov, .oi, .r8,    .imm8,   .none, .none, 1, 0xb0, 0x00, 0x00, 0, .rex   },
-    .{ .mov, .oi, .r16,   .imm16,  .none, .none, 1, 0xb8, 0x00, 0x00, 0, .none  },
-    .{ .mov, .oi, .r32,   .imm32,  .none, .none, 1, 0xb8, 0x00, 0x00, 0, .none  },
-    .{ .mov, .oi, .r64,   .imm64,  .none, .none, 1, 0xb8, 0x00, 0x00, 0, .long  },
-    .{ .mov, .mi, .rm8,   .imm8,   .none, .none, 1, 0xc6, 0x00, 0x00, 0, .none  },
-    .{ .mov, .mi, .rm8,   .imm8,   .none, .none, 1, 0xc6, 0x00, 0x00, 0, .rex   },
-    .{ .mov, .mi, .rm16,  .imm16,  .none, .none, 1, 0xc7, 0x00, 0x00, 0, .none  },
-    .{ .mov, .mi, .rm32,  .imm32,  .none, .none, 1, 0xc7, 0x00, 0x00, 0, .none  },
-    .{ .mov, .mi, .rm64,  .imm32s, .none, .none, 1, 0xc7, 0x00, 0x00, 0, .long  },
-
-    .{ .movsx, .rm, .r16, .rm8,  .none, .none, 2, 0x0f, 0xbe, 0x00, 0, .none  },
-    .{ .movsx, .rm, .r16, .rm8,  .none, .none, 2, 0x0f, 0xbe, 0x00, 0, .rex   },
-    .{ .movsx, .rm, .r32, .rm8,  .none, .none, 2, 0x0f, 0xbe, 0x00, 0, .none  },
-    .{ .movsx, .rm, .r32, .rm8,  .none, .none, 2, 0x0f, 0xbe, 0x00, 0, .rex   },
-    .{ .movsx, .rm, .r64, .rm8,  .none, .none, 2, 0x0f, 0xbe, 0x00, 0, .long  },
-    .{ .movsx, .rm, .r32, .rm16, .none, .none, 2, 0x0f, 0xbf, 0x00, 0, .none  },
-    .{ .movsx, .rm, .r64, .rm16, .none, .none, 2, 0x0f, 0xbf, 0x00, 0, .long  },
+    .{ .call, .d, .rel32, .none, .none, .none, &.{ 0xe8 }, 0, .none },
+    .{ .call, .m, .rm64,  .none, .none, .none, &.{ 0xff }, 2, .none },
+
+    .{ .cbw,  .np, .o16, .none, .none, .none, &.{ 0x98 }, 0, .none  },
+    .{ .cwde, .np, .o32, .none, .none, .none, &.{ 0x98 }, 0, .none  },
+    .{ .cdqe, .np, .o64, .none, .none, .none, &.{ 0x98 }, 0, .long  },
+
+    .{ .cwd, .np, .o16, .none, .none, .none, &.{ 0x99 }, 0, .none  },
+    .{ .cdq, .np, .o32, .none, .none, .none, &.{ 0x99 }, 0, .none  },
+    .{ .cqo, .np, .o64, .none, .none, .none, &.{ 0x99 }, 0, .long  },
+
+    .{ .cmova,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x47 }, 0, .none  },
+    .{ .cmova,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x47 }, 0, .none  },
+    .{ .cmova,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x47 }, 0, .long  },
+    .{ .cmovae,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x43 }, 0, .none  },
+    .{ .cmovae,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x43 }, 0, .none  },
+    .{ .cmovae,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x43 }, 0, .long  },
+    .{ .cmovb,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x42 }, 0, .none  },
+    .{ .cmovb,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x42 }, 0, .none  },
+    .{ .cmovb,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x42 }, 0, .long  },
+    .{ .cmovbe,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x46 }, 0, .none  },
+    .{ .cmovbe,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x46 }, 0, .none  },
+    .{ .cmovbe,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x46 }, 0, .long  },
+    .{ .cmovc,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x42 }, 0, .none  },
+    .{ .cmovc,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x42 }, 0, .none  },
+    .{ .cmovc,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x42 }, 0, .long  },
+    .{ .cmove,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x44 }, 0, .none  },
+    .{ .cmove,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x44 }, 0, .none  },
+    .{ .cmove,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x44 }, 0, .long  },
+    .{ .cmovg,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4f }, 0, .none  },
+    .{ .cmovg,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4f }, 0, .none  },
+    .{ .cmovg,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4f }, 0, .long  },
+    .{ .cmovge,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4d }, 0, .none  },
+    .{ .cmovge,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4d }, 0, .none  },
+    .{ .cmovge,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4d }, 0, .long  },
+    .{ .cmovl,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4c }, 0, .none  },
+    .{ .cmovl,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4c }, 0, .none  },
+    .{ .cmovl,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4c }, 0, .long  },
+    .{ .cmovle,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4e }, 0, .none  },
+    .{ .cmovle,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4e }, 0, .none  },
+    .{ .cmovle,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4e }, 0, .long  },
+    .{ .cmovna,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x46 }, 0, .none  },
+    .{ .cmovna,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x46 }, 0, .none  },
+    .{ .cmovna,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x46 }, 0, .long  },
+    .{ .cmovnae, .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x42 }, 0, .none  },
+    .{ .cmovnae, .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x42 }, 0, .none  },
+    .{ .cmovnae, .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x42 }, 0, .long  },
+    .{ .cmovnb,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x43 }, 0, .none  },
+    .{ .cmovnb,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x43 }, 0, .none  },
+    .{ .cmovnb,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x43 }, 0, .long  },
+    .{ .cmovnbe, .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x47 }, 0, .none  },
+    .{ .cmovnbe, .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x47 }, 0, .none  },
+    .{ .cmovnbe, .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x47 }, 0, .long  },
+    .{ .cmovnc,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x43 }, 0, .none  },
+    .{ .cmovnc,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x43 }, 0, .none  },
+    .{ .cmovnc,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x43 }, 0, .long  },
+    .{ .cmovne,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x45 }, 0, .none  },
+    .{ .cmovne,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x45 }, 0, .none  },
+    .{ .cmovne,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x45 }, 0, .long  },
+    .{ .cmovng,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4e }, 0, .none  },
+    .{ .cmovng,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4e }, 0, .none  },
+    .{ .cmovng,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4e }, 0, .long  },
+    .{ .cmovnge, .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4c }, 0, .none  },
+    .{ .cmovnge, .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4c }, 0, .none  },
+    .{ .cmovnge, .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4c }, 0, .long  },
+    .{ .cmovnl,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4d }, 0, .none  },
+    .{ .cmovnl,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4d }, 0, .none  },
+    .{ .cmovnl,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4d }, 0, .long  },
+    .{ .cmovnle, .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4f }, 0, .none  },
+    .{ .cmovnle, .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4f }, 0, .none  },
+    .{ .cmovnle, .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4f }, 0, .long  },
+    .{ .cmovno,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x41 }, 0, .none  },
+    .{ .cmovno,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x41 }, 0, .none  },
+    .{ .cmovno,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x41 }, 0, .long  },
+    .{ .cmovnp,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4b }, 0, .none  },
+    .{ .cmovnp,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4b }, 0, .none  },
+    .{ .cmovnp,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4b }, 0, .long  },
+    .{ .cmovns,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x49 }, 0, .none  },
+    .{ .cmovns,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x49 }, 0, .none  },
+    .{ .cmovns,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x49 }, 0, .long  },
+    .{ .cmovnz,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x45 }, 0, .none  },
+    .{ .cmovnz,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x45 }, 0, .none  },
+    .{ .cmovnz,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x45 }, 0, .long  },
+    .{ .cmovo,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x40 }, 0, .none  },
+    .{ .cmovo,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x40 }, 0, .none  },
+    .{ .cmovo,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x40 }, 0, .long  },
+    .{ .cmovp,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4a }, 0, .none  },
+    .{ .cmovp,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4a }, 0, .none  },
+    .{ .cmovp,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4a }, 0, .long  },
+    .{ .cmovpe,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4a }, 0, .none  },
+    .{ .cmovpe,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4a }, 0, .none  },
+    .{ .cmovpe,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4a }, 0, .long  },
+    .{ .cmovpo,  .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x4b }, 0, .none  },
+    .{ .cmovpo,  .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x4b }, 0, .none  },
+    .{ .cmovpo,  .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x4b }, 0, .long  },
+    .{ .cmovs,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x48 }, 0, .none  },
+    .{ .cmovs,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x48 }, 0, .none  },
+    .{ .cmovs,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x48 }, 0, .long  },
+    .{ .cmovz,   .rm, .r16, .rm16, .none, .none, &.{ 0x0f, 0x44 }, 0, .none  },
+    .{ .cmovz,   .rm, .r32, .rm32, .none, .none, &.{ 0x0f, 0x44 }, 0, .none  },
+    .{ .cmovz,   .rm, .r64, .rm64, .none, .none, &.{ 0x0f, 0x44 }, 0, .long  },
+
+    .{ .cmp, .zi, .al,   .imm8,   .none, .none, &.{ 0x3c }, 0, .none  },
+    .{ .cmp, .zi, .ax,   .imm16,  .none, .none, &.{ 0x3d }, 0, .none  },
+    .{ .cmp, .zi, .eax,  .imm32,  .none, .none, &.{ 0x3d }, 0, .none  },
+    .{ .cmp, .zi, .rax,  .imm32s, .none, .none, &.{ 0x3d }, 0, .long  },
+    .{ .cmp, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 7, .none  },
+    .{ .cmp, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 7, .rex   },
+    .{ .cmp, .mi, .rm16, .imm16,  .none, .none, &.{ 0x81 }, 7, .none  },
+    .{ .cmp, .mi, .rm32, .imm32,  .none, .none, &.{ 0x81 }, 7, .none  },
+    .{ .cmp, .mi, .rm64, .imm32s, .none, .none, &.{ 0x81 }, 7, .long  },
+    .{ .cmp, .mi, .rm16, .imm8s,  .none, .none, &.{ 0x83 }, 7, .none  },
+    .{ .cmp, .mi, .rm32, .imm8s,  .none, .none, &.{ 0x83 }, 7, .none  },
+    .{ .cmp, .mi, .rm64, .imm8s,  .none, .none, &.{ 0x83 }, 7, .long  },
+    .{ .cmp, .mr, .rm8,  .r8,     .none, .none, &.{ 0x38 }, 0, .none  },
+    .{ .cmp, .mr, .rm8,  .r8,     .none, .none, &.{ 0x38 }, 0, .rex   },
+    .{ .cmp, .mr, .rm16, .r16,    .none, .none, &.{ 0x39 }, 0, .none  },
+    .{ .cmp, .mr, .rm32, .r32,    .none, .none, &.{ 0x39 }, 0, .none  },
+    .{ .cmp, .mr, .rm64, .r64,    .none, .none, &.{ 0x39 }, 0, .long  },
+    .{ .cmp, .rm, .r8,   .rm8,    .none, .none, &.{ 0x3a }, 0, .none  },
+    .{ .cmp, .rm, .r8,   .rm8,    .none, .none, &.{ 0x3a }, 0, .rex   },
+    .{ .cmp, .rm, .r16,  .rm16,   .none, .none, &.{ 0x3b }, 0, .none  },
+    .{ .cmp, .rm, .r32,  .rm32,   .none, .none, &.{ 0x3b }, 0, .none  },
+    .{ .cmp, .rm, .r64,  .rm64,   .none, .none, &.{ 0x3b }, 0, .long  },
+
+    .{ .div, .m, .rm8,  .none, .none, .none, &.{ 0xf6 }, 6, .none  },
+    .{ .div, .m, .rm8,  .none, .none, .none, &.{ 0xf6 }, 6, .rex   },
+    .{ .div, .m, .rm16, .none, .none, .none, &.{ 0xf7 }, 6, .none  },
+    .{ .div, .m, .rm32, .none, .none, .none, &.{ 0xf7 }, 6, .none  },
+    .{ .div, .m, .rm64, .none, .none, .none, &.{ 0xf7 }, 6, .long  },
+
+    .{ .fisttp, .m, .m16, .none, .none, .none, &.{ 0xdf }, 1, .fpu },
+    .{ .fisttp, .m, .m32, .none, .none, .none, &.{ 0xdb }, 1, .fpu },
+    .{ .fisttp, .m, .m64, .none, .none, .none, &.{ 0xdd }, 1, .fpu },
+
+    .{ .fld, .m, .m32, .none, .none, .none, &.{ 0xd9 }, 0, .fpu },
+    .{ .fld, .m, .m64, .none, .none, .none, &.{ 0xdd }, 0, .fpu },
+    .{ .fld, .m, .m80, .none, .none, .none, &.{ 0xdb }, 5, .fpu },
+
+    .{ .idiv, .m, .rm8,  .none, .none, .none, &.{ 0xf6 }, 7, .none  },
+    .{ .idiv, .m, .rm8,  .none, .none, .none, &.{ 0xf6 }, 7, .rex   },
+    .{ .idiv, .m, .rm16, .none, .none, .none, &.{ 0xf7 }, 7, .none  },
+    .{ .idiv, .m, .rm32, .none, .none, .none, &.{ 0xf7 }, 7, .none  },
+    .{ .idiv, .m, .rm64, .none, .none, .none, &.{ 0xf7 }, 7, .long  },
+
+    .{ .imul, .m,   .rm8,  .none, .none,  .none, &.{ 0xf6       }, 5, .none  },
+    .{ .imul, .m,   .rm8,  .none, .none,  .none, &.{ 0xf6       }, 5, .rex   },
+    .{ .imul, .m,   .rm16, .none, .none,  .none, &.{ 0xf7       }, 5, .none  },
+    .{ .imul, .m,   .rm32, .none, .none,  .none, &.{ 0xf7       }, 5, .none  },
+    .{ .imul, .m,   .rm64, .none, .none,  .none, &.{ 0xf7       }, 5, .long  },
+    .{ .imul, .rm,  .r16,  .rm16, .none,  .none, &.{ 0x0f, 0xaf }, 0, .none  },
+    .{ .imul, .rm,  .r32,  .rm32, .none,  .none, &.{ 0x0f, 0xaf }, 0, .none  },
+    .{ .imul, .rm,  .r64,  .rm64, .none,  .none, &.{ 0x0f, 0xaf }, 0, .long  },
+    .{ .imul, .rmi, .r16,  .rm16, .imm8s, .none, &.{ 0x6b       }, 0, .none  },
+    .{ .imul, .rmi, .r32,  .rm32, .imm8s, .none, &.{ 0x6b       }, 0, .none  },
+    .{ .imul, .rmi, .r64,  .rm64, .imm8s, .none, &.{ 0x6b       }, 0, .long  },
+    .{ .imul, .rmi, .r16,  .rm16, .imm16, .none, &.{ 0x69       }, 0, .none  },
+    .{ .imul, .rmi, .r32,  .rm32, .imm32, .none, &.{ 0x69       }, 0, .none  },
+    .{ .imul, .rmi, .r64,  .rm64, .imm32, .none, &.{ 0x69       }, 0, .long  },
+
+    .{ .int3, .np, .none, .none, .none, .none, &.{ 0xcc }, 0, .none },
+
+    .{ .ja,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x87 }, 0, .none },
+    .{ .jae,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x83 }, 0, .none },
+    .{ .jb,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x82 }, 0, .none },
+    .{ .jbe,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x86 }, 0, .none },
+    .{ .jc,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x82 }, 0, .none },
+    .{ .jrcxz, .d, .rel32, .none, .none, .none, &.{ 0xe3       }, 0, .none },
+    .{ .je,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x84 }, 0, .none },
+    .{ .jg,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8f }, 0, .none },
+    .{ .jge,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8d }, 0, .none },
+    .{ .jl,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8c }, 0, .none },
+    .{ .jle,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8e }, 0, .none },
+    .{ .jna,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x86 }, 0, .none },
+    .{ .jnae,  .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x82 }, 0, .none },
+    .{ .jnb,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x83 }, 0, .none },
+    .{ .jnbe,  .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x87 }, 0, .none },
+    .{ .jnc,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x83 }, 0, .none },
+    .{ .jne,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x85 }, 0, .none },
+    .{ .jng,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8e }, 0, .none },
+    .{ .jnge,  .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8c }, 0, .none },
+    .{ .jnl,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8d }, 0, .none },
+    .{ .jnle,  .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8f }, 0, .none },
+    .{ .jno,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x81 }, 0, .none },
+    .{ .jnp,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8b }, 0, .none },
+    .{ .jns,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x89 }, 0, .none },
+    .{ .jnz,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x85 }, 0, .none },
+    .{ .jo,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x80 }, 0, .none },
+    .{ .jp,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8a }, 0, .none },
+    .{ .jpe,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8a }, 0, .none },
+    .{ .jpo,   .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x8b }, 0, .none },
+    .{ .js,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x88 }, 0, .none },
+    .{ .jz,    .d, .rel32, .none, .none, .none, &.{ 0x0f, 0x84 }, 0, .none },
+
+    .{ .jmp, .d, .rel32, .none, .none, .none, &.{ 0xe9 }, 0, .none },
+    .{ .jmp, .m, .rm64,  .none, .none, .none, &.{ 0xff }, 4, .none },
+
+    .{ .lea, .rm, .r16, .m, .none, .none, &.{ 0x8d }, 0, .none  },
+    .{ .lea, .rm, .r32, .m, .none, .none, &.{ 0x8d }, 0, .none  },
+    .{ .lea, .rm, .r64, .m, .none, .none, &.{ 0x8d }, 0, .long  },
+
+    .{ .mov, .mr, .rm8,   .r8,     .none, .none, &.{ 0x88 }, 0, .none  },
+    .{ .mov, .mr, .rm8,   .r8,     .none, .none, &.{ 0x88 }, 0, .rex   },
+    .{ .mov, .mr, .rm16,  .r16,    .none, .none, &.{ 0x89 }, 0, .none  },
+    .{ .mov, .mr, .rm32,  .r32,    .none, .none, &.{ 0x89 }, 0, .none  },
+    .{ .mov, .mr, .rm64,  .r64,    .none, .none, &.{ 0x89 }, 0, .long  },
+    .{ .mov, .rm, .r8,    .rm8,    .none, .none, &.{ 0x8a }, 0, .none  },
+    .{ .mov, .rm, .r8,    .rm8,    .none, .none, &.{ 0x8a }, 0, .rex   },
+    .{ .mov, .rm, .r16,   .rm16,   .none, .none, &.{ 0x8b }, 0, .none  },
+    .{ .mov, .rm, .r32,   .rm32,   .none, .none, &.{ 0x8b }, 0, .none  },
+    .{ .mov, .rm, .r64,   .rm64,   .none, .none, &.{ 0x8b }, 0, .long  },
+    .{ .mov, .mr, .rm16,  .sreg,   .none, .none, &.{ 0x8c }, 0, .none  },
+    .{ .mov, .mr, .rm64,  .sreg,   .none, .none, &.{ 0x8c }, 0, .long  },
+    .{ .mov, .rm, .sreg,  .rm16,   .none, .none, &.{ 0x8e }, 0, .none  },
+    .{ .mov, .rm, .sreg,  .rm64,   .none, .none, &.{ 0x8e }, 0, .long  },
+    .{ .mov, .fd, .al,    .moffs,  .none, .none, &.{ 0xa0 }, 0, .none  },
+    .{ .mov, .fd, .ax,    .moffs,  .none, .none, &.{ 0xa1 }, 0, .none  },
+    .{ .mov, .fd, .eax,   .moffs,  .none, .none, &.{ 0xa1 }, 0, .none  },
+    .{ .mov, .fd, .rax,   .moffs,  .none, .none, &.{ 0xa1 }, 0, .long  },
+    .{ .mov, .td, .moffs, .al,     .none, .none, &.{ 0xa2 }, 0, .none  },
+    .{ .mov, .td, .moffs, .ax,     .none, .none, &.{ 0xa3 }, 0, .none  },
+    .{ .mov, .td, .moffs, .eax,    .none, .none, &.{ 0xa3 }, 0, .none  },
+    .{ .mov, .td, .moffs, .rax,    .none, .none, &.{ 0xa3 }, 0, .long  },
+    .{ .mov, .oi, .r8,    .imm8,   .none, .none, &.{ 0xb0 }, 0, .none  },
+    .{ .mov, .oi, .r8,    .imm8,   .none, .none, &.{ 0xb0 }, 0, .rex   },
+    .{ .mov, .oi, .r16,   .imm16,  .none, .none, &.{ 0xb8 }, 0, .none  },
+    .{ .mov, .oi, .r32,   .imm32,  .none, .none, &.{ 0xb8 }, 0, .none  },
+    .{ .mov, .oi, .r64,   .imm64,  .none, .none, &.{ 0xb8 }, 0, .long  },
+    .{ .mov, .mi, .rm8,   .imm8,   .none, .none, &.{ 0xc6 }, 0, .none  },
+    .{ .mov, .mi, .rm8,   .imm8,   .none, .none, &.{ 0xc6 }, 0, .rex   },
+    .{ .mov, .mi, .rm16,  .imm16,  .none, .none, &.{ 0xc7 }, 0, .none  },
+    .{ .mov, .mi, .rm32,  .imm32,  .none, .none, &.{ 0xc7 }, 0, .none  },
+    .{ .mov, .mi, .rm64,  .imm32s, .none, .none, &.{ 0xc7 }, 0, .long  },
+
+    .{ .movsx, .rm, .r16, .rm8,  .none, .none, &.{ 0x0f, 0xbe }, 0, .none  },
+    .{ .movsx, .rm, .r16, .rm8,  .none, .none, &.{ 0x0f, 0xbe }, 0, .rex   },
+    .{ .movsx, .rm, .r32, .rm8,  .none, .none, &.{ 0x0f, 0xbe }, 0, .none  },
+    .{ .movsx, .rm, .r32, .rm8,  .none, .none, &.{ 0x0f, 0xbe }, 0, .rex   },
+    .{ .movsx, .rm, .r64, .rm8,  .none, .none, &.{ 0x0f, 0xbe }, 0, .long  },
+    .{ .movsx, .rm, .r32, .rm16, .none, .none, &.{ 0x0f, 0xbf }, 0, .none  },
+    .{ .movsx, .rm, .r64, .rm16, .none, .none, &.{ 0x0f, 0xbf }, 0, .long  },
 
     // This instruction is discouraged.
-    .{ .movsxd, .rm, .r32, .rm32, .none, .none, 1, 0x63, 0x00, 0x00, 0, .none  },
-    .{ .movsxd, .rm, .r64, .rm32, .none, .none, 1, 0x63, 0x00, 0x00, 0, .long  },
-
-    .{ .movzx, .rm, .r16, .rm8,  .none, .none, 2, 0x0f, 0xb6, 0x00, 0, .none  },
-    .{ .movzx, .rm, .r32, .rm8,  .none, .none, 2, 0x0f, 0xb6, 0x00, 0, .none  },
-    .{ .movzx, .rm, .r64, .rm8,  .none, .none, 2, 0x0f, 0xb6, 0x00, 0, .long  },
-    .{ .movzx, .rm, .r32, .rm16, .none, .none, 2, 0x0f, 0xb7, 0x00, 0, .none  },
-    .{ .movzx, .rm, .r64, .rm16, .none, .none, 2, 0x0f, 0xb7, 0x00, 0, .long  },
-
-    .{ .mul, .m, .rm8,  .none, .none, .none, 1, 0xf6, 0x00, 0x00, 4, .none  },
-    .{ .mul, .m, .rm8,  .none, .none, .none, 1, 0xf6, 0x00, 0x00, 4, .rex   },
-    .{ .mul, .m, .rm16, .none, .none, .none, 1, 0xf7, 0x00, 0x00, 4, .none  },
-    .{ .mul, .m, .rm32, .none, .none, .none, 1, 0xf7, 0x00, 0x00, 4, .none  },
-    .{ .mul, .m, .rm64, .none, .none, .none, 1, 0xf7, 0x00, 0x00, 4, .long  },
-
-    .{ .nop, .np, .none, .none, .none, .none, 1, 0x90, 0x00, 0x00, 0, .none },
-
-    .{ .@"or", .zi, .al,   .imm8,   .none, .none, 1, 0x0c, 0x00, 0x00, 0, .none  },
-    .{ .@"or", .zi, .ax,   .imm16,  .none, .none, 1, 0x0d, 0x00, 0x00, 0, .none  },
-    .{ .@"or", .zi, .eax,  .imm32,  .none, .none, 1, 0x0d, 0x00, 0x00, 0, .none  },
-    .{ .@"or", .zi, .rax,  .imm32s, .none, .none, 1, 0x0d, 0x00, 0x00, 0, .long  },
-    .{ .@"or", .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 1, .none  },
-    .{ .@"or", .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 1, .rex   },
-    .{ .@"or", .mi, .rm16, .imm16,  .none, .none, 1, 0x81, 0x00, 0x00, 1, .none  },
-    .{ .@"or", .mi, .rm32, .imm32,  .none, .none, 1, 0x81, 0x00, 0x00, 1, .none  },
-    .{ .@"or", .mi, .rm64, .imm32s, .none, .none, 1, 0x81, 0x00, 0x00, 1, .long  },
-    .{ .@"or", .mi, .rm16, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 1, .none  },
-    .{ .@"or", .mi, .rm32, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 1, .none  },
-    .{ .@"or", .mi, .rm64, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 1, .long  },
-    .{ .@"or", .mr, .rm8,  .r8,     .none, .none, 1, 0x08, 0x00, 0x00, 0, .none  },
-    .{ .@"or", .mr, .rm8,  .r8,     .none, .none, 1, 0x08, 0x00, 0x00, 0, .rex   },
-    .{ .@"or", .mr, .rm16, .r16,    .none, .none, 1, 0x09, 0x00, 0x00, 0, .none  },
-    .{ .@"or", .mr, .rm32, .r32,    .none, .none, 1, 0x09, 0x00, 0x00, 0, .none  },
-    .{ .@"or", .mr, .rm64, .r64,    .none, .none, 1, 0x09, 0x00, 0x00, 0, .long  },
-    .{ .@"or", .rm, .r8,   .rm8,    .none, .none, 1, 0x0a, 0x00, 0x00, 0, .none  },
-    .{ .@"or", .rm, .r8,   .rm8,    .none, .none, 1, 0x0a, 0x00, 0x00, 0, .rex   },
-    .{ .@"or", .rm, .r16,  .rm16,   .none, .none, 1, 0x0b, 0x00, 0x00, 0, .none  },
-    .{ .@"or", .rm, .r32,  .rm32,   .none, .none, 1, 0x0b, 0x00, 0x00, 0, .none  },
-    .{ .@"or", .rm, .r64,  .rm64,   .none, .none, 1, 0x0b, 0x00, 0x00, 0, .long  },
-
-    .{ .pop, .o, .r16,  .none, .none, .none, 1, 0x58, 0x00, 0x00, 0, .none  },
-    .{ .pop, .o, .r64,  .none, .none, .none, 1, 0x58, 0x00, 0x00, 0, .none  },
-    .{ .pop, .m, .rm16, .none, .none, .none, 1, 0x8f, 0x00, 0x00, 0, .none  },
-    .{ .pop, .m, .rm64, .none, .none, .none, 1, 0x8f, 0x00, 0x00, 0, .none  },
-
-    .{ .push, .o, .r16,   .none, .none, .none, 1, 0x50, 0x00, 0x00, 0, .none  },
-    .{ .push, .o, .r64,   .none, .none, .none, 1, 0x50, 0x00, 0x00, 0, .none  },
-    .{ .push, .m, .rm16,  .none, .none, .none, 1, 0xff, 0x00, 0x00, 6, .none  },
-    .{ .push, .m, .rm64,  .none, .none, .none, 1, 0xff, 0x00, 0x00, 6, .none  },
-    .{ .push, .i, .imm8,  .none, .none, .none, 1, 0x6a, 0x00, 0x00, 0, .none  },
-    .{ .push, .i, .imm16, .none, .none, .none, 1, 0x68, 0x00, 0x00, 0, .none  },
-    .{ .push, .i, .imm32, .none, .none, .none, 1, 0x68, 0x00, 0x00, 0, .none  },
-
-    .{ .ret, .np, .none, .none, .none, .none, 1, 0xc3, 0x00, 0x00, 0, .none },
-
-    .{ .sal, .m1, .rm8,  .unity, .none, .none, 1, 0xd0, 0x00, 0x00, 4, .none  },
-    .{ .sal, .m1, .rm8,  .unity, .none, .none, 1, 0xd0, 0x00, 0x00, 4, .rex   },
-    .{ .sal, .m1, .rm16, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 4, .none  },
-    .{ .sal, .m1, .rm32, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 4, .none  },
-    .{ .sal, .m1, .rm64, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 4, .long  },
-    .{ .sal, .mc, .rm8,  .cl,    .none, .none, 1, 0xd2, 0x00, 0x00, 4, .none  },
-    .{ .sal, .mc, .rm8,  .cl,    .none, .none, 1, 0xd2, 0x00, 0x00, 4, .rex   },
-    .{ .sal, .mc, .rm16, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 4, .none  },
-    .{ .sal, .mc, .rm32, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 4, .none  },
-    .{ .sal, .mc, .rm64, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 4, .long  },
-    .{ .sal, .mi, .rm8,  .imm8,  .none, .none, 1, 0xc0, 0x00, 0x00, 4, .none  },
-    .{ .sal, .mi, .rm8,  .imm8,  .none, .none, 1, 0xc0, 0x00, 0x00, 4, .rex   },
-    .{ .sal, .mi, .rm16, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 4, .none  },
-    .{ .sal, .mi, .rm32, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 4, .none  },
-    .{ .sal, .mi, .rm64, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 4, .long  },
-
-    .{ .sar, .m1, .rm8,  .unity, .none, .none, 1, 0xd0, 0x00, 0x00, 7, .none  },
-    .{ .sar, .m1, .rm8,  .unity, .none, .none, 1, 0xd0, 0x00, 0x00, 7, .rex   },
-    .{ .sar, .m1, .rm16, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 7, .none  },
-    .{ .sar, .m1, .rm32, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 7, .none  },
-    .{ .sar, .m1, .rm64, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 7, .long  },
-    .{ .sar, .mc, .rm8,  .cl,    .none, .none, 1, 0xd2, 0x00, 0x00, 7, .none  },
-    .{ .sar, .mc, .rm8,  .cl,    .none, .none, 1, 0xd2, 0x00, 0x00, 7, .rex   },
-    .{ .sar, .mc, .rm16, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 7, .none  },
-    .{ .sar, .mc, .rm32, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 7, .none  },
-    .{ .sar, .mc, .rm64, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 7, .long  },
-    .{ .sar, .mi, .rm8,  .imm8,  .none, .none, 1, 0xc0, 0x00, 0x00, 7, .none  },
-    .{ .sar, .mi, .rm8,  .imm8,  .none, .none, 1, 0xc0, 0x00, 0x00, 7, .rex   },
-    .{ .sar, .mi, .rm16, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 7, .none  },
-    .{ .sar, .mi, .rm32, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 7, .none  },
-    .{ .sar, .mi, .rm64, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 7, .long  },
-
-    .{ .sbb, .zi, .al,   .imm8,   .none, .none, 1, 0x1c, 0x00, 0x00, 0, .none  },
-    .{ .sbb, .zi, .ax,   .imm16,  .none, .none, 1, 0x1d, 0x00, 0x00, 0, .none  },
-    .{ .sbb, .zi, .eax,  .imm32,  .none, .none, 1, 0x1d, 0x00, 0x00, 0, .none  },
-    .{ .sbb, .zi, .rax,  .imm32s, .none, .none, 1, 0x1d, 0x00, 0x00, 0, .long  },
-    .{ .sbb, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 3, .none  },
-    .{ .sbb, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 3, .rex   },
-    .{ .sbb, .mi, .rm16, .imm16,  .none, .none, 1, 0x81, 0x00, 0x00, 3, .none  },
-    .{ .sbb, .mi, .rm32, .imm32,  .none, .none, 1, 0x81, 0x00, 0x00, 3, .none  },
-    .{ .sbb, .mi, .rm64, .imm32s, .none, .none, 1, 0x81, 0x00, 0x00, 3, .long  },
-    .{ .sbb, .mi, .rm16, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 3, .none  },
-    .{ .sbb, .mi, .rm32, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 3, .none  },
-    .{ .sbb, .mi, .rm64, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 3, .long  },
-    .{ .sbb, .mr, .rm8,  .r8,     .none, .none, 1, 0x18, 0x00, 0x00, 0, .none  },
-    .{ .sbb, .mr, .rm8,  .r8,     .none, .none, 1, 0x18, 0x00, 0x00, 0, .rex   },
-    .{ .sbb, .mr, .rm16, .r16,    .none, .none, 1, 0x19, 0x00, 0x00, 0, .none  },
-    .{ .sbb, .mr, .rm32, .r32,    .none, .none, 1, 0x19, 0x00, 0x00, 0, .none  },
-    .{ .sbb, .mr, .rm64, .r64,    .none, .none, 1, 0x19, 0x00, 0x00, 0, .long  },
-    .{ .sbb, .rm, .r8,   .rm8,    .none, .none, 1, 0x1a, 0x00, 0x00, 0, .none  },
-    .{ .sbb, .rm, .r8,   .rm8,    .none, .none, 1, 0x1a, 0x00, 0x00, 0, .rex   },
-    .{ .sbb, .rm, .r16,  .rm16,   .none, .none, 1, 0x1b, 0x00, 0x00, 0, .none  },
-    .{ .sbb, .rm, .r32,  .rm32,   .none, .none, 1, 0x1b, 0x00, 0x00, 0, .none  },
-    .{ .sbb, .rm, .r64,  .rm64,   .none, .none, 1, 0x1b, 0x00, 0x00, 0, .long  },
-
-    .{ .seta,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x97, 0x00, 0, .none },
-    .{ .seta,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x97, 0x00, 0, .rex  },
-    .{ .setae,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x93, 0x00, 0, .none },
-    .{ .setae,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x93, 0x00, 0, .rex  },
-    .{ .setb,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x92, 0x00, 0, .none },
-    .{ .setb,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x92, 0x00, 0, .rex  },
-    .{ .setbe,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x96, 0x00, 0, .none },
-    .{ .setbe,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x96, 0x00, 0, .rex  },
-    .{ .setc,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x92, 0x00, 0, .none },
-    .{ .setc,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x92, 0x00, 0, .rex  },
-    .{ .sete,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x94, 0x00, 0, .none },
-    .{ .sete,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x94, 0x00, 0, .rex  },
-    .{ .setg,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9f, 0x00, 0, .none },
-    .{ .setg,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9f, 0x00, 0, .rex  },
-    .{ .setge,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9d, 0x00, 0, .none },
-    .{ .setge,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9d, 0x00, 0, .rex  },
-    .{ .setl,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9c, 0x00, 0, .none },
-    .{ .setl,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9c, 0x00, 0, .rex  },
-    .{ .setle,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9e, 0x00, 0, .none },
-    .{ .setle,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9e, 0x00, 0, .rex  },
-    .{ .setna,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x96, 0x00, 0, .none },
-    .{ .setna,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x96, 0x00, 0, .rex  },
-    .{ .setnae, .m, .rm8, .none, .none, .none, 2, 0x0f, 0x92, 0x00, 0, .none },
-    .{ .setnae, .m, .rm8, .none, .none, .none, 2, 0x0f, 0x92, 0x00, 0, .rex  },
-    .{ .setnb,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x93, 0x00, 0, .none },
-    .{ .setnb,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x93, 0x00, 0, .rex  },
-    .{ .setnbe, .m, .rm8, .none, .none, .none, 2, 0x0f, 0x97, 0x00, 0, .none },
-    .{ .setnbe, .m, .rm8, .none, .none, .none, 2, 0x0f, 0x97, 0x00, 0, .rex  },
-    .{ .setnc,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x93, 0x00, 0, .none },
-    .{ .setnc,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x93, 0x00, 0, .rex  },
-    .{ .setne,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x95, 0x00, 0, .none },
-    .{ .setne,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x95, 0x00, 0, .rex  },
-    .{ .setng,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9e, 0x00, 0, .none },
-    .{ .setng,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9e, 0x00, 0, .rex  },
-    .{ .setnge, .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9c, 0x00, 0, .none },
-    .{ .setnge, .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9c, 0x00, 0, .rex  },
-    .{ .setnl,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9d, 0x00, 0, .none },
-    .{ .setnl,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9d, 0x00, 0, .rex  },
-    .{ .setnle, .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9f, 0x00, 0, .none },
-    .{ .setnle, .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9f, 0x00, 0, .rex  },
-    .{ .setno,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x91, 0x00, 0, .none },
-    .{ .setno,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x91, 0x00, 0, .rex  },
-    .{ .setnp,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9b, 0x00, 0, .none },
-    .{ .setnp,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9b, 0x00, 0, .rex  },
-    .{ .setns,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x99, 0x00, 0, .none },
-    .{ .setns,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x99, 0x00, 0, .rex  },
-    .{ .setnz,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x95, 0x00, 0, .none },
-    .{ .setnz,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x95, 0x00, 0, .rex  },
-    .{ .seto,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x90, 0x00, 0, .none },
-    .{ .seto,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x90, 0x00, 0, .rex  },
-    .{ .setp,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9a, 0x00, 0, .none },
-    .{ .setp,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9a, 0x00, 0, .rex  },
-    .{ .setpe,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9a, 0x00, 0, .none },
-    .{ .setpe,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9a, 0x00, 0, .rex  },
-    .{ .setpo,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9b, 0x00, 0, .none },
-    .{ .setpo,  .m, .rm8, .none, .none, .none, 2, 0x0f, 0x9b, 0x00, 0, .rex  },
-    .{ .sets,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x98, 0x00, 0, .none },
-    .{ .sets,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x98, 0x00, 0, .rex  },
-    .{ .setz,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x94, 0x00, 0, .none },
-    .{ .setz,   .m, .rm8, .none, .none, .none, 2, 0x0f, 0x94, 0x00, 0, .rex  },
-
-    .{ .shl, .m1, .rm8,  .unity, .none, .none, 1, 0xd0, 0x00, 0x00, 4, .none  },
-    .{ .shl, .m1, .rm8,  .unity, .none, .none, 1, 0xd0, 0x00, 0x00, 4, .rex   },
-    .{ .shl, .m1, .rm16, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 4, .none  },
-    .{ .shl, .m1, .rm32, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 4, .none  },
-    .{ .shl, .m1, .rm64, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 4, .long  },
-    .{ .shl, .mc, .rm8,  .cl,    .none, .none, 1, 0xd2, 0x00, 0x00, 4, .none  },
-    .{ .shl, .mc, .rm8,  .cl,    .none, .none, 1, 0xd2, 0x00, 0x00, 4, .rex   },
-    .{ .shl, .mc, .rm16, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 4, .none  },
-    .{ .shl, .mc, .rm32, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 4, .none  },
-    .{ .shl, .mc, .rm64, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 4, .long  },
-    .{ .shl, .mi, .rm8,  .imm8,  .none, .none, 1, 0xc0, 0x00, 0x00, 4, .none  },
-    .{ .shl, .mi, .rm8,  .imm8,  .none, .none, 1, 0xc0, 0x00, 0x00, 4, .rex   },
-    .{ .shl, .mi, .rm16, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 4, .none  },
-    .{ .shl, .mi, .rm32, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 4, .none  },
-    .{ .shl, .mi, .rm64, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 4, .long  },
-
-    .{ .shr, .m1, .rm8,  .unity, .none, .none, 1, 0xd0, 0x00, 0x00, 5, .none  },
-    .{ .shr, .m1, .rm8,  .unity, .none, .none, 1, 0xd0, 0x00, 0x00, 5, .rex   },
-    .{ .shr, .m1, .rm16, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 5, .none  },
-    .{ .shr, .m1, .rm32, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 5, .none  },
-    .{ .shr, .m1, .rm64, .unity, .none, .none, 1, 0xd1, 0x00, 0x00, 5, .long  },
-    .{ .shr, .mc, .rm8,  .cl,    .none, .none, 1, 0xd2, 0x00, 0x00, 5, .none  },
-    .{ .shr, .mc, .rm8,  .cl,    .none, .none, 1, 0xd2, 0x00, 0x00, 5, .rex   },
-    .{ .shr, .mc, .rm16, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 5, .none  },
-    .{ .shr, .mc, .rm32, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 5, .none  },
-    .{ .shr, .mc, .rm64, .cl,    .none, .none, 1, 0xd3, 0x00, 0x00, 5, .long  },
-    .{ .shr, .mi, .rm8,  .imm8,  .none, .none, 1, 0xc0, 0x00, 0x00, 5, .none  },
-    .{ .shr, .mi, .rm8,  .imm8,  .none, .none, 1, 0xc0, 0x00, 0x00, 5, .rex   },
-    .{ .shr, .mi, .rm16, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 5, .none  },
-    .{ .shr, .mi, .rm32, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 5, .none  },
-    .{ .shr, .mi, .rm64, .imm8,  .none, .none, 1, 0xc1, 0x00, 0x00, 5, .long  },
-
-    .{ .sub, .zi, .al,   .imm8,   .none, .none, 1, 0x2c, 0x00, 0x00, 0, .none  },
-    .{ .sub, .zi, .ax,   .imm16,  .none, .none, 1, 0x2d, 0x00, 0x00, 0, .none  },
-    .{ .sub, .zi, .eax,  .imm32,  .none, .none, 1, 0x2d, 0x00, 0x00, 0, .none  },
-    .{ .sub, .zi, .rax,  .imm32s, .none, .none, 1, 0x2d, 0x00, 0x00, 0, .long  },
-    .{ .sub, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 5, .none  },
-    .{ .sub, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 5, .rex   },
-    .{ .sub, .mi, .rm16, .imm16,  .none, .none, 1, 0x81, 0x00, 0x00, 5, .none  },
-    .{ .sub, .mi, .rm32, .imm32,  .none, .none, 1, 0x81, 0x00, 0x00, 5, .none  },
-    .{ .sub, .mi, .rm64, .imm32s, .none, .none, 1, 0x81, 0x00, 0x00, 5, .long  },
-    .{ .sub, .mi, .rm16, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 5, .none  },
-    .{ .sub, .mi, .rm32, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 5, .none  },
-    .{ .sub, .mi, .rm64, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 5, .long  },
-    .{ .sub, .mr, .rm8,  .r8,     .none, .none, 1, 0x28, 0x00, 0x00, 0, .none  },
-    .{ .sub, .mr, .rm8,  .r8,     .none, .none, 1, 0x28, 0x00, 0x00, 0, .rex   },
-    .{ .sub, .mr, .rm16, .r16,    .none, .none, 1, 0x29, 0x00, 0x00, 0, .none  },
-    .{ .sub, .mr, .rm32, .r32,    .none, .none, 1, 0x29, 0x00, 0x00, 0, .none  },
-    .{ .sub, .mr, .rm64, .r64,    .none, .none, 1, 0x29, 0x00, 0x00, 0, .long  },
-    .{ .sub, .rm, .r8,   .rm8,    .none, .none, 1, 0x2a, 0x00, 0x00, 0, .none  },
-    .{ .sub, .rm, .r8,   .rm8,    .none, .none, 1, 0x2a, 0x00, 0x00, 0, .rex   },
-    .{ .sub, .rm, .r16,  .rm16,   .none, .none, 1, 0x2b, 0x00, 0x00, 0, .none  },
-    .{ .sub, .rm, .r32,  .rm32,   .none, .none, 1, 0x2b, 0x00, 0x00, 0, .none  },
-    .{ .sub, .rm, .r64,  .rm64,   .none, .none, 1, 0x2b, 0x00, 0x00, 0, .long  },
-
-    .{ .syscall, .np, .none, .none, .none, .none, 2, 0x0f, 0x05, 0x00, 0, .none },
-
-    .{ .@"test", .zi, .al,   .imm8,   .none, .none, 1, 0xa8, 0x00, 0x00, 0, .none  },
-    .{ .@"test", .zi, .ax,   .imm16,  .none, .none, 1, 0xa9, 0x00, 0x00, 0, .none  },
-    .{ .@"test", .zi, .eax,  .imm32,  .none, .none, 1, 0xa9, 0x00, 0x00, 0, .none  },
-    .{ .@"test", .zi, .rax,  .imm32s, .none, .none, 1, 0xa9, 0x00, 0x00, 0, .long  },
-    .{ .@"test", .mi, .rm8,  .imm8,   .none, .none, 1, 0xf6, 0x00, 0x00, 0, .none  },
-    .{ .@"test", .mi, .rm8,  .imm8,   .none, .none, 1, 0xf6, 0x00, 0x00, 0, .rex   },
-    .{ .@"test", .mi, .rm16, .imm16,  .none, .none, 1, 0xf7, 0x00, 0x00, 0, .none  },
-    .{ .@"test", .mi, .rm32, .imm32,  .none, .none, 1, 0xf7, 0x00, 0x00, 0, .none  },
-    .{ .@"test", .mi, .rm64, .imm32s, .none, .none, 1, 0xf7, 0x00, 0x00, 0, .long  },
-    .{ .@"test", .mr, .rm8,  .r8,     .none, .none, 1, 0x84, 0x00, 0x00, 0, .none  },
-    .{ .@"test", .mr, .rm8,  .r8,     .none, .none, 1, 0x84, 0x00, 0x00, 0, .rex   },
-    .{ .@"test", .mr, .rm16, .r16,    .none, .none, 1, 0x85, 0x00, 0x00, 0, .none  },
-    .{ .@"test", .mr, .rm32, .r32,    .none, .none, 1, 0x85, 0x00, 0x00, 0, .none  },
-    .{ .@"test", .mr, .rm64, .r64,    .none, .none, 1, 0x85, 0x00, 0x00, 0, .long  },
-
-    .{ .ud2, .np, .none, .none, .none, .none, 2, 0x0f, 0x0b, 0x00, 0, .none  },
-
-    .{ .xor, .zi, .al,   .imm8,   .none, .none, 1, 0x34, 0x00, 0x00, 0, .none  },
-    .{ .xor, .zi, .ax,   .imm16,  .none, .none, 1, 0x35, 0x00, 0x00, 0, .none  },
-    .{ .xor, .zi, .eax,  .imm32,  .none, .none, 1, 0x35, 0x00, 0x00, 0, .none  },
-    .{ .xor, .zi, .rax,  .imm32s, .none, .none, 1, 0x35, 0x00, 0x00, 0, .long  },
-    .{ .xor, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 6, .none  },
-    .{ .xor, .mi, .rm8,  .imm8,   .none, .none, 1, 0x80, 0x00, 0x00, 6, .rex   },
-    .{ .xor, .mi, .rm16, .imm16,  .none, .none, 1, 0x81, 0x00, 0x00, 6, .none  },
-    .{ .xor, .mi, .rm32, .imm32,  .none, .none, 1, 0x81, 0x00, 0x00, 6, .none  },
-    .{ .xor, .mi, .rm64, .imm32s, .none, .none, 1, 0x81, 0x00, 0x00, 6, .long  },
-    .{ .xor, .mi, .rm16, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 6, .none  },
-    .{ .xor, .mi, .rm32, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 6, .none  },
-    .{ .xor, .mi, .rm64, .imm8s,  .none, .none, 1, 0x83, 0x00, 0x00, 6, .long  },
-    .{ .xor, .mr, .rm8,  .r8,     .none, .none, 1, 0x30, 0x00, 0x00, 0, .none  },
-    .{ .xor, .mr, .rm8,  .r8,     .none, .none, 1, 0x30, 0x00, 0x00, 0, .rex   },
-    .{ .xor, .mr, .rm16, .r16,    .none, .none, 1, 0x31, 0x00, 0x00, 0, .none  },
-    .{ .xor, .mr, .rm32, .r32,    .none, .none, 1, 0x31, 0x00, 0x00, 0, .none  },
-    .{ .xor, .mr, .rm64, .r64,    .none, .none, 1, 0x31, 0x00, 0x00, 0, .long  },
-    .{ .xor, .rm, .r8,   .rm8,    .none, .none, 1, 0x32, 0x00, 0x00, 0, .none  },
-    .{ .xor, .rm, .r8,   .rm8,    .none, .none, 1, 0x32, 0x00, 0x00, 0, .rex   },
-    .{ .xor, .rm, .r16,  .rm16,   .none, .none, 1, 0x33, 0x00, 0x00, 0, .none  },
-    .{ .xor, .rm, .r32,  .rm32,   .none, .none, 1, 0x33, 0x00, 0x00, 0, .none  },
-    .{ .xor, .rm, .r64,  .rm64,   .none, .none, 1, 0x33, 0x00, 0x00, 0, .long  },
+    .{ .movsxd, .rm, .r32, .rm32, .none, .none, &.{ 0x63 }, 0, .none  },
+    .{ .movsxd, .rm, .r64, .rm32, .none, .none, &.{ 0x63 }, 0, .long  },
+
+    .{ .movzx, .rm, .r16, .rm8,  .none, .none, &.{ 0x0f, 0xb6 }, 0, .none  },
+    .{ .movzx, .rm, .r32, .rm8,  .none, .none, &.{ 0x0f, 0xb6 }, 0, .none  },
+    .{ .movzx, .rm, .r64, .rm8,  .none, .none, &.{ 0x0f, 0xb6 }, 0, .long  },
+    .{ .movzx, .rm, .r32, .rm16, .none, .none, &.{ 0x0f, 0xb7 }, 0, .none  },
+    .{ .movzx, .rm, .r64, .rm16, .none, .none, &.{ 0x0f, 0xb7 }, 0, .long  },
+
+    .{ .mul, .m, .rm8,  .none, .none, .none, &.{ 0xf6 }, 4, .none  },
+    .{ .mul, .m, .rm8,  .none, .none, .none, &.{ 0xf6 }, 4, .rex   },
+    .{ .mul, .m, .rm16, .none, .none, .none, &.{ 0xf7 }, 4, .none  },
+    .{ .mul, .m, .rm32, .none, .none, .none, &.{ 0xf7 }, 4, .none  },
+    .{ .mul, .m, .rm64, .none, .none, .none, &.{ 0xf7 }, 4, .long  },
+
+    .{ .nop, .np, .none, .none, .none, .none, &.{ 0x90 }, 0, .none },
+
+    .{ .@"or", .zi, .al,   .imm8,   .none, .none, &.{ 0x0c }, 0, .none  },
+    .{ .@"or", .zi, .ax,   .imm16,  .none, .none, &.{ 0x0d }, 0, .none  },
+    .{ .@"or", .zi, .eax,  .imm32,  .none, .none, &.{ 0x0d }, 0, .none  },
+    .{ .@"or", .zi, .rax,  .imm32s, .none, .none, &.{ 0x0d }, 0, .long  },
+    .{ .@"or", .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 1, .none  },
+    .{ .@"or", .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 1, .rex   },
+    .{ .@"or", .mi, .rm16, .imm16,  .none, .none, &.{ 0x81 }, 1, .none  },
+    .{ .@"or", .mi, .rm32, .imm32,  .none, .none, &.{ 0x81 }, 1, .none  },
+    .{ .@"or", .mi, .rm64, .imm32s, .none, .none, &.{ 0x81 }, 1, .long  },
+    .{ .@"or", .mi, .rm16, .imm8s,  .none, .none, &.{ 0x83 }, 1, .none  },
+    .{ .@"or", .mi, .rm32, .imm8s,  .none, .none, &.{ 0x83 }, 1, .none  },
+    .{ .@"or", .mi, .rm64, .imm8s,  .none, .none, &.{ 0x83 }, 1, .long  },
+    .{ .@"or", .mr, .rm8,  .r8,     .none, .none, &.{ 0x08 }, 0, .none  },
+    .{ .@"or", .mr, .rm8,  .r8,     .none, .none, &.{ 0x08 }, 0, .rex   },
+    .{ .@"or", .mr, .rm16, .r16,    .none, .none, &.{ 0x09 }, 0, .none  },
+    .{ .@"or", .mr, .rm32, .r32,    .none, .none, &.{ 0x09 }, 0, .none  },
+    .{ .@"or", .mr, .rm64, .r64,    .none, .none, &.{ 0x09 }, 0, .long  },
+    .{ .@"or", .rm, .r8,   .rm8,    .none, .none, &.{ 0x0a }, 0, .none  },
+    .{ .@"or", .rm, .r8,   .rm8,    .none, .none, &.{ 0x0a }, 0, .rex   },
+    .{ .@"or", .rm, .r16,  .rm16,   .none, .none, &.{ 0x0b }, 0, .none  },
+    .{ .@"or", .rm, .r32,  .rm32,   .none, .none, &.{ 0x0b }, 0, .none  },
+    .{ .@"or", .rm, .r64,  .rm64,   .none, .none, &.{ 0x0b }, 0, .long  },
+
+    .{ .pop, .o, .r16,  .none, .none, .none, &.{ 0x58 }, 0, .none  },
+    .{ .pop, .o, .r64,  .none, .none, .none, &.{ 0x58 }, 0, .none  },
+    .{ .pop, .m, .rm16, .none, .none, .none, &.{ 0x8f }, 0, .none  },
+    .{ .pop, .m, .rm64, .none, .none, .none, &.{ 0x8f }, 0, .none  },
+
+    .{ .push, .o, .r16,   .none, .none, .none, &.{ 0x50 }, 0, .none  },
+    .{ .push, .o, .r64,   .none, .none, .none, &.{ 0x50 }, 0, .none  },
+    .{ .push, .m, .rm16,  .none, .none, .none, &.{ 0xff }, 6, .none  },
+    .{ .push, .m, .rm64,  .none, .none, .none, &.{ 0xff }, 6, .none  },
+    .{ .push, .i, .imm8,  .none, .none, .none, &.{ 0x6a }, 0, .none  },
+    .{ .push, .i, .imm16, .none, .none, .none, &.{ 0x68 }, 0, .none  },
+    .{ .push, .i, .imm32, .none, .none, .none, &.{ 0x68 }, 0, .none  },
+
+    .{ .ret, .np, .none, .none, .none, .none, &.{ 0xc3 }, 0, .none },
+
+    .{ .sal, .m1, .rm8,  .unity, .none, .none, &.{ 0xd0 }, 4, .none  },
+    .{ .sal, .m1, .rm8,  .unity, .none, .none, &.{ 0xd0 }, 4, .rex   },
+    .{ .sal, .m1, .rm16, .unity, .none, .none, &.{ 0xd1 }, 4, .none  },
+    .{ .sal, .m1, .rm32, .unity, .none, .none, &.{ 0xd1 }, 4, .none  },
+    .{ .sal, .m1, .rm64, .unity, .none, .none, &.{ 0xd1 }, 4, .long  },
+    .{ .sal, .mc, .rm8,  .cl,    .none, .none, &.{ 0xd2 }, 4, .none  },
+    .{ .sal, .mc, .rm8,  .cl,    .none, .none, &.{ 0xd2 }, 4, .rex   },
+    .{ .sal, .mc, .rm16, .cl,    .none, .none, &.{ 0xd3 }, 4, .none  },
+    .{ .sal, .mc, .rm32, .cl,    .none, .none, &.{ 0xd3 }, 4, .none  },
+    .{ .sal, .mc, .rm64, .cl,    .none, .none, &.{ 0xd3 }, 4, .long  },
+    .{ .sal, .mi, .rm8,  .imm8,  .none, .none, &.{ 0xc0 }, 4, .none  },
+    .{ .sal, .mi, .rm8,  .imm8,  .none, .none, &.{ 0xc0 }, 4, .rex   },
+    .{ .sal, .mi, .rm16, .imm8,  .none, .none, &.{ 0xc1 }, 4, .none  },
+    .{ .sal, .mi, .rm32, .imm8,  .none, .none, &.{ 0xc1 }, 4, .none  },
+    .{ .sal, .mi, .rm64, .imm8,  .none, .none, &.{ 0xc1 }, 4, .long  },
+
+    .{ .sar, .m1, .rm8,  .unity, .none, .none, &.{ 0xd0 }, 7, .none  },
+    .{ .sar, .m1, .rm8,  .unity, .none, .none, &.{ 0xd0 }, 7, .rex   },
+    .{ .sar, .m1, .rm16, .unity, .none, .none, &.{ 0xd1 }, 7, .none  },
+    .{ .sar, .m1, .rm32, .unity, .none, .none, &.{ 0xd1 }, 7, .none  },
+    .{ .sar, .m1, .rm64, .unity, .none, .none, &.{ 0xd1 }, 7, .long  },
+    .{ .sar, .mc, .rm8,  .cl,    .none, .none, &.{ 0xd2 }, 7, .none  },
+    .{ .sar, .mc, .rm8,  .cl,    .none, .none, &.{ 0xd2 }, 7, .rex   },
+    .{ .sar, .mc, .rm16, .cl,    .none, .none, &.{ 0xd3 }, 7, .none  },
+    .{ .sar, .mc, .rm32, .cl,    .none, .none, &.{ 0xd3 }, 7, .none  },
+    .{ .sar, .mc, .rm64, .cl,    .none, .none, &.{ 0xd3 }, 7, .long  },
+    .{ .sar, .mi, .rm8,  .imm8,  .none, .none, &.{ 0xc0 }, 7, .none  },
+    .{ .sar, .mi, .rm8,  .imm8,  .none, .none, &.{ 0xc0 }, 7, .rex   },
+    .{ .sar, .mi, .rm16, .imm8,  .none, .none, &.{ 0xc1 }, 7, .none  },
+    .{ .sar, .mi, .rm32, .imm8,  .none, .none, &.{ 0xc1 }, 7, .none  },
+    .{ .sar, .mi, .rm64, .imm8,  .none, .none, &.{ 0xc1 }, 7, .long  },
+
+    .{ .sbb, .zi, .al,   .imm8,   .none, .none, &.{ 0x1c }, 0, .none  },
+    .{ .sbb, .zi, .ax,   .imm16,  .none, .none, &.{ 0x1d }, 0, .none  },
+    .{ .sbb, .zi, .eax,  .imm32,  .none, .none, &.{ 0x1d }, 0, .none  },
+    .{ .sbb, .zi, .rax,  .imm32s, .none, .none, &.{ 0x1d }, 0, .long  },
+    .{ .sbb, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 3, .none  },
+    .{ .sbb, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 3, .rex   },
+    .{ .sbb, .mi, .rm16, .imm16,  .none, .none, &.{ 0x81 }, 3, .none  },
+    .{ .sbb, .mi, .rm32, .imm32,  .none, .none, &.{ 0x81 }, 3, .none  },
+    .{ .sbb, .mi, .rm64, .imm32s, .none, .none, &.{ 0x81 }, 3, .long  },
+    .{ .sbb, .mi, .rm16, .imm8s,  .none, .none, &.{ 0x83 }, 3, .none  },
+    .{ .sbb, .mi, .rm32, .imm8s,  .none, .none, &.{ 0x83 }, 3, .none  },
+    .{ .sbb, .mi, .rm64, .imm8s,  .none, .none, &.{ 0x83 }, 3, .long  },
+    .{ .sbb, .mr, .rm8,  .r8,     .none, .none, &.{ 0x18 }, 0, .none  },
+    .{ .sbb, .mr, .rm8,  .r8,     .none, .none, &.{ 0x18 }, 0, .rex   },
+    .{ .sbb, .mr, .rm16, .r16,    .none, .none, &.{ 0x19 }, 0, .none  },
+    .{ .sbb, .mr, .rm32, .r32,    .none, .none, &.{ 0x19 }, 0, .none  },
+    .{ .sbb, .mr, .rm64, .r64,    .none, .none, &.{ 0x19 }, 0, .long  },
+    .{ .sbb, .rm, .r8,   .rm8,    .none, .none, &.{ 0x1a }, 0, .none  },
+    .{ .sbb, .rm, .r8,   .rm8,    .none, .none, &.{ 0x1a }, 0, .rex   },
+    .{ .sbb, .rm, .r16,  .rm16,   .none, .none, &.{ 0x1b }, 0, .none  },
+    .{ .sbb, .rm, .r32,  .rm32,   .none, .none, &.{ 0x1b }, 0, .none  },
+    .{ .sbb, .rm, .r64,  .rm64,   .none, .none, &.{ 0x1b }, 0, .long  },
+
+    .{ .seta,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x97 }, 0, .none },
+    .{ .seta,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x97 }, 0, .rex  },
+    .{ .setae,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x93 }, 0, .none },
+    .{ .setae,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x93 }, 0, .rex  },
+    .{ .setb,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x92 }, 0, .none },
+    .{ .setb,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x92 }, 0, .rex  },
+    .{ .setbe,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x96 }, 0, .none },
+    .{ .setbe,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x96 }, 0, .rex  },
+    .{ .setc,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x92 }, 0, .none },
+    .{ .setc,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x92 }, 0, .rex  },
+    .{ .sete,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x94 }, 0, .none },
+    .{ .sete,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x94 }, 0, .rex  },
+    .{ .setg,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9f }, 0, .none },
+    .{ .setg,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9f }, 0, .rex  },
+    .{ .setge,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9d }, 0, .none },
+    .{ .setge,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9d }, 0, .rex  },
+    .{ .setl,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9c }, 0, .none },
+    .{ .setl,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9c }, 0, .rex  },
+    .{ .setle,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9e }, 0, .none },
+    .{ .setle,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9e }, 0, .rex  },
+    .{ .setna,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x96 }, 0, .none },
+    .{ .setna,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x96 }, 0, .rex  },
+    .{ .setnae, .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x92 }, 0, .none },
+    .{ .setnae, .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x92 }, 0, .rex  },
+    .{ .setnb,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x93 }, 0, .none },
+    .{ .setnb,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x93 }, 0, .rex  },
+    .{ .setnbe, .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x97 }, 0, .none },
+    .{ .setnbe, .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x97 }, 0, .rex  },
+    .{ .setnc,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x93 }, 0, .none },
+    .{ .setnc,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x93 }, 0, .rex  },
+    .{ .setne,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x95 }, 0, .none },
+    .{ .setne,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x95 }, 0, .rex  },
+    .{ .setng,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9e }, 0, .none },
+    .{ .setng,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9e }, 0, .rex  },
+    .{ .setnge, .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9c }, 0, .none },
+    .{ .setnge, .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9c }, 0, .rex  },
+    .{ .setnl,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9d }, 0, .none },
+    .{ .setnl,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9d }, 0, .rex  },
+    .{ .setnle, .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9f }, 0, .none },
+    .{ .setnle, .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9f }, 0, .rex  },
+    .{ .setno,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x91 }, 0, .none },
+    .{ .setno,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x91 }, 0, .rex  },
+    .{ .setnp,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9b }, 0, .none },
+    .{ .setnp,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9b }, 0, .rex  },
+    .{ .setns,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x99 }, 0, .none },
+    .{ .setns,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x99 }, 0, .rex  },
+    .{ .setnz,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x95 }, 0, .none },
+    .{ .setnz,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x95 }, 0, .rex  },
+    .{ .seto,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x90 }, 0, .none },
+    .{ .seto,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x90 }, 0, .rex  },
+    .{ .setp,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9a }, 0, .none },
+    .{ .setp,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9a }, 0, .rex  },
+    .{ .setpe,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9a }, 0, .none },
+    .{ .setpe,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9a }, 0, .rex  },
+    .{ .setpo,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9b }, 0, .none },
+    .{ .setpo,  .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x9b }, 0, .rex  },
+    .{ .sets,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x98 }, 0, .none },
+    .{ .sets,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x98 }, 0, .rex  },
+    .{ .setz,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x94 }, 0, .none },
+    .{ .setz,   .m, .rm8, .none, .none, .none, &.{ 0x0f, 0x94 }, 0, .rex  },
+
+    .{ .shl, .m1, .rm8,  .unity, .none, .none, &.{ 0xd0 }, 4, .none  },
+    .{ .shl, .m1, .rm8,  .unity, .none, .none, &.{ 0xd0 }, 4, .rex   },
+    .{ .shl, .m1, .rm16, .unity, .none, .none, &.{ 0xd1 }, 4, .none  },
+    .{ .shl, .m1, .rm32, .unity, .none, .none, &.{ 0xd1 }, 4, .none  },
+    .{ .shl, .m1, .rm64, .unity, .none, .none, &.{ 0xd1 }, 4, .long  },
+    .{ .shl, .mc, .rm8,  .cl,    .none, .none, &.{ 0xd2 }, 4, .none  },
+    .{ .shl, .mc, .rm8,  .cl,    .none, .none, &.{ 0xd2 }, 4, .rex   },
+    .{ .shl, .mc, .rm16, .cl,    .none, .none, &.{ 0xd3 }, 4, .none  },
+    .{ .shl, .mc, .rm32, .cl,    .none, .none, &.{ 0xd3 }, 4, .none  },
+    .{ .shl, .mc, .rm64, .cl,    .none, .none, &.{ 0xd3 }, 4, .long  },
+    .{ .shl, .mi, .rm8,  .imm8,  .none, .none, &.{ 0xc0 }, 4, .none  },
+    .{ .shl, .mi, .rm8,  .imm8,  .none, .none, &.{ 0xc0 }, 4, .rex   },
+    .{ .shl, .mi, .rm16, .imm8,  .none, .none, &.{ 0xc1 }, 4, .none  },
+    .{ .shl, .mi, .rm32, .imm8,  .none, .none, &.{ 0xc1 }, 4, .none  },
+    .{ .shl, .mi, .rm64, .imm8,  .none, .none, &.{ 0xc1 }, 4, .long  },
+
+    .{ .shr, .m1, .rm8,  .unity, .none, .none, &.{ 0xd0 }, 5, .none  },
+    .{ .shr, .m1, .rm8,  .unity, .none, .none, &.{ 0xd0 }, 5, .rex   },
+    .{ .shr, .m1, .rm16, .unity, .none, .none, &.{ 0xd1 }, 5, .none  },
+    .{ .shr, .m1, .rm32, .unity, .none, .none, &.{ 0xd1 }, 5, .none  },
+    .{ .shr, .m1, .rm64, .unity, .none, .none, &.{ 0xd1 }, 5, .long  },
+    .{ .shr, .mc, .rm8,  .cl,    .none, .none, &.{ 0xd2 }, 5, .none  },
+    .{ .shr, .mc, .rm8,  .cl,    .none, .none, &.{ 0xd2 }, 5, .rex   },
+    .{ .shr, .mc, .rm16, .cl,    .none, .none, &.{ 0xd3 }, 5, .none  },
+    .{ .shr, .mc, .rm32, .cl,    .none, .none, &.{ 0xd3 }, 5, .none  },
+    .{ .shr, .mc, .rm64, .cl,    .none, .none, &.{ 0xd3 }, 5, .long  },
+    .{ .shr, .mi, .rm8,  .imm8,  .none, .none, &.{ 0xc0 }, 5, .none  },
+    .{ .shr, .mi, .rm8,  .imm8,  .none, .none, &.{ 0xc0 }, 5, .rex   },
+    .{ .shr, .mi, .rm16, .imm8,  .none, .none, &.{ 0xc1 }, 5, .none  },
+    .{ .shr, .mi, .rm32, .imm8,  .none, .none, &.{ 0xc1 }, 5, .none  },
+    .{ .shr, .mi, .rm64, .imm8,  .none, .none, &.{ 0xc1 }, 5, .long  },
+
+    .{ .sub, .zi, .al,   .imm8,   .none, .none, &.{ 0x2c }, 0, .none  },
+    .{ .sub, .zi, .ax,   .imm16,  .none, .none, &.{ 0x2d }, 0, .none  },
+    .{ .sub, .zi, .eax,  .imm32,  .none, .none, &.{ 0x2d }, 0, .none  },
+    .{ .sub, .zi, .rax,  .imm32s, .none, .none, &.{ 0x2d }, 0, .long  },
+    .{ .sub, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 5, .none  },
+    .{ .sub, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 5, .rex   },
+    .{ .sub, .mi, .rm16, .imm16,  .none, .none, &.{ 0x81 }, 5, .none  },
+    .{ .sub, .mi, .rm32, .imm32,  .none, .none, &.{ 0x81 }, 5, .none  },
+    .{ .sub, .mi, .rm64, .imm32s, .none, .none, &.{ 0x81 }, 5, .long  },
+    .{ .sub, .mi, .rm16, .imm8s,  .none, .none, &.{ 0x83 }, 5, .none  },
+    .{ .sub, .mi, .rm32, .imm8s,  .none, .none, &.{ 0x83 }, 5, .none  },
+    .{ .sub, .mi, .rm64, .imm8s,  .none, .none, &.{ 0x83 }, 5, .long  },
+    .{ .sub, .mr, .rm8,  .r8,     .none, .none, &.{ 0x28 }, 0, .none  },
+    .{ .sub, .mr, .rm8,  .r8,     .none, .none, &.{ 0x28 }, 0, .rex   },
+    .{ .sub, .mr, .rm16, .r16,    .none, .none, &.{ 0x29 }, 0, .none  },
+    .{ .sub, .mr, .rm32, .r32,    .none, .none, &.{ 0x29 }, 0, .none  },
+    .{ .sub, .mr, .rm64, .r64,    .none, .none, &.{ 0x29 }, 0, .long  },
+    .{ .sub, .rm, .r8,   .rm8,    .none, .none, &.{ 0x2a }, 0, .none  },
+    .{ .sub, .rm, .r8,   .rm8,    .none, .none, &.{ 0x2a }, 0, .rex   },
+    .{ .sub, .rm, .r16,  .rm16,   .none, .none, &.{ 0x2b }, 0, .none  },
+    .{ .sub, .rm, .r32,  .rm32,   .none, .none, &.{ 0x2b }, 0, .none  },
+    .{ .sub, .rm, .r64,  .rm64,   .none, .none, &.{ 0x2b }, 0, .long  },
+
+    .{ .syscall, .np, .none, .none, .none, .none, &.{ 0x0f, 0x05 }, 0, .none },
+
+    .{ .@"test", .zi, .al,   .imm8,   .none, .none, &.{ 0xa8 }, 0, .none  },
+    .{ .@"test", .zi, .ax,   .imm16,  .none, .none, &.{ 0xa9 }, 0, .none  },
+    .{ .@"test", .zi, .eax,  .imm32,  .none, .none, &.{ 0xa9 }, 0, .none  },
+    .{ .@"test", .zi, .rax,  .imm32s, .none, .none, &.{ 0xa9 }, 0, .long  },
+    .{ .@"test", .mi, .rm8,  .imm8,   .none, .none, &.{ 0xf6 }, 0, .none  },
+    .{ .@"test", .mi, .rm8,  .imm8,   .none, .none, &.{ 0xf6 }, 0, .rex   },
+    .{ .@"test", .mi, .rm16, .imm16,  .none, .none, &.{ 0xf7 }, 0, .none  },
+    .{ .@"test", .mi, .rm32, .imm32,  .none, .none, &.{ 0xf7 }, 0, .none  },
+    .{ .@"test", .mi, .rm64, .imm32s, .none, .none, &.{ 0xf7 }, 0, .long  },
+    .{ .@"test", .mr, .rm8,  .r8,     .none, .none, &.{ 0x84 }, 0, .none  },
+    .{ .@"test", .mr, .rm8,  .r8,     .none, .none, &.{ 0x84 }, 0, .rex   },
+    .{ .@"test", .mr, .rm16, .r16,    .none, .none, &.{ 0x85 }, 0, .none  },
+    .{ .@"test", .mr, .rm32, .r32,    .none, .none, &.{ 0x85 }, 0, .none  },
+    .{ .@"test", .mr, .rm64, .r64,    .none, .none, &.{ 0x85 }, 0, .long  },
+
+    .{ .ud2, .np, .none, .none, .none, .none, &.{ 0x0f, 0x0b }, 0, .none  },
+
+    .{ .xor, .zi, .al,   .imm8,   .none, .none, &.{ 0x34 }, 0, .none  },
+    .{ .xor, .zi, .ax,   .imm16,  .none, .none, &.{ 0x35 }, 0, .none  },
+    .{ .xor, .zi, .eax,  .imm32,  .none, .none, &.{ 0x35 }, 0, .none  },
+    .{ .xor, .zi, .rax,  .imm32s, .none, .none, &.{ 0x35 }, 0, .long  },
+    .{ .xor, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 6, .none  },
+    .{ .xor, .mi, .rm8,  .imm8,   .none, .none, &.{ 0x80 }, 6, .rex   },
+    .{ .xor, .mi, .rm16, .imm16,  .none, .none, &.{ 0x81 }, 6, .none  },
+    .{ .xor, .mi, .rm32, .imm32,  .none, .none, &.{ 0x81 }, 6, .none  },
+    .{ .xor, .mi, .rm64, .imm32s, .none, .none, &.{ 0x81 }, 6, .long  },
+    .{ .xor, .mi, .rm16, .imm8s,  .none, .none, &.{ 0x83 }, 6, .none  },
+    .{ .xor, .mi, .rm32, .imm8s,  .none, .none, &.{ 0x83 }, 6, .none  },
+    .{ .xor, .mi, .rm64, .imm8s,  .none, .none, &.{ 0x83 }, 6, .long  },
+    .{ .xor, .mr, .rm8,  .r8,     .none, .none, &.{ 0x30 }, 0, .none  },
+    .{ .xor, .mr, .rm8,  .r8,     .none, .none, &.{ 0x30 }, 0, .rex   },
+    .{ .xor, .mr, .rm16, .r16,    .none, .none, &.{ 0x31 }, 0, .none  },
+    .{ .xor, .mr, .rm32, .r32,    .none, .none, &.{ 0x31 }, 0, .none  },
+    .{ .xor, .mr, .rm64, .r64,    .none, .none, &.{ 0x31 }, 0, .long  },
+    .{ .xor, .rm, .r8,   .rm8,    .none, .none, &.{ 0x32 }, 0, .none  },
+    .{ .xor, .rm, .r8,   .rm8,    .none, .none, &.{ 0x32 }, 0, .rex   },
+    .{ .xor, .rm, .r16,  .rm16,   .none, .none, &.{ 0x33 }, 0, .none  },
+    .{ .xor, .rm, .r32,  .rm32,   .none, .none, &.{ 0x33 }, 0, .none  },
+    .{ .xor, .rm, .r64,  .rm64,   .none, .none, &.{ 0x33 }, 0, .long  },
 
     // SSE
-    .{ .addss, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf3, 0x0f, 0x58, 0, .sse },
+    .{ .addss, .rm, .xmm, .xmm_m32, .none, .none, &.{ 0xf3, 0x0f, 0x58 }, 0, .sse },
 
-    .{ .cmpss, .rmi, .xmm, .xmm_m32, .imm8, .none, 3, 0xf3, 0x0f, 0xc2, 0, .sse },
+    .{ .cmpss, .rmi, .xmm, .xmm_m32, .imm8, .none, &.{ 0xf3, 0x0f, 0xc2 }, 0, .sse },
 
-    .{ .divss, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf3, 0x0f, 0x5e, 0, .sse },
+    .{ .divss, .rm, .xmm, .xmm_m32, .none, .none, &.{ 0xf3, 0x0f, 0x5e }, 0, .sse },
 
-    .{ .maxss, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf3, 0x0f, 0x5f, 0, .sse },
+    .{ .maxss, .rm, .xmm, .xmm_m32, .none, .none, &.{ 0xf3, 0x0f, 0x5f }, 0, .sse },
 
-    .{ .minss, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf3, 0x0f, 0x5d, 0, .sse },
+    .{ .minss, .rm, .xmm, .xmm_m32, .none, .none, &.{ 0xf3, 0x0f, 0x5d }, 0, .sse },
 
-    .{ .movss, .rm, .xmm,     .xmm_m32, .none, .none, 3, 0xf3, 0x0f, 0x10, 0, .sse },
-    .{ .movss, .mr, .xmm_m32, .xmm,     .none, .none, 3, 0xf3, 0x0f, 0x11, 0, .sse },
+    .{ .movss, .rm, .xmm,     .xmm_m32, .none, .none, &.{ 0xf3, 0x0f, 0x10 }, 0, .sse },
+    .{ .movss, .mr, .xmm_m32, .xmm,     .none, .none, &.{ 0xf3, 0x0f, 0x11 }, 0, .sse },
 
-    .{ .mulss, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf3, 0x0f, 0x59, 0, .sse },
+    .{ .mulss, .rm, .xmm, .xmm_m32, .none, .none, &.{ 0xf3, 0x0f, 0x59 }, 0, .sse },
 
-    .{ .subss, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf3, 0x0f, 0x5c, 0, .sse },
+    .{ .subss, .rm, .xmm, .xmm_m32, .none, .none, &.{ 0xf3, 0x0f, 0x5c }, 0, .sse },
 
-    .{ .ucomiss, .rm, .xmm, .xmm_m32, .none, .none, 2, 0x0f, 0x2e, 0x00, 0, .sse },
+    .{ .ucomiss, .rm, .xmm, .xmm_m32, .none, .none, &.{ 0x0f, 0x2e }, 0, .sse },
 
     // SSE2
-    .{ .addsd, .rm, .xmm, .xmm_m64, .none, .none, 3, 0xf2, 0x0f, 0x58, 0, .sse2 },
+    .{ .addsd, .rm, .xmm, .xmm_m64, .none, .none, &.{ 0xf2, 0x0f, 0x58 }, 0, .sse2 },
 
-    .{ .cmpsd, .rmi, .xmm, .xmm_m64, .imm8, .none, 3, 0xf2, 0x0f, 0xc2, 0, .sse2 },
+    .{ .cmpsd, .rmi, .xmm, .xmm_m64, .imm8, .none, &.{ 0xf2, 0x0f, 0xc2 }, 0, .sse2 },
 
-    .{ .divsd, .rm, .xmm, .xmm_m64, .none, .none, 3, 0xf2, 0x0f, 0x5e, 0, .sse2 },
+    .{ .divsd, .rm, .xmm, .xmm_m64, .none, .none, &.{ 0xf2, 0x0f, 0x5e }, 0, .sse2 },
 
-    .{ .maxsd, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf2, 0x0f, 0x5f, 0, .sse2 },
+    .{ .maxsd, .rm, .xmm, .xmm_m64, .none, .none, &.{ 0xf2, 0x0f, 0x5f }, 0, .sse2 },
 
-    .{ .minsd, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf2, 0x0f, 0x5d, 0, .sse2 },
+    .{ .minsd, .rm, .xmm, .xmm_m64, .none, .none, &.{ 0xf2, 0x0f, 0x5d }, 0, .sse2 },
 
-    .{ .movq, .rm, .xmm,     .xmm_m64, .none, .none, 3, 0xf3, 0x0f, 0x7e, 0, .sse2 },
-    .{ .movq, .mr, .xmm_m64, .xmm,     .none, .none, 3, 0x66, 0x0f, 0xd6, 0, .sse2 },
+    .{ .movq, .rm, .xmm,     .xmm_m64, .none, .none, &.{ 0xf3, 0x0f, 0x7e }, 0, .sse2 },
+    .{ .movq, .mr, .xmm_m64, .xmm,     .none, .none, &.{ 0x66, 0x0f, 0xd6 }, 0, .sse2 },
 
-    .{ .mulsd, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf2, 0x0f, 0x59, 0, .sse2 },
+    .{ .mulsd, .rm, .xmm, .xmm_m64, .none, .none, &.{ 0xf2, 0x0f, 0x59 }, 0, .sse2 },
 
-    .{ .subsd, .rm, .xmm, .xmm_m32, .none, .none, 3, 0xf2, 0x0f, 0x5c, 0, .sse2 },
+    .{ .subsd, .rm, .xmm, .xmm_m64, .none, .none, &.{ 0xf2, 0x0f, 0x5c }, 0, .sse2 },
 
-    .{ .movsd, .rm, .xmm,     .xmm_m64, .none, .none, 3, 0xf2, 0x0f, 0x10, 0, .sse2 },
-    .{ .movsd, .mr, .xmm_m64, .xmm,     .none, .none, 3, 0xf2, 0x0f, 0x11, 0, .sse2 },
+    .{ .movsd, .rm, .xmm,     .xmm_m64, .none, .none, &.{ 0xf2, 0x0f, 0x10 }, 0, .sse2 },
+    .{ .movsd, .mr, .xmm_m64, .xmm,     .none, .none, &.{ 0xf2, 0x0f, 0x11 }, 0, .sse2 },
 
-    .{ .ucomisd, .rm, .xmm, .xmm_m64, .none, .none, 3, 0x66, 0x0f, 0x2e, 0, .sse2 },
+    .{ .ucomisd, .rm, .xmm, .xmm_m64, .none, .none, &.{ 0x66, 0x0f, 0x2e }, 0, .sse2 },
+
+    // SSE4.1
+    .{ .roundss, .rmi, .xmm, .xmm_m32, .imm8, .none, &.{ 0x66, 0x0f, 0x3a, 0x0a }, 0, .sse4_1 },
+    .{ .roundsd, .rmi, .xmm, .xmm_m64, .imm8, .none, &.{ 0x66, 0x0f, 0x3a, 0x0b }, 0, .sse4_1 },
 };
 // zig fmt: on
-
src/arch/x86_64/Mir.zig
@@ -123,6 +123,8 @@ pub const Inst = struct {
         movss,
         /// Multiply scalar single-precision floating-point values
         mulss,
+        /// Round scalar single-precision floating-point values
+        roundss,
         /// Subtract scalar single-precision floating-point values
         subss,
         /// Unordered compare scalar single-precision floating-point values
@@ -141,6 +143,8 @@ pub const Inst = struct {
         movsd,
         /// Multiply scalar double-precision floating-point values
         mulsd,
+        /// Round scalar double-precision floating-point values
+        roundsd,
         /// Subtract scalar double-precision floating-point values
         subsd,
         /// Unordered compare scalar double-precision floating-point values