about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/emu/x64run_private.c13
-rw-r--r--src/emu/x64run_private.h2
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);