about summary refs log tree commit diff stats
path: root/src/emu
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/x64run66.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/emu/x64run66.c b/src/emu/x64run66.c
index 3698911f..508ca243 100644
--- a/src/emu/x64run66.c
+++ b/src/emu/x64run66.c
@@ -315,17 +315,25 @@ uintptr_t Run66(x64emu_t *emu, rex_t rex, int rep, uintptr_t addr)
         break;

 

     case 0xA1:                      /* MOV EAX,Od */

-        if(rex.w)

-            R_RAX = *(uint64_t*)F64;

-        else

-            R_AX = *(uint16_t*)F64;

+        if(rex.is32bits) {

+            R_EAX = *(uint32_t*)(uintptr_t)F32;

+        } else {

+            if(rex.w)

+                R_RAX = *(uint64_t*)F64;

+            else

+                R_AX = *(uint16_t*)F64;

+        }

         break;

 

     case 0xA3:                      /* MOV Od,EAX */

-        if(rex.w)

-            *(uint64_t*)F64 = R_RAX;

-        else

-            *(uint16_t*)F64 = R_AX;

+        if(rex.is32bits) {

+            *(uint32_t*)(uintptr_t)F32 = R_EAX;

+        } else {

+            if(rex.w)

+                *(uint64_t*)F64 = R_RAX;

+            else

+                *(uint16_t*)F64 = R_AX;

+        }

         break;

 

     case 0xA5:              /* (REP) MOVSW */