diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-12-30 20:38:23 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-12-30 20:38:23 +0100 |
| commit | 670770e24a5469cc27f357ff601fd876b5cfb1bc (patch) | |
| tree | 89795749d8ae79742b6de3f5156bd2e004092d5d /src | |
| parent | b55b138303034d0ed32e89533dcfa7f354b7d5f7 (diff) | |
| download | box64-670770e24a5469cc27f357ff601fd876b5cfb1bc.tar.gz box64-670770e24a5469cc27f357ff601fd876b5cfb1bc.zip | |
[ARM64_DYNAREC] Small improvement to MULX opcode
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_avx_f2_0f38.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f2_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_f2_0f38.c index 30d6d331..f8d37d0a 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_f2_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_f2_0f38.c @@ -69,9 +69,15 @@ uintptr_t dynarec64_AVX_F2_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip GETVD; if(rex.w) { // 64bits mul - UMULH(x3, xRDX, ed); + if((gd==xRDX) || (gd==ed) || (gd==vd)) + gb1 = x3; + else + gb1 = gd; + UMULH(gb1, xRDX, ed); MULx(vd, xRDX, ed); - MOVx_REG(gd, x3); + if(gb1==x3) { + MOVx_REG(gd, gb1); + } } else { // 32bits mul UMULL(x3, xRDX, ed); |