diff options
Diffstat (limited to 'src/emu/x64run_private.h')
| -rw-r--r-- | src/emu/x64run_private.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/emu/x64run_private.h b/src/emu/x64run_private.h index 01cf3e4d..659b76bf 100644 --- a/src/emu/x64run_private.h +++ b/src/emu/x64run_private.h @@ -21,6 +21,22 @@ typedef struct rex_s { int is32bits; } rex_t; +#define VEX_P_NONE 0 +#define VEX_P_66 1 +#define VEX_P_F3 2 +#define VEX_P_F2 3 +#define VEX_M_NONE 0 +#define VEX_M_0F 1 +#define VEX_M_OF38 2 +#define VEX_M_0F3A 3 +typedef struct vex_s { + rex_t rex; + uint16_t l:1; + uint16_t p:2; //0: none, 1: 0x66, 2:0xF3, 3: 0xF2 + uint16_t v:4; // src register + uint16_t m:5; // opcode map +} vex_t; + static inline uint8_t Peek(x64emu_t *emu, int offset){return *(uint8_t*)(R_RIP + offset);} #ifdef TEST_INTERPRETER @@ -155,6 +171,8 @@ uintptr_t RunDF(x64emu_t *emu, rex_t rex, uintptr_t addr); uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr); uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step); uintptr_t RunF30F(x64emu_t *emu, rex_t rex, uintptr_t addr); +uintptr_t RunAVX(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step); + 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); @@ -183,6 +201,7 @@ uintptr_t TestDF(x64test_t *test, rex_t rex, uintptr_t addr); uintptr_t TestF0(x64test_t *test, rex_t rex, uintptr_t addr); uintptr_t TestF20F(x64test_t *test, rex_t rex, uintptr_t addr, int *step); uintptr_t TestF30F(x64test_t *test, rex_t rex, uintptr_t addr); +uintptr_t TestAVX(x64test_t *test, vex_t vex, uintptr_t addr, int *step); void x64Syscall(x64emu_t *emu); |