diff options
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); |