
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/matrix.c
	mc68030
	mc68881
	XREF	_gl_error
	XREF	_gl_problem
	XREF	_gl_ResizeBuffersMESA
	XREF	_q_memcpy
	XREF	_fabs__r
	XREF	_sqrt__r
	XREF	_cos__r
	XREF	_sin__r
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err
	XREF	_CC

	SECTION "_Identity:1",DATA

_Identity
	dc.l	$3F800000,0,0,0,0,$3F800000,0,0,0,0,$3F800000
	dc.l	0,0,0,0,$3F800000

	SECTION "_matmul:0",CODE

	rts

;static void matmul( GLfloat *product, const GLfloat *a, const GLfloa
_matmul
	movem.l	d2/a2/a3,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6,-(a7)
	move.l	$54(a7),a0
	move.l	$4C(a7),a1
	move.l	$50(a7),a2
L116
;   for (i = 0;
	moveq	#0,d0
	bra	L118
L117
;      GLfloat ai0=A(i,0)
	move.l	d0,d1
	asl.l	#2,d1
	add.l	a2,d1
	move.l	d1,a3
	fmove.s	(a3),fp0
;      GLfloat ai0=A(i,0),  ai1=A(i,1)
	moveq	#$10,d1
	add.l	a2,d1
	move.l	d0,d2
	asl.l	#2,d2
	add.l	d1,d2
	move.l	d2,a3
	fmove.s	(a3),fp4
;      GLfloat ai0=A(i,0),  a
	moveq	#$20,d1
	add.l	a2,d1
	move.l	d0,d2
	asl.l	#2,d2
	add.l	d1,d2
	move.l	d2,a3
	fmove.s	(a3),fp3
;    GLfloat ai0=A
	moveq	#$30,d1
	add.l	a2,d1
	move.l	d0,d2
	asl.l	#2,d2
	add.l	d1,d2
	move.l	d2,a3
	fmove.s	(a3),fp2
;      P(i,0) = ai0 * B(0,0) + ai1 * B(1,0) + ai2 * B(2,0)
	fmove.s	(a0),fp1
	fmul.x	fp0,fp1
	moveq	#4,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp5
	fmul.x	fp4,fp5
	fadd.x	fp5,fp1
	moveq	#$8,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp5
	fmul.x	fp3,fp5
	fadd.x	fp5,fp1
	moveq	#$C,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp5
	fmul.x	fp2,fp5
	fadd.x	fp5,fp1
	move.l	d0,d1
	asl.l	#2,d1
	add.l	a1,d1
	move.l	d1,a3
	fmove.s	fp1,(a3)
;      P(i,1) = ai0 * B(0,1) + ai1 * B(1,1) + ai2 * B(2,1)
	moveq	#$10,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp1
	fmul.x	fp0,fp1
	moveq	#$14,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp5
	fmul.x	fp4,fp5
	fadd.x	fp5,fp1
	moveq	#$18,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp5
	fmul.x	fp3,fp5
	fadd.x	fp5,fp1
	moveq	#$1C,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp5
	fmul.x	fp2,fp5
	fadd.x	fp5,fp1
	moveq	#$10,d1
	add.l	a1,d1
	move.l	d0,d2
	asl.l	#2,d2
	add.l	d1,d2
	move.l	d2,a3
	fmove.s	fp1,(a3)
;      P(i,2) = ai0 * B(0,2) + ai1 * B(1,2) + ai2 * B(2,2)
	moveq	#$20,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp1
	fmul.x	fp0,fp1
	moveq	#$24,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp5
	fmul.x	fp4,fp5
	fadd.x	fp5,fp1
	moveq	#$28,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp5
	fmul.x	fp3,fp5
	fadd.x	fp5,fp1
	moveq	#$2C,d1
	add.l	a0,d1
	move.l	d1,a3
	fmove.s	(a3),fp5
	fmul.x	fp2,fp5
	fadd.x	fp5,fp1
	moveq	#$20,d1
	add.l	a1,d1
	move.l	d0,d2
	asl.l	#2,d2
	add.l	d1,d2
	move.l	d2,a3
	fmove.s	fp1,(a3)
;      P(i,3) = ai0 * B(0,3) + ai1 * B(1,3) + ai2 * B(2,3)
	moveq	#$30,d1
	add.l	a0,d1
	move.l	d1,a3
	fmul.s	(a3),fp0
	moveq	#$34,d1
	add.l	a0,d1
	move.l	d1,a3
	fmul.s	(a3),fp4
	fadd.x	fp4,fp0
	moveq	#$38,d1
	add.l	a0,d1
	move.l	d1,a3
	fmul.s	(a3),fp3
	fadd.x	fp3,fp0
	moveq	#$3C,d1
	add.l	a0,d1
	move.l	d1,a3
	fmul.s	(a3),fp2
	fadd.x	fp2,fp0
	moveq	#$30,d1
	add.l	a1,d1
	move.l	d0,d2
	asl.l	#2,d2
	add.l	d1,d2
	move.l	d2,a3
	fmove.s	fp0,(a3)
	addq.l	#1,d0
L118
	cmp.l	#4,d0
	blt	L117
L119
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
	movem.l	(a7)+,d2/a2/a3
	rts

	SECTION "_invert_matrix:0",CODE


;static GLboolean invert_matrix( const GLfloat *m, GLfloat *out )
_invert_matrix
L157	EQU	-$BC
	link	a5,#L157
	movem.l	a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5,-(a7)
	move.l	$8(a5),a0
L120
; r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3];
	lea	-$80(a5),a1
	move.l	a1,-$98(a5)
	lea	-$80(a5),a1
	moveq	#$20,d0
	add.l	a1,d0
	move.l	d0,-$9C(a5)
	lea	-$80(a5),a1
	lea	$40(a1),a2
	lea	-$80(a5),a1
	moveq	#$60,d0
	add.l	a1,d0
	move.l	d0,a4
; r0[0] = MAT(m,0,0), r0[1] = MAT(m,0,1),
	fmove.s	(a0),fp0
	move.l	-$98(a5),a1
	fmove.s	fp0,(a1)
	move.l	-$98(a5),a3
	move.l	$10(a0),4(a3)
	move.l	-$98(a5),a3
	move.l	$20(a0),$8(a3)
	move.l	-$98(a5),a3
	move.l	$30(a0),$C(a3)
	move.l	-$98(a5),a3
	move.l	#$3F800000,$10(a3)
	move.l	-$98(a5),a3
	clr.l	$1C(a3)
	move.l	-$98(a5),a3
	clr.l	$18(a3)
	move.l	-$98(a5),a3
	clr.l	$14(a3)
	move.l	-$9C(a5),a1
	move.l	4(a0),(a1)
	move.l	-$9C(a5),a3
	move.l	$14(a0),4(a3)
	move.l	-$9C(a5),a3
	move.l	$24(a0),$8(a3)
	move.l	-$9C(a5),a3
	move.l	$34(a0),$C(a3)
	move.l	-$9C(a5),a3
	move.l	#$3F800000,$14(a3)
	move.l	-$9C(a5),a3
	clr.l	$1C(a3)
	move.l	-$9C(a5),a3
	clr.l	$18(a3)
	move.l	-$9C(a5),a3
	clr.l	$10(a3)
	move.l	$8(a0),(a2)
	move.l	$18(a0),4(a2)
	move.l	$28(a0),$8(a2)
	move.l	$38(a0),$C(a2)
	move.l	#$3F800000,$18(a2)
	clr.l	$1C(a2)
	clr.l	$14(a2)
	clr.l	$10(a2)
	move.l	a4,a1
	move.l	$C(a0),(a1)
	move.l	$1C(a0),4(a4)
	move.l	$2C(a0),$8(a4)
	fmove.s	$3C(a0),fp0
	fmove.s	fp0,$C(a4)
	move.l	#$3F800000,$1C(a4)
	clr.l	$18(a4)
	clr.l	$14(a4)
	clr.l	$10(a4)
; if (fabs(r3[0])>fabs(r2[0])) SWAP_ROWS(r3, r2)
	move.l	a4,a0
	fmove.s	(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	fmove.s	(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L122
L121
; if (fabs(r3[0])>fabs(
	move.l	a4,a0
; if (fabs(r3[0])>fabs(
	move.l	a2,a4
; if (fabs(r3[0])>fabs(
	move.l	a0,a2
L122
; if (fabs(r2[0])>fabs(r1[0])) SWAP_ROWS(r2, r1)
	fmove.s	(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	-$9C(a5),a0
	fmove.s	(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L124
L123
; if (fabs(r2[0])>fabs(
	move.l	a2,a0
; if (fabs(r2[0])>fabs(
	move.l	-$9C(a5),a2
; if (fabs(r2[0])>fabs(
	move.l	a0,-$9C(a5)
L124
; if (fabs(r1[0])>fabs(r0[0])) SWAP_ROWS(r1, r0)
	move.l	-$9C(a5),a0
	fmove.s	(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	-$98(a5),a0
	fmove.s	(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L126
L125
; if (fabs(r1[0])>fabs(
	move.l	-$9C(a5),a0
; if (fabs(r1[0])>fabs(
	move.l	-$98(a5),-$9C(a5)
; if (fabs(r1[0])>fabs(
	move.l	a0,-$98(a5)
L126
; if (0.0 == r0[0])  
	move.l	-$98(a5),a0
	fmove.s	(a0),fp0
	ftst.d	fp0
	fbne.b	L128
L127
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L128
; m1 = r1[0]/r0[0];
	move.l	-$9C(a5),a0
	fmove.s	(a0),fp3
	move.l	-$98(a5),a0
	fmove.s	(a0),fp0
	fdiv.x	fp0,fp3
; m2 = r2[0]/r0[0];
	fmove.s	(a2),fp2
	move.l	-$98(a5),a0
	fmove.s	(a0),fp0
	fdiv.x	fp0,fp2
; m3 = r3[0]/r0[0];
	move.l	a4,a0
	fmove.s	(a0),fp1
	move.l	-$98(a5),a0
	fmove.s	(a0),fp0
	fdiv.x	fp0,fp1
; s = r0[1];
	move.l	-$98(a5),a1
	fmove.s	4(a1),fp0
; r1[1] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$9C(a5),a1
	lea	4(a1),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r2[1] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	4(a2),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r3[1] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	4(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp4,fp0
	fmove.s	fp0,(a0)
; s = r0[2];
	move.l	-$98(a5),a1
	fmove.s	$8(a1),fp0
; r1[2] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$9C(a5),a1
	lea	$8(a1),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r2[2] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$8(a2),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r3[2] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$8(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp4,fp0
	fmove.s	fp0,(a0)
; s = r0[3];
	move.l	-$98(a5),a1
	fmove.s	$C(a1),fp0
; r1[3] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$9C(a5),a1
	lea	$C(a1),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r2[3] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$C(a2),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r3[3] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$C(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp4,fp0
	fmove.s	fp0,(a0)
; s = r0[4];
	move.l	-$98(a5),a1
	fmove.s	$10(a1),fp0
; if (s != 0.0) 
	fmove.x	fp0,fp4
	ftst.d	fp4
	fbeq.b	L130
L129
; r1[4] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$9C(a5),a1
	lea	$10(a1),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r2[4] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$10(a2),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r3[4] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$10(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp4,fp0
	fmove.s	fp0,(a0)
L130
; s = r0[5];
	move.l	-$98(a5),a1
	fmove.s	$14(a1),fp0
; if (s != 0.0) 
	fmove.x	fp0,fp4
	ftst.d	fp4
	fbeq.b	L132
L131
; r1[5] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$9C(a5),a1
	lea	$14(a1),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r2[5] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$14(a2),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r3[5] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$14(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp4,fp0
	fmove.s	fp0,(a0)
L132
; s = r0[6];
	move.l	-$98(a5),a1
	fmove.s	$18(a1),fp0
; if (s != 0.0) 
	fmove.x	fp0,fp4
	ftst.d	fp4
	fbeq.b	L134
L133
; r1[6] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$9C(a5),a1
	lea	$18(a1),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r2[6] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$18(a2),a0
	fmove.s	(a0),fp4
	fsub.x	fp5,fp4
	fmove.s	fp4,(a0)
; r3[6] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$18(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp4,fp0
	fmove.s	fp0,(a0)
L134
; s = r0[7];
	move.l	-$98(a5),a1
	fmove.s	$1C(a1),fp0
; if (s != 0.0) 
	fmove.x	fp0,fp4
	ftst.d	fp4
	fbeq.b	L136
L135
; r1[7] -= m1 * s;
	fmul.x	fp0,fp3
	move.l	-$9C(a5),a1
	lea	$1C(a1),a0
	fmove.s	(a0),fp4
	fsub.x	fp3,fp4
	fmove.s	fp4,(a0)
; r2[7] -= m2 * s;
	fmul.x	fp0,fp2
	lea	$1C(a2),a0
	fmove.s	(a0),fp3
	fsub.x	fp2,fp3
	fmove.s	fp3,(a0)
; r3[7] -= m3 * s;
	fmul.x	fp0,fp1
	lea	$1C(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp1,fp0
	fmove.s	fp0,(a0)
L136
; if (fabs(r3[1])>fabs(r2[1])) SWAP_ROWS(r3, r2)
	fmove.s	4(a4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	fmove.s	4(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L138
L137
; if (fabs(r3[1])>fabs(
	move.l	a4,a0
; if (fabs(r3[1])>fabs(
	move.l	a2,a4
; if (fabs(r3[1])>fabs(
	move.l	a0,a2
L138
; if (fabs(r2[1])>fabs(r1[1])) SWAP_ROWS(r2, r1)
	fmove.s	4(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	-$9C(a5),a1
	fmove.s	4(a1),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L140
L139
; if (fabs(r2[1])>fabs(
	move.l	a2,a0
; if (fabs(r2[1])>fabs(
	move.l	-$9C(a5),a2
; if (fabs(r2[1])>fabs(
	move.l	a0,-$9C(a5)
L140
; if (0.0 == r1[1])  
	move.l	-$9C(a5),a1
	fmove.s	4(a1),fp0
	ftst.d	fp0
	fbne.b	L142
L141
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L142
; m2 = r2[1]/r1[1];
	move.l	-$9C(a5),a1
	fmove.s	4(a2),fp2
	fdiv.s	4(a1),fp2
; m3 = r3[1]/r1[1];
	move.l	-$9C(a5),a1
	fmove.s	4(a4),fp1
	fdiv.s	4(a1),fp1
; r2[2] -= m2 * r1[2];
	move.l	-$9C(a5),a1
	fmove.x	fp2,fp3
	fmul.s	$8(a1),fp3
	lea	$8(a2),a0
	fmove.s	(a0),fp0
	fsub.x	fp3,fp0
	fmove.s	fp0,(a0)
; r3[2] -= m3 * r1[2];
	move.l	-$9C(a5),a1
	fmove.x	fp1,fp3
	fmul.s	$8(a1),fp3
	lea	$8(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp3,fp0
	fmove.s	fp0,(a0)
; r2[3] -= m2 * r1[3];
	move.l	-$9C(a5),a1
	fmove.x	fp2,fp3
	fmul.s	$C(a1),fp3
	lea	$C(a2),a0
	fmove.s	(a0),fp0
	fsub.x	fp3,fp0
	fmove.s	fp0,(a0)
; r3[3] -= m3 * r1[3];
	move.l	-$9C(a5),a1
	fmove.x	fp1,fp3
	fmul.s	$C(a1),fp3
	lea	$C(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp3,fp0
	fmove.s	fp0,(a0)
; s = r1[4];
	move.l	-$9C(a5),a1
	fmove.s	$10(a1),fp0
; if (0.0 != s) 
	fmove.x	fp0,fp3
	ftst.d	fp3
	fbeq.b	L144
L143
; r2[4] -= m2 * s;
	fmove.x	fp2,fp4
	fmul.x	fp0,fp4
	lea	$10(a2),a0
	fmove.s	(a0),fp3
	fsub.x	fp4,fp3
	fmove.s	fp3,(a0)
; r3[4] -= m3 * s;
	fmove.x	fp1,fp3
	fmul.x	fp0,fp3
	lea	$10(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp3,fp0
	fmove.s	fp0,(a0)
L144
; s = r1[5];
	move.l	-$9C(a5),a1
	fmove.s	$14(a1),fp0
; if (0.0 != s) 
	fmove.x	fp0,fp3
	ftst.d	fp3
	fbeq.b	L146
L145
; r2[5] -= m2 * s;
	fmove.x	fp2,fp4
	fmul.x	fp0,fp4
	lea	$14(a2),a0
	fmove.s	(a0),fp3
	fsub.x	fp4,fp3
	fmove.s	fp3,(a0)
; r3[5] -= m3 * s;
	fmove.x	fp1,fp3
	fmul.x	fp0,fp3
	lea	$14(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp3,fp0
	fmove.s	fp0,(a0)
L146
; s = r1[6];
	move.l	-$9C(a5),a1
	fmove.s	$18(a1),fp0
; if (0.0 != s) 
	fmove.x	fp0,fp3
	ftst.d	fp3
	fbeq.b	L148
L147
; r2[6] -= m2 * s;
	fmove.x	fp2,fp4
	fmul.x	fp0,fp4
	lea	$18(a2),a0
	fmove.s	(a0),fp3
	fsub.x	fp4,fp3
	fmove.s	fp3,(a0)
; r3[6] -= m3 * s;
	fmove.x	fp1,fp3
	fmul.x	fp0,fp3
	lea	$18(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp3,fp0
	fmove.s	fp0,(a0)
L148
; s = r1[7];
	move.l	-$9C(a5),a1
	fmove.s	$1C(a1),fp0
; if (0.0 != s) 
	fmove.x	fp0,fp3
	ftst.d	fp3
	fbeq.b	L150
L149
; r2[7] -= m2 * s;
	fmul.x	fp0,fp2
	lea	$1C(a2),a0
	fmove.s	(a0),fp3
	fsub.x	fp2,fp3
	fmove.s	fp3,(a0)
; r3[7] -= m3 * s;
	fmul.x	fp0,fp1
	lea	$1C(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp1,fp0
	fmove.s	fp0,(a0)
L150
; if (fabs(r3[2])>fabs(r2[2])) SWAP_ROWS(r3, r2)
	fmove.s	$8(a4),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	fmove.s	$8(a2),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L152
L151
; if (fabs(r3[2])>fabs(
	move.l	a4,a0
; if (fabs(r3[2])>fabs(
	move.l	a2,a4
; if (fabs(r3[2])>fabs(
	move.l	a0,a2
L152
; if (0.0 == r2[2])  
	fmove.s	$8(a2),fp0
	ftst.d	fp0
	fbne.b	L154
L153
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L154
; m3 = r3[2]/r2[2];
	fmove.s	$8(a4),fp1
	fdiv.s	$8(a2),fp1
; r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4],
	fmove.x	fp1,fp2
	fmul.s	$C(a2),fp2
	lea	$C(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmove.x	fp1,fp2
	fmul.s	$10(a2),fp2
	lea	$10(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmove.x	fp1,fp2
	fmul.s	$14(a2),fp2
	lea	$14(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmove.x	fp1,fp2
	fmul.s	$18(a2),fp2
	lea	$18(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmul.s	$1C(a2),fp1
	lea	$1C(a4),a0
	fmove.s	(a0),fp0
	fsub.x	fp1,fp0
	fmove.s	fp0,(a0)
; if (0.0 == r3[3]) 
	fmove.s	$C(a4),fp0
	ftst.d	fp0
	fbne.b	L156
L155
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L156
; s = 1.0/r3[3];
	fmove.s	$C(a4),fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
; r3[4] *= s;
	lea	$10(a4),a0
	fmove.s	(a0),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,(a0)
; r3[5] *= s;
	lea	$14(a4),a0
	fmove.s	(a0),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,(a0)
; r3[6] *= s;
	lea	$18(a4),a0
	fmove.s	(a0),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,(a0)
; r3[7] *= s;
	lea	$1C(a4),a0
	fmove.s	(a0),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,(a0)
; m2 = r2[3];
	fmove.s	$C(a2),fp2
; s  = 1.0/r2[2];
	fmove.s	$8(a2),fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
; r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2)
	fmove.s	$10(a4),fp3
	fmul.x	fp2,fp3
	fmove.s	$10(a2),fp1
	fsub.x	fp3,fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,$10(a2)
	fmove.s	$14(a4),fp3
	fmul.x	fp2,fp3
	fmove.s	$14(a2),fp1
	fsub.x	fp3,fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,$14(a2)
	fmove.s	$18(a4),fp3
	fmul.x	fp2,fp3
	fmove.s	$18(a2),fp1
	fsub.x	fp3,fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,$18(a2)
	fmove.s	$1C(a4),fp3
	fmul.x	fp2,fp3
	fmove.s	$1C(a2),fp1
	fsub.x	fp3,fp1
	fmul.x	fp1,fp0
	fmove.s	fp0,$1C(a2)
; m1 = r1[3];
	move.l	-$9C(a5),a1
	fmove.s	$C(a1),fp3
; r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1,
	fmove.s	$10(a4),fp1
	fmul.x	fp3,fp1
	move.l	-$9C(a5),a1
	lea	$10(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp1,fp0
	fmove.s	fp0,(a0)
	fmove.s	$14(a4),fp1
	fmul.x	fp3,fp1
	move.l	-$9C(a5),a1
	lea	$14(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp1,fp0
	fmove.s	fp0,(a0)
	fmove.s	$18(a4),fp1
	fmul.x	fp3,fp1
	move.l	-$9C(a5),a1
	lea	$18(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp1,fp0
	fmove.s	fp0,(a0)
	fmove.s	$1C(a4),fp1
	fmul.x	fp3,fp1
	move.l	-$9C(a5),a1
	lea	$1C(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp1,fp0
	fmove.s	fp0,(a0)
; m0 = r0[3];
	move.l	-$98(a5),a1
	fmove.s	$C(a1),fp1
; r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0,
	fmove.s	$10(a4),fp2
	fmul.x	fp1,fp2
	move.l	-$98(a5),a1
	lea	$10(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmove.s	$14(a4),fp2
	fmul.x	fp1,fp2
	move.l	-$98(a5),a1
	lea	$14(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmove.s	$18(a4),fp2
	fmul.x	fp1,fp2
	move.l	-$98(a5),a1
	lea	$18(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmove.s	$1C(a4),fp2
	fmul.x	fp1,fp2
	move.l	-$98(a5),a1
	lea	$1C(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
; m1 = r1[2];
	move.l	-$9C(a5),a1
	fmove.s	$8(a1),fp3
; s  = 1.0/r1[1];
	move.l	-$9C(a5),a1
	fmove.s	4(a1),fp0
	fmove.d	#$.3FF00000.00000000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
; r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1)
	move.l	-$9C(a5),a1
	fmove.s	$10(a2),fp2
	fmul.x	fp3,fp2
	fmove.s	$10(a1),fp1
	fsub.x	fp2,fp1
	fmul.x	fp0,fp1
	move.l	-$9C(a5),a1
	fmove.s	fp1,$10(a1)
	move.l	-$9C(a5),a1
	fmove.s	$14(a2),fp2
	fmul.x	fp3,fp2
	fmove.s	$14(a1),fp1
	fsub.x	fp2,fp1
	fmul.x	fp0,fp1
	move.l	-$9C(a5),a1
	fmove.s	fp1,$14(a1)
	move.l	-$9C(a5),a1
	fmove.s	$18(a2),fp2
	fmul.x	fp3,fp2
	fmove.s	$18(a1),fp1
	fsub.x	fp2,fp1
	fmul.x	fp0,fp1
	move.l	-$9C(a5),a1
	fmove.s	fp1,$18(a1)
	move.l	-$9C(a5),a1
	fmove.s	$1C(a2),fp2
	fmul.x	fp3,fp2
	fmove.s	$1C(a1),fp1
	fsub.x	fp2,fp1
	fmul.x	fp1,fp0
	move.l	-$9C(a5),a1
	fmove.s	fp0,$1C(a1)
; m0 = r0[2];
	move.l	-$98(a5),a1
	fmove.s	$8(a1),fp1
; r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0,
	fmove.s	$10(a2),fp2
	fmul.x	fp1,fp2
	move.l	-$98(a5),a1
	lea	$10(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmove.s	$14(a2),fp2
	fmul.x	fp1,fp2
	move.l	-$98(a5),a1
	lea	$14(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmove.s	$18(a2),fp2
	fmul.x	fp1,fp2
	move.l	-$98(a5),a1
	lea	$18(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmove.s	$1C(a2),fp2
	fmul.x	fp1,fp2
	move.l	-$98(a5),a1
	lea	$1C(a1),a0
	fmove.s	(a0),fp0
	fsub.x	fp2,fp0
	fmove.s	fp0,(a0)
; m0 = r0[1];
	move.l	-$98(a5),a1
	fmove.s	4(a1),fp1
; s  = 1.0/r0[0];
	move.l	-$98(a5),a0
	fmove.s	(a0),fp0
	fmove.d	#$.3FF00000.00000000,fp2
	fdiv.x	fp0,fp2
	fmove.x	fp2,fp0
; r0[4] = s * (r0[4] - r1[4] * m0), r0[5] = s * (r0[5] - r1[5] * m0)
	move.l	-$98(a5),a1
	fmove.s	$10(a1),fp2
	move.l	-$9C(a5),a1
	fmove.s	$10(a1),fp3
	fmul.x	fp1,fp3
	fsub.x	fp3,fp2
	fmul.x	fp0,fp2
	move.l	-$98(a5),a1
	fmove.s	fp2,$10(a1)
	move.l	-$98(a5),a1
	fmove.s	$14(a1),fp2
	move.l	-$9C(a5),a1
	fmove.s	$14(a1),fp3
	fmul.x	fp1,fp3
	fsub.x	fp3,fp2
	fmul.x	fp0,fp2
	move.l	-$98(a5),a1
	fmove.s	fp2,$14(a1)
	move.l	-$98(a5),a1
	fmove.s	$18(a1),fp2
	move.l	-$9C(a5),a1
	fmove.s	$18(a1),fp3
	fmul.x	fp1,fp3
	fsub.x	fp3,fp2
	fmul.x	fp0,fp2
	move.l	-$98(a5),a1
	fmove.s	fp2,$18(a1)
	move.l	-$98(a5),a1
	fmove.s	$1C(a1),fp2
	move.l	-$9C(a5),a1
	fmove.s	$1C(a1),fp3
	fmul.x	fp1,fp3
	fsub.x	fp3,fp2
	fmul.x	fp2,fp0
	move.l	-$98(a5),a1
	fmove.s	fp0,$1C(a1)
; MAT(out,0,0) = r0[4];
	move.l	-$98(a5),a1
	move.l	$C(a5),a0
	move.l	$10(a1),(a0)
; MAT(out,0,1) = r0[5],
	move.l	-$98(a5),a1
	fmove.s	$14(a1),fp0
	move.l	$C(a5),a1
	fmove.s	fp0,$10(a1)
	move.l	-$98(a5),a1
	fmove.s	$18(a1),fp0
	move.l	$C(a5),a1
	fmove.s	fp0,$20(a1)
; MAT(out,0,3) = r0[7],
	move.l	-$98(a5),a1
	fmove.s	$1C(a1),fp0
	move.l	$C(a5),a1
	fmove.s	fp0,$30(a1)
	move.l	-$9C(a5),a1
	fmove.s	$10(a1),fp0
	move.l	$C(a5),a1
	fmove.s	fp0,4(a1)
; MAT(out,1,1) = r1[5],
	move.l	-$9C(a5),a1
	fmove.s	$14(a1),fp0
	move.l	$C(a5),a1
	fmove.s	fp0,$14(a1)
	move.l	-$9C(a5),a1
	fmove.s	$18(a1),fp0
	move.l	$C(a5),a1
	fmove.s	fp0,$24(a1)
; MAT(out,1,3) = r1[7],
	move.l	-$9C(a5),a1
	fmove.s	$1C(a1),fp0
	move.l	$C(a5),a1
	fmove.s	fp0,$34(a1)
	move.l	$C(a5),a1
	move.l	$10(a2),$8(a1)
; MAT(out,2,1) = r2[5],
	move.l	$C(a5),a1
	move.l	$14(a2),$18(a1)
	move.l	$C(a5),a1
	move.l	$18(a2),$28(a1)
;            && m[3]==0.0F && m[7]==0.0F && m[11]==0.
	move.l	$C(a5),a1
	move.l	$1C(a2),$38(a1)
	move.l	$C(a5),a1
	move.l	$10(a4),$C(a1)
; MAT(out,3,1) = r3[5],
	move.l	$C(a5),a1
	move.l	$14(a4),$1C(a1)
	move.l	$C(a5),a1
	move.l	$18(a4),$2C(a1)
; MAT(out,3,3) = r3[7];
	move.l	$C(a5),a1
	move.l	$1C(a4),$3C(a1)
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_is_identity:0",CODE


;static GLboolean is_identity( const GLfloat m[16] )
_is_identity
	move.l	4(a7),a0
L158
;   if (   m[0]==1.0F && m[4]==0.0F && m[ 8]==0.0F && m[12]==0.0F
	fmove.s	(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L175
L159
	fmove.s	$10(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L160
	fmove.s	$20(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L161
	fmove.s	$30(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L162
	fmove.s	4(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L163
	fmove.s	$14(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L175
L164
	fmove.s	$24(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L165
	fmove.s	$34(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L166
	fmove.s	$8(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L167
	fmove.s	$18(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L168
	fmove.s	$28(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L175
L169
	fmove.s	$38(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L170
	fmove.s	$C(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L171
	fmove.s	$1C(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L172
	fmove.s	$2C(a0),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L175
L173
	fmove.s	$3C(a0),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L175
L174
	moveq	#1,d0
	rts
L175
	moveq	#0,d0
	rts

	SECTION "_gl_analyze_modelview_matrix:0",CODE


;void gl_analyze_modelview_matrix( GLcontext *ctx )
	XDEF	_gl_analyze_modelview_matrix
_gl_analyze_modelview_matrix
	movem.l	a2/a3,-(a7)
	move.l	$C(a7),a3
L176
;   const GLfloat *m = ctx->ModelViewMatrix;
	lea	$9FA(a3),a2
;   if (is_identity(m)) 
	move.l	a2,-(a7)
	jsr	_is_identity
	addq.w	#4,a7
	tst.b	d0
	beq.b	L178
L177
;      ctx->ModelViewMatrixType = MATRIX_IDENTITY;
	move.l	a3,a0
	move.l	#1,$9F6(a0)
	bra	L208
L178
;   else if (                 m[4]==0.0F && m[ 8]==0.0F      
	fmove.s	$10(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L179
	fmove.s	$20(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L180
	fmove.s	4(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L181
	fmove.s	$24(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L182
	fmove.s	$8(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L183
	fmove.s	$18(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L184
	fmove.s	$28(a2),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L191
L185
	fmove.s	$38(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L186
	fmove.s	$C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L187
	fmove.s	$1C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L188
	fmove.s	$2C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L191
L189
	fmove.s	$3C(a2),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L191
L190
;      ctx->ModelViewMatrixType = MATRIX_2D_NO_ROT;
	move.l	a3,a0
	move.l	#5,$9F6(a0)
	bra	L208
L191
;   else if (                               m[ 8]==0.0F      
	fmove.s	$20(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L202
L192
	fmove.s	$24(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L202
L193
	fmove.s	$8(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L202
L194
	fmove.s	$18(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L202
L195
	fmove.s	$28(a2),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L202
L196
	fmove.s	$38(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L202
L197
	fmove.s	$C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L202
L198
	fmove.s	$1C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L202
L199
	fmove.s	$2C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L202
L200
	fmove.s	$3C(a2),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L202
L201
;      ctx->ModelViewMatrixType = MATRIX_2D;
	move.l	a3,a0
	move.l	#4,$9F6(a0)
	bra.b	L208
L202
;   else if (m[3]==0.0F && m[7]==0.0F && m[11]==0.0F && m[15]
	fmove.s	$C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L207
L203
	fmove.s	$1C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L207
L204
	fmove.s	$2C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L207
L205
	fmove.s	$3C(a2),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L207
L206
;      ctx->ModelViewMatrixType = MATRIX_3D;
	move.l	a3,a0
	move.l	#6,$9F6(a0)
	bra.b	L208
L207
;      ctx->ModelViewMatrixType = MATRIX_GENERAL;
	move.l	a3,a0
	clr.l	$9F6(a0)
L208
;   if (!invert_matrix( ctx->ModelViewMatrix, ctx->ModelViewInv ))
	pea	$A3A(a3)
	pea	$9FA(a3)
	jsr	_invert_matrix
	addq.w	#$8,a7
	tst.b	d0
	bne.b	L210
L209
; ctx->ModelViewIn
	pea	$40.w
	pea	_Identity(a6)
	pea	$A3A(a3)
	jsr	_q_memcpy
	add.w	#$C,a7
L210
;   ctx->NewModelViewMatrix = GL_FALSE;
	move.l	a3,a0
	clr.b	$9F4(a0)
	movem.l	(a7)+,a2/a3
	rts

	SECTION "_gl_analyze_projection_matrix:0",CODE


;void gl_analyze_projection_matrix( GLcontext *ctx )
	XDEF	_gl_analyze_projection_matrix
_gl_analyze_projection_matrix
	movem.l	a2/a3,-(a7)
	move.l	$C(a7),a3
L211
;   const GLfloat *m = ctx->ProjectionMatrix;
	lea	$1284(a3),a2
;   if (is_identity(m)) 
	move.l	a2,-(a7)
	jsr	_is_identity
	addq.w	#4,a7
	tst.b	d0
	beq.b	L213
L212
;      ctx->ProjectionMatrixType = MATRIX_IDENTITY;
	move.l	a3,a0
	move.l	#1,$1280(a0)
	bra	L236
L213
;      M(1,3) = 0.0F;
	fmove.s	$10(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L224
L214
	fmove.s	$20(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L224
L215
	fmove.s	4(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L224
L216
	fmove.s	$24(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L224
L217
	fmove.s	$8(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L224
L218
	fmove.s	$18(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L224
L219
	fmove.s	$C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L224
L220
	fmove.s	$1C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L224
L221
	fmove.s	$2C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L224
L222
	fmove.s	$3C(a2),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L224
L223
;      ctx->ProjectionMatrixType = MATRIX_ORTHO;
	move.l	a3,a0
	move.l	#2,$1280(a0)
	bra	L236
L224
;   else if (                 m[4]==0.0F                 && m
	fmove.s	$10(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L235
L225
	fmove.s	$30(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L235
L226
	fmove.s	4(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L235
L227
	fmove.s	$34(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L235
L228
	fmove.s	$8(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L235
L229
	fmove.s	$18(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L235
L230
	fmove.s	$C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L235
L231
	fmove.s	$1C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L235
L232
	fmove.s	$2C(a2),fp0
	fcmp.s	#$.BF800000,fp0
	fbne.b	L235
L233
	fmove.s	$3C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L235
L234
;      ctx->ProjectionMatrixType = MATRIX_PERSPECTIVE;
	move.l	a3,a0
	move.l	#3,$1280(a0)
	bra.b	L236
L235
;      ctx->ProjectionMatrixType = MATRIX_GENERAL;
	move.l	a3,a0
	clr.l	$1280(a0)
L236
;   ctx->NewProjectionMatrix = GL_FALSE;
	move.l	a3,a0
	clr.b	$127E(a0)
	movem.l	(a7)+,a2/a3
	rts

	SECTION "_gl_analyze_texture_matrix:0",CODE


;void gl_analyze_texture_matrix( GLcontext *ctx )
	XDEF	_gl_analyze_texture_matrix
_gl_analyze_texture_matrix
	movem.l	d2/a2/a3,-(a7)
	move.l	$10(a7),a3
L237
;   for (texSet = 0;
	moveq	#0,d2
	bra	L258
L238
;      const GLfloat *m = ctx->TextureMatrix[texSet];
	lea	$1BD2(a3),a0
	move.l	d2,d0
	asl.l	#6,d0
	lea	0(a0,d0.l),a2
;      if (is_identity(m)) 
	move.l	a2,-(a7)
	jsr	_is_identity
	addq.w	#4,a7
	tst.b	d0
	beq.b	L240
L239
;         ctx->TextureMatrixType[texSet] = MATRIX_IDENTITY;
	lea	$1BCA(a3),a0
	move.l	#1,0(a0,d2.l*4)
	bra	L257
L240
;      else if (                               m[ 8]==0.0F
	fmove.s	$20(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L251
L241
	fmove.s	$24(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L251
L242
	fmove.s	$8(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L251
L243
	fmove.s	$18(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L251
L244
	fmove.s	$28(a2),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L251
L245
	fmove.s	$38(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L251
L246
	fmove.s	$C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L251
L247
	fmove.s	$1C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L251
L248
	fmove.s	$2C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L251
L249
	fmove.s	$3C(a2),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L251
L250
;         ctx->TextureMatrixType[texSet] = MATRIX_2D;
	lea	$1BCA(a3),a0
	move.l	#4,0(a0,d2.l*4)
	bra.b	L257
L251
;      else if (m[3]==0.0F && m[7]==0.0F && m[11]==0.0F &&
	fmove.s	$C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L256
L252
	fmove.s	$1C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L256
L253
	fmove.s	$2C(a2),fp0
	fcmp.s	#$.00000000,fp0
	fbne.b	L256
L254
	fmove.s	$3C(a2),fp0
	fcmp.s	#$.3F800000,fp0
	fbne.b	L256
L255
;         ctx->TextureMatrixType[texSet] = MATRIX_3D;
	lea	$1BCA(a3),a0
	move.l	#6,0(a0,d2.l*4)
	bra.b	L257
L256
;         ctx->TextureMatrixType[texSet] = MATRIX_GENERAL;
	lea	$1BCA(a3),a0
	clr.l	0(a0,d2.l*4)
L257
	addq.l	#1,d2
L258
	cmp.l	#2,d2
	blo	L238
L259
;   ctx->NewTextureMatrix = GL_FALSE;
	move.l	a3,a0
	clr.b	$1BC8(a0)
	movem.l	(a7)+,d2/a2/a3
	rts

	SECTION "_gl_Frustum:0",CODE


;void gl_Frustum( GLcontext *ctx,
	XDEF	_gl_Frustum
_gl_Frustum
L267	EQU	-$64
	link	a5,#L267
	move.l	a2,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	move.l	$8(a5),a2
	fmove.d	$2C(a5),fp2
	fmove.d	$34(a5),fp3
	fmove.d	$24(a5),fp4
	fmove.d	$14(a5),fp5
	fmove.d	$1C(a5),fp7
L261
;   if (nearval<=0.0 || farval<=0.0) 
	fcmp.d	#$.00000000.00000000,fp2
	fbole.b	L263
L262
	fcmp.d	#$.00000000.00000000,fp3
	fbogt.b	L264
L263
;      gl_error( ctx,  GL_INVALID_VALUE, "glFrustum(near or far)
	move.l	#L260,-(a7)
	pea	$501.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
L264
;   x = (2.0*nearval) / (right-left);
	fmove.x	fp2,fp0
	fmul.d	#$.40000000.00000000,fp0
	fmove.x	fp5,fp1
	fsub.d	$C(a5),fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-4(a5)
;   y = (2.0*nearval) / (top-bottom);
	fmove.x	fp2,fp0
	fmul.d	#$.40000000.00000000,fp0
	fmove.x	fp4,fp1
	fsub.x	fp7,fp1
	fdiv.x	fp1,fp0
	fmove.s	fp0,-$8(a5)
;   a = (right+left) / (right-left);
	fmove.x	fp5,fp0
	fadd.d	$C(a5),fp0
	fsub.d	$C(a5),fp5
	fdiv.x	fp5,fp0
	fmove.s	fp0,-$C(a5)
;   b = (top+bottom) / (top-bottom);
	fmove.x	fp4,fp0
	fadd.x	fp7,fp0
	fsub.x	fp7,fp4
	fdiv.x	fp4,fp0
	fmove.x	fp0,fp5
;   c = -(farval+nearval) / ( farval-nearval);
	fmove.x	fp3,fp0
	fadd.x	fp2,fp0
	fneg.d	fp0
	fmove.x	fp3,fp1
	fsub.x	fp2,fp1
	fdiv.x	fp1,fp0
	fmove.x	fp0,fp4
;   d = -(2.0*farval*nearval) / (farval-nearval);
	fmove.x	fp3,fp0
	fmul.d	#$.40000000.00000000,fp0
	fmul.x	fp2,fp0
	fneg.d	fp0
	fmove.x	fp3,fp1
	fsub.x	fp2,fp1
	fdiv.x	fp1,fp0
;   M(0,0) = x;
	move.l	-4(a5),-$58(a5)
;     M(0,1) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$10(a0)
;  M(0,2) = a;
	lea	-$58(a5),a0
	move.l	-$C(a5),$20(a0)
;      M(0,3) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$30(a0)
;   M(1,0) = 0.0F;
	lea	-$58(a5),a0
	clr.l	4(a0)
;  M(1,1) = y;
	lea	-$58(a5),a0
	move.l	-$8(a5),$14(a0)
;     M(1,2) = b;
	lea	-$58(a5),a0
	fmove.s	fp5,$24(a0)
;      M(1,3) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$34(a0)
;   M(2,0) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$8(a0)
;  M(2,1) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$18(a0)
;  M(2,2) = c;
	lea	-$58(a5),a0
	fmove.s	fp4,$28(a0)
;      M(2,3) = d;
	lea	-$58(a5),a0
	fmove.s	fp0,$38(a0)
;   M(3,0) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$C(a0)
;  M(3,1) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$1C(a0)
;  M(3,2) = -1.0F;
	lea	-$58(a5),a0
	move.l	#$BF800000,$2C(a0)
;  M(3,3) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$3C(a0)
;   gl_MultMatrixf( ctx, m );
	pea	-$58(a5)
	move.l	a2,-(a7)
	jsr	_gl_MultMatrixf
	addq.w	#$8,a7
;   ctx->NearFarStack[ctx->ProjectionStackDepth][0] = nearval;
	fmove.x	fp2,fp0
	lea	$1AC8(a2),a0
	move.l	$12C4(a2),d0
	fmove.s	fp0,0(a0,d0.l*8)
;   ctx->NearFarStack[ctx->ProjectionStackDepth][1] = farval;
	fmove.x	fp3,fp0
	lea	$1AC8(a2),a0
	move.l	$12C4(a2),d0
	lea	0(a0,d0.l*8),a0
	fmove.s	fp0,4(a0)
;   if (ctx->Driver.NearFar) 
	tst.l	$97C(a2)
	beq.b	L266
L265
;      (*ctx->Driver.NearFar)( ctx, nearval, farval );
	fmove.x	fp3,fp0
	fmove.s	fp0,-(a7)
	fmove.x	fp2,fp0
	fmove.s	fp0,-(a7)
	move.l	a2,-(a7)
	move.l	$97C(a2),a0
	jsr	(a0)
	add.w	#$C,a7
L266
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	move.l	(a7)+,a2
	unlk	a5
	rts

L260
	dc.b	'glFrustum(near or far)',0

	SECTION "_gl_Ortho:0",CODE


;void gl_Ortho( GLcontext *ctx,
	XDEF	_gl_Ortho
_gl_Ortho
L271	EQU	-$64
	link	a5,#L271
	move.l	a2,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	move.l	$8(a5),a2
	fmove.d	$24(a5),fp1
	fmove.d	$14(a5),fp2
	fmove.d	$2C(a5),fp3
	fmove.d	$34(a5),fp4
	fmove.d	$1C(a5),fp5
	fmove.d	$C(a5),fp7
L268
;   x = 2.0 / (right-left);
	fmove.x	fp2,fp0
	fsub.x	fp7,fp0
	fmove.d	#$.40000000.00000000,fp6
	fdiv.x	fp0,fp6
	fmove.x	fp6,fp0
	fmove.s	fp0,-4(a5)
;   y = 2.0 / (top-bottom);
	fmove.x	fp1,fp0
	fsub.x	fp5,fp0
	fmove.d	#$.40000000.00000000,fp6
	fdiv.x	fp0,fp6
	fmove.x	fp6,fp0
	fmove.s	fp0,-$8(a5)
;   z = -2.0 / (farval-nearval);
	fmove.x	fp4,fp0
	fsub.x	fp3,fp0
	fmove.d	#$.C0000000.00000000,fp6
	fdiv.x	fp0,fp6
	fmove.x	fp6,fp0
	fmove.s	fp0,-$C(a5)
;   tx = -(right+left) / (right-left);
	fmove.x	fp2,fp0
	fadd.x	fp7,fp0
	fneg.d	fp0
	fsub.x	fp7,fp2
	fdiv.x	fp2,fp0
	fmove.x	fp0,fp6
;   ty = -(top+bottom) / (top-bottom);
	fmove.x	fp1,fp0
	fadd.x	fp5,fp0
	fneg.d	fp0
	fsub.x	fp5,fp1
	fdiv.x	fp1,fp0
	fmove.x	fp0,fp2
;   tz = -(farval+nearval) / (farval-nearval);
	fmove.x	fp4,fp0
	fadd.x	fp3,fp0
	fneg.d	fp0
	fmove.x	fp4,fp1
	fsub.x	fp3,fp1
	fdiv.x	fp1,fp0
;   M(0,0) = x;
	move.l	-4(a5),-$58(a5)
;     M(0,1) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$10(a0)
;  M(0,2) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$20(a0)
;  M(0,3) = tx;
	lea	-$58(a5),a0
	fmove.s	fp6,$30(a0)
;   M(1,0) = 0.0F;
	lea	-$58(a5),a0
	clr.l	4(a0)
;  M(1,1) = y;
	lea	-$58(a5),a0
	move.l	-$8(a5),$14(a0)
;     M(1,2) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$24(a0)
;  M(1,3) = ty;
	lea	-$58(a5),a0
	fmove.s	fp2,$34(a0)
;   M(2,0) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$8(a0)
;  M(2,1) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$18(a0)
;  M(2,2) = z;
	lea	-$58(a5),a0
	move.l	-$C(a5),$28(a0)
;     M(2,3) = tz;
	lea	-$58(a5),a0
	fmove.s	fp0,$38(a0)
;   M(3,0) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$C(a0)
;  M(3,1) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$1C(a0)
;  M(3,2) = 0.0F;
	lea	-$58(a5),a0
	clr.l	$2C(a0)
;  M(3,3) = 1.0F;
	lea	-$58(a5),a0
	move.l	#$3F800000,$3C(a0)
;   gl_MultMatrixf( ctx, m );
	pea	-$58(a5)
	move.l	a2,-(a7)
	jsr	_gl_MultMatrixf
	addq.w	#$8,a7
;   if (ctx->Driver.NearFar) 
	tst.l	$97C(a2)
	beq.b	L270
L269
;      (*ctx->Driver.NearFar)( ctx, nearval, farval );
	fmove.x	fp4,fp0
	fmove.s	fp0,-(a7)
	fmove.x	fp3,fp0
	fmove.s	fp0,-(a7)
	move.l	a2,-(a7)
	move.l	$97C(a2),a0
	jsr	(a0)
	add.w	#$C,a7
L270
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	move.l	(a7)+,a2
	unlk	a5
	rts

	SECTION "_gl_MatrixMode:0",CODE


;void gl_MatrixMode( GLcontext *ctx, GLenum mode )
	XDEF	_gl_MatrixMode
_gl_MatrixMode
	move.l	$8(a7),d0
	move.l	4(a7),a0
L273
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a0,a1
	add.l	#$E968,a1
	move.l	(a1),d1
	cmp.l	#$1A00,d1
	beq.b	L275
L274
;      gl_error( ctx,  GL_INVALID_OPERATION, "glMatrixMode" );
	move.l	#L272,-(a7)
	pea	$502.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	rts
L275
;   switch (mode)
	move.l	d0,d1
	cmp.l	#$1701,d1
	beq.b	L276
	bgt.b	L279
	cmp.l	#$1700,d1
	beq.b	L276
	bra.b	L277
L279
	cmp.l	#$1702,d1
	beq.b	L276
	bra.b	L277
;      
L276
;         ctx->Transform.MatrixMode = mode;
	add.l	#$E4D2,a0
	move.l	d0,(a0)
;         
	bra.b	L278
L277
;         gl_error( ctx,  GL_INVALID_ENUM, "glMatrixMode" );
	move.l	#L272,-(a7)
	pea	$500.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
L278
	rts

L272
	dc.b	'glMatrixMode',0

	SECTION "_gl_PushMatrix:0",CODE


;void gl_PushMatrix( GLcontext *ctx )
	XDEF	_gl_PushMatrix
_gl_PushMatrix
	movem.l	d2/a2,-(a7)
	move.l	$C(a7),a2
L282
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L284
L283
;      gl_error( ctx,  GL_INVALID_OPERATION, "glPushMatrix" );
	move.l	#L280,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/a2
	rts
L284
;   switch (ctx->Transform.MatrixMode)
	move.l	a2,a0
	add.l	#$E4D2,a0
	move.l	(a0),d0
	cmp.l	#$1701,d0
	beq.b	L288
	bgt.b	L296
	cmp.l	#$1700,d0
	beq.b	L285
	bra	L294
L296
	cmp.l	#$1702,d0
	beq	L291
	bra	L294
;      
L285
;         if (ctx->ModelViewStackDepth>=MAX_MODELVIEW_STACK_
	move.l	$A7A(a2),d0
	cmp.l	#$1F,d0
	blo.b	L287
L286
;            gl_error( ctx,  GL_STACK_OVERFLOW, "glPushMa
	move.l	#L280,-(a7)
	pea	$503.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/a2
	rts
L287
;                 16*sizeof(GLflo
	pea	$40.w
	pea	$9FA(a2)
	lea	$A7E(a2),a0
	move.l	$A7A(a2),d0
	asl.l	#6,d0
	pea	0(a0,d0.l)
	jsr	_q_memcpy
	add.w	#$C,a7
;         ctx->ModelViewStackDepth++;
	addq.l	#1,$A7A(a2)
;         
	bra	L295
L288
;         if (ctx->ProjectionStackDepth>=MAX_PROJECTION_STAC
	move.l	$12C4(a2),d0
	cmp.l	#$20,d0
	blo.b	L290
L289
;            gl_error( ctx,  GL_STACK_OVERFLOW, "glPushMa
	move.l	#L280,-(a7)
	pea	$503.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/a2
	rts
L290
;                 16*sizeof(GLflo
	pea	$40.w
	pea	$1284(a2)
	lea	$12C8(a2),a0
	move.l	$12C4(a2),d0
	asl.l	#6,d0
	pea	0(a0,d0.l)
	jsr	_q_memcpy
	add.w	#$C,a7
;         ctx->ProjectionStackDepth++;
	addq.l	#1,$12C4(a2)
;         ctx->NearFarStack[ctx->ProjectionStackDepth][0]
	move.l	$12C4(a2),d0
	subq.l	#1,d0
	lea	$1AC8(a2),a0
	fmove.s	0(a0,d0.l*8),fp0
	lea	$1AC8(a2),a0
	move.l	$12C4(a2),d0
	fmove.s	fp0,0(a0,d0.l*8)
;         ctx->NearFarStack[ctx->ProjectionStackDepth][1]
	move.l	$12C4(a2),d0
	subq.l	#1,d0
	lea	$1AC8(a2),a0
	lea	0(a0,d0.l*8),a0
	fmove.s	4(a0),fp0
	lea	$1AC8(a2),a0
	move.l	$12C4(a2),d0
	lea	0(a0,d0.l*8),a0
	fmove.s	fp0,4(a0)
;         
	bra	L295
L291
;            GLuint texSet = ctx->Texture.CurrentTransfor
	move.l	a2,a0
	add.l	#$DEBA,a0
	move.l	4(a0),d2
;            if (ctx->TextureStackDepth[texSet] >= MAX_TE
	lea	$1C52(a2),a0
	move.l	0(a0,d2.l*4),d0
	cmp.l	#$A,d0
	blo.b	L293
L292
;               gl_error( ctx,  GL_STACK_OVERFLOW, "gl
	move.l	#L280,-(a7)
	pea	$503.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/a2
	rts
L293
;                    16*sizeof
	pea	$40.w
	lea	$1BD2(a2),a0
	move.l	d2,d0
	asl.l	#6,d0
	pea	0(a0,d0.l)
	lea	$1C5A(a2),a0
	move.l	d2,d0
	muls.l	#$280,d0
	lea	0(a0,d0.l),a1
	lea	$1C52(a2),a0
	move.l	0(a0,d2.l*4),d0
	asl.l	#6,d0
	pea	0(a1,d0.l)
	jsr	_q_memcpy
	add.w	#$C,a7
;            ctx->TextureStackDepth[texSet]++;
	lea	$1C52(a2),a0
	lea	0(a0,d2.l*4),a0
	addq.l	#1,(a0)
;         
	bra.b	L295
L294
;         gl_problem(ctx, "Bad matrix mode in gl_PushMatrix")
	move.l	#L281,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
L295
	movem.l	(a7)+,d2/a2
	rts

L281
	dc.b	'Bad matrix mode in gl_PushMatrix',0
L280
	dc.b	'glPushMatrix',0

	SECTION "_gl_PopMatrix:0",CODE


;void gl_PopMatrix( GLcontext *ctx )
	XDEF	_gl_PopMatrix
_gl_PopMatrix
	movem.l	d2/a2,-(a7)
	move.l	$C(a7),a2
L299
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L301
L300
;      gl_error( ctx,  GL_INVALID_OPERATION, "glPopMatrix" );
	move.l	#L297,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/a2
	rts
L301
;   switch (ctx->Transform.MatrixMode)
	move.l	a2,a0
	add.l	#$E4D2,a0
	move.l	(a0),d0
	cmp.l	#$1701,d0
	beq.b	L305
	bgt.b	L315
	cmp.l	#$1700,d0
	beq.b	L302
	bra	L313
L315
	cmp.l	#$1702,d0
	beq	L310
	bra	L313
;      
L302
;         if (ctx->ModelViewStackDepth==0) 
	tst.l	$A7A(a2)
	bne.b	L304
L303
;            gl_error( ctx,  GL_STACK_UNDERFLOW, "glPopMa
	move.l	#L297,-(a7)
	pea	$504.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/a2
	rts
L304
;         ctx->ModelViewStackDepth--;
	subq.l	#1,$A7A(a2)
;                 16*sizeof(GLflo
	pea	$40.w
	lea	$A7E(a2),a0
	move.l	$A7A(a2),d0
	asl.l	#6,d0
	pea	0(a0,d0.l)
	pea	$9FA(a2)
	jsr	_q_memcpy
	add.w	#$C,a7
;         ctx->NewModelViewMatrix = GL_TRUE;
	move.b	#1,$9F4(a2)
;         
	bra	L314
L305
;         if (ctx->ProjectionStackDepth==0) 
	tst.l	$12C4(a2)
	bne.b	L307
L306
;            gl_error( ctx,  GL_STACK_UNDERFLOW, "glPopMa
	move.l	#L297,-(a7)
	pea	$504.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/a2
	rts
L307
;         ctx->ProjectionStackDepth--;
	subq.l	#1,$12C4(a2)
;                 16*sizeof(GLflo
	pea	$40.w
	lea	$12C8(a2),a0
	move.l	$12C4(a2),d0
	asl.l	#6,d0
	pea	0(a0,d0.l)
	pea	$1284(a2)
	jsr	_q_memcpy
	add.w	#$C,a7
;         ctx->NewProjectionMatrix = GL_TRUE;
	move.b	#1,$127E(a2)
;            GLfloat nearVal = ctx->NearFarStack[ctx->Pro
	lea	$1AC8(a2),a0
	move.l	$12C4(a2),d0
	fmove.s	0(a0,d0.l*8),fp1
;            GLfloat farVal  = ctx->NearFarStack[ctx->Pro
	lea	$1AC8(a2),a0
	move.l	$12C4(a2),d0
	lea	0(a0,d0.l*8),a0
	fmove.s	4(a0),fp0
;            if (ctx->Driver.NearFar) 
	tst.l	$97C(a2)
	beq.b	L309
L308
;               (*ctx->Driver.NearFar)( ctx, nearVal, 
	fmove.s	fp0,-(a7)
	fmove.s	fp1,-(a7)
	move.l	a2,-(a7)
	move.l	$97C(a2),a0
	jsr	(a0)
	add.w	#$C,a7
L309
;         
	bra	L314
L310
;            GLuint texSet = ctx->Texture.CurrentTransfor
	move.l	a2,a0
	add.l	#$DEBA,a0
	move.l	4(a0),d0
;            if (ctx->TextureStackDepth[texSet]==0) 
	lea	$1C52(a2),a0
	tst.l	0(a0,d0.l*4)
	bne.b	L312
L311
;               gl_error( ctx,  GL_STACK_UNDERFLOW, "g
	move.l	#L297,-(a7)
	pea	$504.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/a2
	rts
L312
;            ctx->TextureStackDepth[texSet]--;
	lea	$1C52(a2),a0
	lea	0(a0,d0.l*4),a0
	subq.l	#1,(a0)
;                    16*sizeof
	pea	$40.w
	lea	$1C5A(a2),a0
	move.l	d0,d1
	muls.l	#$280,d1
	lea	0(a0,d1.l),a1
	lea	$1C52(a2),a0
	move.l	0(a0,d0.l*4),d1
	asl.l	#6,d1
	pea	0(a1,d1.l)
	lea	$1BD2(a2),a0
	asl.l	#6,d0
	pea	0(a0,d0.l)
	jsr	_q_memcpy
	add.w	#$C,a7
;            ctx->NewTextureMatrix = GL_TRUE;
	move.b	#1,$1BC8(a2)
;         
	bra.b	L314
L313
;         gl_problem(ctx, "Bad matrix mode in gl_PopMatrix");
	move.l	#L298,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
L314
	movem.l	(a7)+,d2/a2
	rts

L298
	dc.b	'Bad matrix mode in gl_PopMatrix',0
L297
	dc.b	'glPopMatrix',0

	SECTION "_gl_LoadIdentity:0",CODE


;void gl_LoadIdentity( GLcontext *ctx )
	XDEF	_gl_LoadIdentity
_gl_LoadIdentity
	movem.l	d2/a2,-(a7)
	move.l	$C(a7),a2
L318
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L320
L319
;      gl_error( ctx,  GL_INVALID_OPERATION, "glLoadIdentity" );
	move.l	#L316,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2/a2
	rts
L320
;   switch (ctx->Transform.MatrixMode)
	move.l	a2,a0
	add.l	#$E4D2,a0
	move.l	(a0),d0
	cmp.l	#$1701,d0
	beq.b	L322
	bgt.b	L326
	cmp.l	#$1700,d0
	beq.b	L321
	bra	L324
L326
	cmp.l	#$1702,d0
	beq.b	L323
	bra	L324
;      
L321
;ctx->ModelViewMat
	pea	$40.w
	pea	_Identity(a6)
	pea	$9FA(a2)
	jsr	_q_memcpy
	add.w	#$C,a7
;Y( ctx->ModelView
	pea	$40.w
	pea	_Identity(a6)
	pea	$A3A(a2)
	jsr	_q_memcpy
	add.w	#$C,a7
;         ctx->ModelViewMatrixType = MATRIX_IDENTITY;
	move.l	#1,$9F6(a2)
;	 ctx->NewModelViewMatrix = GL_FALSE;
	clr.b	$9F4(a2)
;	 
	bra.b	L325
L322
;tx->ProjectionMat
	pea	$40.w
	pea	_Identity(a6)
	pea	$1284(a2)
	jsr	_q_memcpy
	add.w	#$C,a7
;         ctx->ProjectionMatrixType = MATRIX_IDENTITY;
	move.l	#1,$1280(a2)
;	 ctx->NewProjectionMatrix = GL_FALSE;
	clr.b	$127E(a2)
;	 
	bra.b	L325
L323
;            GLuint texSet = ctx->Texture.CurrentTransfor
	move.l	a2,a0
	add.l	#$DEBA,a0
	move.l	4(a0),d2
;extureMatrix[texS
	pea	$40.w
	pea	_Identity(a6)
	lea	$1BD2(a2),a0
	move.l	d2,d0
	asl.l	#6,d0
	pea	0(a0,d0.l)
	jsr	_q_memcpy
	add.w	#$C,a7
;            ctx->TextureMatrixType[texSet] = MATRIX_IDEN
	lea	$1BCA(a2),a0
	move.l	#1,0(a0,d2.l*4)
;            ctx->NewTextureMatrix = GL_FALSE;
	clr.b	$1BC8(a2)
;         
	bra.b	L325
L324
;         gl_problem(ctx, "Bad matrix mode in gl_LoadIdentit
	move.l	#L317,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
L325
	movem.l	(a7)+,d2/a2
	rts

L317
	dc.b	'Bad matrix mode in gl_LoadIdentity',0
L316
	dc.b	'glLoadIdentity',0

	SECTION "_gl_LoadMatrixf:0",CODE


;void gl_LoadMatrixf( GLcontext *ctx, const GLfloat *m )
	XDEF	_gl_LoadMatrixf
_gl_LoadMatrixf
	movem.l	a2/a3,-(a7)
	fmovem.x fp2/fp3/fp4,-(a7)
	movem.l	$30(a7),a2/a3
L329
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L331
L330
;      gl_error( ctx,  GL_INVALID_OPERATION, "glLoadMatrix" );
	move.l	#L327,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2/fp3/fp4
	movem.l	(a7)+,a2/a3
	rts
L331
;   switch (ctx->Transform.MatrixMode)
	move.l	a2,a0
	add.l	#$E4D2,a0
	move.l	(a0),d0
	cmp.l	#$1701,d0
	beq.b	L333
	bgt.b	L345
	cmp.l	#$1700,d0
	beq.b	L332
	bra	L343
L345
	cmp.l	#$1702,d0
	beq	L342
	bra	L343
;      
L332
;EMCPY( ctx->Model
	pea	$40.w
	move.l	a3,-(a7)
	pea	$9FA(a2)
	jsr	_q_memcpy
	add.w	#$C,a7
;	 ctx->NewModelViewMatrix = GL_TRUE;
	move.b	#1,$9F4(a2)
;	 
	bra	L344
L333
;MCPY( ctx->Projec
	pea	$40.w
	move.l	a3,-(a7)
	pea	$1284(a2)
	jsr	_q_memcpy
	add.w	#$C,a7
;	 ctx->NewProjectionMatrix = GL_TRUE;
	move.b	#1,$127E(a2)
;            c = M(2,2);
	fmove.s	$28(a3),fp0
;            d = M(2,3);
	fmove.s	$38(a3),fp3
;            if (c == 1.0)
	fmove.x	fp0,fp1
	fcmp.d	#$.3FF00000.00000000,fp1
	fbne.b	L335
L334
;               n = 0.0;
	fmove.s	#$.00000000,fp2
	bra.b	L336
L335
;               n = d / (c - 1.0);
	fmove.x	fp3,fp1
	fmove.x	fp0,fp2
	fsub.d	#$.3FF00000.00000000,fp2
	fdiv.x	fp2,fp1
	fmove.x	fp1,fp2
L336
;            if (c == -1.0)
	fmove.x	fp0,fp1
	fcmp.d	#$.BFF00000.00000000,fp1
	fbne.b	L338
L337
;               f = 1.0;
	fmove.s	#$.3F800000,fp0
	bra.b	L339
L338
;               f = d / (c + 1.0);
	fmove.x	fp3,fp1
	fadd.d	#$.3FF00000.00000000,fp0
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
L339
;            ctx->NearFarStack[ctx->ProjectionStackDepth]
	lea	$1AC8(a2),a0
	move.l	$12C4(a2),d0
	fmove.s	fp2,0(a0,d0.l*8)
;            ctx->NearFarStack[ctx->ProjectionStackDepth]
	lea	$1AC8(a2),a0
	move.l	$12C4(a2),d0
	lea	0(a0,d0.l*8),a0
	fmove.s	fp0,4(a0)
;            if (ctx->Driver.NearFar) 
	tst.l	$97C(a2)
	beq.b	L341
L340
;               (*ctx->Driver.NearFar)( ctx, n, f );
	fmove.s	fp0,-(a7)
	fmove.s	fp2,-(a7)
	move.l	a2,-(a7)
	move.l	$97C(a2),a0
	jsr	(a0)
	add.w	#$C,a7
L341
;	 
	bra.b	L344
L342
;            GLuint texSet = ctx->Texture.CurrentTransfor
	move.l	a2,a0
	add.l	#$DEBA,a0
	move.l	4(a0),d0
; ctx->TextureMatr
	pea	$40.w
	move.l	a3,-(a7)
	lea	$1BD2(a2),a0
	asl.l	#6,d0
	pea	0(a0,d0.l)
	jsr	_q_memcpy
	add.w	#$C,a7
;            ctx->NewTextureMatrix = GL_TRUE;
	move.b	#1,$1BC8(a2)
;	 
	bra.b	L344
L343
;         gl_problem(ctx, "Bad matrix mode in gl_LoadMatrixf
	move.l	#L328,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
L344
	fmovem.x (a7)+,fp2/fp3/fp4
	movem.l	(a7)+,a2/a3
	rts

L328
	dc.b	'Bad matrix mode in gl_LoadMatrixf',0
L327
	dc.b	'glLoadMatrix',0

	SECTION "_gl_MultMatrixf:0",CODE


;void gl_MultMatrixf( GLcontext *ctx, const GLfloat *m )
	XDEF	_gl_MultMatrixf
_gl_MultMatrixf
	move.l	a2,-(a7)
	move.l	$C(a7),a0
	move.l	$8(a7),a2
L348
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a1
	add.l	#$E968,a1
	move.l	(a1),d0
	cmp.l	#$1A00,d0
	beq.b	L350
L349
;      gl_error( ctx,  GL_INVALID_OPERATION, "glMultMatrix" );
	move.l	#L346,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	move.l	(a7)+,a2
	rts
L350
;   switch (ctx->Transform.MatrixMode)
	move.l	a2,a1
	add.l	#$E4D2,a1
	move.l	(a1),d0
	cmp.l	#$1701,d0
	beq.b	L352
	bgt.b	L356
	cmp.l	#$1700,d0
	beq.b	L351
	bra	L354
L356
	cmp.l	#$1702,d0
	beq.b	L353
	bra.b	L354
;      
L351
;         matmul( ctx->ModelViewMatrix, ctx->ModelViewMatrix
	move.l	a0,-(a7)
	pea	$9FA(a2)
	pea	$9FA(a2)
	jsr	_matmul
	add.w	#$C,a7
;	 ctx->NewModelViewMatrix = GL_TRUE;
	move.b	#1,$9F4(a2)
;	 
	bra.b	L355
L352
;	 matmul( ctx->ProjectionMatrix, ctx->ProjectionMatrix, m );
	move.l	a0,-(a7)
	pea	$1284(a2)
	pea	$1284(a2)
	jsr	_matmul
	add.w	#$C,a7
;	 ctx->NewProjectionMatrix = GL_TRUE;
	move.b	#1,$127E(a2)
;	 
	bra.b	L355
L353
;            GLuint texSet = ctx->Texture.CurrentTransfor
	move.l	a2,a1
	add.l	#$DEBA,a1
	move.l	4(a1),d0
;            matmul( ctx->TextureMatrix[texSet], ctx->Tex
	move.l	a0,-(a7)
	lea	$1BD2(a2),a0
	move.l	d0,d1
	asl.l	#6,d1
	pea	0(a0,d1.l)
	lea	$1BD2(a2),a0
	asl.l	#6,d0
	pea	0(a0,d0.l)
	jsr	_matmul
	add.w	#$C,a7
;            ctx->NewTextureMatrix = GL_TRUE;
	move.b	#1,$1BC8(a2)
;	 
	bra.b	L355
L354
;         gl_problem(ctx, "Bad matrix mode in gl_MultMatrixf
	move.l	#L347,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
L355
	move.l	(a7)+,a2
	rts

L347
	dc.b	'Bad matrix mode in gl_MultMatrixf',0
L346
	dc.b	'glMultMatrix',0

	SECTION "_gl_rotation_matrix:0",CODE


;void gl_rotation_matrix( GLfloat angle, GLfloat x, GLfloat y, GLfloa
	XDEF	_gl_rotation_matrix
_gl_rotation_matrix
L360	EQU	-$48
	link	a5,#L360
	move.l	a2,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	move.l	$18(a5),a2
	fmove.s	$14(a5),fp2
	fmove.s	$10(a5),fp3
	fmove.s	$C(a5),fp4
	fmove.s	$8(a5),fp5
L357
;   s = sin( angle * DEG2RAD );
	fmove.x	fp5,fp0
	fmul.d	#$.3F91DF46.9D353915,fp0
	fmove.d	fp0,-(a7)
	jsr	_sin__r
	addq.w	#$8,a7
	fmove.d	fp0,-(a7)
	movem.l	(a7)+,d7/a0
;   c = cos( angle * DEG2RAD );
	fmove.x	fp5,fp0
	fmul.d	#$.3F91DF46.9D353915,fp0
	fmove.d	fp0,-(a7)
	jsr	_cos__r
	addq.w	#$8,a7
	fmove.x	fp0,fp5
;   mag = GL_SQRT( x*x + y*y + z*z );
	fmove.x	fp4,fp0
	fmul.x	fp4,fp0
	fmove.x	fp3,fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.x	fp2,fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;   if (mag == 0.0) 
	fmove.x	fp0,fp1
	ftst.d	fp1
	fbne.b	L359
L358
;      MEMCPY(m, Identity
	pea	$40.w
	pea	_Identity(a6)
	move.l	a2,-(a7)
	jsr	_q_memcpy
	add.w	#$C,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	move.l	(a7)+,a2
	unlk	a5
	rts
L359
;   x /= mag;
	fdiv.x	fp0,fp4
;   y /= mag;
	fdiv.x	fp0,fp3
;   z /= mag;
	fdiv.x	fp0,fp2
;   xx = x * x;
	fmove.x	fp4,fp1
	fmul.x	fp4,fp1
;   yy = y * y;
	fmove.x	fp3,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-$14(a5)
;   zz = z * z;
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-$18(a5)
;   xy = x * y;
	fmove.x	fp4,fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,-$1C(a5)
;   yz = y * z;
	fmove.x	fp3,fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,-$20(a5)
;   zx = z * x;
	fmove.x	fp2,fp0
	fmul.x	fp4,fp0
	fmove.s	fp0,-$24(a5)
;   xs = x * s;
	fmul.x	fp7,fp4
;   ys = y * s;
	fmul.x	fp7,fp3
;   zs = z * s;
	fmul.x	fp7,fp2
;   one_c = 1.0F - c;
	fmove.s	#$.3F800000,fp0
	fsub.x	fp5,fp0
;   M(0,0) = (one_c * xx) + c;
	fmul.x	fp0,fp1
	fadd.x	fp5,fp1
	fmove.s	fp1,(a2)
;   M(0,1) = (one_c * xy) - zs;
	fmove.x	fp0,fp1
	fmul.s	-$1C(a5),fp1
	fsub.x	fp2,fp1
	fmove.s	fp1,$10(a2)
;   M(0,2) = (one_c * zx) + ys;
	fmove.x	fp0,fp1
	fmul.s	-$24(a5),fp1
	fadd.x	fp3,fp1
	fmove.s	fp1,$20(a2)
;   M(0,3) = 0.0F;
	clr.l	$30(a2)
;   M(1,0) = (one_c * xy) + zs;
	fmove.x	fp0,fp1
	fmul.s	-$1C(a5),fp1
	fadd.x	fp2,fp1
	fmove.s	fp1,4(a2)
;   M(1,1) = (one_c * yy) + c;
	fmove.x	fp0,fp1
	fmul.s	-$14(a5),fp1
	fadd.x	fp5,fp1
	fmove.s	fp1,$14(a2)
;   M(1,2) = (one_c * yz) - xs;
	fmove.x	fp0,fp1
	fmul.s	-$20(a5),fp1
	fsub.x	fp4,fp1
	fmove.s	fp1,$24(a2)
;   M(1,3) = 0.0F;
	clr.l	$34(a2)
;   M(2,0) = (one_c * zx) - ys;
	fmove.x	fp0,fp1
	fmul.s	-$24(a5),fp1
	fsub.x	fp3,fp1
	fmove.s	fp1,$8(a2)
;   M(2,1) = (one_c * yz) + xs;
	fmove.x	fp0,fp1
	fmul.s	-$20(a5),fp1
	fadd.x	fp4,fp1
	fmove.s	fp1,$18(a2)
;   M(2,2) = (one_c * zz) + c;
	fmul.s	-$18(a5),fp0
	fadd.x	fp5,fp0
	fmove.s	fp0,$28(a2)
;   M(2,3) = 0.0F;
	clr.l	$38(a2)
;   M(3,0) = 0.0F;
	clr.l	$C(a2)
;   M(3,1) = 0.0F;
	clr.l	$1C(a2)
;   M(3,2) = 0.0F;
	clr.l	$2C(a2)
;   M(3,3) = 1.0F;
	move.l	#$3F800000,$3C(a2)
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	move.l	(a7)+,a2
	unlk	a5
	rts

	SECTION "_gl_Rotatef:0",CODE


;void gl_Rotatef( GLcontext *ctx,
	XDEF	_gl_Rotatef
_gl_Rotatef
L362	EQU	-$40
	link	a5,#L362
	move.l	a2,-(a7)
	fmovem.x fp2/fp3,-(a7)
	move.l	$8(a5),a2
	fmove.s	$C(a5),fp0
	fmove.s	$10(a5),fp1
	fmove.s	$14(a5),fp2
	fmove.s	$18(a5),fp3
L361
;   gl_rotation_matrix( angle, x, y, z, m );
	pea	-$40(a5)
	fmove.s	fp3,-(a7)
	fmove.s	fp2,-(a7)
	fmove.s	fp1,-(a7)
	fmove.s	fp0,-(a7)
	jsr	_gl_rotation_matrix
	add.w	#$14,a7
;   gl_MultMatrixf( ctx, m );
	pea	-$40(a5)
	move.l	a2,-(a7)
	jsr	_gl_MultMatrixf
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2/fp3
	move.l	(a7)+,a2
	unlk	a5
	rts

	SECTION "_gl_Scalef:0",CODE


;void gl_Scalef( GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z )
	XDEF	_gl_Scalef
_gl_Scalef
	fmovem.x fp2/fp3/fp4,-(a7)
	move.l	$28(a7),a1
	fmove.s	$34(a7),fp1
	fmove.s	$30(a7),fp2
	fmove.s	$2C(a7),fp3
L365
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a1,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L367
L366
;      gl_error( ctx,  GL_INVALID_OPERATION, "glScale" );
	move.l	#L363,-(a7)
	pea	$502.w
	move.l	a1,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2/fp3/fp4
	rts
L367
;   switch (ctx->Transform.MatrixMode)
	move.l	a1,a0
	add.l	#$E4D2,a0
	move.l	(a0),d0
	cmp.l	#$1701,d0
	beq.b	L369
	bgt.b	L373
	cmp.l	#$1700,d0
	beq.b	L368
	bra.b	L371
L373
	cmp.l	#$1702,d0
	beq.b	L370
	bra.b	L371
;      
L368
;         m = ctx->ModelViewMatrix;
	lea	$9FA(a1),a0
;	 ctx->NewModelViewMatrix = GL_TRUE;
	move.b	#1,$9F4(a1)
;	 
	bra.b	L372
L369
;         m = ctx->ProjectionMatrix;
	lea	$1284(a1),a0
;	 ctx->NewProjectionMatrix = GL_TRUE;
	move.b	#1,$127E(a1)
;	 
	bra.b	L372
L370
;            GLuint texSet = ctx->Texture.CurrentTransfor
	move.l	a1,a0
	add.l	#$DEBA,a0
	move.l	4(a0),d0
;            m = ctx->TextureMatrix[texSet];
	lea	$1BD2(a1),a0
	asl.l	#6,d0
	add.l	d0,a0
;            ctx->NewTextureMatrix = GL_TRUE;
	move.b	#1,$1BC8(a1)
;	 
	bra.b	L372
L371
;         gl_problem(ctx, "Bad matrix mode in gl_Scalef");
	move.l	#L364,-(a7)
	move.l	a1,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2/fp3/fp4
	rts
L372
;         return;
;   m[0] *= x;
	fmove.s	(a0),fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,(a0)
;   m[4] *= y;
	lea	$10(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,(a1)
;   m[8]  *= z;
	lea	$20(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp1,fp0
	fmove.s	fp0,(a1)
;   m[1] *= x;
	lea	4(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,(a1)
;   m[5] *= y;
	lea	$14(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,(a1)
;   m[9]  *= z;
	lea	$24(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp1,fp0
	fmove.s	fp0,(a1)
;   m[2] *= x;
	lea	$8(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,(a1)
;   m[6] *= y;
	lea	$18(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,(a1)
;   m[10] *= z;
	lea	$28(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp1,fp0
	fmove.s	fp0,(a1)
;   m[3] *= x;
	lea	$C(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp3,fp0
	fmove.s	fp0,(a1)
;   m[7] *= y;
	lea	$1C(a0),a1
	fmove.s	(a1),fp0
	fmul.x	fp2,fp0
	fmove.s	fp0,(a1)
;   m[11] *= z;
	add.w	#$2C,a0
	fmove.s	(a0),fp0
	fmul.x	fp1,fp0
	fmove.s	fp0,(a0)
	fmovem.x (a7)+,fp2/fp3/fp4
	rts

L364
	dc.b	'Bad matrix mode in gl_Scalef',0
L363
	dc.b	'glScale',0

	SECTION "_gl_Translatef:0",CODE


;void gl_Translatef( GLcontext *ctx, GLfloat x, GLfloat y, GLfloat z )
	XDEF	_gl_Translatef
_gl_Translatef
	fmovem.x fp2/fp3/fp4/fp5,-(a7)
	move.l	$34(a7),a1
	fmove.s	$40(a7),fp2
	fmove.s	$3C(a7),fp3
	fmove.s	$38(a7),fp4
L376
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a1,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L378
L377
;      gl_error( ctx, GL_INVALID_OPERATION, "glTranslate" );
	move.l	#L374,-(a7)
	pea	$502.w
	move.l	a1,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	rts
L378
;   switch (ctx->Transform.MatrixMode)
	move.l	a1,a0
	add.l	#$E4D2,a0
	move.l	(a0),d0
	cmp.l	#$1701,d0
	beq.b	L380
	bgt.b	L384
	cmp.l	#$1700,d0
	beq.b	L379
	bra.b	L382
L384
	cmp.l	#$1702,d0
	beq.b	L381
	bra.b	L382
;      
L379
;         m = ctx->ModelViewMatrix;
	lea	$9FA(a1),a0
;	 ctx->NewModelViewMatrix = GL_TRUE;
	move.b	#1,$9F4(a1)
;	 
	bra.b	L383
L380
;         m = ctx->ProjectionMatrix;
	lea	$1284(a1),a0
;	 ctx->NewProjectionMatrix = GL_TRUE;
	move.b	#1,$127E(a1)
;	 
	bra.b	L383
L381
;            GLuint texSet = ctx->Texture.CurrentTransfor
	move.l	a1,a0
	add.l	#$DEBA,a0
	move.l	4(a0),d0
;            m = ctx->TextureMatrix[texSet];
	lea	$1BD2(a1),a0
	asl.l	#6,d0
	add.l	d0,a0
;            ctx->NewTextureMatrix = GL_TRUE;
	move.b	#1,$1BC8(a1)
;	 
	bra.b	L383
L382
;         gl_problem(ctx, "Bad matrix mode in gl_Translatef")
	move.l	#L375,-(a7)
	move.l	a1,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	rts
L383
;         return;
;   m[12] = m[0] * x + m[4] * y + m[8]  * z + m[12];
	fmove.s	(a0),fp0
	fmul.x	fp4,fp0
	fmove.s	$10(a0),fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.s	$20(a0),fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
	fadd.s	$30(a0),fp0
	fmove.s	fp0,$30(a0)
;   m[13] = m[1] * x + m[5] * y + m[9]  * z + m[13];
	fmove.s	4(a0),fp0
	fmul.x	fp4,fp0
	fmove.s	$14(a0),fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.s	$24(a0),fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
	fadd.s	$34(a0),fp0
	fmove.s	fp0,$34(a0)
;   m[14] = m[2] * x + m[6] * y + m[10] * z + m[14];
	fmove.s	$8(a0),fp0
	fmul.x	fp4,fp0
	fmove.s	$18(a0),fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.s	$28(a0),fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
	fadd.s	$38(a0),fp0
	fmove.s	fp0,$38(a0)
;   m[15] = m[3] * x + m[7] * y + m[11] * z + m[15];
	fmove.s	$C(a0),fp0
	fmul.x	fp4,fp0
	fmove.s	$1C(a0),fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.s	$2C(a0),fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
	fadd.s	$3C(a0),fp0
	fmove.s	fp0,$3C(a0)
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	rts

L375
	dc.b	'Bad matrix mode in gl_Translatef',0
L374
	dc.b	'glTranslate',0

	SECTION "_gl_Viewport:0",CODE


;void gl_Viewport( GLcontext *ctx,
	XDEF	_gl_Viewport
_gl_Viewport
	movem.l	d2-d5/a2,-(a7)
	move.l	$28(a7),d2
	move.l	$24(a7),d3
	move.l	$20(a7),d4
	move.l	$1C(a7),d5
	move.l	$18(a7),a2
L386
;   if (width<0 || height<0) 
	tst.l	d3
	bmi.b	L388
L387
	tst.l	d2
	bpl.b	L389
L388
;      gl_error( ctx,  GL_INVALID_VALUE, "glViewport" );
	move.l	#L385,-(a7)
	pea	$501.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2-d5/a2
	rts
L389
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L391
L390
;      gl_error( ctx,  GL_INVALID_OPERATION, "glViewport" );
	move.l	#L385,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2-d5/a2
	rts
L391
;   width  = CLAMP( width,  1, MAX_WIDTH );
	cmp.l	#1,d3
	bge.b	L393
L392
	moveq	#1,d3
	bra.b	L397
L393
	cmp.l	#$640,d3
	ble.b	L395
L394
	move.l	#$640,d3
L395
L396
L397
;   height = CLAMP( height, 1, MAX_HEIGHT );
	cmp.l	#1,d2
	bge.b	L399
L398
	moveq	#1,d2
	bra.b	L403
L399
	cmp.l	#$4B0,d2
	ble.b	L401
L400
	move.l	#$4B0,d2
L401
L402
L403
;   ctx->Viewport.X = x;
	move.l	a2,a0
	add.l	#$E540,a0
	move.l	d5,(a0)
;   ctx->Viewport.Width = width;
	move.l	a2,a0
	add.l	#$E548,a0
	move.l	d3,(a0)
;   ctx->Viewport.Y = y;
	move.l	a2,a0
	add.l	#$E544,a0
	move.l	d4,(a0)
;   ctx->Viewport.Height = height;
	move.l	a2,a0
	add.l	#$E54C,a0
	move.l	d2,(a0)
;   ctx->Viewport.Sx = (GLfloat) width / 2.0F;
	fmove.l	d3,fp0
	fdiv.s	#$.40000000,fp0
	move.l	a2,a0
	add.l	#$E558,a0
	fmove.s	fp0,(a0)
;   ctx->Viewport.Tx = ctx->Viewport.Sx + x;
	move.l	a2,a0
	add.l	#$E540,a0
	fmove.l	d5,fp1
	fmove.s	$18(a0),fp0
	fadd.x	fp1,fp0
	move.l	a2,a0
	add.l	#$E564,a0
	fmove.s	fp0,(a0)
;   ctx->Viewport.Sy = (GLfloat) height / 2.0F;
	fmove.l	d2,fp0
	fdiv.s	#$.40000000,fp0
	move.l	a2,a0
	add.l	#$E55C,a0
	fmove.s	fp0,(a0)
;   ctx->Viewport.Ty = ctx->Viewport.Sy + y;
	move.l	a2,a0
	add.l	#$E540,a0
	fmove.l	d4,fp1
	fmove.s	$1C(a0),fp0
	fadd.x	fp1,fp0
	move.l	a2,a0
	add.l	#$E568,a0
	fmove.s	fp0,(a0)
;   ctx->NewState |= NEW_ALL;
	move.l	a2,a0
	add.l	#$E960,a0
	move.l	(a0),d0
	or.l	#$FF,d0
	move.l	a2,a0
	add.l	#$E960,a0
	move.l	d0,(a0)
;   gl_ResizeBuffersMESA(ctx);
	move.l	a2,-(a7)
	jsr	_gl_ResizeBuffersMESA
	addq.w	#4,a7
;   if (ctx->Driver.Viewport) 
	tst.l	$9E4(a2)
	beq.b	L405
L404
;      (*ctx->Driver.Viewport)( ctx, x, y, width, height );
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	d4,-(a7)
	move.l	d5,-(a7)
	move.l	a2,-(a7)
	move.l	$9E4(a2),a0
	jsr	(a0)
	add.w	#$14,a7
L405
	movem.l	(a7)+,d2-d5/a2
	rts

L385
	dc.b	'glViewport',0

	SECTION "_gl_DepthRange:0",CODE


;void gl_DepthRange( GLcontext *ctx, GLclampd nearval, GLclampd farva
	XDEF	_gl_DepthRange
_gl_DepthRange
	fmovem.x fp2/fp3/fp4/fp5,-(a7)
	move.l	$34(a7),a0
	fmove.d	$40(a7),fp3
	fmove.d	$38(a7),fp4
L407
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a0,a1
	add.l	#$E968,a1
	move.l	(a1),d0
	cmp.l	#$1A00,d0
	beq.b	L409
L408
;      gl_error( ctx, GL_INVALID_OPERATION, "glDepthRange" );
	move.l	#L406,-(a7)
	pea	$502.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	rts
L409
;   n = (GLfloat) CLAMP( nearval, 0.0, 1.0 );
	fcmp.d	#$.00000000.00000000,fp4
	fboge.b	L411
L410
	fmove.d	#$.00000000.00000000,fp0
	bra.b	L415
L411
	fcmp.d	#$.3FF00000.00000000,fp4
	fbole.b	L413
L412
	fmove.d	#$.3FF00000.00000000,fp0
	bra.b	L414
L413
	fmove.x	fp4,fp0
L414
L415
	fmove.x	fp0,fp1
;   f = (GLfloat) CLAMP( farval, 0.0, 1.0 );
	fcmp.d	#$.00000000.00000000,fp3
	fboge.b	L417
L416
	fmove.d	#$.00000000.00000000,fp0
	bra.b	L421
L417
	fcmp.d	#$.3FF00000.00000000,fp3
	fbole.b	L419
L418
	fmove.d	#$.3FF00000.00000000,fp0
	bra.b	L420
L419
	fmove.x	fp3,fp0
L420
L421
;   ctx->Viewport.Near = n;
	move.l	a0,a1
	add.l	#$E550,a1
	fmove.s	fp1,(a1)
;   ctx->Viewport.Far = f;
	move.l	a0,a1
	add.l	#$E554,a1
	fmove.s	fp0,(a1)
;   ctx->Viewport.Sz = DEPTH_SCALE * ((f - n) / 2.0);
	fmove.x	fp0,fp2
	fsub.x	fp1,fp2
	fdiv.d	#$.40000000.00000000,fp2
	fmul.d	#$.40EFFFE0.00000000,fp2
	move.l	a0,a1
	add.l	#$E560,a1
	fmove.s	fp2,(a1)
;   ctx->Viewport.Tz = DEPTH_SCALE * ((f - n) / 2.0 + n);
	fsub.x	fp1,fp0
	fdiv.d	#$.40000000.00000000,fp0
	fadd.x	fp1,fp0
	fmul.d	#$.40EFFFE0.00000000,fp0
	move.l	a0,a1
	add.l	#$E56C,a1
	fmove.s	fp0,(a1)
;   if (ctx->Driver.DepthRange) 
	tst.l	$9E8(a0)
	beq.b	L423
L422
;      (*ctx->Driver.DepthRange)( ctx, nearval, farval );
	fmove.d	fp3,-(a7)
	fmove.d	fp4,-(a7)
	move.l	a0,-(a7)
	move.l	$9E8(a0),a0
	jsr	(a0)
	add.w	#$14,a7
L423
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	rts

L406
	dc.b	'glDepthRange',0

	END
