diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-03-30 12:17:52 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-03-30 12:17:52 +0200 |
| commit | 3f641c2b67ae210caa6ebe7a6e4253038dada6a5 (patch) | |
| tree | aa55e322d079edbb35de9c7a2c8d9627b475dd31 /src/dynarec | |
| parent | 94c3cec69f7a1b497e0de8c019fab684d2769394 (diff) | |
| download | box64-3f641c2b67ae210caa6ebe7a6e4253038dada6a5.tar.gz box64-3f641c2b67ae210caa6ebe7a6e4253038dada6a5.zip | |
Improved test17 ([DYNAREC] Added 66 0F 38 16 opcode, fixed 66 0F 38 24/34 opcodes)
Diffstat (limited to 'src/dynarec')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_660f.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index aa8a724a..c739ee15 100755 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -385,7 +385,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETEX(q1, 0); GETGX_empty(q0); SXTL_16(q0, q1); // 16bits->32bits - SXTL_32(q0, q1); // 32bits->64bits + SXTL_32(q0, q0); // 32bits->64bits break; case 0x25: INST_NAME("PMOVSXDQ Gx, Ex"); // SSE4 opcode! @@ -432,7 +432,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETEX(q1, 0); GETGX_empty(q0); UXTL_16(q0, q1); // 16bits->32bits - UXTL_32(q0, q1); // 32bits->64bits + UXTL_32(q0, q0); // 32bits->64bits break; case 0x35: INST_NAME("PMOVZXDQ Gx, Ex"); // SSE4 opcode! @@ -451,7 +451,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n break; case 0x3D: - INST_NAME("PMINSD Gx, Ex"); // SSE4 opcode! + INST_NAME("PMAXSD Gx, Ex"); // SSE4 opcode! nextop = F8; GETEX(q1, 0); GETGX(q0); @@ -603,6 +603,19 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } break; + case 0x16: + if(rex.w) {INST_NAME("PEXTRQ Ed, Gx, Ib");} else {INST_NAME("PEXTRD Ed, Gx, Ib");} + nextop = F8; + GETGX(q0); + GETED(1); + u8 = F8; + if(rex.w) { + VMOVQDto(ed, q0, (u8&1)); + } else { + VMOVSto(ed, q0, (u8&3)); + } + break; + case 0x22: INST_NAME("PINSRD Gx, ED, Ib"); nextop = F8; |