Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 63 additions & 14 deletions id/src/main/java/com/ledmington/cpu/InstructionChecker.java
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ public final class InstructionChecker {
Map.entry(Opcode.POP, List.of(R16, R64, M64)),
Map.entry(Opcode.CDQ, List.of(NO_ARGS)),
Map.entry(Opcode.CDQE, List.of(NO_ARGS)),
Map.entry(Opcode.CQO, List.of(NO_ARGS)),
Map.entry(Opcode.CWDE, List.of(NO_ARGS)),
Map.entry(Opcode.LEAVE, List.of(NO_ARGS)),
Map.entry(Opcode.INT3, List.of(NO_ARGS)),
Expand Down Expand Up @@ -234,7 +235,9 @@ public final class InstructionChecker {
Map.entry(Opcode.PXOR, List.of(RMM_RMM, RX_RX, RX_M128)),
Map.entry(Opcode.POR, List.of(RX_RX, RX_M128)),
Map.entry(Opcode.PAND, List.of(RX_RX, RX_M128)),
Map.entry(Opcode.PANDN, List.of(RX_RX, RX_M128)),
Map.entry(Opcode.PADDQ, List.of(RX_RX, RX_M128)),
Map.entry(Opcode.PADDB, List.of(RX_RX, RX_M128)),
Map.entry(Opcode.PADDD, List.of(RX_RX)),
Map.entry(Opcode.PSUBQ, List.of(RX_RX, RX_M128)),
Map.entry(Opcode.PSUBB, List.of(RX_RX)),
Expand Down Expand Up @@ -271,6 +274,8 @@ public final class InstructionChecker {
Map.entry(Opcode.RDSEED, List.of(R16, R32, R64)),
Map.entry(Opcode.RDSSPQ, List.of(R64)),
Map.entry(Opcode.INCSSPQ, List.of(R64)),
Map.entry(Opcode.RSTORSSP, List.of(M64)),
Map.entry(Opcode.SAVEPREVSSP, List.of(NO_ARGS)),
Map.entry(Opcode.LAHF, List.of(NO_ARGS)),
Map.entry(Opcode.SAHF, List.of(NO_ARGS)),
Map.entry(Opcode.SYSCALL, List.of(NO_ARGS)),
Expand All @@ -285,42 +290,73 @@ public final class InstructionChecker {
Map.entry(Opcode.PMINUD, List.of(RX_M128)),
Map.entry(Opcode.PMAXUB, List.of(RX_RX)),
Map.entry(Opcode.PALIGNR, List.of(RX_RX_I8, RX_M128_I8)),
Map.entry(Opcode.VPXOR, List.of(RX_RX_RX)),
Map.entry(Opcode.VPXORQ, List.of(RY_RY_M256)),
Map.entry(Opcode.VPXOR, List.of(RX_RX_RX, RY_RY_RY, RX_RX_M128, RY_RY_M256)),
Map.entry(Opcode.VPADDB, List.of(RX_RX_RX, RY_RY_RY, RZ_RZ_RZ, RX_RX_M128, RY_RY_M256, RZ_RZ_M512)),
Map.entry(Opcode.VPXORQ, List.of(RX_RX_RX, RY_RY_RY, RZ_RZ_RZ, RX_RX_M128, RY_RY_M256, RZ_RZ_M512)),
Map.entry(Opcode.VPORQ, List.of(RY_RY_RY)),
Map.entry(Opcode.PEXTRW, List.of(R32_RMM_I8)),
Map.entry(Opcode.VMOVDQU, List.of(RY_M256, M256_RY)),
Map.entry(Opcode.VPMINUB, List.of(RY_RY_RY, RY_RY_M256)),
Map.entry(Opcode.VPMINUD, List.of(RY_RY_RY, RY_RY_M256)),
Map.entry(Opcode.VPMOVMSKB, List.of(R32_RX, R32_RY)),
Map.entry(Opcode.VPCMPEQB, List.of(RK_RX_RX, RK_RY_RY, RY_RY_M256, RK_RX_M128, RK_RY_M256)),
Map.entry(
Opcode.VPCMPEQB,
List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RY_RY_M256, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPLTB, List.of(RK_RY_RY)),
Map.entry(Opcode.VPCMPEQD, List.of(RK_RY_RY, RY_RY_M256, RK_RY_M256)),
Map.entry(
Opcode.VPCMPEQD,
List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RY_RY_M256, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPLTD, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPLED, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPNEQD, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPNLTD, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPNLED, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPEQQ, List.of(RX_RX_M128)),
Map.entry(Opcode.VPCMPNEQB, List.of(RK_RY_RY, RK_RY_M256)),
Map.entry(Opcode.VPCMPNEQB, List.of(RK_RY_RY, RK_RZ_RZ, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VZEROALL, List.of(NO_ARGS)),
Map.entry(Opcode.VMOVQ, List.of(R64_RX, RX_M64, M64_RX)),
Map.entry(Opcode.VMOVD, List.of(RX_M32)),
Map.entry(Opcode.VMOVQ, List.of(R64_RX, RX_M64, M64_RX, RX_R64)),
Map.entry(Opcode.VMOVD, List.of(RX_M32, RX_R32)),
Map.entry(Opcode.ANDN, List.of(R32_R32_R32, R32_R32_M32, R64_R64_R64, R64_R64_M64)),
Map.entry(Opcode.BLSR, List.of(R32_R32, R32_M32, R64_R64, R64_M64)),
Map.entry(Opcode.BLSMSK, List.of(R32_R32, R32_M32, R64_R64, R64_M64)),
Map.entry(Opcode.BLSI, List.of(R32_R32, R32_M32, R64_R64, R64_M64)),
Map.entry(Opcode.PCMPISTRI, List.of(RX_RX_I8, RX_M128_I8)),
Map.entry(Opcode.PUNPCKLBW, List.of(RX_RX)),
Map.entry(Opcode.VPBROADCASTB, List.of(RY_RX, RZ_R32)),
Map.entry(Opcode.VPBROADCASTB, List.of(RY_RX, RZ_R32, RZ_RX, RZ_M8)),
Map.entry(Opcode.VPBROADCASTD, List.of(RY_RX, RZ_R32)),
Map.entry(Opcode.SARX, List.of(R32_R32_R32)),
Map.entry(Opcode.VPOR, List.of(RY_RY_RY)),
Map.entry(Opcode.VPAND, List.of(RY_RY_RY)),
Map.entry(Opcode.VPANDN, List.of(RX_RX_RX)),
Map.entry(Opcode.VPANDN, List.of(RX_RX_RX, RY_RY_RY, RX_RX_M128, RY_RY_M256)),
Map.entry(Opcode.BZHI, List.of(R32_R32_R32, R64_R64_R64)),
Map.entry(Opcode.MOVBE, List.of(R32_M32)),
Map.entry(Opcode.MOVNTDQ, List.of(M128_RX)),
Map.entry(Opcode.MOVNTPS, List.of(M128_RX)),
Map.entry(Opcode.SFENCE, List.of(NO_ARGS)),
Map.entry(Opcode.VMOVUPS, List.of(RZ_M512, M512_RZ)),
Map.entry(Opcode.VMOVDQU8, List.of(RZ_M512, M512_RZ)),
Map.entry(Opcode.VMOVDQU64, List.of(RZ_M512, M512_RZ)),
Map.entry(
Opcode.VMOVDQU8,
List.of(RX_M128, M128_RX, RX_RX, RY_M256, M256_RY, RY_RY, RZ_M512, M512_RZ, RZ_RZ)),
Map.entry(
Opcode.VMOVDQU64,
List.of(RX_M128, M128_RX, RX_RX, RY_M256, M256_RY, RY_RY, RZ_M512, M512_RZ, RZ_RZ)),
Map.entry(
Opcode.VMOVDQU16,
List.of(RX_M128, M128_RX, RX_RX, RY_M256, M256_RY, RY_RY, RZ_M512, M512_RZ, RZ_RZ)),
Map.entry(
Opcode.VMOVDQU32,
List.of(RX_M128, M128_RX, RX_RX, RY_M256, M256_RY, RY_RY, RZ_M512, M512_RZ, RZ_RZ)),
Map.entry(
Opcode.VMOVDQA32,
List.of(RX_M128, M128_RX, RX_RX, RY_M256, M256_RY, RY_RY, RZ_M512, M512_RZ, RZ_RZ)),
Map.entry(
Opcode.VMOVDQA64,
List.of(RX_M128, M128_RX, RX_RX, RY_M256, M256_RY, RY_RY, RZ_M512, M512_RZ, RZ_RZ)),
Map.entry(Opcode.VMOVNTDQ, List.of(M256_RY, M512_RZ)),
Map.entry(Opcode.PCMPGTB, List.of(RX_RX)),
Map.entry(Opcode.VPCMPGTB, List.of(RX_RX_RX)),
Map.entry(Opcode.VPSUBB, List.of(RX_RX_RX)),
Map.entry(Opcode.PCMPGTD, List.of(RMM_RMM, RX_RX, RX_M128)),
Map.entry(Opcode.VPCMPGTB, List.of(RX_RX_RX, RY_RY_RY, RX_RX_M128, RY_RY_M256)),
Map.entry(Opcode.VPSUBB, List.of(RX_RX_RX, RY_RY_RY, RZ_RZ_RZ, RX_RX_M128, RY_RY_M256, RZ_RZ_M512)),
Map.entry(Opcode.VPCMPISTRI, List.of(RX_RX_I8)),
Map.entry(Opcode.VPSLLDQ, List.of(RX_RX_I8)),
Map.entry(Opcode.VPSRLDQ, List.of(RX_RX_I8)),
Expand All @@ -337,7 +373,12 @@ public final class InstructionChecker {
Map.entry(Opcode.KMOVQ, List.of(R64_RK, RK_R64)),
Map.entry(Opcode.KMOVD, List.of(R32_RK, RK_R32)),
Map.entry(Opcode.XTEST, List.of(NO_ARGS)),
Map.entry(Opcode.VPCMPNEQUB, List.of(RK_RX_M128, RK_RY_M256)),
Map.entry(Opcode.VPCMPEQUB, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPLTUB, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPLEUB, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPNEQUB, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPNLTUB, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPCMPNLEUB, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.SLDT, List.of(M16)),
Map.entry(Opcode.INS, List.of(M8_R16, M32_R16)),
Map.entry(Opcode.OUTS, List.of(R16_M8, R16_M32)),
Expand All @@ -355,7 +396,15 @@ public final class InstructionChecker {
Map.entry(Opcode.OUT, List.of(I8_R8, I8_R32, R16_R8, R16_R32)),
Map.entry(Opcode.VPTERNLOGD, List.of(RY_RY_M256_I8, RY_RY_RY_I8)),
Map.entry(Opcode.VPTESTMB, List.of(RK_RY_RY)),
Map.entry(Opcode.VPTESTMD, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPTESTMQ, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPTESTNMD, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.VPTESTNMQ, List.of(RK_RX_RX, RK_RY_RY, RK_RZ_RZ, RK_RX_M128, RK_RY_M256, RK_RZ_M512)),
Map.entry(Opcode.KORTESTB, List.of(RK_RK)),
Map.entry(Opcode.KORTESTD, List.of(RK_RK)),
Map.entry(Opcode.KORTESTQ, List.of(RK_RK)),
Map.entry(Opcode.KORTESTW, List.of(RK_RK)),
Map.entry(Opcode.KXNORQ, List.of(RK_RK_RK)),
Map.entry(Opcode.KORD, List.of(RK_RK_RK)),
Map.entry(Opcode.TZCNT, List.of(R32_R32, R64_R64)),
Map.entry(Opcode.KUNPCKDQ, List.of(RK_RK_RK)),
Expand Down
Loading
Loading