about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
Diffstat (limited to 'src/dynarec')
-rw-r--r--src/dynarec/dynarec_native_functions.c47
1 files changed, 12 insertions, 35 deletions
diff --git a/src/dynarec/dynarec_native_functions.c b/src/dynarec/dynarec_native_functions.c
index d0a20b1c..8b72233e 100644
--- a/src/dynarec/dynarec_native_functions.c
+++ b/src/dynarec/dynarec_native_functions.c
@@ -80,24 +80,12 @@ void native_fxtract(x64emu_t* emu)
 }
 void native_fprem(x64emu_t* emu)
 {
-    int e0, e1;
-    int64_t ll;
-    frexp(ST0.d, &e0);
-    frexp(ST1.d, &e1);
-    int32_t tmp32s = e0 - e1;
-    if(tmp32s<64)
-    {
-        ll = (int64_t)floor(ST0.d/ST1.d);
-        ST0.d = ST0.d - (ST1.d*ll);
-        emu->sw.f.F87_C2 = 0;
-        emu->sw.f.F87_C1 = (ll&1)?1:0;
-        emu->sw.f.F87_C3 = (ll&2)?1:0;
-        emu->sw.f.F87_C0 = (ll&4)?1:0;
-    } else {
-        ll = (int64_t)(floor((ST0.d/ST1.d))/exp2(tmp32s - 32));
-        ST0.d = ST0.d - ST1.d*ll*exp2(tmp32s - 32);
-        emu->sw.f.F87_C2 = 1;
-    }
+    int64_t ll = (int64_t)trunc(ST0.d / ST1.d);
+    ST0.d = ST0.d - (ST1.d * ll);
+    emu->sw.f.F87_C2 = 0;
+    emu->sw.f.F87_C1 = (ll & 1) ? 1 : 0;
+    emu->sw.f.F87_C3 = (ll & 2) ? 1 : 0;
+    emu->sw.f.F87_C0 = (ll & 4) ? 1 : 0;
 }
 void native_fyl2xp1(x64emu_t* emu)
 {
@@ -284,23 +272,12 @@ void native_frstor16(x64emu_t* emu, uint8_t* ed)
 void native_fprem1(x64emu_t* emu)
 {
     int e0, e1;
-    int64_t ll;
-    frexp(ST0.d, &e0);
-    frexp(ST1.d, &e1);
-    int32_t tmp32s = e0 - e1;
-    if(tmp32s<64)
-    {
-        ll = (int64_t)round(ST0.d/ST1.d);
-        ST0.d = ST0.d - (ST1.d*ll);
-        emu->sw.f.F87_C2 = 0;
-        emu->sw.f.F87_C1 = (ll&1)?1:0;
-        emu->sw.f.F87_C3 = (ll&2)?1:0;
-        emu->sw.f.F87_C0 = (ll&4)?1:0;
-    } else {
-        ll = (int64_t)(trunc((ST0.d/ST1.d))/exp2(tmp32s - 32));
-        ST0.d = ST0.d - ST1.d*ll*exp2(tmp32s - 32);
-        emu->sw.f.F87_C2 = 1;
-    }
+    int64_t ll = (int64_t)round(ST0.d / ST1.d);
+    ST0.d = ST0.d - (ST1.d * ll);
+    emu->sw.f.F87_C2 = 0;
+    emu->sw.f.F87_C1 = (ll & 1) ? 1 : 0;
+    emu->sw.f.F87_C3 = (ll & 2) ? 1 : 0;
+    emu->sw.f.F87_C0 = (ll & 4) ? 1 : 0;
 }
 
 const uint8_t ff_mult2[4][256] = {