about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-08-18 18:42:28 +0800
committerGitHub <noreply@github.com>2025-08-18 12:42:28 +0200
commit5f144d8ddde847fd6e99d1739940cfd3cbf3779e (patch)
tree4e6fa3c1f6943add98186ea33aa1fdfc33ed93df
parent0a53d2223aaac6a460074cb2fea649ef526d7d20 (diff)
downloadbox64-5f144d8ddde847fd6e99d1739940cfd3cbf3779e.tar.gz
box64-5f144d8ddde847fd6e99d1739940cfd3cbf3779e.zip
[RV64_DYNAREC] Added scalar AVX VMOVDQA opcodes (#2948)
-rw-r--r--src/dynarec/rv64/dynarec_rv64_avx_66_0f.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_avx_66_0f.c b/src/dynarec/rv64/dynarec_rv64_avx_66_0f.c
index e7389fc2..64d2a93f 100644
--- a/src/dynarec/rv64/dynarec_rv64_avx_66_0f.c
+++ b/src/dynarec/rv64/dynarec_rv64_avx_66_0f.c
@@ -78,6 +78,27 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip,
             SD(xZR, gyback, gyoffset);
             SD(xZR, gyback, gyoffset + 8);
             break;
+        case 0x6F:
+            INST_NAME("VMOVDQA Gx, Ex");
+            nextop = F8;
+            GETEX(x2, 0, vex.l ? 24 : 8);
+            GETGX();
+            GETGY();
+            LD(x3, wback, fixedaddress);
+            SD(x3, gback, gdoffset);
+            LD(x3, wback, fixedaddress + 8);
+            SD(x3, gback, gdoffset + 8);
+            if (vex.l) {
+                GETEY();
+                LD(x3, wback, fixedaddress);
+                SD(x3, gyback, gyoffset);
+                LD(x3, wback, fixedaddress + 8);
+                SD(x3, gyback, gyoffset + 8);
+            } else {
+                SD(xZR, gyback, gyoffset);
+                SD(xZR, gyback, gyoffset + 8);
+            }
+            break;
         case 0x7E:
             INST_NAME("VMOVD Ed, Gx");
             nextop = F8;
@@ -103,6 +124,27 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip,
                 }
             }
             break;
+        case 0x7F:
+            INST_NAME("VMOVDQA Ex, Gx");
+            nextop = F8;
+            GETEX(x2, 0, vex.l ? 24 : 8);
+            GETGX();
+            GETGY();
+            LD(x3, gback, gdoffset);
+            SD(x3, wback, fixedaddress);
+            LD(x3, gback, gdoffset + 8);
+            SD(x3, wback, fixedaddress + 8);
+            if (vex.l) {
+                GETEY();
+                LD(x3, gyback, gyoffset);
+                SD(x3, wback, fixedaddress);
+                LD(x3, gyback, gyoffset + 8);
+                SD(x3, wback, fixedaddress + 8);
+            } else if (MODREG) {
+                SD(xZR, wback, fixedaddress);
+                SD(xZR, wback, fixedaddress + 8);
+            }
+            break;
         default:
             DEFAULT;
     }