about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
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);