about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-04-15 14:12:29 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-04-15 14:12:29 +0200
commit4f04deadfe75c5cbf4e135200a5f27764ec0b0e5 (patch)
tree16e7add0f51609157d049417e2242f310efd4160 /src
parent064c2b037e9d18573e62bd4bb17634192e83afd1 (diff)
downloadbox64-4f04deadfe75c5cbf4e135200a5f27764ec0b0e5.tar.gz
box64-4f04deadfe75c5cbf4e135200a5f27764ec0b0e5.zip
[ARM64_DYNAREC] Added 67 0F 29 opcode
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_67.c16
-rw-r--r--src/dynarec/arm64/dynarec_arm64_67_32.c25
2 files changed, 41 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c
index 3d9a7b35..d70da391 100644
--- a/src/dynarec/arm64/dynarec_arm64_67.c
+++ b/src/dynarec/arm64/dynarec_arm64_67.c
@@ -197,6 +197,22 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                     }

                     break;

 

+                case 0x29:

+                    INST_NAME("MOVAPS Ex,Gx");

+                    nextop = F8;

+                    GETG;

+                    v0 = sse_get_reg(dyn, ninst, x1, gd, 0);

+                    if(MODREG) {

+                        ed = (nextop&7)+(rex.b<<3);

+                        v1 = sse_get_reg_empty(dyn, ninst, x1, ed);

+                        VMOVQ(v1, v0);

+                    } else {

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

+                        VST128(v0, ed, fixedaddress);

+                        SMWRITE2();

+                    }

+                    break;

+        

                 case 0x2E:

                     // no special check...

                 case 0x2F:

diff --git a/src/dynarec/arm64/dynarec_arm64_67_32.c b/src/dynarec/arm64/dynarec_arm64_67_32.c
index c927efbd..477b41be 100644
--- a/src/dynarec/arm64/dynarec_arm64_67_32.c
+++ b/src/dynarec/arm64/dynarec_arm64_67_32.c
@@ -59,6 +59,31 @@ uintptr_t dynarec64_67_32(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int
 
     switch(opcode) {
         
+        case 0x0F:
+            opcode=F8;
+            switch(opcode) {
+
+                case 0x29:
+                    INST_NAME("MOVAPS Ex,Gx");
+                    nextop = F8;
+                    GETG;
+                    v0 = sse_get_reg(dyn, ninst, x1, gd, 0);
+                    if(MODREG) {
+                        ed = (nextop&7)+(rex.b<<3);
+                        v1 = sse_get_reg_empty(dyn, ninst, x1, ed);
+                        VMOVQ(v1, v0);
+                    } else {
+                        addr = geted16(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, &unscaled, 0xfff<<4, 15, 0);
+                        VST128(v0, ed, fixedaddress);
+                        SMWRITE2();
+                    }
+                    break;
+
+                default:
+                    DEFAULT;
+            }
+            break;
+
         case 64:
             addr = dynarec64_6764_32(dyn, addr, ip, ninst, rex, rep, _FS, ok, need_epilog);
             break;