about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-04-24 15:17:52 +0800
committerGitHub <noreply@github.com>2025-04-24 09:17:52 +0200
commit4903177bab1f3324a0faeedd968fed5bf4ea8772 (patch)
tree33405e6e0b177d958947c831d7ad1ca4109f6f2f
parentd8a6fa03958c21f68f591f48d342e3d2140d6ba6 (diff)
downloadbox64-4903177bab1f3324a0faeedd968fed5bf4ea8772.tar.gz
box64-4903177bab1f3324a0faeedd968fed5bf4ea8772.zip
[ARM64_DYNAREC] Minor optim to MOVNTDQA (#2568)
-rw-r--r--src/dynarec/arm64/dynarec_arm64_660f.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c
index 452dd65c..dec21e10 100644
--- a/src/dynarec/arm64/dynarec_arm64_660f.c
+++ b/src/dynarec/arm64/dynarec_arm64_660f.c
@@ -625,9 +625,16 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                 case 0x2A:

                     INST_NAME("MOVNTDQA Gx, Ex");

                     nextop = F8;

-                    GETEX(q1, 0, 0);

-                    GETGX(q0, 1);

-                    VMOVQ(q0, q1);

+                    if (MODREG) {

+                        v1 = sse_get_reg(dyn, ninst, x1, (nextop & 7) + (rex.b << 3), 0);

+                        GETGX_empty(v0);

+                        VMOVQ(v0, v1);

+                    } else {

+                        GETGX_empty(v0);

+                        SMREAD();

+                        addr = geted32(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff << 4, 15, rex, NULL, 0, 0);

+                        VLD128(v0, ed, fixedaddress);

+                    }

                     break;

                 case 0x2B:

                     INST_NAME("PACKUSDW Gx, Ex");  // SSE4 opcode!