From b4e8e0750ce46e589c328279b58879bc5624d6d8 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Mon, 3 Jun 2002 07:23:41 +0000 Subject: [PATCH] well, that's one way to confuse anybody fixes the floating point exception --- libs/video/renderer/sw/d_polysa.S | 4 ++-- libs/video/renderer/sw/sw_rdrawa.S | 4 ++-- libs/video/renderer/sw/sw_rmain.c | 3 +++ libs/video/renderer/sw/sw_rvarsa.S | 12 ++++++++++++ 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/libs/video/renderer/sw/d_polysa.S b/libs/video/renderer/sw/d_polysa.S index cc4d9f7ab..004c65310 100644 --- a/libs/video/renderer/sw/d_polysa.S +++ b/libs/video/renderer/sw/d_polysa.S @@ -205,12 +205,12 @@ C(D_PolysetCalcGradients): // (t1*p01_minus_p21 - t0*p11_minus_p21)* // xstepdenominv | ystepdenominv | // xstepdenominv | p00_minus_p20 | p11_minus_p21 - fldcw ceil_cw + fldcw r_ceil_cw fistpl C(r_lstepy) // r_lstepx | ystepdenominv | xstepdenominv | // p00_minus_p20 | p11_minus_p21 fistpl C(r_lstepx) // ystepdenominv | xstepdenominv | p00_minus_p20 | // p11_minus_p21 - fldcw single_cw + fldcw r_single_cw // t0 = r_p0[2] - r_p2[2]; // t1 = r_p1[2] - r_p2[2]; diff --git a/libs/video/renderer/sw/sw_rdrawa.S b/libs/video/renderer/sw/sw_rdrawa.S index 337a0bb84..d6ceaf211 100644 --- a/libs/video/renderer/sw/sw_rdrawa.S +++ b/libs/video/renderer/sw/sw_rdrawa.S @@ -153,7 +153,7 @@ Lemit: // // FIXME: do away with by manually extracting integers from floats? // FIXME: set less often - fldcw ceil_cw + fldcw r_ceil_cw // edge_t *edge, *pcheck; // int u_check; @@ -220,7 +220,7 @@ LCalcSecond: // r_ceilv1 = (int)(r_v1 - 2000) + 2000; // ceil(r_v1); fistl C(r_ceilv1) - fldcw single_cw // put back normal floating-point state + fldcw r_single_cw // put back normal floating-point state fsts C(r_v1) fxch %st(4) // lzi0 | lzi1 | u1 | v0 | v1 | u0 diff --git a/libs/video/renderer/sw/sw_rmain.c b/libs/video/renderer/sw/sw_rmain.c index 038e40786..a3fe727b4 100644 --- a/libs/video/renderer/sw/sw_rmain.c +++ b/libs/video/renderer/sw/sw_rmain.c @@ -137,6 +137,7 @@ float se_time1, se_time2, de_time1, de_time2, dv_time1, dv_time2; void R_MarkLeaves (void); void R_LoadSky_f (void); +void R_InitVars (void); void R_Init (void) @@ -146,6 +147,8 @@ R_Init (void) // get stack position so we can guess if we are going to overflow r_stack_start = (byte *) & dummy; + R_InitVars (); + R_InitTurb (); Cmd_AddCommand ("timerefresh", R_TimeRefresh_f, "Tests the current " diff --git a/libs/video/renderer/sw/sw_rvarsa.S b/libs/video/renderer/sw/sw_rvarsa.S index 9e6087e32..dbdbe0463 100644 --- a/libs/video/renderer/sw/sw_rvarsa.S +++ b/libs/video/renderer/sw/sw_rvarsa.S @@ -65,8 +65,20 @@ FloatZero: .long 0 Float2ToThe31nd: .long 0x4f000000 FloatMinus2ToThe31nd: .long 0xcf000000 +.globl r_ceil_cw, r_single_cw +r_ceil_cw: .long 0 +r_single_cw: .long 0 + .globl C(r_bmodelactive) C(r_bmodelactive): .long 0 +.global C(R_InitVars) +C(R_InitVars): + movl ceil_cw, %eax + movl single_cw, %edx + movl %eax, r_ceil_cw + movl %edx, r_single_cw + ret + #endif // USE_INTEL_ASM