about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c56
1 files changed, 14 insertions, 42 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c
index 0f3ae177..067c324c 100644
--- a/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c
+++ b/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c
@@ -187,16 +187,12 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip,
             INST_NAME("VADDSD Gx, Vx, Ex");
             nextop = F8;
             d1 = fpu_get_scratch(dyn, ninst);
-            GETGX_empty_VX(v0, v2);
             GETEXSD(v1, 0, 0);
+            GETGX_empty_VX(v0, v2);
+            FADDD(d1, v2, v1);
             if(v0!=v2) {
-                if(v0==v1)  {
-                    VMOV(d1, v1);
-                    v1 = d1;
-                }
                 VMOVQ(v0, v2);
             }
-            FADDD(d1, v0, v1);
             VMOVeD(v0, 0, d1, 0);
             YMM0(gd)
             break;
@@ -204,16 +200,12 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip,
             INST_NAME("VMULSD Gx, Vx, Ex");
             nextop = F8;
             d1 = fpu_get_scratch(dyn, ninst);
-            GETGX_empty_VX(v0, v2);
             GETEXSD(v1, 0, 0);
+            GETGX_empty_VX(v0, v2);
+            FMULD(d1, v2, v1);
             if(v0!=v2) {
-                if(v0==v1)  {
-                    VMOV(d1, v1);
-                    v1 = d1;
-                }
                 VMOVQ(v0, v2);
             }
-            FMULD(d1, v0, v1);
             VMOVeD(v0, 0, d1, 0);
             YMM0(gd)
             break;
@@ -221,16 +213,12 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip,
             INST_NAME("VCVTSD2SS Gx, Vx, Ex");
             nextop = F8;
             d1 = fpu_get_scratch(dyn, ninst);
-            GETGX_empty_VX(v0, v2);
             GETEXSD(v1, 0, 0);
+            GETGX_empty_VX(v0, v2);
+            FCVT_S_D(d1, v1);
             if(v0!=v2) {
-                if(v0==v1)  {
-                    VMOV(d1, v1);
-                    v1 = d1;
-                }
                 VMOVQ(v0, v2);
             }
-            FCVT_S_D(d1, v1);
             VMOVeS(v0, 0, d1, 0);
             YMM0(gd)
             break;
@@ -239,16 +227,12 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip,
             INST_NAME("VSUBSD Gx, Vx, Ex");
             nextop = F8;
             d1 = fpu_get_scratch(dyn, ninst);
-            GETGX_empty_VX(v0, v2);
             GETEXSD(v1, 0, 0);
+            GETGX_empty_VX(v0, v2);
+            FSUBD(d1, v2, v1);
             if(v0!=v2) {
-                if(v0==v1)  {
-                    VMOV(d1, v1);
-                    v1 = d1;
-                }
                 VMOVQ(v0, v2);
             }
-            FSUBD(d1, v0, v1);
             VMOVeD(v0, 0, d1, 0);
             YMM0(gd)
             break;
@@ -256,16 +240,12 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip,
             INST_NAME("VMINSD Gx, Vx, Ex");
             nextop = F8;
             d1 = fpu_get_scratch(dyn, ninst);
-            GETGX_empty_VX(v0, v2);
             GETEXSD(v1, 0, 0);
+            GETGX_empty_VX(v0, v2);
+            FCMPD(v2, v1);
             if(v0!=v2) {
-                if(v0==v1)  {
-                    VMOV(d1, v1);
-                    v1 = d1;
-                }
                 VMOVQ(v0, v2);
             }
-            FCMPD(v0, v1);
             B_NEXT(cLS);    //Less than or equal
             VMOVeD(v0, 0, v1, 0);   // to not erase uper part
             YMM0(gd)
@@ -274,16 +254,12 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip,
             INST_NAME("VDIVSD Gx, Vx, Ex");
             nextop = F8;
             d1 = fpu_get_scratch(dyn, ninst);
-            GETGX_empty_VX(v0, v2);
             GETEXSD(v1, 0, 0);
+            GETGX_empty_VX(v0, v2);
+            FDIVD(d1, v2, v1);
             if(v0!=v2) {
-                if(v0==v1)  {
-                    VMOV(d1, v1);
-                    v1 = d1;
-                }
                 VMOVQ(v0, v2);
             }
-            FDIVD(d1, v0, v1);
             VMOVeD(v0, 0, d1, 0);
             YMM0(gd)
             break;
@@ -291,16 +267,12 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip,
             INST_NAME("VMAXSD Gx, Vx, Ex");
             nextop = F8;
             d1 = fpu_get_scratch(dyn, ninst);
-            GETGX_empty_VX(v0, v2);
             GETEXSD(v1, 0, 0);
+            GETGX_empty_VX(v0, v2);
+            FCMPD(v2, v1);
             if(v0!=v2) {
-                if(v0==v1)  {
-                    VMOV(d1, v1);
-                    v1 = d1;
-                }
                 VMOVQ(v0, v2);
             }
-            FCMPD(v0, v1);
             B_NEXT(cGE);    //Greater than or equal
             VMOVeD(v0, 0, v1, 0);   // to not erase uper part
             YMM0(gd)