diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-10-25 22:37:12 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-10-25 22:37:12 +0200 |
| commit | 8999713301f7e79631e65403b861dbd7eb04d0b2 (patch) | |
| tree | 4cb0457f983970fb492d24f08b1da1631e170933 | |
| parent | 0900cc2f5907b55c7cc6d29058765e1acd414e01 (diff) | |
| download | box64-8999713301f7e79631e65403b861dbd7eb04d0b2.tar.gz box64-8999713301f7e79631e65403b861dbd7eb04d0b2.zip | |
[ARM64_DYNAREC] Small optimisation on 66 0F 57 opcode
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_660f.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index 2d51440b..69cc17b8 100644 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -1275,9 +1275,16 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n case 0x57: INST_NAME("XORPD Gx, Ex"); nextop = F8; - GETEX(q0, 0, 0); - GETGX(v0, 1); - VEORQ(v0, v0, q0); + GETG; + if(MODREG && ((nextop&7)+(rex.b<<3)==gd)) { + // special case for XORPD Gx, Gx + q0 = sse_get_reg_empty(dyn, ninst, x1, gd); + VEORQ(q0, q0, q0); + } else { + q0 = sse_get_reg(dyn, ninst, x1, gd, 1); + GETEX(q1, 0, 0); + VEORQ(q0, q0, q1); + } break; case 0x58: INST_NAME("ADDPD Gx, Ex"); |