about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-12-30 20:38:23 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-12-30 20:38:23 +0100
commit670770e24a5469cc27f357ff601fd876b5cfb1bc (patch)
tree89795749d8ae79742b6de3f5156bd2e004092d5d /src
parentb55b138303034d0ed32e89533dcfa7f354b7d5f7 (diff)
downloadbox64-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.c10
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);