mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-06-01 17:12:15 +00:00
the fpu manipulation stuff seems to be better off in the one place that
actually uses it...
This commit is contained in:
parent
054ec3c072
commit
ebfdbd9285
16 changed files with 86 additions and 75 deletions
|
@ -70,10 +70,7 @@ int Sys_TimeID (void);
|
||||||
// called to yield for a little bit so as
|
// called to yield for a little bit so as
|
||||||
// not to hog cpu when paused or debugging
|
// not to hog cpu when paused or debugging
|
||||||
|
|
||||||
void Sys_LowFPPrecision (void);
|
void Sys_MaskExceptions (void);
|
||||||
void Sys_HighFPPrecision (void);
|
|
||||||
void Sys_SetFPCW (void);
|
|
||||||
void MaskExceptions (void);
|
|
||||||
|
|
||||||
// send text to the console
|
// send text to the console
|
||||||
|
|
||||||
|
|
|
@ -337,4 +337,8 @@ void R_MarkLights (const vec3_t lightorigin, struct dlight_s *light, int bit,
|
||||||
|
|
||||||
void R_LoadSkys (const char *);
|
void R_LoadSkys (const char *);
|
||||||
|
|
||||||
|
void R_LowFPPrecision (void);
|
||||||
|
void R_HighFPPrecision (void);
|
||||||
|
void R_SetFPCW (void);
|
||||||
|
|
||||||
#endif // _R_LOCAL_H
|
#endif // _R_LOCAL_H
|
||||||
|
|
|
@ -133,27 +133,7 @@ const char sys_char_map[256] = {
|
||||||
|
|
||||||
#ifndef USE_INTEL_ASM
|
#ifndef USE_INTEL_ASM
|
||||||
void
|
void
|
||||||
Sys_HighFPPrecision (void)
|
Sys_MaskExceptions (void)
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Sys_LowFPPrecision (void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Sys_SetFPCW (void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Sys_PushFPCW_SetHigh (void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Sys_PopFPCW (void)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -15,13 +15,13 @@ noinst_LTLIBRARIES=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
asm_src= \
|
asm_src= \
|
||||||
d_draw.S d_parta.S d_polysa.S d_scana.S d_spr8.S d_varsa.S \
|
d_draw.S d_parta.S d_polysa.S d_scana.S d_spr8.S d_varsa.S fpua.S \
|
||||||
surf8.S sw_raclipa.S sw_raliasa.S sw_rdrawa.S sw_redgea.S \
|
surf8.S sw_raclipa.S sw_raliasa.S sw_rdrawa.S sw_redgea.S \
|
||||||
sw_rvarsa.S transform.S
|
sw_rvarsa.S transform.S
|
||||||
|
|
||||||
sw_src= \
|
sw_src= \
|
||||||
d_edge.c d_fill.c d_init.c d_modech.c d_part.c d_polyse.c d_scan.c \
|
d_edge.c d_fill.c d_init.c d_modech.c d_part.c d_polyse.c d_scan.c \
|
||||||
d_sky.c d_sprite.c d_surf.c d_vars.c d_zpoint.c draw.c nonintel.c \
|
d_sky.c d_sprite.c d_surf.c d_vars.c d_zpoint.c draw.c fpu.c nonintel.c \
|
||||||
screen.c sw_graph.c sw_raclip.c sw_ralias.c sw_rbsp.c sw_rdraw.c \
|
screen.c sw_graph.c sw_raclip.c sw_ralias.c sw_rbsp.c sw_rdraw.c \
|
||||||
sw_redge.c sw_rmain.c sw_rmisc.c sw_rpart.c sw_rsky.c sw_rsprite.c \
|
sw_redge.c sw_rmain.c sw_rmisc.c sw_rpart.c sw_rsky.c sw_rsprite.c \
|
||||||
sw_rsurf.c sw_skin.c
|
sw_rsurf.c sw_skin.c
|
||||||
|
|
62
libs/video/renderer/sw/fpu.c
Normal file
62
libs/video/renderer/sw/fpu.c
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
#FILENAME#
|
||||||
|
|
||||||
|
#DESCRIPTION#
|
||||||
|
|
||||||
|
Copyright (C) 2001 #AUTHOR#
|
||||||
|
|
||||||
|
Author: #AUTHOR#
|
||||||
|
Date: #DATE#
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
|
See the GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to:
|
||||||
|
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
59 Temple Place - Suite 330
|
||||||
|
Boston, MA 02111-1307, USA
|
||||||
|
|
||||||
|
*/
|
||||||
|
static const char rcsid[] =
|
||||||
|
"$Id$";
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef USE_INTEL_ASM
|
||||||
|
void
|
||||||
|
R_HighFPPrecision (void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
R_LowFPPrecision (void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
R_SetFPCW (void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
R_PushFPCW_SetHigh (void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
R_PopFPCW (void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
sys_ia32.S
|
sw_fpua.S
|
||||||
|
|
||||||
Intel 32-bit assembly language dependent routines.
|
Intel 32-bit assembly language dependent routines.
|
||||||
|
|
||||||
|
@ -118,40 +118,40 @@ pushed_cw: .long 0
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
F_BEGIN(Sys_LowFPPrecision)
|
F_BEGIN(R_LowFPPrecision)
|
||||||
got_base(3)
|
got_base(3)
|
||||||
fldcw got_var(single_cw)
|
fldcw got_var(single_cw)
|
||||||
|
|
||||||
ret
|
ret
|
||||||
F_END(Sys_LowFPPrecision)
|
F_END(R_LowFPPrecision)
|
||||||
|
|
||||||
|
|
||||||
F_BEGIN(Sys_HighFPPrecision)
|
F_BEGIN(R_HighFPPrecision)
|
||||||
got_base(4)
|
got_base(4)
|
||||||
fldcw got_var(full_cw)
|
fldcw got_var(full_cw)
|
||||||
|
|
||||||
ret
|
ret
|
||||||
F_END(Sys_HighFPPrecision)
|
F_END(R_HighFPPrecision)
|
||||||
|
|
||||||
|
|
||||||
F_BEGIN(Sys_PushFPCW_SetHigh)
|
F_BEGIN(R_PushFPCW_SetHigh)
|
||||||
got_base(5)
|
got_base(5)
|
||||||
fnstcw got_var(pushed_cw)
|
fnstcw got_var(pushed_cw)
|
||||||
fldcw got_var(full_cw)
|
fldcw got_var(full_cw)
|
||||||
|
|
||||||
ret
|
ret
|
||||||
F_END(Sys_PushFPCW_SetHigh)
|
F_END(R_PushFPCW_SetHigh)
|
||||||
|
|
||||||
|
|
||||||
F_BEGIN(Sys_PopFPCW)
|
F_BEGIN(R_PopFPCW)
|
||||||
got_base(6)
|
got_base(6)
|
||||||
fldcw got_var(pushed_cw)
|
fldcw got_var(pushed_cw)
|
||||||
|
|
||||||
ret
|
ret
|
||||||
F_END(Sys_PopFPCW)
|
F_END(R_PopFPCW)
|
||||||
|
|
||||||
|
|
||||||
F_BEGIN(Sys_SetFPCW)
|
F_BEGIN(R_SetFPCW)
|
||||||
got_base(7)
|
got_base(7)
|
||||||
fnstcw got_var(cw)
|
fnstcw got_var(cw)
|
||||||
movl got_var(cw),%eax
|
movl got_var(cw),%eax
|
||||||
|
@ -168,5 +168,5 @@ F_BEGIN(Sys_SetFPCW)
|
||||||
movl %eax,got_var(ceil_cw)
|
movl %eax,got_var(ceil_cw)
|
||||||
|
|
||||||
ret
|
ret
|
||||||
F_END(Sys_SetFPCW)
|
F_END(R_SetFPCW)
|
||||||
#endif /* USE_INTEL_ASM */
|
#endif /* USE_INTEL_ASM */
|
|
@ -147,6 +147,7 @@ R_Init (void)
|
||||||
// get stack position so we can guess if we are going to overflow
|
// get stack position so we can guess if we are going to overflow
|
||||||
r_stack_start = (byte *) & dummy;
|
r_stack_start = (byte *) & dummy;
|
||||||
|
|
||||||
|
R_SetFPCW ();
|
||||||
R_InitVars ();
|
R_InitVars ();
|
||||||
|
|
||||||
R_InitTurb ();
|
R_InitTurb ();
|
||||||
|
@ -858,7 +859,7 @@ R_RenderView_ (void)
|
||||||
// while, so we don't do it globally. This also sets chop mode, and we do it
|
// while, so we don't do it globally. This also sets chop mode, and we do it
|
||||||
// here so that setup stuff like the refresh area calculations match what's
|
// here so that setup stuff like the refresh area calculations match what's
|
||||||
// done in screen.c
|
// done in screen.c
|
||||||
Sys_LowFPPrecision ();
|
R_LowFPPrecision ();
|
||||||
|
|
||||||
if (!r_worldentity.model)
|
if (!r_worldentity.model)
|
||||||
Sys_Error ("R_RenderView: NULL worldmodel");
|
Sys_Error ("R_RenderView: NULL worldmodel");
|
||||||
|
@ -928,7 +929,7 @@ R_RenderView_ (void)
|
||||||
Con_Printf ("Short roughly %d edges\n", r_outofedges * 2 / 3);
|
Con_Printf ("Short roughly %d edges\n", r_outofedges * 2 / 3);
|
||||||
|
|
||||||
// back to high floating-point precision
|
// back to high floating-point precision
|
||||||
Sys_HighFPPrecision ();
|
R_HighFPPrecision ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
@ -77,7 +77,6 @@ int noconinput;
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
# include "winquake.h"
|
# include "winquake.h"
|
||||||
void MaskExceptions (void);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -88,9 +87,8 @@ Sys_Init (void)
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_INTEL_ASM
|
#ifdef USE_INTEL_ASM
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
MaskExceptions ();
|
Sys_MaskExceptions ();
|
||||||
#endif
|
#endif
|
||||||
Sys_SetFPCW ();
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|
|
@ -66,9 +66,6 @@ qboolean isDedicated = false;
|
||||||
void
|
void
|
||||||
Sys_Init (void)
|
Sys_Init (void)
|
||||||
{
|
{
|
||||||
#ifdef USE_INTEL_ASM
|
|
||||||
Sys_SetFPCW ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -79,9 +79,6 @@ shutdown (void)
|
||||||
void
|
void
|
||||||
Sys_Init (void)
|
Sys_Init (void)
|
||||||
{
|
{
|
||||||
#ifdef USE_INTEL_ASM
|
|
||||||
Sys_SetFPCW ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -92,13 +92,6 @@ findhandle (void)
|
||||||
// SYSTEM IO ==================================================================
|
// SYSTEM IO ==================================================================
|
||||||
|
|
||||||
|
|
||||||
#ifndef USE_INTEL_ASM
|
|
||||||
void
|
|
||||||
MaskExceptions (void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Sys_Init (void)
|
Sys_Init (void)
|
||||||
{
|
{
|
||||||
|
@ -106,8 +99,7 @@ Sys_Init (void)
|
||||||
unsigned int lowpart, highpart;
|
unsigned int lowpart, highpart;
|
||||||
OSVERSIONINFO vinfo;
|
OSVERSIONINFO vinfo;
|
||||||
|
|
||||||
MaskExceptions ();
|
Sys_MaskExceptions ();
|
||||||
Sys_SetFPCW ();
|
|
||||||
|
|
||||||
if (!QueryPerformanceFrequency (&PerformanceFreq))
|
if (!QueryPerformanceFrequency (&PerformanceFreq))
|
||||||
Sys_Error ("No hardware timer available");
|
Sys_Error ("No hardware timer available");
|
||||||
|
|
|
@ -86,9 +86,6 @@ Sys_Init (void)
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
OSVERSIONINFO vinfo;
|
OSVERSIONINFO vinfo;
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_INTEL_ASM
|
|
||||||
Sys_SetFPCW ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
// make sure the timer is high precision, otherwise NT gets 18ms resolution
|
// make sure the timer is high precision, otherwise NT gets 18ms resolution
|
||||||
|
|
|
@ -66,9 +66,6 @@ char *svs_info;
|
||||||
void
|
void
|
||||||
Sys_Init (void)
|
Sys_Init (void)
|
||||||
{
|
{
|
||||||
#ifdef USE_INTEL_ASM
|
|
||||||
Sys_SetFPCW ();
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -96,11 +96,6 @@ Sys_Init (void)
|
||||||
1, /* Maximum count */
|
1, /* Maximum count */
|
||||||
"qwcl"); /* Semaphore name */
|
"qwcl"); /* Semaphore name */
|
||||||
|
|
||||||
#ifdef USE_INTEL_ASM
|
|
||||||
MaskExceptions ();
|
|
||||||
Sys_SetFPCW ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// make sure the timer is high precision, otherwise NT gets 18ms resolution
|
// make sure the timer is high precision, otherwise NT gets 18ms resolution
|
||||||
timeBeginPeriod (1);
|
timeBeginPeriod (1);
|
||||||
|
|
||||||
|
|
|
@ -113,9 +113,6 @@ wrfpcr(unsigned long val)
|
||||||
void
|
void
|
||||||
Sys_Init (void)
|
Sys_Init (void)
|
||||||
{
|
{
|
||||||
#ifdef USE_INTEL_ASM
|
|
||||||
Sys_SetFPCW ();
|
|
||||||
#endif
|
|
||||||
#ifdef __alpha__
|
#ifdef __alpha__
|
||||||
wrfpcr (rdfpcr () | 1L << 47);
|
wrfpcr (rdfpcr () | 1L << 47);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -52,9 +52,6 @@ Sys_Init (void)
|
||||||
{
|
{
|
||||||
OSVERSIONINFO vinfo;
|
OSVERSIONINFO vinfo;
|
||||||
|
|
||||||
#ifdef USE_INTEL_ASM
|
|
||||||
Sys_SetFPCW ();
|
|
||||||
#endif
|
|
||||||
// make sure the timer is high precision, otherwise NT gets 18ms resolution
|
// make sure the timer is high precision, otherwise NT gets 18ms resolution
|
||||||
timeBeginPeriod (1);
|
timeBeginPeriod (1);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue