diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-02-07 17:59:27 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-02-07 18:02:07 +0100 |
| commit | fa19435d24a04a00739bc5b66b6dddf44fc59bd5 (patch) | |
| tree | 0fbd6cef44e7cd3fc2ff0426e20fa34aae7f47b0 | |
| parent | 902186bdff4ac06cbf32acee2352aa52a4accb4d (diff) | |
| download | box64-fa19435d24a04a00739bc5b66b6dddf44fc59bd5.tar.gz box64-fa19435d24a04a00739bc5b66b6dddf44fc59bd5.zip | |
[DYNAREC_TEST] Have a proper TestEw that only copy/tests 2 bytes instead of 4
| -rw-r--r-- | src/emu/x64run_private.c | 13 | ||||
| -rw-r--r-- | src/emu/x64run_private.h | 2 |
2 files changed, 14 insertions, 1 deletions
diff --git a/src/emu/x64run_private.c b/src/emu/x64run_private.c index 3e0e18da..4d8753e4 100644 --- a/src/emu/x64run_private.c +++ b/src/emu/x64run_private.c @@ -1677,6 +1677,19 @@ reg64_t* TestEd8xw(x64test_t *test, int w, uintptr_t* addr, rex_t rex, uint8_t v return (reg64_t*)test->mem; } } +reg64_t* TestEw(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta) +{ + uint8_t m = v&0xC7; // filter Ed + if(m>=0xC0) { + return &test->emu->regs[(m&0x07)+(rex.b<<3)]; + } else { + reg64_t* ret = GetECommon(test->emu, addr, rex, m, delta); + test->memsize = 2; + test->memaddr = (uintptr_t)ret; + *(uint16_t*)test->mem = ret->word[0]; + return (reg64_t*)test->mem; + } +} uintptr_t GetEA(x64emu_t *emu, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta) { diff --git a/src/emu/x64run_private.h b/src/emu/x64run_private.h index f6b5b176..b331a748 100644 --- a/src/emu/x64run_private.h +++ b/src/emu/x64run_private.h @@ -98,7 +98,7 @@ reg64_t* TestEd32O(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8 reg64_t* GetEb32O(x64emu_t *emu, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta, uintptr_t offset); reg64_t* TestEb32O(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta, uintptr_t offset); #define GetEw GetEd -#define TestEw TestEd +reg64_t* TestEw(x64test_t *test, uintptr_t* addr, rex_t rex, uint8_t v, uint8_t delta); #define GetEw32O GetEd32O #define TestEw32O TestEd32O reg64_t* GetEw16(x64emu_t *emu, uintptr_t* addr, rex_t rex, uint8_t v); |