diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-04-11 17:05:15 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-04-11 17:05:15 +0200 |
| commit | 76115b30b82d53700b8dcc8645a509b4a11c0539 (patch) | |
| tree | 42db397313324c1e0bf3bae2b00135d198510cb5 /src | |
| parent | 7401d46bcdee5236dd4c1f1ef551eb51ebeb3806 (diff) | |
| download | box64-76115b30b82d53700b8dcc8645a509b4a11c0539.tar.gz box64-76115b30b82d53700b8dcc8645a509b4a11c0539.zip | |
[DYNAREC] Added 66 0F E1/F2 opcode
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/dynarec_arm64_660f.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/dynarec/dynarec_arm64_660f.c b/src/dynarec/dynarec_arm64_660f.c index 2419fe47..d2e89f00 100755 --- a/src/dynarec/dynarec_arm64_660f.c +++ b/src/dynarec/dynarec_arm64_660f.c @@ -1140,6 +1140,21 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n URHADDQ_8(v0, v0, v1); break; + case 0xE1: + INST_NAME("PSRAW Gx,Ex"); + nextop = F8; + GETGX(q0); + GETEX(q1, 0); + v0 = fpu_get_scratch(dyn); + VMOVeD(v0, 0, q1, 0); + VMOVeD(v0, 1, q1, 0); + SQXTN_32(v0, v0); // 2*q1 in 32bits now + NEG_32(v0, v0); // because we want SHR and not SHL + VMOVeD(v0, 1, v0, 0); + SQXTN_16(v0, v0); // 4*q1 in 32bits now + VMOVeD(v0, 1, v0, 0); + SSHLQ_16(q0, q0, v0); + break; case 0xE2: INST_NAME("PSRAD Gx,Ex"); nextop = F8; @@ -1262,6 +1277,19 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } break; + case 0xF2: + INST_NAME("PSLLD Gx,Ex"); + nextop = F8; + GETGX(q0); + GETEX(q1, 0); + v0 = fpu_get_scratch(dyn); + VMOVeD(v0, 0, q1, 0); + VMOVeD(v0, 1, q1, 0); + SQXTN_32(v0, v0); // 2*q1 in 32bits now + VMOVeD(v0, 1, v0, 0); + SSHLQ_32(q0, q0, v0); + break; + case 0xF4: INST_NAME("PMULUDQ Gx,Ex"); nextop = F8; |