about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-26 11:39:11 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-26 11:39:19 +0100
commit50d8016e86485017aee0031c5752c70b8fd3f658 (patch)
tree8a85a45fd7a009dc2a0bdb1290a52d5e4d662ee9 /src
parent4a033b8e767fee3fd2de805d8a94e8e7f094015f (diff)
downloadbox64-50d8016e86485017aee0031c5752c70b8fd3f658.tar.gz
box64-50d8016e86485017aee0031c5752c70b8fd3f658.zip
[DYNAREC] Added a small optim on 0F 57 opcode
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");