diff --git a/common/wins/common_quakedef.h b/common/wins/common_quakedef.h deleted file mode 100644 index 3c14519..0000000 --- a/common/wins/common_quakedef.h +++ /dev/null @@ -1,158 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. -Copyright (C) 1999,2000 contributors of the QuakeForge project -Please see the file "AUTHORS" for a list of contributors - -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 the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// quakedef.h -- primary header for client - -#define QUAKE_GAME // as opposed to utilities - -#include // generated from config.h.in - -#include -#include -#include -#include -#include -#include -#include - -#if defined(_WIN32) && !defined(WINDED) && !defined(GLQUAKE) -void VID_LockBuffer (void); -void VID_UnlockBuffer (void); -#else -#define VID_LockBuffer() -#define VID_UnlockBuffer() -#endif - -#include "common.h" -#include "bspfile.h" -#include "vid.h" -#include "sys.h" -#include "zone.h" -#include "mathlib.h" -#include "wad.h" -#include "draw.h" -#include "cvar.h" -#include "screen.h" -#include "net.h" -#include "protocol.h" -#include "cmd.h" -#include "sbar.h" -#include "sound.h" -#include "render.h" -#include "client.h" - -#ifdef GLQUAKE -#include "gl_model.h" -#else -#include "model.h" -#include "d_iface.h" -#endif - -#include "input.h" -#include "keys.h" -#include "console.h" -#include "view.h" -#ifndef QUAKEWORLD -#include "menu.h" -#elif !defined(SERVERONLY) -#include "menu.h" -#endif -#include "crc.h" -#include "cdaudio.h" - -#ifdef GLQUAKE -#include "glquake.h" -#endif - -#ifndef max -#define max(a,b) ((a) > (b) ? (a) : (b)) -#define min(a,b) ((a) < (b) ? (a) : (b)) -#endif - -/* This fixes warnings when compiling with -pedantic */ -#if defined(__GNUC__) && !defined(inline) -# define inline __inline__ -#endif - -/* Win32 have these underscored... */ -#if !defined(HAVE_SNPRINTF) && defined(HAVE__SNPRINTF) -# define snprintf _snprintf -#endif -#if !defined(HAVE_VSNPRINTF) && defined(HAVE__VSNPRINTF) -# define vsnprintf _vsnprintf -#endif - -//============================================================================= - -// the host system specifies the base of the directory tree, the -// command line parms passed to the program, and the amount of memory -// available for the program to use - -typedef struct -{ - char *basedir; - char *cachedir; // for development over ISDN lines - int argc; - char **argv; - void *membase; - int memsize; -} quakeparms_t; - - -//============================================================================= - -#define MAX_NUM_ARGVS 50 - - -extern qboolean noclip_anglehack; - - -// -// host -// -extern quakeparms_t host_parms; - -extern cvar_t sys_ticrate; -extern cvar_t sys_nostdout; -extern cvar_t developer; - -extern qboolean host_initialized;// true if into command execution -extern double host_frametime; -extern byte *host_basepal; -extern byte *host_colormap; -extern int host_framecount;// incremented every frame, never reset -extern double realtime; // not bounded in any way, changed at - // start of every frame, never reset - -void Host_ServerFrame (void); -void Host_InitCommands (void); -void Host_Init (quakeparms_t *parms); -void Host_Shutdown(void); -void Host_Error (char *error, ...); -void Host_EndGame (char *message, ...); -void Host_Frame (float time); -void Host_Quit_f (void); -void Host_ClientCommands (char *fmt, ...); -void Host_ShutdownServer (qboolean crash); - -extern qboolean msg_suppress_1; -// suppresses resolution and cache size console output -// an fullscreen DIB focus gain/loss diff --git a/common/wins/config.h b/common/wins/config.h deleted file mode 100644 index 7d493da..0000000 --- a/common/wins/config.h +++ /dev/null @@ -1,222 +0,0 @@ -/* common/config.h.in. Generated automatically from configure.in by autoheader. */ - -/* Define to empty if the keyword does not work. */ -#undef const - -/* Define if you don't have vprintf but do have _doprnt. */ -#undef HAVE_DOPRNT - -/* Define if you have a working `mmap' system call. */ -#undef HAVE_MMAP - -/* Define if you have the vprintf function. */ -#undef HAVE_VPRINTF - -/* Define as __inline if that's what the C compiler calls it. */ -#undef inline - -/* Define if you can safely include both and . */ -#undef TIME_WITH_SYS_TIME - -/* Define if your declares struct tm. */ -#undef TM_IN_SYS_TIME - -/* Define if your processor stores words with the most significant - byte first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN - -/* Define if the X Window System is missing or not being used. */ -#undef X_DISPLAY_MISSING - -/* Version string */ -#undef VERSION - -/* Define if you have the XFree86 DGA extension */ -#undef HAS_DGA - -/* If your version of OpenGL uses APIENTRY, define GLAPIENTRY to be APIENTRY*/ -#define GLAPIENTRY APIENTRY - -/* Define this to something sane if you don't have stricmp */ -#undef stricmp - -/* Define this if you are using Mesa */ -#undef XMESA - -/* Define this if you have GL_COLOR_INDEX8_EXT in GL/gl.h */ -#undef HAVE_GL_COLOR_INDEX8_EXT - -/* Define this if C symbols are prefixed with an underscore */ -#undef HAVE_SYM_PREFIX_UNDERSCORE - -/* Define this if you have a Linux-style CD-ROM API */ -#undef USE_LINUX_CD - -/* Define this if you have a BSD-style CD-ROM API */ -#undef USE_BSD_CD - -/* Define if you have the _ftime function. */ -#define HAVE__FTIME - -/* Define if you have the _snprintf function. */ -#define HAVE__SNPRINTF - -/* Define if you have the _vsnprintf function. */ -#define HAVE__VSNPRINTF - -/* Define if you have the connect function. */ -#define HAVE_CONNECT - -/* Define if you have the fcntl function. */ -#undef HAVE_FCNTL - -/* Define if you have the ftime function. */ -#define HAVE_FTIME - -/* Define if you have the gethostbyname function. */ -#define HAVE_GETHOSTBYNAME - -/* Define if you have the gethostname function. */ -#define HAVE_GETHOSTNAME - -/* Define if you have the getpagesize function. */ -#undef HAVE_GETPAGESIZE - -/* Define if you have the gettimeofday function. */ -#undef HAVE_GETTIMEOFDAY - -/* Define if you have the getwd function. */ -#undef HAVE_GETWD - -/* Define if you have the mkdir function. */ -#undef HAVE_MKDIR - -/* Define if you have the putenv function. */ -#undef HAVE_PUTENV - -/* Define if you have the select function. */ -#define HAVE_SELECT - -/* Define if you have the snprintf function. */ -#undef HAVE_SNPRINTF - -/* Define if you have the socket function. */ -#define HAVE_SOCKET - -/* Define if you have the stat function. */ -#undef HAVE_STAT - -/* Define if you have the strerror function. */ -#undef HAVE_STRERROR - -/* Define if you have the strstr function. */ -#undef HAVE_STRSTR - -/* Define if you have the vsnprintf function. */ -#undef HAVE_VSNPRINTF - -/* Define if you have the header file. */ -#undef HAVE_ARPA_INET_H - -/* Define if you have the header file. */ -#define HAVE_DSOUND_H - -/* Define if you have the header file. */ -#undef HAVE_FCNTL_H - -/* Define if you have the header file. */ -#undef HAVE_INITGUID_H - -/* Define if you have the header file. */ -#undef HAVE_LINUX_SOUNDCARD_H - -/* Define if you have the header file. */ -#undef HAVE_MACHINE_SOUNDCARD_H - -/* Define if you have the header file. */ -#undef HAVE_MME_MME_PUBLIC_H - -/* Define if you have the header file. */ -#undef HAVE_MME_MMSYSTEM_H - -/* Define if you have the header file. */ -#define HAVE_MMSYSTEM_H - -/* Define if you have the header file. */ -#undef HAVE_NETDB_H - -/* Define if you have the header file. */ -#undef HAVE_NETINET_IN_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_ASOUNDLIB_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_AUDIOIO_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_FILIO_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_IOCTL_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_MMAN_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_SOCKET_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_SOUNDCARD_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define if you have the header file. */ -#undef HAVE_SYS_TIME_H - -/* Define if you have the header file. */ -#define HAVE_SYS_TIMEB_H - -/* Define if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define if you have the header file. */ -#define HAVE_WINDOWS_H - -/* Define if you have the Xxf86dga library (-lXxf86dga). */ -#undef HAVE_LIBXXF86DGA - -/* Define if you have the Xxf86vm library (-lXxf86vm). */ -#undef HAVE_LIBXXF86VM - -/* Define if you have the db library (-ldb). */ -#undef HAVE_LIBDB - -/* Define if you have the m library (-lm). */ -#undef HAVE_LIBM - -#define VERSION "0.1.0-pre" -#define QF_VERSION "0.1.0-pre" -#define HAVE_FCNTL_H 1 -#define HAVE_SYS_IOCTL_H 1 -#define HAVE_SYS_MMAN_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_SYS_SOCKET_H 1 -#define HAVE_NETINET_IN_H 1 -#define HAVE_NETDB_H 1 -#define HAVE_ARPA_INET_H 1 -#define TIME_WITH_SYS_TIME 1 -#define HAVE_SYM_PREFIX_UNDERSCORE 1 -#define HAVE_GETPAGESIZE 1 -#define HAVE_VPRINTF 1 -#define HAVE_GETWD 1 -#define HAVE_MKDIR 1 -#define HAVE_FCNTL 1 -#define HAVE_STAT 1 -#define HAVE_PUTENV 1 -#define HAVE_STRERROR 1 -#define HAVE_STRSTR 1 -#define HAVE_LIBM 1 -#define X_DISPLAY_MISSING 1 -#define HAVE_GL_COLOR_INDEX8_EXT 1 \ No newline at end of file diff --git a/common/wins/d_parta.s b/common/wins/d_parta.s deleted file mode 100644 index 560925d..0000000 --- a/common/wins/d_parta.s +++ /dev/null @@ -1,477 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -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 the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// d_parta.s -// x86 assembly-language 8-bpp particle-drawing code. -// - -#include "asm_i386.h" -#include "quakeasm.h" -#include "d_ifacea.h" -#include "asm_draw.h" - -#if id386 - -//---------------------------------------------------------------------- -// 8-bpp particle drawing code. -//---------------------------------------------------------------------- - -//FIXME: comments, full optimization - -//---------------------------------------------------------------------- -// 8-bpp particle queueing code. -//---------------------------------------------------------------------- - - .text - -#define P 12+4 - - .align 4 -.globl C(D_DrawParticle) -C(D_DrawParticle): - pushl %ebp // preserve caller's stack frame - pushl %edi // preserve register variables - pushl %ebx - - movl P(%esp),%edi - -// FIXME: better FP overlap in general here - -// transform point -// VectorSubtract (p->org, r_origin, local); - flds C(r_origin) - fsubrs pt_org(%edi) - flds pt_org+4(%edi) - fsubs C(r_origin)+4 - flds pt_org+8(%edi) - fsubs C(r_origin)+8 - fxch %st(2) // local[0] | local[1] | local[2] - -// transformed[2] = DotProduct(local, r_ppn); - flds C(r_ppn) // r_ppn[0] | local[0] | local[1] | local[2] - fmul %st(1),%st(0) // dot0 | local[0] | local[1] | local[2] - flds C(r_ppn)+4 // r_ppn[1] | dot0 | local[0] | local[1] | local[2] - fmul %st(3),%st(0) // dot1 | dot0 | local[0] | local[1] | local[2] - flds C(r_ppn)+8 // r_ppn[2] | dot1 | dot0 | local[0] | - // local[1] | local[2] - fmul %st(5),%st(0) // dot2 | dot1 | dot0 | local[0] | local[1] | local[2] - fxch %st(2) // dot0 | dot1 | dot2 | local[0] | local[1] | local[2] - faddp %st(0),%st(1) // dot0 + dot1 | dot2 | local[0] | local[1] | - // local[2] - faddp %st(0),%st(1) // z | local[0] | local[1] | local[2] - fld %st(0) // z | z | local[0] | local[1] | - // local[2] - fdivrs float_1 // 1/z | z | local[0] | local[1] | local[2] - fxch %st(1) // z | 1/z | local[0] | local[1] | local[2] - -// if (transformed[2] < PARTICLE_Z_CLIP) -// return; - fcomps float_particle_z_clip // 1/z | local[0] | local[1] | local[2] - fxch %st(3) // local[2] | local[0] | local[1] | 1/z - - flds C(r_pup) // r_pup[0] | local[2] | local[0] | local[1] | 1/z - fmul %st(2),%st(0) // dot0 | local[2] | local[0] | local[1] | 1/z - flds C(r_pup)+4 // r_pup[1] | dot0 | local[2] | local[0] | - // local[1] | 1/z - - fnstsw %ax - testb $1,%ah - jnz LPop6AndDone - -// transformed[1] = DotProduct(local, r_pup); - fmul %st(4),%st(0) // dot1 | dot0 | local[2] | local[0] | local[1] | 1/z - flds C(r_pup)+8 // r_pup[2] | dot1 | dot0 | local[2] | - // local[0] | local[1] | 1/z - fmul %st(3),%st(0) // dot2 | dot1 | dot0 | local[2] | local[0] | - // local[1] | 1/z - fxch %st(2) // dot0 | dot1 | dot2 | local[2] | local[0] | - // local[1] | 1/z - faddp %st(0),%st(1) // dot0 + dot1 | dot2 | local[2] | local[0] | - // local[1] | 1/z - faddp %st(0),%st(1) // y | local[2] | local[0] | local[1] | 1/z - fxch %st(3) // local[1] | local[2] | local[0] | y | 1/z - -// transformed[0] = DotProduct(local, r_pright); - fmuls C(r_pright)+4 // dot1 | local[2] | local[0] | y | 1/z - fxch %st(2) // local[0] | local[2] | dot1 | y | 1/z - fmuls C(r_pright) // dot0 | local[2] | dot1 | y | 1/z - fxch %st(1) // local[2] | dot0 | dot1 | y | 1/z - fmuls C(r_pright)+8 // dot2 | dot0 | dot1 | y | 1/z - fxch %st(2) // dot1 | dot0 | dot2 | y | 1/z - faddp %st(0),%st(1) // dot1 + dot0 | dot2 | y | 1/z - - faddp %st(0),%st(1) // x | y | 1/z - fxch %st(1) // y | x | 1/z - -// project the point - fmul %st(2),%st(0) // y/z | x | 1/z - fxch %st(1) // x | y/z | 1/z - fmul %st(2),%st(0) // x/z | y/z | 1/z - fxch %st(1) // y/z | x/z | 1/z - fsubrs C(ycenter) // v | x/z | 1/z - fxch %st(1) // x/z | v | 1/z - fadds C(xcenter) // u | v | 1/z -// FIXME: preadjust xcenter and ycenter - fxch %st(1) // v | u | 1/z - fadds float_point5 // v | u | 1/z - fxch %st(1) // u | v | 1/z - fadds float_point5 // u | v | 1/z - fxch %st(2) // 1/z | v | u - fmuls DP_32768 // 1/z * 0x8000 | v | u - fxch %st(2) // u | v | 1/z * 0x8000 - -// FIXME: use Terje's fp->int trick here? -// FIXME: check we're getting proper rounding here - fistpl DP_u // v | 1/z * 0x8000 - fistpl DP_v // 1/z * 0x8000 - - movl DP_u,%eax - movl DP_v,%edx - -// if ((v > d_vrectbottom_particle) || -// (u > d_vrectright_particle) || -// (v < d_vrecty) || -// (u < d_vrectx)) -// { -// continue; -// } - - movl C(d_vrectbottom_particle),%ebx - movl C(d_vrectright_particle),%ecx - cmpl %ebx,%edx - jg LPop1AndDone - cmpl %ecx,%eax - jg LPop1AndDone - movl C(d_vrecty),%ebx - movl C(d_vrectx),%ecx - cmpl %ebx,%edx - jl LPop1AndDone - - cmpl %ecx,%eax - jl LPop1AndDone - - flds pt_color(%edi) // color | 1/z * 0x8000 -// FIXME: use Terje's fast fp->int trick? - fistpl DP_Color // 1/z * 0x8000 - - movl C(d_viewbuffer),%ebx - - addl %eax,%ebx - movl C(d_scantable)(,%edx,4),%edi // point to the pixel - - imull C(d_zrowbytes),%edx // point to the z pixel - - leal (%edx,%eax,2),%edx - movl C(d_pzbuffer),%eax - - fistpl izi - - addl %ebx,%edi - addl %eax,%edx - -// pix = izi >> d_pix_shift; - - movl izi,%eax - movl C(d_pix_shift),%ecx - shrl %cl,%eax - movl izi,%ebp - -// if (pix < d_pix_min) -// pix = d_pix_min; -// else if (pix > d_pix_max) -// pix = d_pix_max; - - movl C(d_pix_min),%ebx - movl C(d_pix_max),%ecx - cmpl %ebx,%eax - jnl LTestPixMax - movl %ebx,%eax - jmp LTestDone - -LTestPixMax: - cmpl %ecx,%eax - jng LTestDone - movl %ecx,%eax -LTestDone: - - movb DP_Color,%ch - - movl C(d_y_aspect_shift),%ebx - testl %ebx,%ebx - jnz LDefault - - cmpl $4,%eax - ja LDefault - - jmp DP_EntryTable-4(,%eax,4) - -// 1x1 -.globl DP_1x1 -DP_1x1: - cmpw %bp,(%edx) // just one pixel to do - jg LDone - movw %bp,(%edx) - movb %ch,(%edi) - jmp LDone - -// 2x2 -.globl DP_2x2 -DP_2x2: - pushl %esi - movl C(screenwidth),%ebx - movl C(d_zrowbytes),%esi - - cmpw %bp,(%edx) - jg L2x2_1 - movw %bp,(%edx) - movb %ch,(%edi) -L2x2_1: - cmpw %bp,2(%edx) - jg L2x2_2 - movw %bp,2(%edx) - movb %ch,1(%edi) -L2x2_2: - cmpw %bp,(%edx,%esi,1) - jg L2x2_3 - movw %bp,(%edx,%esi,1) - movb %ch,(%edi,%ebx,1) -L2x2_3: - cmpw %bp,2(%edx,%esi,1) - jg L2x2_4 - movw %bp,2(%edx,%esi,1) - movb %ch,1(%edi,%ebx,1) -L2x2_4: - - popl %esi - jmp LDone - -// 3x3 -.globl DP_3x3 -DP_3x3: - pushl %esi - movl C(screenwidth),%ebx - movl C(d_zrowbytes),%esi - - cmpw %bp,(%edx) - jg L3x3_1 - movw %bp,(%edx) - movb %ch,(%edi) -L3x3_1: - cmpw %bp,2(%edx) - jg L3x3_2 - movw %bp,2(%edx) - movb %ch,1(%edi) -L3x3_2: - cmpw %bp,4(%edx) - jg L3x3_3 - movw %bp,4(%edx) - movb %ch,2(%edi) -L3x3_3: - - cmpw %bp,(%edx,%esi,1) - jg L3x3_4 - movw %bp,(%edx,%esi,1) - movb %ch,(%edi,%ebx,1) -L3x3_4: - cmpw %bp,2(%edx,%esi,1) - jg L3x3_5 - movw %bp,2(%edx,%esi,1) - movb %ch,1(%edi,%ebx,1) -L3x3_5: - cmpw %bp,4(%edx,%esi,1) - jg L3x3_6 - movw %bp,4(%edx,%esi,1) - movb %ch,2(%edi,%ebx,1) -L3x3_6: - - cmpw %bp,(%edx,%esi,2) - jg L3x3_7 - movw %bp,(%edx,%esi,2) - movb %ch,(%edi,%ebx,2) -L3x3_7: - cmpw %bp,2(%edx,%esi,2) - jg L3x3_8 - movw %bp,2(%edx,%esi,2) - movb %ch,1(%edi,%ebx,2) -L3x3_8: - cmpw %bp,4(%edx,%esi,2) - jg L3x3_9 - movw %bp,4(%edx,%esi,2) - movb %ch,2(%edi,%ebx,2) -L3x3_9: - - popl %esi - jmp LDone - - -// 4x4 -.globl DP_4x4 -DP_4x4: - pushl %esi - movl C(screenwidth),%ebx - movl C(d_zrowbytes),%esi - - cmpw %bp,(%edx) - jg L4x4_1 - movw %bp,(%edx) - movb %ch,(%edi) -L4x4_1: - cmpw %bp,2(%edx) - jg L4x4_2 - movw %bp,2(%edx) - movb %ch,1(%edi) -L4x4_2: - cmpw %bp,4(%edx) - jg L4x4_3 - movw %bp,4(%edx) - movb %ch,2(%edi) -L4x4_3: - cmpw %bp,6(%edx) - jg L4x4_4 - movw %bp,6(%edx) - movb %ch,3(%edi) -L4x4_4: - - cmpw %bp,(%edx,%esi,1) - jg L4x4_5 - movw %bp,(%edx,%esi,1) - movb %ch,(%edi,%ebx,1) -L4x4_5: - cmpw %bp,2(%edx,%esi,1) - jg L4x4_6 - movw %bp,2(%edx,%esi,1) - movb %ch,1(%edi,%ebx,1) -L4x4_6: - cmpw %bp,4(%edx,%esi,1) - jg L4x4_7 - movw %bp,4(%edx,%esi,1) - movb %ch,2(%edi,%ebx,1) -L4x4_7: - cmpw %bp,6(%edx,%esi,1) - jg L4x4_8 - movw %bp,6(%edx,%esi,1) - movb %ch,3(%edi,%ebx,1) -L4x4_8: - - leal (%edx,%esi,2),%edx - leal (%edi,%ebx,2),%edi - - cmpw %bp,(%edx) - jg L4x4_9 - movw %bp,(%edx) - movb %ch,(%edi) -L4x4_9: - cmpw %bp,2(%edx) - jg L4x4_10 - movw %bp,2(%edx) - movb %ch,1(%edi) -L4x4_10: - cmpw %bp,4(%edx) - jg L4x4_11 - movw %bp,4(%edx) - movb %ch,2(%edi) -L4x4_11: - cmpw %bp,6(%edx) - jg L4x4_12 - movw %bp,6(%edx) - movb %ch,3(%edi) -L4x4_12: - - cmpw %bp,(%edx,%esi,1) - jg L4x4_13 - movw %bp,(%edx,%esi,1) - movb %ch,(%edi,%ebx,1) -L4x4_13: - cmpw %bp,2(%edx,%esi,1) - jg L4x4_14 - movw %bp,2(%edx,%esi,1) - movb %ch,1(%edi,%ebx,1) -L4x4_14: - cmpw %bp,4(%edx,%esi,1) - jg L4x4_15 - movw %bp,4(%edx,%esi,1) - movb %ch,2(%edi,%ebx,1) -L4x4_15: - cmpw %bp,6(%edx,%esi,1) - jg L4x4_16 - movw %bp,6(%edx,%esi,1) - movb %ch,3(%edi,%ebx,1) -L4x4_16: - - popl %esi - jmp LDone - -// default case, handling any size particle -LDefault: - -// count = pix << d_y_aspect_shift; - - movl %eax,%ebx - movl %eax,DP_Pix - movb C(d_y_aspect_shift),%cl - shll %cl,%ebx - -// for ( ; count ; count--, pz += d_zwidth, pdest += screenwidth) -// { -// for (i=0 ; i> 16) + -// (r_sstepx >> 16); - - movl C(r_sstepx),%eax - movl C(r_tstepx),%edx - shll $16,%eax - shll $16,%edx - movl %eax,C(a_sstepxfrac) - movl %edx,C(a_tstepxfrac) - - movl C(r_sstepx),%ecx - movl C(r_tstepx),%eax - sarl $16,%ecx - sarl $16,%eax - imull skinwidth(%esp) - addl %ecx,%eax - movl %eax,C(a_ststepxwhole) - - ret - - -//---------------------------------------------------------------------- -// recursive subdivision affine triangle drawing code -// -// not C-callable because of stdcall return -//---------------------------------------------------------------------- - -#define lp1 4+16 -#define lp2 8+16 -#define lp3 12+16 - -.globl C(D_PolysetRecursiveTriangle) -C(D_PolysetRecursiveTriangle): - pushl %ebp // preserve caller stack frame pointer - pushl %esi // preserve register variables - pushl %edi - pushl %ebx - -// int *temp; -// int d; -// int new[6]; -// int i; -// int z; -// short *zbuf; - movl lp2(%esp),%esi - movl lp1(%esp),%ebx - movl lp3(%esp),%edi - -// d = lp2[0] - lp1[0]; -// if (d < -1 || d > 1) -// goto split; - movl 0(%esi),%eax - - movl 0(%ebx),%edx - movl 4(%esi),%ebp - - subl %edx,%eax - movl 4(%ebx),%ecx - - subl %ecx,%ebp - incl %eax - - cmpl $2,%eax - ja LSplit - -// d = lp2[1] - lp1[1]; -// if (d < -1 || d > 1) -// goto split; - movl 0(%edi),%eax - incl %ebp - - cmpl $2,%ebp - ja LSplit - -// d = lp3[0] - lp2[0]; -// if (d < -1 || d > 1) -// goto split2; - movl 0(%esi),%edx - movl 4(%edi),%ebp - - subl %edx,%eax - movl 4(%esi),%ecx - - subl %ecx,%ebp - incl %eax - - cmpl $2,%eax - ja LSplit2 - -// d = lp3[1] - lp2[1]; -// if (d < -1 || d > 1) -// goto split2; - movl 0(%ebx),%eax - incl %ebp - - cmpl $2,%ebp - ja LSplit2 - -// d = lp1[0] - lp3[0]; -// if (d < -1 || d > 1) -// goto split3; - movl 0(%edi),%edx - movl 4(%ebx),%ebp - - subl %edx,%eax - movl 4(%edi),%ecx - - subl %ecx,%ebp - incl %eax - - incl %ebp - movl %ebx,%edx - - cmpl $2,%eax - ja LSplit3 - -// d = lp1[1] - lp3[1]; -// if (d < -1 || d > 1) -// { -//split3: -// temp = lp1; -// lp3 = lp2; -// lp1 = lp3; -// lp2 = temp; -// goto split; -// } -// -// return; // entire tri is filled -// - cmpl $2,%ebp - jna LDone - -LSplit3: - movl %edi,%ebx - movl %esi,%edi - movl %edx,%esi - jmp LSplit - -//split2: -LSplit2: - -// temp = lp1; -// lp1 = lp2; -// lp2 = lp3; -// lp3 = temp; - movl %ebx,%eax - movl %esi,%ebx - movl %edi,%esi - movl %eax,%edi - -//split: -LSplit: - - subl $24,%esp // allocate space for a new vertex - -//// split this edge -// new[0] = (lp1[0] + lp2[0]) >> 1; -// new[1] = (lp1[1] + lp2[1]) >> 1; -// new[2] = (lp1[2] + lp2[2]) >> 1; -// new[3] = (lp1[3] + lp2[3]) >> 1; -// new[5] = (lp1[5] + lp2[5]) >> 1; - movl 8(%ebx),%eax - - movl 8(%esi),%edx - movl 12(%ebx),%ecx - - addl %edx,%eax - movl 12(%esi),%edx - - sarl $1,%eax - addl %edx,%ecx - - movl %eax,8(%esp) - movl 20(%ebx),%eax - - sarl $1,%ecx - movl 20(%esi),%edx - - movl %ecx,12(%esp) - addl %edx,%eax - - movl 0(%ebx),%ecx - movl 0(%esi),%edx - - sarl $1,%eax - addl %ecx,%edx - - movl %eax,20(%esp) - movl 4(%ebx),%eax - - sarl $1,%edx - movl 4(%esi),%ebp - - movl %edx,0(%esp) - addl %eax,%ebp - - sarl $1,%ebp - movl %ebp,4(%esp) - -//// draw the point if splitting a leading edge -// if (lp2[1] > lp1[1]) -// goto nodraw; - cmpl %eax,4(%esi) - jg LNoDraw - -// if ((lp2[1] == lp1[1]) && (lp2[0] < lp1[0])) -// goto nodraw; - movl 0(%esi),%edx - jnz LDraw - - cmpl %ecx,%edx - jl LNoDraw - -LDraw: - -// z = new[5] >> 16; - movl 20(%esp),%edx - movl 4(%esp),%ecx - - sarl $16,%edx - movl 0(%esp),%ebp - -// zbuf = zspantable[new[1]] + new[0]; - movl C(zspantable)(,%ecx,4),%eax - -// if (z >= *zbuf) -// { - cmpw (%eax,%ebp,2),%dx - jnge LNoDraw - -// int pix; -// -// *zbuf = z; - movw %dx,(%eax,%ebp,2) - -// pix = d_pcolormap[skintable[new[3]>>16][new[2]>>16]]; - movl 12(%esp),%eax - - sarl $16,%eax - movl 8(%esp),%edx - - sarl $16,%edx - subl %ecx,%ecx - - movl C(skintable)(,%eax,4),%eax - movl 4(%esp),%ebp - - movb (%eax,%edx,),%cl - movl C(d_pcolormap),%edx - - movb (%edx,%ecx,),%dl - movl 0(%esp),%ecx - -// d_viewbuffer[d_scantable[new[1]] + new[0]] = pix; - movl C(d_scantable)(,%ebp,4),%eax - addl %eax,%ecx - movl C(d_viewbuffer),%eax - movb %dl,(%eax,%ecx,1) - -// } -// -//nodraw: -LNoDraw: - -//// recursively continue -// D_PolysetRecursiveTriangle (lp3, lp1, new); - pushl %esp - pushl %ebx - pushl %edi - call C(D_PolysetRecursiveTriangle) - -// D_PolysetRecursiveTriangle (lp3, new, lp2); - movl %esp,%ebx - pushl %esi - pushl %ebx - pushl %edi - call C(D_PolysetRecursiveTriangle) - addl $24,%esp - -LDone: - popl %ebx // restore register variables - popl %edi - popl %esi - popl %ebp // restore caller stack frame pointer - ret $12 - - -//---------------------------------------------------------------------- -// 8-bpp horizontal span drawing code for affine polygons, with smooth -// shading and no transparency -//---------------------------------------------------------------------- - -#define pspans 4+8 - -.globl C(D_PolysetAff8Start) -C(D_PolysetAff8Start): - -.globl C(D_PolysetDrawSpans8) -C(D_PolysetDrawSpans8): - pushl %esi // preserve register variables - pushl %ebx - - movl pspans(%esp),%esi // point to the first span descriptor - movl C(r_zistepx),%ecx - - pushl %ebp // preserve caller's stack frame - pushl %edi - - rorl $16,%ecx // put high 16 bits of 1/z step in low word - movl spanpackage_t_count(%esi),%edx - - movl %ecx,lzistepx - -LSpanLoop: - -// lcount = d_aspancount - pspanpackage->count; -// -// errorterm += erroradjustup; -// if (errorterm >= 0) -// { -// d_aspancount += d_countextrastep; -// errorterm -= erroradjustdown; -// } -// else -// { -// d_aspancount += ubasestep; -// } - movl C(d_aspancount),%eax - subl %edx,%eax - - movl C(erroradjustup),%edx - movl C(errorterm),%ebx - addl %edx,%ebx - js LNoTurnover - - movl C(erroradjustdown),%edx - movl C(d_countextrastep),%edi - subl %edx,%ebx - movl C(d_aspancount),%ebp - movl %ebx,C(errorterm) - addl %edi,%ebp - movl %ebp,C(d_aspancount) - jmp LRightEdgeStepped - -LNoTurnover: - movl C(d_aspancount),%edi - movl C(ubasestep),%edx - movl %ebx,C(errorterm) - addl %edx,%edi - movl %edi,C(d_aspancount) - -LRightEdgeStepped: - cmpl $1,%eax - - jl LNextSpan - jz LExactlyOneLong - -// -// set up advancetable -// - movl C(a_ststepxwhole),%ecx - movl C(r_affinetridesc)+atd_skinwidth,%edx - - movl %ecx,advancetable+4 // advance base in t - addl %edx,%ecx - - movl %ecx,advancetable // advance extra in t - movl C(a_tstepxfrac),%ecx - - movw C(r_lstepx),%cx - movl %eax,%edx // count - - movl %ecx,tstep - addl $7,%edx - - shrl $3,%edx // count of full and partial loops - movl spanpackage_t_sfrac(%esi),%ebx - - movw %dx,%bx - movl spanpackage_t_pz(%esi),%ecx - - negl %eax - - movl spanpackage_t_pdest(%esi),%edi - andl $7,%eax // 0->0, 1->7, 2->6, ... , 7->1 - - subl %eax,%edi // compensate for hardwired offsets - subl %eax,%ecx - - subl %eax,%ecx - movl spanpackage_t_tfrac(%esi),%edx - - movw spanpackage_t_light(%esi),%dx - movl spanpackage_t_zi(%esi),%ebp - - rorl $16,%ebp // put high 16 bits of 1/z in low word - pushl %esi - - movl spanpackage_t_ptex(%esi),%esi - jmp aff8entryvec_table(,%eax,4) - -// %bx = count of full and partial loops -// %ebx high word = sfrac -// %ecx = pz -// %dx = light -// %edx high word = tfrac -// %esi = ptex -// %edi = pdest -// %ebp = 1/z -// tstep low word = C(r_lstepx) -// tstep high word = C(a_tstepxfrac) -// C(a_sstepxfrac) low word = 0 -// C(a_sstepxfrac) high word = C(a_sstepxfrac) - -LDrawLoop: - -// FIXME: do we need to clamp light? We may need at least a buffer bit to -// keep it from poking into tfrac and causing problems - -LDraw8: - cmpw (%ecx),%bp - jl Lp1 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,(%ecx) - movb 0x12345678(%eax),%al -LPatch8: - movb %al,(%edi) -Lp1: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw7: - cmpw 2(%ecx),%bp - jl Lp2 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,2(%ecx) - movb 0x12345678(%eax),%al -LPatch7: - movb %al,1(%edi) -Lp2: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw6: - cmpw 4(%ecx),%bp - jl Lp3 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,4(%ecx) - movb 0x12345678(%eax),%al -LPatch6: - movb %al,2(%edi) -Lp3: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw5: - cmpw 6(%ecx),%bp - jl Lp4 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,6(%ecx) - movb 0x12345678(%eax),%al -LPatch5: - movb %al,3(%edi) -Lp4: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw4: - cmpw 8(%ecx),%bp - jl Lp5 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,8(%ecx) - movb 0x12345678(%eax),%al -LPatch4: - movb %al,4(%edi) -Lp5: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw3: - cmpw 10(%ecx),%bp - jl Lp6 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,10(%ecx) - movb 0x12345678(%eax),%al -LPatch3: - movb %al,5(%edi) -Lp6: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw2: - cmpw 12(%ecx),%bp - jl Lp7 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,12(%ecx) - movb 0x12345678(%eax),%al -LPatch2: - movb %al,6(%edi) -Lp7: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - -LDraw1: - cmpw 14(%ecx),%bp - jl Lp8 - xorl %eax,%eax - movb %dh,%ah - movb (%esi),%al - movw %bp,14(%ecx) - movb 0x12345678(%eax),%al -LPatch1: - movb %al,7(%edi) -Lp8: - addl tstep,%edx - sbbl %eax,%eax - addl lzistepx,%ebp - adcl $0,%ebp - addl C(a_sstepxfrac),%ebx - adcl advancetable+4(,%eax,4),%esi - - addl $8,%edi - addl $16,%ecx - - decw %bx - jnz LDrawLoop - - popl %esi // restore spans pointer -LNextSpan: - addl $(spanpackage_t_size),%esi // point to next span -LNextSpanESISet: - movl spanpackage_t_count(%esi),%edx - cmpl $-999999,%edx // any more spans? - jnz LSpanLoop // yes - - popl %edi - popl %ebp // restore the caller's stack frame - popl %ebx // restore register variables - popl %esi - ret - - -// draw a one-long span - -LExactlyOneLong: - - movl spanpackage_t_pz(%esi),%ecx - movl spanpackage_t_zi(%esi),%ebp - - rorl $16,%ebp // put high 16 bits of 1/z in low word - movl spanpackage_t_ptex(%esi),%ebx - - cmpw (%ecx),%bp - jl LNextSpan - xorl %eax,%eax - movl spanpackage_t_pdest(%esi),%edi - movb spanpackage_t_light+1(%esi),%ah - addl $(spanpackage_t_size),%esi // point to next span - movb (%ebx),%al - movw %bp,(%ecx) - movb 0x12345678(%eax),%al -LPatch9: - movb %al,(%edi) - - jmp LNextSpanESISet - -.globl C(D_PolysetAff8End) -C(D_PolysetAff8End): - - -#define pcolormap 4 - -.globl C(D_Aff8Patch) -C(D_Aff8Patch): - movl pcolormap(%esp),%eax - movl %eax,LPatch1-4 - movl %eax,LPatch2-4 - movl %eax,LPatch3-4 - movl %eax,LPatch4-4 - movl %eax,LPatch5-4 - movl %eax,LPatch6-4 - movl %eax,LPatch7-4 - movl %eax,LPatch8-4 - movl %eax,LPatch9-4 - - ret - - -//---------------------------------------------------------------------- -// Alias model polygon dispatching code, combined with subdivided affine -// triangle drawing code -//---------------------------------------------------------------------- - -.globl C(D_PolysetDraw) -C(D_PolysetDraw): - -// spanpackage_t spans[DPS_MAXSPANS + 1 + -// ((CACHE_SIZE - 1) / sizeof(spanpackage_t)) + 1]; -// // one extra because of cache line pretouching -// -// a_spans = (spanpackage_t *) -// (((long)&spans[0] + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1)); - subl $(SPAN_SIZE),%esp - movl %esp,%eax - addl $(CACHE_SIZE - 1),%eax - andl $(~(CACHE_SIZE - 1)),%eax - movl %eax,C(a_spans) - -// if (r_affinetridesc.drawtype) -// D_DrawSubdiv (); -// else -// D_DrawNonSubdiv (); - movl C(r_affinetridesc)+atd_drawtype,%eax - testl %eax,%eax - jz C(D_DrawNonSubdiv) - - pushl %ebp // preserve caller stack frame pointer - -// lnumtriangles = r_affinetridesc.numtriangles; - movl C(r_affinetridesc)+atd_numtriangles,%ebp - - pushl %esi // preserve register variables - shll $4,%ebp - - pushl %ebx -// ptri = r_affinetridesc.ptriangles; - movl C(r_affinetridesc)+atd_ptriangles,%ebx - - pushl %edi - -// mtriangle_t *ptri; -// finalvert_t *pfv, *index0, *index1, *index2; -// int i; -// int lnumtriangles; -// int s0, s1, s2; - -// pfv = r_affinetridesc.pfinalverts; - movl C(r_affinetridesc)+atd_pfinalverts,%edi - -// for (i=0 ; iv[1]-index1->v[1]) * -// (index0->v[0]-index2->v[0]) - -// (index0->v[0]-index1->v[0])*(index0->v[1]-index2->v[1])) >= 0) -// { -// continue; -// } -// -// d_pcolormap = &((byte *)acolormap)[index0->v[4] & 0xFF00]; - fildl fv_v+4(%ecx) // i0v1 - fildl fv_v+4(%esi) // i1v1 | i0v1 - fildl fv_v+0(%ecx) // i0v0 | i1v1 | i0v1 - fildl fv_v+0(%edx) // i2v0 | i0v0 | i1v1 | i0v1 - fxch %st(2) // i1v1 | i0v0 | i2v0 | i0v1 - fsubr %st(3),%st(0) // i0v1-i1v1 | i0v0 | i2v0 | i0v1 - fildl fv_v+0(%esi) // i1v0 | i0v1-i1v1 | i0v0 | i2v0 | i0v1 - fxch %st(2) // i0v0 | i0v1-i1v1 | i1v0 | i2v0 | i0v1 - fsub %st(0),%st(3) // i0v0 | i0v1-i1v1 | i1v0 | i0v0-i2v0 | i0v1 - fildl fv_v+4(%edx) // i2v1 | i0v0 | i0v1-i1v1 | i1v0 | i0v0-i2v0| i0v1 - fxch %st(1) // i0v0 | i2v1 | i0v1-i1v1 | i1v0 | i0v0-i2v0| i0v1 - fsubp %st(0),%st(3) // i2v1 | i0v1-i1v1 | i0v0-i1v0 | i0v0-i2v0 | i0v1 - fxch %st(1) // i0v1-i1v1 | i2v1 | i0v0-i1v0 | i0v0-i2v0 | i0v1 - fmulp %st(0),%st(3) // i2v1 | i0v0-i1v0 | i0v1-i1v1*i0v0-i2v0 | i0v1 - fsubrp %st(0),%st(3) // i0v0-i1v0 | i0v1-i1v1*i0v0-i2v0 | i0v1-i2v1 - movl fv_v+16(%ecx),%eax - andl $0xFF00,%eax - fmulp %st(0),%st(2) // i0v1-i1v1*i0v0-i2v0 | i0v0-i1v0*i0v1-i2v1 - addl C(acolormap),%eax - fsubp %st(0),%st(1) // (i0v1-i1v1)*(i0v0-i2v0)-(i0v0-i1v0)*(i0v1-i2v1) - movl %eax,C(d_pcolormap) - fstps Ltemp - movl Ltemp,%eax - subl $0x80000001,%eax - jc Lskip - -// if (ptri[i].facesfront) -// { -// D_PolysetRecursiveTriangle(index0->v, index1->v, index2->v); - movl mtri_facesfront-16(%ebx,%ebp,),%eax - testl %eax,%eax - jz Lfacesback - - pushl %edx - pushl %esi - pushl %ecx - call C(D_PolysetRecursiveTriangle) - - subl $16,%ebp - jnz Llooptop - jmp Ldone2 - -// } -// else -// { -Lfacesback: - -// s0 = index0->v[2]; -// s1 = index1->v[2]; -// s2 = index2->v[2]; - movl fv_v+8(%ecx),%eax - pushl %eax - movl fv_v+8(%esi),%eax - pushl %eax - movl fv_v+8(%edx),%eax - pushl %eax - pushl %ecx - pushl %edx - -// if (index0->flags & ALIAS_ONSEAM) -// index0->v[2] += r_affinetridesc.seamfixupX16; - movl C(r_affinetridesc)+atd_seamfixupX16,%eax - testl $(ALIAS_ONSEAM),fv_flags(%ecx) - jz Lp11 - addl %eax,fv_v+8(%ecx) -Lp11: - -// if (index1->flags & ALIAS_ONSEAM) -// index1->v[2] += r_affinetridesc.seamfixupX16; - testl $(ALIAS_ONSEAM),fv_flags(%esi) - jz Lp12 - addl %eax,fv_v+8(%esi) -Lp12: - -// if (index2->flags & ALIAS_ONSEAM) -// index2->v[2] += r_affinetridesc.seamfixupX16; - testl $(ALIAS_ONSEAM),fv_flags(%edx) - jz Lp13 - addl %eax,fv_v+8(%edx) -Lp13: - -// D_PolysetRecursiveTriangle(index0->v, index1->v, index2->v); - pushl %edx - pushl %esi - pushl %ecx - call C(D_PolysetRecursiveTriangle) - -// index0->v[2] = s0; -// index1->v[2] = s1; -// index2->v[2] = s2; - popl %edx - popl %ecx - popl %eax - movl %eax,fv_v+8(%edx) - popl %eax - movl %eax,fv_v+8(%esi) - popl %eax - movl %eax,fv_v+8(%ecx) - -// } -// } -Lskip: - subl $16,%ebp - jnz Llooptop - -Ldone2: - popl %edi // restore the caller's stack frame - popl %ebx - popl %esi // restore register variables - popl %ebp - - addl $(SPAN_SIZE),%esp - - ret - - -//---------------------------------------------------------------------- -// Alias model triangle left-edge scanning code -//---------------------------------------------------------------------- - -#define height 4+16 - -.globl C(D_PolysetScanLeftEdge) -C(D_PolysetScanLeftEdge): - pushl %ebp // preserve caller stack frame pointer - pushl %esi // preserve register variables - pushl %edi - pushl %ebx - - movl height(%esp),%eax - movl C(d_sfrac),%ecx - andl $0xFFFF,%eax - movl C(d_ptex),%ebx - orl %eax,%ecx - movl C(d_pedgespanpackage),%esi - movl C(d_tfrac),%edx - movl C(d_light),%edi - movl C(d_zi),%ebp - -// %eax: scratch -// %ebx: d_ptex -// %ecx: d_sfrac in high word, count in low word -// %edx: d_tfrac -// %esi: d_pedgespanpackage, errorterm, scratch alternately -// %edi: d_light -// %ebp: d_zi - -// do -// { - -LScanLoop: - -// d_pedgespanpackage->ptex = ptex; -// d_pedgespanpackage->pdest = d_pdest; -// d_pedgespanpackage->pz = d_pz; -// d_pedgespanpackage->count = d_aspancount; -// d_pedgespanpackage->light = d_light; -// d_pedgespanpackage->zi = d_zi; -// d_pedgespanpackage->sfrac = d_sfrac << 16; -// d_pedgespanpackage->tfrac = d_tfrac << 16; - movl %ebx,spanpackage_t_ptex(%esi) - movl C(d_pdest),%eax - movl %eax,spanpackage_t_pdest(%esi) - movl C(d_pz),%eax - movl %eax,spanpackage_t_pz(%esi) - movl C(d_aspancount),%eax - movl %eax,spanpackage_t_count(%esi) - movl %edi,spanpackage_t_light(%esi) - movl %ebp,spanpackage_t_zi(%esi) - movl %ecx,spanpackage_t_sfrac(%esi) - movl %edx,spanpackage_t_tfrac(%esi) - -// pretouch the next cache line - movb spanpackage_t_size(%esi),%al - -// d_pedgespanpackage++; - addl $(spanpackage_t_size),%esi - movl C(erroradjustup),%eax - movl %esi,C(d_pedgespanpackage) - -// errorterm += erroradjustup; - movl C(errorterm),%esi - addl %eax,%esi - movl C(d_pdest),%eax - -// if (errorterm >= 0) -// { - js LNoLeftEdgeTurnover - -// errorterm -= erroradjustdown; -// d_pdest += d_pdestextrastep; - subl C(erroradjustdown),%esi - addl C(d_pdestextrastep),%eax - movl %esi,C(errorterm) - movl %eax,C(d_pdest) - -// d_pz += d_pzextrastep; -// d_aspancount += d_countextrastep; -// d_ptex += d_ptexextrastep; -// d_sfrac += d_sfracextrastep; -// d_ptex += d_sfrac >> 16; -// d_sfrac &= 0xFFFF; -// d_tfrac += d_tfracextrastep; - movl C(d_pz),%eax - movl C(d_aspancount),%esi - addl C(d_pzextrastep),%eax - addl C(d_sfracextrastep),%ecx - adcl C(d_ptexextrastep),%ebx - addl C(d_countextrastep),%esi - movl %eax,C(d_pz) - movl C(d_tfracextrastep),%eax - movl %esi,C(d_aspancount) - addl %eax,%edx - -// if (d_tfrac & 0x10000) -// { - jnc LSkip1 - -// d_ptex += r_affinetridesc.skinwidth; -// d_tfrac &= 0xFFFF; - addl C(r_affinetridesc)+atd_skinwidth,%ebx - -// } - -LSkip1: - -// d_light += d_lightextrastep; -// d_zi += d_ziextrastep; - addl C(d_lightextrastep),%edi - addl C(d_ziextrastep),%ebp - -// } - movl C(d_pedgespanpackage),%esi - decl %ecx - testl $0xFFFF,%ecx - jnz LScanLoop - - popl %ebx - popl %edi - popl %esi - popl %ebp - ret - -// else -// { - -LNoLeftEdgeTurnover: - movl %esi,C(errorterm) - -// d_pdest += d_pdestbasestep; - addl C(d_pdestbasestep),%eax - movl %eax,C(d_pdest) - -// d_pz += d_pzbasestep; -// d_aspancount += ubasestep; -// d_ptex += d_ptexbasestep; -// d_sfrac += d_sfracbasestep; -// d_ptex += d_sfrac >> 16; -// d_sfrac &= 0xFFFF; - movl C(d_pz),%eax - movl C(d_aspancount),%esi - addl C(d_pzbasestep),%eax - addl C(d_sfracbasestep),%ecx - adcl C(d_ptexbasestep),%ebx - addl C(ubasestep),%esi - movl %eax,C(d_pz) - movl %esi,C(d_aspancount) - -// d_tfrac += d_tfracbasestep; - movl C(d_tfracbasestep),%esi - addl %esi,%edx - -// if (d_tfrac & 0x10000) -// { - jnc LSkip2 - -// d_ptex += r_affinetridesc.skinwidth; -// d_tfrac &= 0xFFFF; - addl C(r_affinetridesc)+atd_skinwidth,%ebx - -// } - -LSkip2: - -// d_light += d_lightbasestep; -// d_zi += d_zibasestep; - addl C(d_lightbasestep),%edi - addl C(d_zibasestep),%ebp - -// } -// } while (--height); - movl C(d_pedgespanpackage),%esi - decl %ecx - testl $0xFFFF,%ecx - jnz LScanLoop - - popl %ebx - popl %edi - popl %esi - popl %ebp - ret - - -//---------------------------------------------------------------------- -// Alias model vertex drawing code -//---------------------------------------------------------------------- - -#define fv 4+8 -#define numverts 8+8 - -.globl C(D_PolysetDrawFinalVerts) -C(D_PolysetDrawFinalVerts): - pushl %ebp // preserve caller stack frame pointer - pushl %ebx - -// int i, z; -// short *zbuf; - - movl numverts(%esp),%ecx - movl fv(%esp),%ebx - - pushl %esi // preserve register variables - pushl %edi - -LFVLoop: - -// for (i=0 ; iv[0] < r_refdef.vrectright) && -// (fv->v[1] < r_refdef.vrectbottom)) -// { - movl fv_v+0(%ebx),%eax - movl C(r_refdef)+rd_vrectright,%edx - cmpl %edx,%eax - jge LNextVert - movl fv_v+4(%ebx),%esi - movl C(r_refdef)+rd_vrectbottom,%edx - cmpl %edx,%esi - jge LNextVert - -// zbuf = zspantable[fv->v[1]] + fv->v[0]; - movl C(zspantable)(,%esi,4),%edi - -// z = fv->v[5]>>16; - movl fv_v+20(%ebx),%edx - shrl $16,%edx - -// if (z >= *zbuf) -// { -// int pix; - cmpw (%edi,%eax,2),%dx - jl LNextVert - -// *zbuf = z; - movw %dx,(%edi,%eax,2) - -// pix = skintable[fv->v[3]>>16][fv->v[2]>>16]; - movl fv_v+12(%ebx),%edi - shrl $16,%edi - movl C(skintable)(,%edi,4),%edi - movl fv_v+8(%ebx),%edx - shrl $16,%edx - movb (%edi,%edx),%dl - -// pix = ((byte *)acolormap)[pix + (fv->v[4] & 0xFF00)]; - movl fv_v+16(%ebx),%edi - andl $0xFF00,%edi - andl $0x00FF,%edx - addl %edx,%edi - movl C(acolormap),%edx - movb (%edx,%edi,1),%dl - -// d_viewbuffer[d_scantable[fv->v[1]] + fv->v[0]] = pix; - movl C(d_scantable)(,%esi,4),%edi - movl C(d_viewbuffer),%esi - addl %eax,%edi - movb %dl,(%esi,%edi) - -// } -// } -// } -LNextVert: - addl $(fv_size),%ebx - decl %ecx - jnz LFVLoop - - popl %edi - popl %esi - popl %ebx - popl %ebp - ret - - -//---------------------------------------------------------------------- -// Alias model non-subdivided polygon dispatching code -// -// not C-callable because of stack buffer cleanup -//---------------------------------------------------------------------- - -.globl C(D_DrawNonSubdiv) -C(D_DrawNonSubdiv): - pushl %ebp // preserve caller stack frame pointer - movl C(r_affinetridesc)+atd_numtriangles,%ebp - pushl %ebx - shll $(mtri_shift),%ebp - pushl %esi // preserve register variables - movl C(r_affinetridesc)+atd_ptriangles,%esi - pushl %edi - -// mtriangle_t *ptri; -// finalvert_t *pfv, *index0, *index1, *index2; -// int i; -// int lnumtriangles; - -// pfv = r_affinetridesc.pfinalverts; -// ptri = r_affinetridesc.ptriangles; -// lnumtriangles = r_affinetridesc.numtriangles; - -LNDLoop: - -// for (i=0 ; ivertindex[0]; -// index1 = pfv + ptri->vertindex[1]; -// index2 = pfv + ptri->vertindex[2]; - movl C(r_affinetridesc)+atd_pfinalverts,%edi - movl mtri_vertindex+0-mtri_size(%esi,%ebp,1),%ecx - shll $(fv_shift),%ecx - movl mtri_vertindex+4-mtri_size(%esi,%ebp,1),%edx - shll $(fv_shift),%edx - movl mtri_vertindex+8-mtri_size(%esi,%ebp,1),%ebx - shll $(fv_shift),%ebx - addl %edi,%ecx - addl %edi,%edx - addl %edi,%ebx - -// d_xdenom = (index0->v[1]-index1->v[1]) * -// (index0->v[0]-index2->v[0]) - -// (index0->v[0]-index1->v[0])*(index0->v[1]-index2->v[1]); - movl fv_v+4(%ecx),%eax - movl fv_v+0(%ecx),%esi - subl fv_v+4(%edx),%eax - subl fv_v+0(%ebx),%esi - imull %esi,%eax - movl fv_v+0(%ecx),%esi - movl fv_v+4(%ecx),%edi - subl fv_v+0(%edx),%esi - subl fv_v+4(%ebx),%edi - imull %esi,%edi - subl %edi,%eax - -// if (d_xdenom >= 0) -// { -// continue; - jns LNextTri - -// } - - movl %eax,C(d_xdenom) - fildl C(d_xdenom) - -// r_p0[0] = index0->v[0]; // u -// r_p0[1] = index0->v[1]; // v -// r_p0[2] = index0->v[2]; // s -// r_p0[3] = index0->v[3]; // t -// r_p0[4] = index0->v[4]; // light -// r_p0[5] = index0->v[5]; // iz - movl fv_v+0(%ecx),%eax - movl fv_v+4(%ecx),%esi - movl %eax,C(r_p0)+0 - movl %esi,C(r_p0)+4 - movl fv_v+8(%ecx),%eax - movl fv_v+12(%ecx),%esi - movl %eax,C(r_p0)+8 - movl %esi,C(r_p0)+12 - movl fv_v+16(%ecx),%eax - movl fv_v+20(%ecx),%esi - movl %eax,C(r_p0)+16 - movl %esi,C(r_p0)+20 - - fdivrs float_1 - -// r_p1[0] = index1->v[0]; -// r_p1[1] = index1->v[1]; -// r_p1[2] = index1->v[2]; -// r_p1[3] = index1->v[3]; -// r_p1[4] = index1->v[4]; -// r_p1[5] = index1->v[5]; - movl fv_v+0(%edx),%eax - movl fv_v+4(%edx),%esi - movl %eax,C(r_p1)+0 - movl %esi,C(r_p1)+4 - movl fv_v+8(%edx),%eax - movl fv_v+12(%edx),%esi - movl %eax,C(r_p1)+8 - movl %esi,C(r_p1)+12 - movl fv_v+16(%edx),%eax - movl fv_v+20(%edx),%esi - movl %eax,C(r_p1)+16 - movl %esi,C(r_p1)+20 - -// r_p2[0] = index2->v[0]; -// r_p2[1] = index2->v[1]; -// r_p2[2] = index2->v[2]; -// r_p2[3] = index2->v[3]; -// r_p2[4] = index2->v[4]; -// r_p2[5] = index2->v[5]; - movl fv_v+0(%ebx),%eax - movl fv_v+4(%ebx),%esi - movl %eax,C(r_p2)+0 - movl %esi,C(r_p2)+4 - movl fv_v+8(%ebx),%eax - movl fv_v+12(%ebx),%esi - movl %eax,C(r_p2)+8 - movl %esi,C(r_p2)+12 - movl fv_v+16(%ebx),%eax - movl fv_v+20(%ebx),%esi - movl %eax,C(r_p2)+16 - movl C(r_affinetridesc)+atd_ptriangles,%edi - movl %esi,C(r_p2)+20 - movl mtri_facesfront-mtri_size(%edi,%ebp,1),%eax - -// if (!ptri->facesfront) -// { - testl %eax,%eax - jnz LFacesFront - -// if (index0->flags & ALIAS_ONSEAM) -// r_p0[2] += r_affinetridesc.seamfixupX16; - movl fv_flags(%ecx),%eax - movl fv_flags(%edx),%esi - movl fv_flags(%ebx),%edi - testl $(ALIAS_ONSEAM),%eax - movl C(r_affinetridesc)+atd_seamfixupX16,%eax - jz LOnseamDone0 - addl %eax,C(r_p0)+8 -LOnseamDone0: - -// if (index1->flags & ALIAS_ONSEAM) -// r_p1[2] += r_affinetridesc.seamfixupX16; - testl $(ALIAS_ONSEAM),%esi - jz LOnseamDone1 - addl %eax,C(r_p1)+8 -LOnseamDone1: - -// if (index2->flags & ALIAS_ONSEAM) -// r_p2[2] += r_affinetridesc.seamfixupX16; - testl $(ALIAS_ONSEAM),%edi - jz LOnseamDone2 - addl %eax,C(r_p2)+8 -LOnseamDone2: - -// } - -LFacesFront: - - fstps C(d_xdenom) - -// D_PolysetSetEdgeTable (); -// D_RasterizeAliasPolySmooth (); - call C(D_PolysetSetEdgeTable) - call C(D_RasterizeAliasPolySmooth) - -LNextTri: - movl C(r_affinetridesc)+atd_ptriangles,%esi - subl $16,%ebp - jnz LNDLoop -// } - - popl %edi - popl %esi - popl %ebx - popl %ebp - - addl $(SPAN_SIZE),%esp - - ret - - -#endif // id386 - diff --git a/common/wins/math.s b/common/wins/math.s deleted file mode 100644 index bd68398..0000000 --- a/common/wins/math.s +++ /dev/null @@ -1,418 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -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 the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// math.s -// x86 assembly-language math routines. - -#define GLQUAKE 1 // don't include unneeded defs -#include "asm_i386.h" -#include "quakeasm.h" - - -#if id386 - - .data - - .align 4 -Ljmptab: .long Lcase0, Lcase1, Lcase2, Lcase3 - .long Lcase4, Lcase5, Lcase6, Lcase7 - - .text - -// TODO: rounding needed? -// stack parameter offset -#define val 4 - -.globl C(Invert24To16) -C(Invert24To16): - - movl val(%esp),%ecx - movl $0x100,%edx // 0x10000000000 as dividend - cmpl %edx,%ecx - jle LOutOfRange - - subl %eax,%eax - divl %ecx - - ret - -LOutOfRange: - movl $0xFFFFFFFF,%eax - ret - -#define in 4 -#define out 8 - - .align 2 -.globl C(TransformVector) -C(TransformVector): - movl in(%esp),%eax - movl out(%esp),%edx - - flds (%eax) // in[0] - fmuls C(vright) // in[0]*vright[0] - flds (%eax) // in[0] | in[0]*vright[0] - fmuls C(vup) // in[0]*vup[0] | in[0]*vright[0] - flds (%eax) // in[0] | in[0]*vup[0] | in[0]*vright[0] - fmuls C(vpn) // in[0]*vpn[0] | in[0]*vup[0] | in[0]*vright[0] - - flds 4(%eax) // in[1] | ... - fmuls C(vright)+4 // in[1]*vright[1] | ... - flds 4(%eax) // in[1] | in[1]*vright[1] | ... - fmuls C(vup)+4 // in[1]*vup[1] | in[1]*vright[1] | ... - flds 4(%eax) // in[1] | in[1]*vup[1] | in[1]*vright[1] | ... - fmuls C(vpn)+4 // in[1]*vpn[1] | in[1]*vup[1] | in[1]*vright[1] | ... - fxch %st(2) // in[1]*vright[1] | in[1]*vup[1] | in[1]*vpn[1] | ... - - faddp %st(0),%st(5) // in[1]*vup[1] | in[1]*vpn[1] | ... - faddp %st(0),%st(3) // in[1]*vpn[1] | ... - faddp %st(0),%st(1) // vpn_accum | vup_accum | vright_accum - - flds 8(%eax) // in[2] | ... - fmuls C(vright)+8 // in[2]*vright[2] | ... - flds 8(%eax) // in[2] | in[2]*vright[2] | ... - fmuls C(vup)+8 // in[2]*vup[2] | in[2]*vright[2] | ... - flds 8(%eax) // in[2] | in[2]*vup[2] | in[2]*vright[2] | ... - fmuls C(vpn)+8 // in[2]*vpn[2] | in[2]*vup[2] | in[2]*vright[2] | ... - fxch %st(2) // in[2]*vright[2] | in[2]*vup[2] | in[2]*vpn[2] | ... - - faddp %st(0),%st(5) // in[2]*vup[2] | in[2]*vpn[2] | ... - faddp %st(0),%st(3) // in[2]*vpn[2] | ... - faddp %st(0),%st(1) // vpn_accum | vup_accum | vright_accum - - fstps 8(%edx) // out[2] - fstps 4(%edx) // out[1] - fstps (%edx) // out[0] - - ret - - -#define EMINS 4+4 -#define EMAXS 4+8 -#define P 4+12 - - .align 2 -.globl C(BoxOnPlaneSide) -C(BoxOnPlaneSide): - pushl %ebx - - movl P(%esp),%edx - movl EMINS(%esp),%ecx - xorl %eax,%eax - movl EMAXS(%esp),%ebx - movb pl_signbits(%edx),%al - cmpb $8,%al - jge Lerror - flds pl_normal(%edx) // p->normal[0] - fld %st(0) // p->normal[0] | p->normal[0] - jmp Ljmptab(,%eax,4) - - -//dist1= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -//dist2= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -Lcase0: - fmuls (%ebx) // p->normal[0]*emaxs[0] | p->normal[0] - flds pl_normal+4(%edx) // p->normal[1] | p->normal[0]*emaxs[0] | - // p->normal[0] - fxch %st(2) // p->normal[0] | p->normal[0]*emaxs[0] | - // p->normal[1] - fmuls (%ecx) // p->normal[0]*emins[0] | - // p->normal[0]*emaxs[0] | p->normal[1] - fxch %st(2) // p->normal[1] | p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fld %st(0) // p->normal[1] | p->normal[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fmuls 4(%ebx) // p->normal[1]*emaxs[1] | p->normal[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - flds pl_normal+8(%edx) // p->normal[2] | p->normal[1]*emaxs[1] | - // p->normal[1] | p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fxch %st(2) // p->normal[1] | p->normal[1]*emaxs[1] | - // p->normal[2] | p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fmuls 4(%ecx) // p->normal[1]*emins[1] | - // p->normal[1]*emaxs[1] | - // p->normal[2] | p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fxch %st(2) // p->normal[2] | p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fld %st(0) // p->normal[2] | p->normal[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fmuls 8(%ebx) // p->normal[2]*emaxs[2] | - // p->normal[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1] | - // p->normal[0]*emaxs[0] | - // p->normal[0]*emins[0] - fxch %st(5) // p->normal[0]*emins[0] | - // p->normal[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1] | - // p->normal[0]*emaxs[0] | - // p->normal[2]*emaxs[2] - faddp %st(0),%st(3) //p->normal[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0] | - // p->normal[2]*emaxs[2] - fmuls 8(%ecx) //p->normal[2]*emins[2] | - // p->normal[1]*emaxs[1] | - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0] | - // p->normal[2]*emaxs[2] - fxch %st(1) //p->normal[1]*emaxs[1] | - // p->normal[2]*emins[2] | - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0] | - // p->normal[2]*emaxs[2] - faddp %st(0),%st(3) //p->normal[2]*emins[2] | - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0]+p->normal[1]*emaxs[1]| - // p->normal[2]*emaxs[2] - fxch %st(3) //p->normal[2]*emaxs[2] + - // p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // p->normal[0]*emaxs[0]+p->normal[1]*emaxs[1]| - // p->normal[2]*emins[2] - faddp %st(0),%st(2) //p->normal[1]*emins[1]+p->normal[0]*emins[0]| - // dist1 | p->normal[2]*emins[2] - - jmp LSetSides - -//dist1= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -//dist2= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -Lcase1: - fmuls (%ecx) // emins[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ebx) // emaxs[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ebx) // emaxs[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ecx) // emins[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ebx) // emaxs[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ecx) // emins[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -//dist2= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -Lcase2: - fmuls (%ebx) // emaxs[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ecx) // emins[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ecx) // emins[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ebx) // emaxs[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ebx) // emaxs[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ecx) // emins[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -//dist2= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -Lcase3: - fmuls (%ecx) // emins[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ebx) // emaxs[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ecx) // emins[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ebx) // emaxs[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ebx) // emaxs[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ecx) // emins[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -//dist2= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -Lcase4: - fmuls (%ebx) // emaxs[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ecx) // emins[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ebx) // emaxs[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ecx) // emins[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ecx) // emins[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ebx) // emaxs[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emins[2]; -//dist2= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emaxs[2]; -Lcase5: - fmuls (%ecx) // emins[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ebx) // emaxs[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ebx) // emaxs[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ecx) // emins[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ecx) // emins[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ebx) // emaxs[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emaxs[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -//dist2= p->normal[0]*emins[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -Lcase6: - fmuls (%ebx) // emaxs[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ecx) // emins[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ecx) // emins[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ebx) // emaxs[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ecx) // emins[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ebx) // emaxs[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - - jmp LSetSides - -//dist1= p->normal[0]*emins[0] + p->normal[1]*emins[1] + p->normal[2]*emins[2]; -//dist2= p->normal[0]*emaxs[0] + p->normal[1]*emaxs[1] + p->normal[2]*emaxs[2]; -Lcase7: - fmuls (%ecx) // emins[0] - flds pl_normal+4(%edx) - fxch %st(2) - fmuls (%ebx) // emaxs[0] - fxch %st(2) - fld %st(0) - fmuls 4(%ecx) // emins[1] - flds pl_normal+8(%edx) - fxch %st(2) - fmuls 4(%ebx) // emaxs[1] - fxch %st(2) - fld %st(0) - fmuls 8(%ecx) // emins[2] - fxch %st(5) - faddp %st(0),%st(3) - fmuls 8(%ebx) // emaxs[2] - fxch %st(1) - faddp %st(0),%st(3) - fxch %st(3) - faddp %st(0),%st(2) - -LSetSides: - -// sides = 0; -// if (dist1 >= p->dist) -// sides = 1; -// if (dist2 < p->dist) -// sides |= 2; - - faddp %st(0),%st(2) // dist1 | dist2 - fcomps pl_dist(%edx) - xorl %ecx,%ecx - fnstsw %ax - fcomps pl_dist(%edx) - andb $1,%ah - xorb $1,%ah - addb %ah,%cl - - fnstsw %ax - andb $1,%ah - addb %ah,%ah - addb %ah,%cl - -// return sides; - - popl %ebx - movl %ecx,%eax // return status - - ret - - -Lerror: - call C(BOPS_Error) - -#endif // id386 diff --git a/common/wins/sys_wina.s b/common/wins/sys_wina.s deleted file mode 100644 index de58d4c..0000000 --- a/common/wins/sys_wina.s +++ /dev/null @@ -1,116 +0,0 @@ -/* -Copyright (C) 1996-1997 Id Software, Inc. - -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 the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ -// -// sys_wina.s -// x86 assembly-language Win-dependent routines. - -#define GLQUAKE 1 // don't include unneeded defs -#include "asm_i386.h" -#include "quakeasm.h" - -// LATER should be id386-dependent, and have an equivalent C path - - .data - - .align 4 -fpenv: - .long 0, 0, 0, 0, 0, 0, 0, 0 - - .text - -.globl C(MaskExceptions) -C(MaskExceptions): - fnstenv fpenv - orl $0x3F,fpenv - fldenv fpenv - - ret - -#if 0 -.globl C(unmaskexceptions) -C(unmaskexceptions): - fnstenv fpenv - andl $0xFFFFFFE0,fpenv - fldenv fpenv - - ret -#endif - - .data - - .align 4 -.globl ceil_cw, single_cw, full_cw, cw, pushed_cw -ceil_cw: .long 0 -single_cw: .long 0 -full_cw: .long 0 -cw: .long 0 -pushed_cw: .long 0 - - .text - -.globl C(Sys_LowFPPrecision) -C(Sys_LowFPPrecision): - fldcw single_cw - - ret - -.globl C(Sys_HighFPPrecision) -C(Sys_HighFPPrecision): - fldcw full_cw - - ret - -.globl C(Sys_PushFPCW_SetHigh) -C(Sys_PushFPCW_SetHigh): - fnstcw pushed_cw - fldcw full_cw - - ret - -.globl C(Sys_PopFPCW) -C(Sys_PopFPCW): - fldcw pushed_cw - - ret - -.globl C(Sys_SetFPCW) -C(Sys_SetFPCW): - fnstcw cw - movl cw,%eax -#if id386 - andb $0xF0,%ah - orb $0x03,%ah // round mode, 64-bit precision -#endif - movl %eax,full_cw - -#if id386 - andb $0xF0,%ah - orb $0x0C,%ah // chop mode, single precision -#endif - movl %eax,single_cw - -#if id386 - andb $0xF0,%ah - orb $0x08,%ah // ceil mode, single precision -#endif - movl %eax,ceil_cw - - ret -