19fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream/*
29fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamCopyright (C) 1996-1997 Id Software, Inc.
39fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
49fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is free software; you can redistribute it and/or
59fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreammodify it under the terms of the GNU General Public License
69fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamas published by the Free Software Foundation; either version 2
79fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamof the License, or (at your option) any later version.
89fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
99fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamThis program is distributed in the hope that it will be useful,
109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreambut WITHOUT ANY WARRANTY; without even the implied warranty of
119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamSee the GNU General Public License for more details.
149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamYou should have received a copy of the GNU General Public License
169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamalong with this program; if not, write to the Free Software
179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream*/
209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// d_draw16.s
229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// x86 assembly-language horizontal 8-bpp span-drawing code, with 16-pixel
239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// subdivision.
249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "asm_i386.h"
279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "quakeasm.h"
289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "asm_draw.h"
299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#include "d_ifacea.h"
309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#if	id386
329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------------------------------------
349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 8-bpp horizontal span drawing code for polygons, with no transparency and
359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// 16-pixel subdivision.
369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// Assumes there is at least one span in pspans, and that every span
389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// contains at least one pixel
399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------------------------------------
409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.data
429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.text
449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// out-of-line, rarely-needed clamping code
469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampHigh0:
489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextents),%esi
499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry0
509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampHighOrLow0:
519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jg		LClampHigh0
529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	xorl	%esi,%esi
539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry0
549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampHigh1:
569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextentt),%edx
579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry1
589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampHighOrLow1:
599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jg		LClampHigh1
609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	xorl	%edx,%edx
619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry1
629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampLow2:
649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	$4096,%ebp
659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry2
669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampHigh2:
679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextents),%ebp
689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry2
699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampLow3:
719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	$4096,%ecx
729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry3
739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampHigh3:
749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextentt),%ecx
759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry3
769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampLow4:
789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	$4096,%eax
799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry4
809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampHigh4:
819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextents),%eax
829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry4
839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampLow5:
859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	$4096,%ebx
869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry5
879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampHigh5:
889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextentt),%ebx
899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LClampReentry5
909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#define pspans	4+16
939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.align 4
959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl C(D_DrawSpans16)
969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamC(D_DrawSpans16):
979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pushl	%ebp				// preserve caller's stack frame
989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pushl	%edi
999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pushl	%esi				// preserve register variables
1009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	pushl	%ebx
1019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// set up scaled-by-16 steps, for 16-long segments; also set up cacheblock
1049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// and span list pointers
1059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// TODO: any overlap from rearranging?
1079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	C(d_sdivzstepu)
1089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	fp_16
1099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(cacheblock),%edx
1109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	C(d_tdivzstepu)
1119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	fp_16
1129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	pspans(%esp),%ebx	// point to the first span descriptor
1139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	C(d_zistepu)
1149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	fp_16
1159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%edx,pbase			// pbase = cacheblock
1169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fstps	zi16stepu
1179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fstps	tdivz16stepu
1189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fstps	sdivz16stepu
1199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLSpanLoop:
1219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// set up the initial s/z, t/z, and 1/z on the FP stack, and generate the
1239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// initial s and t values
1249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// FIXME: pipeline FILD?
1269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fildl	espan_t_v(%ebx)
1279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fildl	espan_t_u(%ebx)
1289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fld		%st(1)			// dv | du | dv
1309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	C(d_sdivzstepv)	// dv*d_sdivzstepv | du | dv
1319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fld		%st(1)			// du | dv*d_sdivzstepv | du | dv
1329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	C(d_sdivzstepu)	// du*d_sdivzstepu | dv*d_sdivzstepv | du | dv
1339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fld		%st(2)			// du | du*d_sdivzstepu | dv*d_sdivzstepv | du | dv
1349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	C(d_tdivzstepu)	// du*d_tdivzstepu | du*d_sdivzstepu |
1359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  dv*d_sdivzstepv | du | dv
1369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// du*d_sdivzstepu | du*d_tdivzstepu |
1379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  dv*d_sdivzstepv | du | dv
1389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(2)	// du*d_tdivzstepu |
1399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_sdivzstepu + dv*d_sdivzstepv | du | dv
1409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// du*d_sdivzstepu + dv*d_sdivzstepv |
1419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_tdivzstepu | du | dv
1429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fld		%st(3)			// dv | du*d_sdivzstepu + dv*d_sdivzstepv |
1439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_tdivzstepu | du | dv
1449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	C(d_tdivzstepv)	// dv*d_tdivzstepv |
1459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_sdivzstepu + dv*d_sdivzstepv |
1469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_tdivzstepu | du | dv
1479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// du*d_sdivzstepu + dv*d_sdivzstepv |
1489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  dv*d_tdivzstepv | du*d_tdivzstepu | du | dv
1499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fadds	C(d_sdivzorigin)	// sdivz = d_sdivzorigin + dv*d_sdivzstepv +
1509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_sdivzstepu; stays in %st(2) at end
1519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(4)			// dv | dv*d_tdivzstepv | du*d_tdivzstepu | du |
1529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  s/z
1539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	C(d_zistepv)		// dv*d_zistepv | dv*d_tdivzstepv |
1549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_tdivzstepu | du | s/z
1559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// dv*d_tdivzstepv |  dv*d_zistepv |
1569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_tdivzstepu | du | s/z
1579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(2)	// dv*d_zistepv |
1589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  dv*d_tdivzstepv + du*d_tdivzstepu | du | s/z
1599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(2)			// du | dv*d_tdivzstepv + du*d_tdivzstepu |
1609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  dv*d_zistepv | s/z
1619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	C(d_zistepu)		// du*d_zistepu |
1629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  dv*d_tdivzstepv + du*d_tdivzstepu |
1639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  dv*d_zistepv | s/z
1649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// dv*d_tdivzstepv + du*d_tdivzstepu |
1659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_zistepu | dv*d_zistepv | s/z
1669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fadds	C(d_tdivzorigin)	// tdivz = d_tdivzorigin + dv*d_tdivzstepv +
1679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_tdivzstepu; stays in %st(1) at end
1689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(2)			// dv*d_zistepv | du*d_zistepu | t/z | s/z
1699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(1)	// dv*d_zistepv + du*d_zistepu | t/z | s/z
1709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	fp_64k			// fp_64k | dv*d_zistepv + du*d_zistepu | t/z | s/z
1729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// dv*d_zistepv + du*d_zistepu | fp_64k | t/z | s/z
1739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fadds	C(d_ziorigin)		// zi = d_ziorigin + dv*d_zistepv +
1749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  du*d_zistepu; stays in %st(0) at end
1759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							// 1/z | fp_64k | t/z | s/z
1769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// calculate and clamp s & t
1789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fdivr	%st(0),%st(1)	// 1/z | z*64k | t/z | s/z
1809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// point %edi to the first pixel in the span
1839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(d_viewbuffer),%ecx
1859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	espan_t_v(%ebx),%eax
1869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ebx,pspantemp	// preserve spans pointer
1879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(tadjust),%edx
1899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(sadjust),%esi
1909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(d_scantable)(,%eax,4),%edi	// v * screenwidth
1919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ecx,%edi
1929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	espan_t_u(%ebx),%ecx
1939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ecx,%edi				// pdest = &pdestspan[scans->u];
1949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	espan_t_count(%ebx),%ecx
1959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
1969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// now start the FDIV for the end of the span
1989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
1999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	$16,%ecx
2009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ja		LSetupNotLast1
2019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	decl	%ecx
2039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jz		LCleanup1		// if only one pixel, no need to start an FDIV
2049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ecx,spancountminus1
2059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// finish up the s and t calcs
2079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// z*64k | 1/z | t/z | s/z
2089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fld		%st(0)			// z*64k | z*64k | 1/z | t/z | s/z
2109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(4),%st(0)	// s | z*64k | 1/z | t/z | s/z
2119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// z*64k | s | 1/z | t/z | s/z
2129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(3),%st(0)	// t | s | 1/z | t/z | s/z
2139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// s | t | 1/z | t/z | s/z
2149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	s				// 1/z | t | t/z | s/z
2159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	t				// 1/z | t/z | s/z
2169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fildl	spancountminus1
2189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	C(d_tdivzstepu)	// C(d_tdivzstepu) | spancountminus1
2209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	C(d_zistepu)		// C(d_zistepu) | C(d_tdivzstepu) | spancountminus1
2219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(2),%st(0)	// C(d_zistepu)*scm1 | C(d_tdivzstepu) | scm1
2229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// C(d_tdivzstepu) | C(d_zistepu)*scm1 | scm1
2239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(2),%st(0)	// C(d_tdivzstepu)*scm1 | C(d_zistepu)*scm1 | scm1
2249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(2)			// scm1 | C(d_zistepu)*scm1 | C(d_tdivzstepu)*scm1
2259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	C(d_sdivzstepu)	// C(d_sdivzstepu)*scm1 | C(d_zistepu)*scm1 |
2269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  C(d_tdivzstepu)*scm1
2279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// C(d_zistepu)*scm1 | C(d_sdivzstepu)*scm1 |
2289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  C(d_tdivzstepu)*scm1
2299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(3)	// C(d_sdivzstepu)*scm1 | C(d_tdivzstepu)*scm1
2309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// C(d_tdivzstepu)*scm1 | C(d_sdivzstepu)*scm1
2319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(3)	// C(d_sdivzstepu)*scm1
2329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(3)
2339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	fp_64k
2359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fdiv	%st(1),%st(0)	// this is what we've gone to all this trouble to
2369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  overlap
2379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LFDIVInFlight1
2389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLCleanup1:
2409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// finish up the s and t calcs
2419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// z*64k | 1/z | t/z | s/z
2429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fld		%st(0)			// z*64k | z*64k | 1/z | t/z | s/z
2449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(4),%st(0)	// s | z*64k | 1/z | t/z | s/z
2459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// z*64k | s | 1/z | t/z | s/z
2469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(3),%st(0)	// t | s | 1/z | t/z | s/z
2479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// s | t | 1/z | t/z | s/z
2489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	s				// 1/z | t | t/z | s/z
2499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	t				// 1/z | t/z | s/z
2509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LFDIVInFlight1
2519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.align	4
2539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLSetupNotLast1:
2549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// finish up the s and t calcs
2559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// z*64k | 1/z | t/z | s/z
2569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fld		%st(0)			// z*64k | z*64k | 1/z | t/z | s/z
2589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(4),%st(0)	// s | z*64k | 1/z | t/z | s/z
2599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// z*64k | s | 1/z | t/z | s/z
2609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(3),%st(0)	// t | s | 1/z | t/z | s/z
2619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// s | t | 1/z | t/z | s/z
2629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	s				// 1/z | t | t/z | s/z
2639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	t				// 1/z | t/z | s/z
2649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fadds	zi16stepu
2669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(2)
2679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fadds	sdivz16stepu
2689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(2)
2699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	tdivz16stepu
2709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(2)
2719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	fp_64k
2729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fdiv	%st(1),%st(0)	// z = 1/1/z
2739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							// this is what we've gone to all this trouble to
2749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  overlap
2759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLFDIVInFlight1:
2769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	s,%esi
2789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	t,%edx
2799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextents),%ebx
2809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextentt),%ebp
2819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	%ebx,%esi
2829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ja		LClampHighOrLow0
2839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampReentry0:
2849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%esi,s
2859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	pbase,%ebx
2869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	shll	$16,%esi
2879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	%ebp,%edx
2889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%esi,sfracf
2899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ja		LClampHighOrLow1
2909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampReentry1:
2919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%edx,t
2929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	s,%esi					// sfrac = scans->sfrac;
2939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	shll	$16,%edx
2949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	t,%eax					// tfrac = scans->tfrac;
2959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sarl	$16,%esi
2969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%edx,tfracf
2979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
2989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
2999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// calculate the texture starting address
3009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sarl	$16,%eax
3029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(cachewidth),%edx
3039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	imull	%edx,%eax				// (tfrac >> 16) * cachewidth
3049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebx,%esi
3059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%esi				// psource = pbase + (sfrac >> 16) +
3069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream									//           ((tfrac >> 16) * cachewidth);
3079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// determine whether last span or not
3099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	$16,%ecx
3119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jna		LLastSegment
3129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// not the last segment; do full 16-wide segment
3159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLNotLastSegment:
3179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// advance s/z, t/z, and 1/z, and calculate s & t at end of span and steps to
3209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// get there
3219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// pick up after the FDIV that was left in flight previously
3249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fld		%st(0)			// duplicate it
3269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(4),%st(0)	// s = s/z * z
3279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)
3289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(3),%st(0)	// t = t/z * z
3299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)
3309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	snext
3319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	tnext
3329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	snext,%eax
3339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	tnext,%edx
3349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%bl	// get first source texel
3369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$16,%ecx		// count off this segments' pixels
3379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(sadjust),%ebp
3389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ecx,counttemp	// remember count of remaining pixels
3399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(tadjust),%ecx
3419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%bl,(%edi)	// store first dest pixel
3429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%ebp
3449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%edx,%ecx
3459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextents),%eax
3479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextentt),%edx
3489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	$4096,%ebp
3509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jl		LClampLow2
3519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	%eax,%ebp
3529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ja		LClampHigh2
3539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampReentry2:
3549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	$4096,%ecx
3569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jl		LClampLow3
3579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	%edx,%ecx
3589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ja		LClampHigh3
3599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampReentry3:
3609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ebp,snext
3629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ecx,tnext
3639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	s,%ebp
3659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	t,%ecx
3669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// set up advancetable
3699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
3709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ecx,%eax
3719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ebp,%edx
3729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sarl	$20,%eax			// tstep >>= 16;
3739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jz		LZero
3749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sarl	$20,%edx			// sstep >>= 16;
3759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(cachewidth),%ebx
3769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	imull	%ebx,%eax
3779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LSetUp1
3789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLZero:
3809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sarl	$20,%edx			// sstep >>= 16;
3819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(cachewidth),%ebx
3829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLSetUp1:
3849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%edx,%eax			// add in sstep
3869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// (tstep >> 16) * cachewidth + (sstep >> 16);
3879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	tfracf,%edx
3889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%eax,advancetable+4	// advance base in t
3899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebx,%eax			// ((tstep >> 16) + 1) * cachewidth +
3909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								//  (sstep >> 16);
3919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	shll	$12,%ebp			// left-justify sstep fractional part
3929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	sfracf,%ebx
3939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	shll	$12,%ecx			// left-justify tstep fractional part
3949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%eax,advancetable	// advance extra in t
3959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ecx,tstep
3979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ecx,%edx			// advance tfrac fractional part by tstep frac
3989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
3999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx			// turn tstep carry into -1 (0 if none)
4009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx			// advance sfrac fractional part by sstep frac
4019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi	// point to next source texel
4029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
4049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
4059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
4069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
4079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,1(%edi)
4089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
4099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
4119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
4129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
4139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
4149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
4159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
4179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
4189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,2(%edi)
4199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
4209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
4219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
4229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
4249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
4259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,3(%edi)
4269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
4279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
4289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
4299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
4319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
4329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,4(%edi)
4339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
4349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
4359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
4369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
4389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
4399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,5(%edi)
4409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
4419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
4429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
4439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
4459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
4469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,6(%edi)
4479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
4489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
4499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
4509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
4529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
4539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,7(%edi)
4549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
4559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
4569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
4579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// start FDIV for end of next segment in flight, so it can overlap
4619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
4629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	counttemp,%ecx
4639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	$16,%ecx			// more than one segment after this?
4649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ja		LSetupNotLast2	// yes
4659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	decl	%ecx
4679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jz		LFDIVInFlight2	// if only one pixel, no need to start an FDIV
4689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ecx,spancountminus1
4699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fildl	spancountminus1
4709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	C(d_zistepu)		// C(d_zistepu) | spancountminus1
4729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(1),%st(0)	// C(d_zistepu)*scm1 | scm1
4739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	C(d_tdivzstepu)	// C(d_tdivzstepu) | C(d_zistepu)*scm1 | scm1
4749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(2),%st(0)	// C(d_tdivzstepu)*scm1 | C(d_zistepu)*scm1 | scm1
4759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// C(d_zistepu)*scm1 | C(d_tdivzstepu)*scm1 | scm1
4769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(3)	// C(d_tdivzstepu)*scm1 | scm1
4779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// scm1 | C(d_tdivzstepu)*scm1
4789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmuls	C(d_sdivzstepu)	// C(d_sdivzstepu)*scm1 | C(d_tdivzstepu)*scm1
4799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// C(d_tdivzstepu)*scm1 | C(d_sdivzstepu)*scm1
4809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(3)	// C(d_sdivzstepu)*scm1
4819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	fp_64k			// 64k | C(d_sdivzstepu)*scm1
4829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)			// C(d_sdivzstepu)*scm1 | 64k
4839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(4)	// 64k
4849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fdiv	%st(1),%st(0)	// this is what we've gone to all this trouble to
4869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  overlap
4879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LFDIVInFlight2
4889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
4899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	.align	4
4909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLSetupNotLast2:
4919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fadds	zi16stepu
4929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(2)
4939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fadds	sdivz16stepu
4949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(2)
4959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	tdivz16stepu
4969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	faddp	%st(0),%st(2)
4979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	flds	fp_64k
4989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fdiv	%st(1),%st(0)	// z = 1/1/z
4999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							// this is what we've gone to all this trouble to
5009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  overlap
5019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLFDIVInFlight2:
5029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ecx,counttemp
5039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
5059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
5069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,8(%edi)
5079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
5089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
5099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
5109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
5129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
5139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,9(%edi)
5149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
5159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
5169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
5179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
5199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
5209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,10(%edi)
5219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
5229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
5239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
5249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
5269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
5279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,11(%edi)
5289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
5299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
5309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
5319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
5339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
5349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,12(%edi)
5359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
5369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
5379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
5389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
5409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
5419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,13(%edi)
5429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
5439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
5449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
5459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
5479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
5489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,14(%edi)
5499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
5509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
5519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
5529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	$16,%edi
5549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%edx,tfracf
5559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	snext,%edx
5569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ebx,sfracf
5579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	tnext,%ebx
5589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%edx,s
5599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ebx,t
5609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	counttemp,%ecx		// retrieve count
5629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
5649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// determine whether last span or not
5659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
5669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	$16,%ecx				// are there multiple segments remaining?
5679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,-1(%edi)
5689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ja		LNotLastSegment		// yes
5699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
5719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// last segment of scan
5729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
5739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLLastSegment:
5749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
5769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// advance s/z, t/z, and 1/z, and calculate s & t at end of span and steps to
5779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// get there. The number of pixels left is variable, and we want to land on the
5789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// last pixel, not step one past it, so we can't run into arithmetic problems
5799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
5809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	testl	%ecx,%ecx
5819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jz		LNoSteps		// just draw the last pixel and we're done
5829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// pick up after the FDIV that was left in flight previously
5849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fld		%st(0)			// duplicate it
5879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(4),%st(0)	// s = s/z * z
5889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)
5899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fmul	%st(3),%st(0)	// t = t/z * z
5909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fxch	%st(1)
5919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	snext
5929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fistpl	tnext
5939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al		// load first texel in segment
5959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(tadjust),%ebx
5969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,(%edi)		// store first pixel in segment
5979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(sadjust),%eax
5989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
5999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	snext,%eax
6009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tnext,%ebx
6019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextents),%ebp
6039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(bbextentt),%edx
6049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	$4096,%eax
6069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jl		LClampLow4
6079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	%ebp,%eax
6089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ja		LClampHigh4
6099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampReentry4:
6109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%eax,snext
6119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	$4096,%ebx
6139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jl		LClampLow5
6149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	%edx,%ebx
6159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ja		LClampHigh5
6169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLClampReentry5:
6179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	cmpl	$1,%ecx			// don't bother
6199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	je		LOnlyOneStep	// if two pixels in segment, there's only one step,
6209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream							//  of the segment length
6219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	s,%eax
6229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	t,%ebx
6239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%eax		// convert to 15.17 format so multiply by 1.31
6259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebx,%ebx		//  reciprocal yields 16.48
6269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	imull	reciprocal_table_16-8(,%ecx,4)	// sstep = (snext - s) /
6289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream											//  (spancount-1)
6299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%edx,%ebp
6309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ebx,%eax
6329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	imull	reciprocal_table_16-8(,%ecx,4)	// tstep = (tnext - t) /
6339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream											//  (spancount-1)
6349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLSetEntryvec:
6359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
6369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// set up advancetable
6379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
6389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	entryvec_table_16(,%ecx,4),%ebx
6399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%edx,%eax
6409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ebx,jumptemp		// entry point into code for RET later
6419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ebp,%ecx
6429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sarl	$16,%edx			// tstep >>= 16;
6439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	C(cachewidth),%ebx
6449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sarl	$16,%ecx			// sstep >>= 16;
6459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	imull	%ebx,%edx
6469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ecx,%edx			// add in sstep
6489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								// (tstep >> 16) * cachewidth + (sstep >> 16);
6499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	tfracf,%ecx
6509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%edx,advancetable+4	// advance base in t
6519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebx,%edx			// ((tstep >> 16) + 1) * cachewidth +
6529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream								//  (sstep >> 16);
6539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	shll	$16,%ebp			// left-justify sstep fractional part
6549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	sfracf,%ebx
6559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	shll	$16,%eax			// left-justify tstep fractional part
6569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%edx,advancetable	// advance extra in t
6579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%eax,tstep
6599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ecx,%edx
6609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
6619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
6629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
6639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
6649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		*jumptemp			// jump to the number-of-pixels handler
6669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
6689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLNoSteps:
6709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al		// load first texel in segment
6719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$15,%edi			// adjust for hardwired offset
6729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEndSpan
6739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLOnlyOneStep:
6769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	s,%eax
6779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	t,%ebx
6789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%eax,%ebp
6799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	%ebx,%edx
6809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LSetEntryvec
6819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
6839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl	Entry2_16, Entry3_16, Entry4_16, Entry5_16
6859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl	Entry6_16, Entry7_16, Entry8_16, Entry9_16
6869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl	Entry10_16, Entry11_16, Entry12_16, Entry13_16
6879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream.globl	Entry14_16, Entry15_16, Entry16_16
6889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry2_16:
6909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$14,%edi		// adjust for hardwired offsets
6919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
6929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry2_16
6939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
6959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
6969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry3_16:
6979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$13,%edi		// adjust for hardwired offsets
6989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
6999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
7009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
7019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
7029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
7039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry3_16
7049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
7069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry4_16:
7089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$12,%edi		// adjust for hardwired offsets
7099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
7109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
7119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
7129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
7139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
7149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
7159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry4_16
7169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
7189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry5_16:
7209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$11,%edi		// adjust for hardwired offsets
7219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
7229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
7239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
7249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
7259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
7269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
7279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry5_16
7289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
7309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry6_16:
7329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$10,%edi		// adjust for hardwired offsets
7339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
7349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
7359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
7369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
7379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
7389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
7399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry6_16
7409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
7429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry7_16:
7449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$9,%edi		// adjust for hardwired offsets
7459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
7469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
7479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
7489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
7499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
7509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
7519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry7_16
7529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
7549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry8_16:
7569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$8,%edi		// adjust for hardwired offsets
7579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
7589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
7599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
7609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
7619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
7629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
7639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry8_16
7649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
7669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry9_16:
7689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$7,%edi		// adjust for hardwired offsets
7699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
7709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
7719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
7729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
7739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
7749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
7759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry9_16
7769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
7789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry10_16:
7809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$6,%edi		// adjust for hardwired offsets
7819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
7829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
7839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
7849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
7859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
7869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
7879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry10_16
7889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
7909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
7919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry11_16:
7929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$5,%edi		// adjust for hardwired offsets
7939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
7949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
7959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
7969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
7979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
7989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
7999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry11_16
8009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
8029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry12_16:
8049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$4,%edi		// adjust for hardwired offsets
8059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
8069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry12_16
8129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
8149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry13_16:
8169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$3,%edi		// adjust for hardwired offsets
8179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
8189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry13_16
8249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
8269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry14_16:
8289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	subl	$2,%edi		// adjust for hardwired offsets
8299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
8309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry14_16
8369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
8389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry15_16:
8409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	decl	%edi		// adjust for hardwired offsets
8419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
8429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jmp		LEntry15_16
8489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//----------------------------------------
8509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamEntry16_16:
8529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%eax,%edx
8539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
8589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,1(%edi)
8619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry15_16:
8669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,2(%edi)
8689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry14_16:
8739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,3(%edi)
8759fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8769fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8779fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8789fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8799fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry13_16:
8809fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8819fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,4(%edi)
8829fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8839fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8849fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8859fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8869fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry12_16:
8879fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8889fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,5(%edi)
8899fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8909fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8919fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8929fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
8939fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry11_16:
8949fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
8959fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,6(%edi)
8969fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
8979fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
8989fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
8999fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
9009fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry10_16:
9019fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
9029fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,7(%edi)
9039fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
9049fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
9059fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
9069fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
9079fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry9_16:
9089fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
9099fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,8(%edi)
9109fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
9119fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
9129fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
9139fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
9149fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry8_16:
9159fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
9169fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,9(%edi)
9179fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
9189fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
9199fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
9209fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
9219fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry7_16:
9229fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
9239fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,10(%edi)
9249fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
9259fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
9269fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
9279fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
9289fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry6_16:
9299fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
9309fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,11(%edi)
9319fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
9329fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
9339fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
9349fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
9359fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry5_16:
9369fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
9379fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,12(%edi)
9389fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
9399fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
9409fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
9419fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	tstep,%edx
9429fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry4_16:
9439fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	sbbl	%ecx,%ecx
9449fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,13(%edi)
9459fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	addl	%ebp,%ebx
9469fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
9479fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	adcl	advancetable+4(,%ecx,4),%esi
9489fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry3_16:
9499fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,14(%edi)
9509fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	(%esi),%al
9519fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEntry2_16:
9529fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
9539fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstreamLEndSpan:
9549fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
9559fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
9569fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream// clear s/z, t/z, 1/z from FP stack
9579fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream//
9589fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fstp %st(0)
9599fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fstp %st(0)
9609fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	fstp %st(0)
9619fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
9629fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	pspantemp,%ebx				// restore spans pointer
9639fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movl	espan_t_pnext(%ebx),%ebx	// point to next span
9649fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	testl	%ebx,%ebx			// any more spans?
9659fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	movb	%al,15(%edi)
9669fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	jnz		LSpanLoop			// more spans
9679fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
9689fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	popl	%ebx				// restore register variables
9699fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	popl	%esi
9709fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	popl	%edi
9719fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	popl	%ebp				// restore the caller's stack frame
9729fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream	ret
9739fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream
9749fd67c44777b350dc56f3e70c88963b0d966ffc7quake upstream#endif	// id386
975