about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_0f.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c
index 2ef482eb..79596c8a 100644
--- a/src/dynarec/arm64/dynarec_arm64_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_0f.c
@@ -1581,7 +1581,17 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
 

         GOCOND(0x90, "SET", "Eb");

         #undef GO

-

+        case 0xA0:

+            INST_NAME("PUSH FS");

+            LDRH_U12(x2, xEmu, offsetof(x64emu_t, segs[_FS]));

+            PUSH1z(x2);

+            break;

+        case 0xA1:

+            INST_NAME("POP FS");

+            POP1z(x2);

+            STRH_U12(x2, xEmu, offsetof(x64emu_t, segs[_FS]));

+            STRw_U12(xZR, xEmu, offsetof(x64emu_t, segs_serial[_FS]));

+            break;

         case 0xA2:

             INST_NAME("CPUID");

             NOTEST(x1);

@@ -1641,6 +1651,18 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             WBACK;

             break;

 

+        case 0xA8:

+            INST_NAME("PUSH GS");

+            LDRH_U12(x2, xEmu, offsetof(x64emu_t, segs[_GS]));

+            PUSH1z(x2);

+            break;

+        case 0xA9:

+            INST_NAME("POP GS");

+            POP1z(x2);

+            STRH_U12(x2, xEmu, offsetof(x64emu_t, segs[_GS]));

+            STRw_U12(xZR, xEmu, offsetof(x64emu_t, segs_serial[_GS]));

+            break;

+

         case 0xAB:

             INST_NAME("BTS Ed, Gd");

             SETFLAGS(X_CF, SF_SUBSET);