about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorwannacu <wannacu2049@gmail.com>2023-09-04 11:34:25 +0800
committerwannacu <wannacu2049@gmail.com>2023-09-04 16:43:28 +0800
commitcc351402a1ec73c4e839d4236f41d7dd7d52f749 (patch)
tree33ed1dd78c2790bd5068110da8d40fe1f5bd143c /src
parent90a7602e5ad469b0a83f933614cd1c6871f5622a (diff)
downloadbox64-cc351402a1ec73c4e839d4236f41d7dd7d52f749.tar.gz
box64-cc351402a1ec73c4e839d4236f41d7dd7d52f749.zip
[ARM64_DYNAREC] Fixed (66) 0F 70 opcodes
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_0f.c32
-rw-r--r--src/dynarec/arm64/dynarec_arm64_660f.c24
2 files changed, 12 insertions, 44 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c
index 400b7816..2754c1de 100644
--- a/src/dynarec/arm64/dynarec_arm64_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_0f.c
@@ -970,33 +970,17 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                         VMOVeS(v0, 1, v1, 0);

                     }

                 } else if(u8==0x00) {

-                    // dumplicate lower 16bits to all spot

-                    if(v0!=v1) {

-                        VMOVeH(v0, 0, v1, 0);

-                    }

-                    VMOVeH(v0, 1, v1, 0);

-                    VMOVeS(v0, 1, v1, 0);

+                    // duplicate lower 16bits to all spot

+                    VDUP_16(v0, v1, 0);

                 } else if(u8==0x55) {

-                    // dumplicate 16bits slot 1 to all spot

-                    if(v0!=v1) {

-                        VMOVeH(v0, 1, v1, 1);

-                    }

-                    VMOVeH(v0, 0, v1, 1);

-                    VMOVeS(v0, 1, v1, 0);

+                    // duplicate 16bits slot 1 to all spot

+                    VDUP_16(v0, v1, 1);

                 } else if(u8==0xAA) {

-                    // dumplicate 16bits slot 2 to all spot

-                    if(v0!=v1) {

-                        VMOVeH(v0, 2, v1, 2);

-                    }

-                    VMOVeH(v0, 3, v1, 2);

-                    VMOVeS(v0, 0, v1, 1);

+                    // duplicate 16bits slot 2 to all spot

+                    VDUP_16(v0, v1, 2);

                 } else if(u8==0xFF) {

-                    // dumplicate 16bits slot 3 to all spot

-                    if(v0!=v1) {

-                        VMOVeH(v0, 3, v1, 3);

-                    }

-                    VMOVeH(v0, 2, v1, 3);

-                    VMOVeS(v0, 0, v1, 1);

+                    // duplicate 16bits slot 3 to all spot

+                    VDUP_16(v0, v1, 3);

                 } else if(v0!=v1) {

                     VMOVeH(v0, 0, v1, (u8>>(0*2))&3);

                     VMOVeH(v0, 1, v1, (u8>>(1*2))&3);

diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c
index 20d71349..2d80e68d 100644
--- a/src/dynarec/arm64/dynarec_arm64_660f.c
+++ b/src/dynarec/arm64/dynarec_arm64_660f.c
@@ -1570,32 +1570,16 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
                     }

                 } else if(u8==0x00) {

                     // duplicate lower 32bits to all spot

-                    if(v0!=v1) {

-                        VMOVeS(v0, 0, v1, 0);

-                    }

-                    VMOVeS(v0, 1, v1, 0);

-                    VMOVeD(v0, 1, v0, 0);

+                    VDUPQ_32(v0, v1, 0);

                 } else if(u8==0x55) {

                     // duplicate slot 1 to all spot

-                    if(v0!=v1) {

-                        VMOVeS(v0, 1, v1, 1);

-                    }

-                    VMOVeS(v0, 0, v1, 1);

-                    VMOVeD(v0, 1, v0, 0);

+                    VDUPQ_32(v0, v1, 1);

                 } else if(u8==0xAA) {

                     // duplicate slot 2 to all spot

-                    if(v0!=v1) {

-                        VMOVeS(v0, 2, v1, 2);

-                    }

-                    VMOVeS(v0, 3, v1, 2);

-                    VMOVeD(v0, 0, v0, 1);

+                    VDUPQ_32(v0, v1, 2);

                 } else if(u8==0xFF) {

                     // duplicate slot 3 to all spot

-                    if(v0!=v1) {

-                        VMOVeS(v0, 3, v1, 3);

-                    }

-                    VMOVeS(v0, 2, v1, 3);

-                    VMOVeD(v0, 0, v0, 1);

+                    VDUPQ_32(v0, v1, 3);

                 } else if(v0!=v1) {

                     VMOVeS(v0, 0, v1, (u8>>(0*2))&3);

                     VMOVeS(v0, 1, v1, (u8>>(1*2))&3);