diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-11-04 16:03:28 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-11-04 16:03:28 +0100 |
| commit | 901bb488772bf167b3cf4321369c5f7609620648 (patch) | |
| tree | f0558b6b7d949e97fd670d0646c59e7db122c1d9 /src | |
| parent | 9fc37e6418858f0b2ac277dbb0aefbf8e2cd1ea5 (diff) | |
| download | box64-901bb488772bf167b3cf4321369c5f7609620648.tar.gz box64-901bb488772bf167b3cf4321369c5f7609620648.zip | |
Added 66 0F F2 38 F1 opcode, and fixed all 66 0F F2/F3 xx opcodes (should help #1013)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_66.c | 6 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_660f.c | 4 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_66f20f.c | 64 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_66f30f.c | 64 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_helper.h | 6 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_66.c | 6 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_66f20f.c | 58 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_66f30f.c | 58 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_helper.h | 4 | ||||
| -rw-r--r-- | src/emu/x64run66.c | 25 | ||||
| -rw-r--r-- | src/emu/x64run66f20f.c | 88 | ||||
| -rw-r--r-- | src/emu/x64run66f30f.c | 64 | ||||
| -rw-r--r-- | src/emu/x64run_private.h | 4 |
13 files changed, 441 insertions, 10 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c index 6c0985aa..bd5eeb58 100644 --- a/src/dynarec/arm64/dynarec_arm64_66.c +++ b/src/dynarec/arm64/dynarec_arm64_66.c @@ -132,7 +132,11 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 0x0F: - addr = dynarec64_660F(dyn, addr, ip, ninst, rex, rep, ok, need_epilog); + switch(rep) { + case 0: addr = dynarec64_660F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; + case 1: addr = dynarec64_66F20F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; + case 2: addr = dynarec64_66F30F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; + } break; case 0x11: INST_NAME("ADC Ew, Gw"); diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index 224ea138..f5e689e1 100644 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -22,9 +22,9 @@ #include "dynarec_arm64_helper.h" #include "emu/x64compstrings.h" -uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog) +uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog) { - (void)ip; (void)rep; (void)need_epilog; + (void)ip; (void)need_epilog; uint8_t opcode = F8; uint8_t nextop, u8; diff --git a/src/dynarec/arm64/dynarec_arm64_66f20f.c b/src/dynarec/arm64/dynarec_arm64_66f20f.c new file mode 100644 index 00000000..3039c944 --- /dev/null +++ b/src/dynarec/arm64/dynarec_arm64_66f20f.c @@ -0,0 +1,64 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <errno.h> + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" + +#include "arm64_printer.h" +#include "dynarec_arm64_private.h" +#include "dynarec_arm64_functions.h" +#include "dynarec_arm64_helper.h" +#include "emu/x64compstrings.h" + +uintptr_t dynarec64_66F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog) +{ + (void)ip; (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop, u8; + int32_t i32; + uint8_t gd, ed; + uint8_t wback, wb1, wb2; + uint8_t eb1, eb2; + int64_t j64; + uint64_t tmp64u, tmp64u2; + int v0, v1; + int q0, q1; + int d0, d1; + int64_t fixedaddress; + int unscaled; + + MAYUSE(d0); + MAYUSE(d1); + MAYUSE(q0); + MAYUSE(q1); + MAYUSE(eb1); + MAYUSE(eb2); + MAYUSE(j64); + #if STEP > 1 + static const int8_t mask_shift8[] = { -7, -6, -5, -4, -3, -2, -1, 0 }; + static const int8_t mask_string8[] = { 7, 6, 5, 4, 3, 2, 1, 0 }; + static const int8_t mask_string16[] = { 15, 14, 13, 12, 11, 10, 9, 8 }; + static const int8_t round_round[] = { 0, 2, 1, 3}; + #endif + + switch(opcode) { + + + default: + DEFAULT; + } + return addr; +} diff --git a/src/dynarec/arm64/dynarec_arm64_66f30f.c b/src/dynarec/arm64/dynarec_arm64_66f30f.c new file mode 100644 index 00000000..11a18eba --- /dev/null +++ b/src/dynarec/arm64/dynarec_arm64_66f30f.c @@ -0,0 +1,64 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <errno.h> + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" + +#include "arm64_printer.h" +#include "dynarec_arm64_private.h" +#include "dynarec_arm64_functions.h" +#include "dynarec_arm64_helper.h" +#include "emu/x64compstrings.h" + +uintptr_t dynarec64_66F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog) +{ + (void)ip; (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop, u8; + int32_t i32; + uint8_t gd, ed; + uint8_t wback, wb1, wb2; + uint8_t eb1, eb2; + int64_t j64; + uint64_t tmp64u, tmp64u2; + int v0, v1; + int q0, q1; + int d0, d1; + int64_t fixedaddress; + int unscaled; + + MAYUSE(d0); + MAYUSE(d1); + MAYUSE(q0); + MAYUSE(q1); + MAYUSE(eb1); + MAYUSE(eb2); + MAYUSE(j64); + #if STEP > 1 + static const int8_t mask_shift8[] = { -7, -6, -5, -4, -3, -2, -1, 0 }; + static const int8_t mask_string8[] = { 7, 6, 5, 4, 3, 2, 1, 0 }; + static const int8_t mask_string16[] = { 15, 14, 13, 12, 11, 10, 9, 8 }; + static const int8_t round_round[] = { 0, 2, 1, 3}; + #endif + + switch(opcode) { + + + default: + DEFAULT; + } + return addr; +} diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 298f106a..cdf69a72 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -930,6 +930,8 @@ void* arm64_next(x64emu_t* emu, uintptr_t addr); #define dynarec64_DF STEPNAME(dynarec64_DF) #define dynarec64_F0 STEPNAME(dynarec64_F0) #define dynarec64_660F STEPNAME(dynarec64_660F) +#define dynarec64_66F20F STEPNAME(dynarec64_66F20F) +#define dynarec64_66F30F STEPNAME(dynarec64_66F30F) #define dynarec64_6664 STEPNAME(dynarec64_6664) #define dynarec64_66F0 STEPNAME(dynarec64_66F0) #define dynarec64_F20F STEPNAME(dynarec64_F20F) @@ -1270,7 +1272,9 @@ uintptr_t dynarec64_DD(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin uintptr_t dynarec64_DE(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_DF(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); -uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); +uintptr_t dynarec64_66F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); +uintptr_t dynarec64_66F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); +uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); uintptr_t dynarec64_6664(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int seg, int* ok, int* need_epilog); uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); diff --git a/src/dynarec/rv64/dynarec_rv64_66.c b/src/dynarec/rv64/dynarec_rv64_66.c index 3e11d45f..36bf1257 100644 --- a/src/dynarec/rv64/dynarec_rv64_66.c +++ b/src/dynarec/rv64/dynarec_rv64_66.c @@ -115,7 +115,11 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni OR(xRAX, xRAX, x1); break; case 0x0F: - addr = dynarec64_660F(dyn, addr, ip, ninst, rex, ok, need_epilog); + switch(rep) { + case 0: addr = dynarec64_660F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; + case 1: addr = dynarec64_66F20F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; + case 2: addr = dynarec64_66F30F(dyn, addr, ip, ninst, rex, ok, need_epilog); break; + } break; case 0x11: INST_NAME("ADC Ew, Gw"); diff --git a/src/dynarec/rv64/dynarec_rv64_66f20f.c b/src/dynarec/rv64/dynarec_rv64_66f20f.c new file mode 100644 index 00000000..cf377f46 --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_66f20f.c @@ -0,0 +1,58 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <errno.h> + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_functions.h" +#include "dynarec_rv64_helper.h" + +uintptr_t dynarec64_66F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog) +{ + (void)ip; + (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop, u8, s8; + int32_t i32; + uint8_t gd, ed; + uint8_t wback, wb1, wb2, gback; + uint8_t eb1, eb2; + int64_t j64; + uint64_t tmp64u, tmp64u2; + int v0, v1; + int q0, q1; + int d0, d1; + int64_t fixedaddress, gdoffset; + int unscaled; + + MAYUSE(d0); + MAYUSE(d1); + MAYUSE(q0); + MAYUSE(q1); + MAYUSE(eb1); + MAYUSE(eb2); + MAYUSE(j64); + + static const int8_t round_round[] = { RD_RNE, RD_RDN, RD_RUP, RD_RTZ }; + + switch (opcode) { + default: + DEFAULT; + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_66f30f.c b/src/dynarec/rv64/dynarec_rv64_66f30f.c new file mode 100644 index 00000000..50b4e4a3 --- /dev/null +++ b/src/dynarec/rv64/dynarec_rv64_66f30f.c @@ -0,0 +1,58 @@ +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <errno.h> + +#include "debug.h" +#include "box64context.h" +#include "dynarec.h" +#include "emu/x64emu_private.h" +#include "emu/x64run_private.h" +#include "x64run.h" +#include "x64emu.h" +#include "box64stack.h" +#include "callback.h" +#include "emu/x64run_private.h" +#include "x64trace.h" +#include "dynarec_native.h" + +#include "rv64_printer.h" +#include "dynarec_rv64_private.h" +#include "dynarec_rv64_functions.h" +#include "dynarec_rv64_helper.h" + +uintptr_t dynarec64_66F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog) +{ + (void)ip; + (void)need_epilog; + + uint8_t opcode = F8; + uint8_t nextop, u8, s8; + int32_t i32; + uint8_t gd, ed; + uint8_t wback, wb1, wb2, gback; + uint8_t eb1, eb2; + int64_t j64; + uint64_t tmp64u, tmp64u2; + int v0, v1; + int q0, q1; + int d0, d1; + int64_t fixedaddress, gdoffset; + int unscaled; + + MAYUSE(d0); + MAYUSE(d1); + MAYUSE(q0); + MAYUSE(q1); + MAYUSE(eb1); + MAYUSE(eb2); + MAYUSE(j64); + + static const int8_t round_round[] = { RD_RNE, RD_RDN, RD_RUP, RD_RTZ }; + + switch (opcode) { + default: + DEFAULT; + } + return addr; +} diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h index 8e4d244e..cc05f141 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.h +++ b/src/dynarec/rv64/dynarec_rv64_helper.h @@ -1028,6 +1028,8 @@ void* rv64_next(x64emu_t* emu, uintptr_t addr); #define dynarec64_DF STEPNAME(dynarec64_DF) #define dynarec64_F0 STEPNAME(dynarec64_F0) #define dynarec64_660F STEPNAME(dynarec64_660F) +#define dynarec64_66F20F STEPNAME(dynarec64_66F20F) +#define dynarec64_66F30F STEPNAME(dynarec64_66F30F) #define dynarec64_6664 STEPNAME(dynarec64_6664) #define dynarec64_66F0 STEPNAME(dynarec64_66F0) #define dynarec64_F20F STEPNAME(dynarec64_F20F) @@ -1380,6 +1382,8 @@ uintptr_t dynarec64_DE(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); +uintptr_t dynarec64_66F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); +uintptr_t dynarec64_66F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); uintptr_t dynarec64_6664(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int seg, int* ok, int* need_epilog); uintptr_t dynarec64_66F0(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int rep, int* ok, int* need_epilog); uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ninst, rex_t rex, int* ok, int* need_epilog); diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c index 6596d081..81fddc80 100644 --- a/src/emu/x64run66.c +++ b/src/emu/x64run66.c @@ -127,11 +127,26 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr) break; case 0x0F: /* more opcdes */ - #ifdef TEST_INTERPRETER - return Test660F(test, rex, addr); - #else - return Run660F(emu, rex, addr); - #endif + switch(rep) { + case 0: + #ifdef TEST_INTERPRETER + return Test660F(test, rex, addr); + #else + return Run660F(emu, rex, addr); + #endif + case 1: + #ifdef TEST_INTERPRETER + return Test66F20F(test, rex, addr); + #else + return Run66F20F(emu, rex, addr); + #endif + case 2: + #ifdef TEST_INTERPRETER + return Test66F30F(test, rex, addr); + #else + return Run66F30F(emu, rex, addr); + #endif + } case 0x1E: /* PUSH DS */ if(!rex.is32bits) { diff --git a/src/emu/x64run66f20f.c b/src/emu/x64run66f20f.c new file mode 100644 index 00000000..a4ad4438 --- /dev/null +++ b/src/emu/x64run66f20f.c @@ -0,0 +1,88 @@ +#define _GNU_SOURCE +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <fenv.h> +#include <string.h> +#include <signal.h> +#include <sys/types.h> +#include <unistd.h> + +#include "debug.h" +#include "box64stack.h" +#include "x64emu.h" +#include "x64run.h" +#include "x64emu_private.h" +#include "x64run_private.h" +#include "x64primop.h" +#include "x64trace.h" +#include "x87emu_private.h" +#include "box64context.h" +#include "bridge.h" + +#include "modrm.h" +#include "x64compstrings.h" + +#ifdef TEST_INTERPRETER +uintptr_t Test66F20F(x64test_t *test, rex_t rex, uintptr_t addr) +#else +uintptr_t Run66F20F(x64emu_t *emu, rex_t rex, uintptr_t addr) +#endif +{ + uint8_t opcode; + uint8_t nextop; + uint8_t tmp8u; + int8_t tmp8s; + int16_t tmp16s; + uint16_t tmp16u; + int32_t tmp32s; + uint32_t tmp32u; + uint64_t tmp64u; + int64_t tmp64s, i64[4]; + float tmpf; + double tmpd; + #ifndef NOALIGN + int is_nan; + #endif + reg64_t *oped, *opgd; + sse_regs_t *opex, *opgx, eax1, *opex2; + mmx87_regs_t *opem, *opgm; + + #ifdef TEST_INTERPRETER + x64emu_t* emu = test->emu; + #endif + opcode = F8; + + switch(opcode) { + + case 0x38: // SSE 4.x + opcode = F8; + switch(opcode) { + + case 0xF1: // CRC32 Gd, Ew + nextop = F8; + GETEW(0); + GETGD; + for(int j=0; j<2; ++j) { + GD->dword[0] ^= EW->byte[j]; + for (int i = 0; i < 8; i++) { + if (GD->dword[0] & 1) + GD->dword[0] = (GD->dword[0] >> 1) ^ 0x82f63b78; + else + GD->dword[0] = (GD->dword[0] >> 1); + } + } + GD->dword[1] = 0; + break; + + default: + return 0; + } + break; + + default: + return 0; + } + return addr; +} diff --git a/src/emu/x64run66f30f.c b/src/emu/x64run66f30f.c new file mode 100644 index 00000000..dd466ad5 --- /dev/null +++ b/src/emu/x64run66f30f.c @@ -0,0 +1,64 @@ +#define _GNU_SOURCE +#include <stdint.h> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> +#include <fenv.h> +#include <string.h> +#include <signal.h> +#include <sys/types.h> +#include <unistd.h> + +#include "debug.h" +#include "box64stack.h" +#include "x64emu.h" +#include "x64run.h" +#include "x64emu_private.h" +#include "x64run_private.h" +#include "x64primop.h" +#include "x64trace.h" +#include "x87emu_private.h" +#include "box64context.h" +#include "bridge.h" + +#include "modrm.h" +#include "x64compstrings.h" + +#ifdef TEST_INTERPRETER +uintptr_t Test66F30F(x64test_t *test, rex_t rex, uintptr_t addr) +#else +uintptr_t Run66F30F(x64emu_t *emu, rex_t rex, uintptr_t addr) +#endif +{ + uint8_t opcode; + uint8_t nextop; + uint8_t tmp8u; + int8_t tmp8s; + int16_t tmp16s; + uint16_t tmp16u; + int32_t tmp32s; + uint32_t tmp32u; + uint64_t tmp64u; + int64_t tmp64s, i64[4]; + float tmpf; + double tmpd; + #ifndef NOALIGN + int is_nan; + #endif + reg64_t *oped, *opgd; + sse_regs_t *opex, *opgx, eax1, *opex2; + mmx87_regs_t *opem, *opgm; + + #ifdef TEST_INTERPRETER + x64emu_t* emu = test->emu; + #endif + opcode = F8; + + switch(opcode) { + + + default: + return 0; + } + return addr; +} diff --git a/src/emu/x64run_private.h b/src/emu/x64run_private.h index dcda399f..f90a35e3 100644 --- a/src/emu/x64run_private.h +++ b/src/emu/x64run_private.h @@ -129,6 +129,8 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step); uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr); uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr); uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr); +uintptr_t Run66F20F(x64emu_t *emu, rex_t rex, uintptr_t addr); +uintptr_t Run66F30F(x64emu_t *emu, rex_t rex, uintptr_t addr); uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr); uintptr_t Run66D9(x64emu_t *emu, rex_t rex, uintptr_t addr); uintptr_t Run66DD(x64emu_t *emu, rex_t rex, uintptr_t addr); @@ -155,6 +157,8 @@ uintptr_t Test0F(x64test_t *test, rex_t rex, uintptr_t addr, int *step); uintptr_t Test64(x64test_t *test, rex_t rex, int seg, uintptr_t addr); uintptr_t Test66(x64test_t *test, rex_t rex, int rep, uintptr_t addr); uintptr_t Test660F(x64test_t *test, rex_t rex, uintptr_t addr); +uintptr_t Test66F20F(x64test_t *test, rex_t rex, uintptr_t addr); +uintptr_t Test66F30F(x64test_t *test, rex_t rex, uintptr_t addr); uintptr_t Test6664(x64test_t *test, rex_t rex, int seg, uintptr_t addr); uintptr_t Test66D9(x64test_t *test, rex_t rex, uintptr_t addr); uintptr_t Test66DD(x64test_t *test, rex_t rex, uintptr_t addr); |