diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-03-12 16:32:42 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-03-12 16:32:42 +0100 |
| commit | 9186f5eeeb5f5db470feba1d1015de905295b75a (patch) | |
| tree | fa2fd5fcefa2fd3d55ceb585670505033ceb78e5 /src | |
| parent | 216e70756cb1fdaf064c9d11fe205c7c62ee63d5 (diff) | |
| download | box64-9186f5eeeb5f5db470feba1d1015de905295b75a.tar.gz box64-9186f5eeeb5f5db470feba1d1015de905295b75a.zip | |
[ARM64_DYNAREC] Added 66 0F 3A 0E opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_660f.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index b54638d7..d994f865 100755 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -650,6 +650,42 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VMOVeD(q0, 0, v1, 0); break; + case 0x0E: + INST_NAME("PBLENDW Gx, Ex, Ib"); + nextop = F8; + GETGX(q0, 1); + GETEX(q1, 0, 1); + u8 = F8; + i32 = 0; + if(q0!=q1) + while(u8) { + if(u8&1) { + if(!(i32&1) && u8&2) { + if(!(i32&1) && (u8&0xf)==0xf) { + // whole 64bits + VMOVeD(q0, i32>>2, q1, i32>>2); + i32+=4; + u8>>=4; + } else { + // 32bits + VMOVeS(q0, i32>>1, q1, i32>>1); + i32+=2; + u8>>=2; + } + } else { + // 16 bits + VMOVeH(q0, i32, q1, i32); + i32++; + u8>>=1; + } + } else { + // nope + i32++; + u8>>=1; + } + + } + break; case 0x0F: INST_NAME("PALIGNR Gx, Ex, Ib"); nextop = F8; |