2001-02-19 21:15:25 +00:00
|
|
|
/*
|
|
|
|
d_varsa.S
|
|
|
|
|
|
|
|
(description)
|
|
|
|
|
|
|
|
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:
|
|
|
|
|
|
|
|
Free Software Foundation, Inc.
|
|
|
|
59 Temple Place - Suite 330
|
|
|
|
Boston, MA 02111-1307, USA
|
|
|
|
|
|
|
|
$Id$
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include <config.h>
|
|
|
|
#endif
|
2001-05-31 05:33:13 +00:00
|
|
|
#include "asm_i386.h"
|
2001-02-19 21:15:25 +00:00
|
|
|
#include "quakeasm.h"
|
|
|
|
#include "asm_draw.h"
|
|
|
|
#include "d_ifacea.h"
|
|
|
|
|
2001-06-11 20:59:48 +00:00
|
|
|
#ifdef PIC
|
2001-05-25 14:57:31 +00:00
|
|
|
#undef USE_INTEL_ASM //XXX asm pic hack
|
2001-06-11 20:59:48 +00:00
|
|
|
#endif
|
2001-05-25 14:57:31 +00:00
|
|
|
|
2001-02-19 21:15:25 +00:00
|
|
|
#ifdef USE_INTEL_ASM
|
|
|
|
|
|
|
|
.data
|
|
|
|
|
|
|
|
//-------------------------------------------------------
|
|
|
|
// global refresh variables
|
|
|
|
//-------------------------------------------------------
|
|
|
|
|
|
|
|
// FIXME: put all refresh variables into one contiguous block. Make into one
|
|
|
|
// big structure, like cl or sv?
|
|
|
|
|
|
|
|
.align 4
|
|
|
|
.globl C(d_sdivzstepu)
|
|
|
|
.globl C(d_tdivzstepu)
|
|
|
|
.globl C(d_zistepu)
|
|
|
|
.globl C(d_sdivzstepv)
|
|
|
|
.globl C(d_tdivzstepv)
|
|
|
|
.globl C(d_zistepv)
|
|
|
|
.globl C(d_sdivzorigin)
|
|
|
|
.globl C(d_tdivzorigin)
|
|
|
|
.globl C(d_ziorigin)
|
|
|
|
C(d_sdivzstepu): .single 0
|
|
|
|
C(d_tdivzstepu): .single 0
|
|
|
|
C(d_zistepu): .single 0
|
|
|
|
C(d_sdivzstepv): .single 0
|
|
|
|
C(d_tdivzstepv): .single 0
|
|
|
|
C(d_zistepv): .single 0
|
|
|
|
C(d_sdivzorigin): .single 0
|
|
|
|
C(d_tdivzorigin): .single 0
|
|
|
|
C(d_ziorigin): .single 0
|
|
|
|
|
|
|
|
.globl C(sadjust)
|
|
|
|
.globl C(tadjust)
|
|
|
|
.globl C(bbextents)
|
|
|
|
.globl C(bbextentt)
|
|
|
|
C(sadjust): .long 0
|
|
|
|
C(tadjust): .long 0
|
|
|
|
C(bbextents): .long 0
|
|
|
|
C(bbextentt): .long 0
|
|
|
|
|
|
|
|
.globl C(cacheblock)
|
|
|
|
.globl C(d_viewbuffer)
|
2022-03-24 03:22:27 +00:00
|
|
|
.globl C(d_rowbytes)
|
|
|
|
.globl C(d_height)
|
2001-02-19 21:15:25 +00:00
|
|
|
.globl C(cachewidth)
|
2022-03-21 14:11:09 +00:00
|
|
|
.globl C(d_zbuffer)
|
2001-02-19 21:15:25 +00:00
|
|
|
.globl C(d_zrowbytes)
|
|
|
|
.globl C(d_zwidth)
|
|
|
|
C(cacheblock): .long 0
|
|
|
|
C(cachewidth): .long 0
|
|
|
|
C(d_viewbuffer): .long 0
|
2022-03-24 03:22:27 +00:00
|
|
|
C(d_rowbytes): .long 0
|
|
|
|
C(d_height): .long 0
|
2022-03-21 14:11:09 +00:00
|
|
|
C(d_zbuffer): .long 0
|
2001-02-19 21:15:25 +00:00
|
|
|
C(d_zrowbytes): .long 0
|
|
|
|
C(d_zwidth): .long 0
|
|
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------
|
|
|
|
// ASM-only variables
|
|
|
|
//-------------------------------------------------------
|
2011-09-10 08:49:14 +00:00
|
|
|
.globl C(izi)
|
|
|
|
C(izi): .long 0
|
|
|
|
|
|
|
|
.globl C(pbase), C(s), C(t), C(sfracf), C(tfracf), C(snext), C(tnext)
|
|
|
|
.globl C(spancountminus1), C(zi16stepu), C(sdivz16stepu), C(tdivz16stepu)
|
|
|
|
.globl C(zi8stepu), C(sdivz8stepu), C(tdivz8stepu), C(pz)
|
|
|
|
C(s): .long 0
|
|
|
|
C(t): .long 0
|
|
|
|
C(snext): .long 0
|
|
|
|
C(tnext): .long 0
|
|
|
|
C(sfracf): .long 0
|
|
|
|
C(tfracf): .long 0
|
|
|
|
C(pbase): .long 0
|
|
|
|
C(zi8stepu): .long 0
|
|
|
|
C(sdivz8stepu): .long 0
|
|
|
|
C(tdivz8stepu): .long 0
|
|
|
|
C(zi16stepu): .long 0
|
|
|
|
C(sdivz16stepu): .long 0
|
|
|
|
C(tdivz16stepu): .long 0
|
|
|
|
C(spancountminus1): .long 0
|
|
|
|
C(pz): .long 0
|
|
|
|
|
|
|
|
.globl C(izistep)
|
|
|
|
C(izistep): .long 0
|
2001-02-19 21:15:25 +00:00
|
|
|
|
|
|
|
//-------------------------------------------------------
|
|
|
|
// local variables for d_draw16.s
|
|
|
|
//-------------------------------------------------------
|
|
|
|
|
2011-09-10 08:49:14 +00:00
|
|
|
.globl C(reciprocal_table_16)
|
2001-02-19 21:15:25 +00:00
|
|
|
// 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10, 1/11, 1/12, 1/13,
|
|
|
|
// 1/14, and 1/15 in 0.32 form
|
2011-09-10 08:49:14 +00:00
|
|
|
C(reciprocal_table_16): .long 0x40000000, 0x2aaaaaaa, 0x20000000
|
2001-02-19 21:15:25 +00:00
|
|
|
.long 0x19999999, 0x15555555, 0x12492492
|
|
|
|
.long 0x10000000, 0xe38e38e, 0xccccccc, 0xba2e8ba
|
|
|
|
.long 0xaaaaaaa, 0x9d89d89, 0x9249249, 0x8888888
|
|
|
|
|
|
|
|
|
|
|
|
//-------------------------------------------------------
|
|
|
|
// local variables for d_parta.s
|
|
|
|
//-------------------------------------------------------
|
2011-09-10 08:49:14 +00:00
|
|
|
.globl C(DP_Count), C(DP_u), C(DP_v), C(DP_32768), C(DP_Color)
|
|
|
|
.globl C(DP_Pix), C(DP_EntryTable)
|
|
|
|
C(DP_Count): .long 0
|
|
|
|
C(DP_u): .long 0
|
|
|
|
C(DP_v): .long 0
|
|
|
|
C(DP_32768): .single 32768.0
|
|
|
|
C(DP_Color): .long 0
|
|
|
|
C(DP_Pix): .long 0
|
2001-02-19 21:15:25 +00:00
|
|
|
|
|
|
|
|
|
|
|
#ifndef NeXT
|
2011-09-10 08:49:14 +00:00
|
|
|
.extern C(DP_1x1)
|
|
|
|
.extern C(DP_2x2)
|
|
|
|
.extern C(DP_3x3)
|
|
|
|
.extern C(DP_4x4)
|
2001-02-19 21:15:25 +00:00
|
|
|
#endif
|
|
|
|
|
2011-09-10 08:49:14 +00:00
|
|
|
C(DP_EntryTable): .long C(DP_1x1), C(DP_2x2), C(DP_3x3), C(DP_4x4)
|
2001-02-19 21:15:25 +00:00
|
|
|
|
|
|
|
//
|
|
|
|
// advancetable is 8 bytes, but points to the middle of that range so negative
|
|
|
|
// offsets will work
|
|
|
|
//
|
2011-09-10 08:49:14 +00:00
|
|
|
.globl C(advancetable), C(sstep), C(tstep), C(pspantemp)
|
|
|
|
.globl C(counttemp), C(jumptemp)
|
|
|
|
C(advancetable): .long 0, 0
|
|
|
|
C(sstep): .long 0
|
|
|
|
C(tstep): .long 0
|
2001-02-19 21:15:25 +00:00
|
|
|
|
2011-09-10 08:49:14 +00:00
|
|
|
C(pspantemp): .long 0
|
|
|
|
C(counttemp): .long 0
|
|
|
|
C(jumptemp): .long 0
|
2001-02-19 21:15:25 +00:00
|
|
|
|
|
|
|
// 1/2, 1/3, 1/4, 1/5, 1/6, and 1/7 in 0.32 form
|
2011-09-10 08:49:14 +00:00
|
|
|
.globl C(reciprocal_table), C(entryvec_table)
|
|
|
|
C(reciprocal_table): .long 0x40000000, 0x2aaaaaaa, 0x20000000
|
2001-02-19 21:15:25 +00:00
|
|
|
.long 0x19999999, 0x15555555, 0x12492492
|
|
|
|
|
|
|
|
#ifndef NeXT
|
2011-09-10 08:49:14 +00:00
|
|
|
.extern C(Entry2_8)
|
|
|
|
.extern C(Entry3_8)
|
|
|
|
.extern C(Entry4_8)
|
|
|
|
.extern C(Entry5_8)
|
|
|
|
.extern C(Entry6_8)
|
|
|
|
.extern C(Entry7_8)
|
|
|
|
.extern C(Entry8_8)
|
2001-02-19 21:15:25 +00:00
|
|
|
#endif
|
|
|
|
|
2011-09-10 08:49:14 +00:00
|
|
|
C(entryvec_table): .long 0, C(Entry2_8), C(Entry3_8), C(Entry4_8)
|
|
|
|
.long C(Entry5_8), C(Entry6_8), C(Entry7_8), C(Entry8_8)
|
2001-02-19 21:15:25 +00:00
|
|
|
|
|
|
|
#ifndef NeXT
|
2011-09-10 08:49:14 +00:00
|
|
|
.extern C(Spr8Entry2_8)
|
|
|
|
.extern C(Spr8Entry3_8)
|
|
|
|
.extern C(Spr8Entry4_8)
|
|
|
|
.extern C(Spr8Entry5_8)
|
|
|
|
.extern C(Spr8Entry6_8)
|
|
|
|
.extern C(Spr8Entry7_8)
|
|
|
|
.extern C(Spr8Entry8_8)
|
2001-02-19 21:15:25 +00:00
|
|
|
#endif
|
|
|
|
|
2011-09-10 08:49:14 +00:00
|
|
|
.globl C(spr8entryvec_table)
|
|
|
|
C(spr8entryvec_table): .long 0, C(Spr8Entry2_8), C(Spr8Entry3_8), C(Spr8Entry4_8)
|
|
|
|
.long C(Spr8Entry5_8), C(Spr8Entry6_8), C(Spr8Entry7_8), C(Spr8Entry8_8)
|
2001-02-19 21:15:25 +00:00
|
|
|
|
|
|
|
#endif // USE_INTEL_ASM
|
|
|
|
|
2021-06-13 14:12:03 +00:00
|
|
|
#if defined(__linux__) && defined(__ELF__)
|
|
|
|
.section .note.GNU-stack,"",%progbits
|
|
|
|
#endif
|