about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2023-06-24 01:52:28 +0800
committerGitHub <noreply@github.com>2023-06-23 19:52:28 +0200
commitaca28bcb7903b0f2329e99c065427018acbaca46 (patch)
tree89b981f573b733f77e7160ed98eaa4fac23a735f /src
parent410447b340b34c18a8ddd1da858c7f2b96c42db1 (diff)
downloadbox64-aca28bcb7903b0f2329e99c065427018acbaca46.tar.gz
box64-aca28bcb7903b0f2329e99c065427018acbaca46.zip
[INTERP] Added more opcodes (#852)
Diffstat (limited to 'src')
-rw-r--r--src/emu/x64run64.c19
-rw-r--r--src/emu/x64run6664.c16
2 files changed, 29 insertions, 6 deletions
diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c
index ef3491e2..bf57954c 100644
--- a/src/emu/x64run64.c
+++ b/src/emu/x64run64.c
@@ -123,6 +123,12 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr)
 

                 case 0x10:

                     switch(rep) {

+                        case 0: /* MOVUPS Gx, FS:Ex */

+                            nextop = F8;

+                            GETEX_OFFS(0, tlsdata);

+                            GETGX;

+                            GX->u128 = EX->u128;

+                            break;

                         case 1: /* MOVSD Gx, FS:Ex */

                             nextop = F8;

                             GETEX_OFFS(0, tlsdata);

@@ -171,7 +177,18 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr)
                             return 0;

                     }

                     break;

-

+                case 0x28:

+                    switch(rep) {

+                        case 0: /* MOVAPS Gx, FS:Ex */

+                            nextop = F8;

+                            GETEX_OFFS(0, tlsdata);

+                            GETGX;

+                            GX->u128 = EX->u128;

+                            break;

+                        default:

+                            return 0;

+                    }

+                    break;

                 case 0x29:                      /* MOVAPS FS:Ex,Gx */

                     switch(rep) {

                         case 0:

diff --git a/src/emu/x64run6664.c b/src/emu/x64run6664.c
index c9cb9de0..48a3be99 100644
--- a/src/emu/x64run6664.c
+++ b/src/emu/x64run6664.c
@@ -92,7 +92,7 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr)
             }

             break;

 

-        case 0x89:                              /* MOV Ew,Gw */

+        case 0x89:                              /* MOV FS:Ew,Gw */

             nextop = F8;

             GETEW_OFFS(0, tlsdata);

             GETGW;

@@ -101,8 +101,7 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr)
             else

                 EW->word[0] = GW->word[0];

             break;

-

-        case 0x8B:                      /* MOV Gd,Ed */

+        case 0x8B:                      /* MOV Gw,FS:Ew */

             nextop = F8;

             GETEW_OFFS(0, tlsdata);

             GETGW;

@@ -111,9 +110,16 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr)
             else

                 GW->word[0] = EW->word[0];

             break;

-

+        case 0xC7:                      /* MOV FS:Ew,Iw */

+            nextop = F8;

+            GETEW_OFFS(2, tlsdata);

+            if(rex.w)

+                EW->q[0] = F16S;

+            else

+                EW->word[0] = F16;

+            break;

        default:

             return 0;

     }

     return addr;

-}
\ No newline at end of file
+}