about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-06-10 15:17:03 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-06-10 15:17:03 +0200
commit072241eb10a92c481113959d514d73cd6ab04063 (patch)
tree17ecdc98eeb289e2916b20aa5cf56057ec6fddb1 /src
parent84a8500323ad35246003e52cb669d34ee266d531 (diff)
downloadbox64-072241eb10a92c481113959d514d73cd6ab04063.tar.gz
box64-072241eb10a92c481113959d514d73cd6ab04063.zip
[ARM64_DYNAREC] Fixed AVX.66.0F3A 00/01 opcodes
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c
index 620bf31d..e9b21133 100644
--- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c
+++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c
@@ -69,13 +69,15 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
             nextop = F8;
             GETGX_empty_EX(v0, q0, 1);
             u8 = F8;
-            if(v0==q0) {d0 = fpu_get_scratch(dyn, ninst); d1 = fpu_get_scratch(dyn, ninst);}
+            if(v0==q0) d0 = fpu_get_scratch(dyn, ninst);
+            if(v0==q0 || !MODREG) d1 = fpu_get_scratch(dyn, ninst);
+            q1 = d1;
             GETGY_empty_EY(v1, q1);
-            if(v0==q0) { VMOVQ(d0, v0); VMOVQ(d1, v1); q0 = d0; q1 = d1;} else {d1 = q1; d0 = q0;}
+            if(v0==q0) { VMOVQ(d0, q0); VMOVQ(d1, q1); } else {d1 = q1; d0 = q0;}
             VMOVeD(v0, 0, ((u8>>1)&1)?d1:d0, (u8>>0)&1);
             VMOVeD(v0, 1, ((u8>>3)&1)?d1:d0, (u8>>2)&1);
-            VMOVeD(v1, 0, ((u8>>5)&1)?q1:q0, (u8>>4)&1);
-            VMOVeD(v1, 1, ((u8>>7)&1)?q1:q0, (u8>>6)&1);
+            VMOVeD(v1, 0, ((u8>>5)&1)?d1:d0, (u8>>4)&1);
+            VMOVeD(v1, 1, ((u8>>7)&1)?d1:d0, (u8>>6)&1);
             break;
         case 0x02:
             INST_NAME("VPBLENDD Gx, Vx, Ex, u8");