about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-05-15 20:30:18 +0800
committerGitHub <noreply@github.com>2025-05-15 14:30:18 +0200
commit2cd4d60325a194d6cd535bc5a9c873ab20c2ad51 (patch)
tree96e1f88e1dab2fc67ab8e9e06e72a6d29029407a /src
parent3dc00e926235a7f987bc4ad2e3d912038fb22716 (diff)
downloadbox64-2cd4d60325a194d6cd535bc5a9c873ab20c2ad51.tar.gz
box64-2cd4d60325a194d6cd535bc5a9c873ab20c2ad51.zip
[RV64_DYNAREC] Added F2 0F F0 LDDQU opcode for vector (#2639)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_f20f_vector.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_f20f_vector.c b/src/dynarec/rv64/dynarec_rv64_f20f_vector.c
index a75741b9..686ee717 100644
--- a/src/dynarec/rv64/dynarec_rv64_f20f_vector.c
+++ b/src/dynarec/rv64/dynarec_rv64_f20f_vector.c
@@ -573,6 +573,24 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i
             VMV_X_S(x4, d0);
             VMV_S_X(v0, x4);
             break;
+        case 0xF0:
+            INST_NAME("LDDQU Gx, Ex");
+            nextop = F8;
+            GETG;
+            if (MODREG) {
+                SET_ELEMENT_WIDTH(x1, VECTOR_SEWANY, 1);
+                ed = (nextop & 7) + (rex.b << 3);
+                v1 = sse_get_reg_vector(dyn, ninst, x1, ed, 0, dyn->vector_eew);
+                v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd);
+                VMV_V_V(v0, v1);
+            } else {
+                SET_ELEMENT_WIDTH(x1, VECTOR_SEW8, 1); // unaligned!
+                SMREAD();
+                v0 = sse_get_reg_empty_vector(dyn, ninst, x1, gd);
+                addr = geted(dyn, addr, ninst, nextop, &ed, x2, x3, &fixedaddress, rex, NULL, 0, 0);
+                VLE_V(v0, ed, dyn->vector_eew, VECTOR_UNMASKED, VECTOR_NFIELD1);
+            }
+            break;
         default: DEFAULT_VECTOR;
     }
     return addr;