[quake3-commits] r1635 - in trunk/code: asm qcommon

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Sep 20 20:20:44 EDT 2009


Author: tma
Date: 2009-09-20 20:20:43 -0400 (Sun, 20 Sep 2009)
New Revision: 1635

Modified:
   trunk/code/asm/matha.s
   trunk/code/asm/qasm.h
   trunk/code/qcommon/q_math.c
Log:
* (bug #3639) BoxOnPlaneSide rewrite (Diego de Estrada/Patrick Bagget/Daniel
  Gibson)


Modified: trunk/code/asm/matha.s
===================================================================
--- trunk/code/asm/matha.s	2009-09-17 20:05:56 UTC (rev 1634)
+++ trunk/code/asm/matha.s	2009-09-21 00:20:43 UTC (rev 1635)
@@ -28,12 +28,6 @@
 
 #if	id386
 
-	.data
-
-	.align	4
-Ljmptab:	.long	Lcase0, Lcase1, Lcase2, Lcase3
-			.long	Lcase4, Lcase5, Lcase6, Lcase7
-
 	.text
 
 // TODO: rounding needed?
@@ -57,368 +51,4 @@
 	movl	$0xFFFFFFFF,%eax
 	ret
 
-#if 0
-
-#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
-
-#endif
-
-#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]
-	// bk000422 - warning: missing prefix `*' in absolute indirect address, maybe misassembled!
-	// bk001129 - fix from Andrew Henderson, was: Ljmptab(,%eax,4) 
-	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:
-	movl	1, %eax
-	ret
-
 #endif	// id386

Modified: trunk/code/asm/qasm.h
===================================================================
--- trunk/code/asm/qasm.h	2009-09-17 20:05:56 UTC (rev 1634)
+++ trunk/code/asm/qasm.h	2009-09-21 00:20:43 UTC (rev 1635)
@@ -34,13 +34,4 @@
 #define C(label) _##label
 #endif
 
-// plane_t structure
-// !!! if this is changed, it must be changed in q_shared.h too !!!
-#define pl_normal	0
-#define pl_dist		12
-#define pl_type		16
-#define pl_signbits	17
-#define pl_pad		18
-#define pl_size		20
-
 #endif

Modified: trunk/code/qcommon/q_math.c
===================================================================
--- trunk/code/qcommon/q_math.c	2009-09-17 20:05:56 UTC (rev 1634)
+++ trunk/code/qcommon/q_math.c	2009-09-21 00:20:43 UTC (rev 1635)
@@ -647,50 +647,14 @@
 BoxOnPlaneSide
 
 Returns 1, 2, or 1 + 2
-
-// this is the slow, general version
-int BoxOnPlaneSide2 (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
-{
-	int		i;
-	float	dist1, dist2;
-	int		sides;
-	vec3_t	corners[2];
-
-	for (i=0 ; i<3 ; i++)
-	{
-		if (p->normal[i] < 0)
-		{
-			corners[0][i] = emins[i];
-			corners[1][i] = emaxs[i];
-		}
-		else
-		{
-			corners[1][i] = emins[i];
-			corners[0][i] = emaxs[i];
-		}
-	}
-	dist1 = DotProduct (p->normal, corners[0]) - p->dist;
-	dist2 = DotProduct (p->normal, corners[1]) - p->dist;
-	sides = 0;
-	if (dist1 >= 0)
-		sides = 1;
-	if (dist2 < 0)
-		sides |= 2;
-
-	return sides;
-}
-
 ==================
 */
-
-#if !id386
-
-int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
+int BoxOnPlaneSide(vec3_t emins, vec3_t emaxs, struct cplane_s *p)
 {
-	float	dist1, dist2;
-	int		sides;
+	float	dist[2];
+	int		sides, b, i;
 
-// fast axial cases
+	// fast axial cases
 	if (p->type < 3)
 	{
 		if (p->dist <= emins[p->type])
@@ -700,292 +664,28 @@
 		return 3;
 	}
 
-// general case
-	switch (p->signbits)
+	// general case
+	dist[0] = dist[1] = 0;
+	if (p->signbits < 8) // >= 8: default case is original code (dist[0]=dist[1]=0)
 	{
-	case 0:
-		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];
-		break;
-	case 1:
-		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];
-		break;
-	case 2:
-		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];
-		break;
-	case 3:
-		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];
-		break;
-	case 4:
-		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];
-		break;
-	case 5:
-		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];
-		break;
-	case 6:
-		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];
-		break;
-	case 7:
-		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];
-		break;
-	default:
-		dist1 = dist2 = 0;		// shut up compiler
-		break;
+		for (i=0 ; i<3 ; i++)
+		{
+			b = (p->signbits >> i) & 1;
+			dist[ b] += p->normal[i]*emaxs[i];
+			dist[!b] += p->normal[i]*emins[i];
+		}
 	}
 
 	sides = 0;
