diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-06-13 14:20:52 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-06-13 14:20:52 +0200 |
| commit | 90efb1ff315d621c2ffdca813ce940c60dff775e (patch) | |
| tree | d4d4dc81e69fe854873e5a417fe85909d83f1851 | |
| parent | 7625cc7cebd90e2dd1a65fbd06bfe92c8a5044c6 (diff) | |
| download | box64-90efb1ff315d621c2ffdca813ce940c60dff775e.tar.gz box64-90efb1ff315d621c2ffdca813ce940c60dff775e.zip | |
[DYNAREC] Small optim for PSHUFW opcode
| -rwxr-xr-x | src/dynarec/dynarec_arm64_0f.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_0f.c b/src/dynarec/dynarec_arm64_0f.c index a352d127..f4aecbe2 100755 --- a/src/dynarec/dynarec_arm64_0f.c +++ b/src/dynarec/dynarec_arm64_0f.c @@ -684,6 +684,27 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } VMOVeH(v0, 1, v1, 0); VMOVeS(v0, 1, 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); + } 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); + } 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); } else if(v0!=v1) { VMOVeH(v0, 0, v1, (u8>>(0*2))&3); VMOVeH(v0, 1, v1, (u8>>(1*2))&3); |