about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_0f.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c
index d749abdb..6a9a8dff 100755
--- a/src/dynarec/dynarec_arm64_0f.c
+++ b/src/dynarec/dynarec_arm64_0f.c
@@ -289,9 +289,16 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
         case 0x57:

             INST_NAME("XORPS Gx, Ex");

             nextop = F8;

-            GETEX(q0, 0);

-            GETGX(v0);

-            VEORQ(v0, v0, q0);

+            GETG;

+            if(MODREG && ((nextop&7)+(rex.b<<3)==gd)) {

+                // special case for XORPS Gx, Gx

+                q0 = sse_get_reg_empty(dyn, ninst, x1, gd);

+                VEORQ(q0, q0, q0);

+            } else {

+                q0 = sse_get_reg(dyn, ninst, x1, gd);

+                GETEX(q1, 0);

+                VEORQ(q0, q0, q1);

+            }

             break;

         case 0x58:

             INST_NAME("ADDPS Gx, Ex");