-	if (dist1 >= p->dist)
+	if (dist[0] >= p->dist)
 		sides = 1;
-	if (dist2 < p->dist)
+	if (dist[1] < p->dist)
 		sides |= 2;
 
 	return sides;
 }
-#elif __GNUC__
-// use matha.s
-#else
-#pragma warning( disable: 4035 )
 
-__declspec( naked ) int BoxOnPlaneSide (vec3_t emins, vec3_t emaxs, struct cplane_s *p)
-{
-	static int bops_initialized;
-	static int Ljmptab[8];
 
-	__asm {
-
-		push ebx
-			
-		cmp bops_initialized, 1
-		je  initialized
-		mov bops_initialized, 1
-		
-		mov Ljmptab[0*4], offset Lcase0
-		mov Ljmptab[1*4], offset Lcase1
-		mov Ljmptab[2*4], offset Lcase2
-		mov Ljmptab[3*4], offset Lcase3
-		mov Ljmptab[4*4], offset Lcase4
-		mov Ljmptab[5*4], offset Lcase5
-		mov Ljmptab[6*4], offset Lcase6
-		mov Ljmptab[7*4], offset Lcase7
-			
-initialized:
-
-		mov edx,dword ptr[4+12+esp]
-		mov ecx,dword ptr[4+4+esp]
-		xor eax,eax
-		mov ebx,dword ptr[4+8+esp]
-		mov al,byte ptr[17+edx]
-		cmp al,8
-		jge Lerror
-		fld dword ptr[0+edx]
-		fld st(0)
-		jmp dword ptr[Ljmptab+eax*4]
-Lcase0:
-		fmul dword ptr[ebx]
-		fld dword ptr[0+4+edx]
-		fxch st(2)
-		fmul dword ptr[ecx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[4+ebx]
-		fld dword ptr[0+8+edx]
-		fxch st(2)
-		fmul dword ptr[4+ecx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[8+ebx]
-		fxch st(5)
-		faddp st(3),st(0)
-		fmul dword ptr[8+ecx]
-		fxch st(1)
-		faddp st(3),st(0)
-		fxch st(3)
-		faddp st(2),st(0)
-		jmp LSetSides
-Lcase1:
-		fmul dword ptr[ecx]
-		fld dword ptr[0+4+edx]
-		fxch st(2)
-		fmul dword ptr[ebx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[4+ebx]
-		fld dword ptr[0+8+edx]
-		fxch st(2)
-		fmul dword ptr[4+ecx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[8+ebx]
-		fxch st(5)
-		faddp st(3),st(0)
-		fmul dword ptr[8+ecx]
-		fxch st(1)
-		faddp st(3),st(0)
-		fxch st(3)
-		faddp st(2),st(0)
-		jmp LSetSides
-Lcase2:
-		fmul dword ptr[ebx]
-		fld dword ptr[0+4+edx]
-		fxch st(2)
-		fmul dword ptr[ecx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[4+ecx]
-		fld dword ptr[0+8+edx]
-		fxch st(2)
-		fmul dword ptr[4+ebx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[8+ebx]
-		fxch st(5)
-		faddp st(3),st(0)
-		fmul dword ptr[8+ecx]
-		fxch st(1)
-		faddp st(3),st(0)
-		fxch st(3)
-		faddp st(2),st(0)
-		jmp LSetSides
-Lcase3:
-		fmul dword ptr[ecx]
-		fld dword ptr[0+4+edx]
-		fxch st(2)
-		fmul dword ptr[ebx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[4+ecx]
-		fld dword ptr[0+8+edx]
-		fxch st(2)
-		fmul dword ptr[4+ebx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[8+ebx]
-		fxch st(5)
-		faddp st(3),st(0)
-		fmul dword ptr[8+ecx]
-		fxch st(1)
-		faddp st(3),st(0)
-		fxch st(3)
-		faddp st(2),st(0)
-		jmp LSetSides
-Lcase4:
-		fmul dword ptr[ebx]
-		fld dword ptr[0+4+edx]
-		fxch st(2)
-		fmul dword ptr[ecx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[4+ebx]
-		fld dword ptr[0+8+edx]
-		fxch st(2)
-		fmul dword ptr[4+ecx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[8+ecx]
-		fxch st(5)
-		faddp st(3),st(0)
-		fmul dword ptr[8+ebx]
-		fxch st(1)
-		faddp st(3),st(0)
-		fxch st(3)
-		faddp st(2),st(0)
-		jmp LSetSides
-Lcase5:
-		fmul dword ptr[ecx]
-		fld dword ptr[0+4+edx]
-		fxch st(2)
-		fmul dword ptr[ebx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[4+ebx]
-		fld dword ptr[0+8+edx]
-		fxch st(2)
-		fmul dword ptr[4+ecx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[8+ecx]
-		fxch st(5)
-		faddp st(3),st(0)
-		fmul dword ptr[8+ebx]
-		fxch st(1)
-		faddp st(3),st(0)
-		fxch st(3)
-		faddp st(2),st(0)
-		jmp LSetSides
-Lcase6:
-		fmul dword ptr[ebx]
-		fld dword ptr[0+4+edx]
-		fxch st(2)
-		fmul dword ptr[ecx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[4+ecx]
-		fld dword ptr[0+8+edx]
-		fxch st(2)
-		fmul dword ptr[4+ebx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[8+ecx]
-		fxch st(5)
-		faddp st(3),st(0)
-		fmul dword ptr[8+ebx]
-		fxch st(1)
-		faddp st(3),st(0)
-		fxch st(3)
-		faddp st(2),st(0)
-		jmp LSetSides
-Lcase7:
-		fmul dword ptr[ecx]
-		fld dword ptr[0+4+edx]
-		fxch st(2)
-		fmul dword ptr[ebx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[4+ecx]
-		fld dword ptr[0+8+edx]
-		fxch st(2)
-		fmul dword ptr[4+ebx]
-		fxch st(2)
-		fld st(0)
-		fmul dword ptr[8+ecx]
-		fxch st(5)
-		faddp st(3),st(0)
-		fmul dword ptr[8+ebx]
-		fxch st(1)
-		faddp st(3),st(0)
-		fxch st(3)
-		faddp st(2),st(0)
-LSetSides:
-		faddp st(2),st(0)
-		fcomp dword ptr[12+edx]
-		xor ecx,ecx
-		fnstsw ax
-		fcomp dword ptr[12+edx]
-		and ah,1
-		xor ah,1
-		add cl,ah
-		fnstsw ax
-		and ah,1
-		add ah,ah
-		add cl,ah
-		pop ebx
-		mov eax,ecx
-		ret
-Lerror:
-		int 3
-	}
-}
-#pragma warning( default: 4035 )
-
-#endif
-
 /*
 =================
 RadiusFromBounds



More information about the quake3-commits mailing list