diff options
| author | wannacu <wannacu2049@gmail.com> | 2023-09-04 11:34:25 +0800 |
|---|---|---|
| committer | wannacu <wannacu2049@gmail.com> | 2023-09-04 16:43:28 +0800 |
| commit | cc351402a1ec73c4e839d4236f41d7dd7d52f749 (patch) | |
| tree | 33ed1dd78c2790bd5068110da8d40fe1f5bd143c /src | |
| parent | 90a7602e5ad469b0a83f933614cd1c6871f5622a (diff) | |
| download | box64-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.c | 32 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_660f.c | 24 |
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); |