about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-05-01 11:13:25 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-05-01 11:13:25 +0200
commit4b44501d1750602a88f297b4394c00f591af9a2f (patch)
tree6a950cf5439f3b0701e02fd7f0c0c98dbfebb213 /src
parent830cc8a4982364cdb4ff8ca2423981b1a3a3d684 (diff)
downloadbox64-4b44501d1750602a88f297b4394c00f591af9a2f.tar.gz
box64-4b44501d1750602a88f297b4394c00f591af9a2f.zip
[ARM64_DYNAREC] Fixed edge-case for VPERM2[F/I]128 opcodes
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c
index 7e1d0579..df345979 100644
--- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c
+++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f3a.c
@@ -177,7 +177,7 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
                 VMOVQ(q1, v1);
                 v1 = q1;
             }
-            switch(u8&0x0f) {
+            switch(u8&0b1011) {
                 case 0: if(v0!=v2) VMOVQ(v0, v2); break;
                 case 1: d2 = ymm_get_reg(dyn, ninst, x1, vex.v, 0, gd, s0, -1); VMOVQ(v0, d2); break;
                 case 2: if(MODREG) { if(v0!=v1) VMOVQ(v0, v1); } else { VLDR128_U12(v0, ed, fixedaddress); } break;
@@ -187,7 +187,7 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip
             if((u8&0xf0)==0x10) { if((u8&0x0f)!=1) d2 = ymm_get_reg(dyn, ninst, x1, vex.v, 0, gd, s0, -1); }
             if(MODREG && ((u8&0xf0)==0x30)) { if((u8&0x0f)!=3) d1 = ymm_get_reg(dyn, ninst, x1, s0, 0, gd, vex.v, -1); }
             v0 = ymm_get_reg_empty(dyn, ninst, x1, gd, vex.v, s0, -1);
-            switch((u8>>4)&0x0f) {
+            switch((u8>>4)&0b1011) {
                 case 0: VMOVQ(v0, v2); break;
                 case 1: if(v0!=d2) VMOVQ(v0, d2); break;
                 case 2: if(MODREG) { if(v0!=v1) VMOVQ(v0, v1); } else { VLDR128_U12(v0, ed, fixedaddress); } break;