
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/project.c
	mc68030
	mc68881
	XREF	_fabs__r
	XREF	_memcpy
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err

	SECTION "_transform_point:0",CODE


;static void transform_point( GLdouble out[4], const GLdouble m[16],
_transform_point
	movem.l	a2/a3,-(a7)
	fmovem.x fp2,-(a7)
	move.l	$20(a7),a0
	move.l	$1C(a7),a1
	move.l	$18(a7),a2
L24
;   out[0] = M(0,0) * in[0] + M(0,1) * in[1] + M(0,2) * in[2] + M(
	fmove.d	(a1),fp0
	fmul.d	(a0),fp0
	moveq	#$20,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$8,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	moveq	#$40,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$10,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	moveq	#$60,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$18,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,(a2)
;   out[1] = M(1,0) * in[0] + M(1,1) * in[1] + M(1,2) * in[2] + M(
	moveq	#$8,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp0
	fmul.d	(a0),fp0
	moveq	#$28,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$8,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	moveq	#$48,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$10,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	moveq	#$68,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$18,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	moveq	#$8,d0
	add.l	a2,d0
	move.l	d0,a3
	fmove.d	fp0,(a3)
;   out[2] = M(2,0) * in[0] + M(2,1) * in[1] + M(2,2) * in[2] + M(
	moveq	#$10,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp0
	fmul.d	(a0),fp0
	moveq	#$30,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$8,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	moveq	#$50,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$10,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	moveq	#$70,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$18,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	moveq	#$10,d0
	add.l	a2,d0
	move.l	d0,a3
	fmove.d	fp0,(a3)
;   out[3] = M(3,0) * in[0] + M(3,1) * in[1] + M(3,2) * in[2] + M(
	moveq	#$18,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp0
	fmul.d	(a0),fp0
	moveq	#$38,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$8,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	moveq	#$58,d0
	add.l	a1,d0
	move.l	d0,a3
	fmove.d	(a3),fp1
	moveq	#$10,d0
	add.l	a0,d0
	move.l	d0,a3
	fmul.d	(a3),fp1
	fadd.x	fp1,fp0
	fmove.d	$78(a1),fp1
	fmul.d	$18(a0),fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,$18(a2)
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2/a3
	rts

	SECTION "_matmul:0",CODE

	rts

;static void matmul( GLdouble *product, const GLdouble *a, const GLdo
_matmul
L29	EQU	-$84
	link	a5,#L29
	movem.l	a2/a3,-(a7)
	fmovem.x fp2,-(a7)
	move.l	$10(a5),a0
	move.l	$C(a5),a1
	move.l	$8(a5),a3
L25
;   for (i = 0;
	moveq	#0,d0
	bra	L27
L26
;	T(i, 0) = A(i, 0) * B(0, 0) + A(i, 1) * B(1, 0) + A(i, 2) * 
	fmove.d	0(a1,d0.l*8),fp0
	fmul.d	(a0),fp0
	lea	$20(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$8(a0),fp1
	fadd.x	fp1,fp0
	lea	$40(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$10(a0),fp1
	fadd.x	fp1,fp0
	lea	$60(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$18(a0),fp1
	fadd.x	fp1,fp0
	lea	-$80(a5),a2
	fmove.d	fp0,0(a2,d0.l*8)
;	T(i, 1) = A(i, 0) * B(0, 1) + A(i, 1) * B(1, 1) + A(i, 2) * 
	fmove.d	0(a1,d0.l*8),fp0
	fmul.d	$20(a0),fp0
	lea	$20(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$28(a0),fp1
	fadd.x	fp1,fp0
	lea	$40(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$30(a0),fp1
	fadd.x	fp1,fp0
	lea	$60(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$38(a0),fp1
	fadd.x	fp1,fp0
	lea	-$80(a5),a2
	lea	$20(a2),a2
	fmove.d	fp0,0(a2,d0.l*8)
;	T(i, 2) = A(i, 0) * B(0, 2) + A(i, 1) * B(1, 2) + A(i, 2) * 
	fmove.d	0(a1,d0.l*8),fp0
	fmul.d	$40(a0),fp0
	lea	$20(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$48(a0),fp1
	fadd.x	fp1,fp0
	lea	$40(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$50(a0),fp1
	fadd.x	fp1,fp0
	lea	$60(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$58(a0),fp1
	fadd.x	fp1,fp0
	lea	-$80(a5),a2
	lea	$40(a2),a2
	fmove.d	fp0,0(a2,d0.l*8)
;	T(i, 3) = A(i, 0) * B(0, 3) + A(i, 1) * B(1, 3) + A(i, 2) * 
	fmove.d	0(a1,d0.l*8),fp0
	fmul.d	$60(a0),fp0
	lea	$20(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$68(a0),fp1
	fadd.x	fp1,fp0
	lea	$40(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$70(a0),fp1
	fadd.x	fp1,fp0
	lea	$60(a1),a2
	fmove.d	0(a2,d0.l*8),fp1
	fmul.d	$78(a0),fp1
	fadd.x	fp1,fp0
	lea	-$80(a5),a2
	lea	$60(a2),a2
	fmove.d	fp0,0(a2,d0.l*8)
	addq.l	#1,d0
L27
	cmp.l	#4,d0
	blt	L26
L28
;   MEMCPY( product, te
	pea	$80.w
	pea	-$80(a5)
	move.l	a3,-(a7)
	jsr	_memcpy
	add.w	#$C,a7
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2/a3
	unlk	a5
	rts

	SECTION "_Identity:1",DATA

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

	SECTION "_invert_matrix:0",CODE


;static GLboolean invert_matrix( const GLdouble *m, GLdouble *out )
_invert_matrix
L68	EQU	-$150
	link	a5,#L68
	movem.l	a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5,-(a7)
	move.l	$8(a5),a0
L31
; r0 = wtmp[0], r1 = wtmp[1], r2 = wtmp[2], r3 = wtmp[3];
	lea	-$100(a5),a1
	move.l	a1,-$12C(a5)
	lea	-$100(a5),a1
	moveq	#$40,d0
	add.l	a1,d0
	move.l	d0,-$130(a5)
	lea	-$100(a5),a1
	lea	$80(a1),a2
	lea	-$100(a5),a1
	move.l	#$C0,d0
	add.l	a1,d0
	move.l	d0,a4
; r0[0] = MAT(m,0,0), r0[1] = MAT(m,0,1),
	fmove.d	(a0),fp0
	move.l	-$12C(a5),a1
	fmove.d	fp0,(a1)
	move.l	-$12C(a5),a3
	move.l	$20(a0),$8(a3)
	move.l	$24(a0),$C(a3)
	move.l	-$12C(a5),a3
	move.l	$40(a0),$10(a3)
	move.l	$44(a0),$14(a3)
	move.l	-$12C(a5),a3
	move.l	$60(a0),$18(a3)
	move.l	$64(a0),$1C(a3)
	move.l	-$12C(a5),a3
	move.l	#$3FF00000,$20(a3)
	clr.l	$24(a3)
	move.l	-$12C(a5),a3
	clr.l	$38(a3)
	clr.l	$3C(a3)
	move.l	-$12C(a5),a3
	clr.l	$30(a3)
	clr.l	$34(a3)
	move.l	-$12C(a5),a3
	clr.l	$28(a3)
	clr.l	$2C(a3)
	move.l	-$130(a5),a1
	move.l	$8(a0),(a1)
	move.l	$C(a0),4(a1)
	move.l	-$130(a5),a3
	move.l	$28(a0),$8(a3)
	move.l	$2C(a0),$C(a3)
	move.l	-$130(a5),a3
	move.l	$48(a0),$10(a3)
	move.l	$4C(a0),$14(a3)
	move.l	-$130(a5),a3
	move.l	$68(a0),$18(a3)
	move.l	$6C(a0),$1C(a3)
	move.l	-$130(a5),a3
	move.l	#$3FF00000,$28(a3)
	clr.l	$2C(a3)
	move.l	-$130(a5),a3
	clr.l	$38(a3)
	clr.l	$3C(a3)
	move.l	-$130(a5),a3
	clr.l	$30(a3)
	clr.l	$34(a3)
	move.l	-$130(a5),a3
	clr.l	$20(a3)
	clr.l	$24(a3)
	move.l	$10(a0),(a2)
	move.l	$14(a0),4(a2)
	move.l	$30(a0),$8(a2)
	move.l	$34(a0),$C(a2)
	move.l	$50(a0),$10(a2)
	move.l	$54(a0),$14(a2)
	move.l	$70(a0),$18(a2)
	move.l	$74(a0),$1C(a2)
	move.l	#$3FF00000,$30(a2)
	clr.l	$34(a2)
	clr.l	$38(a2)
	clr.l	$3C(a2)
	clr.l	$28(a2)
	clr.l	$2C(a2)
	clr.l	$20(a2)
	clr.l	$24(a2)
	move.l	a4,a1
	move.l	$18(a0),(a1)
	move.l	$1C(a0),4(a1)
	move.l	$38(a0),$8(a4)
	move.l	$3C(a0),$C(a4)
	move.l	$58(a0),$10(a4)
	move.l	$5C(a0),$14(a4)
	fmove.d	$78(a0),fp0
	fmove.d	fp0,$18(a4)
	move.l	#$3FF00000,$38(a4)
	clr.l	$3C(a4)
	clr.l	$30(a4)
	clr.l	$34(a4)
	clr.l	$28(a4)
	clr.l	$2C(a4)
	clr.l	$20(a4)
	clr.l	$24(a4)
; if (fabs(r3[0])>fabs(r2[0])) SWAP_ROWS(r3, r2)
	move.l	a4,a0
	fmove.d	(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	4(a2),-(a7)
	move.l	0(a2),-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L33
L32
; 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
L33
; if (fabs(r2[0])>fabs(r1[0])) SWAP_ROWS(r2, r1)
	move.l	4(a2),-(a7)
	move.l	0(a2),-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	-$130(a5),a0
	fmove.d	(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L35
L34
; if (fabs(r2[0])>fabs(
	move.l	a2,a0
; if (fabs(r2[0])>fabs(
	move.l	-$130(a5),a2
; if (fabs(r2[0])>fabs(
	move.l	a0,-$130(a5)
L35
; if (fabs(r1[0])>fabs(r0[0])) SWAP_ROWS(r1, r0)
	move.l	-$130(a5),a0
	fmove.d	(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	-$12C(a5),a0
	fmove.d	(a0),fp0
	fmove.d	fp0,-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L37
L36
; if (fabs(r1[0])>fabs(
	move.l	-$130(a5),a0
; if (fabs(r1[0])>fabs(
	move.l	-$12C(a5),-$130(a5)
; if (fabs(r1[0])>fabs(
	move.l	a0,-$12C(a5)
L37
; if (0.0 == r0[0])  
	move.l	-$12C(a5),a0
	fmove.d	(a0),fp0
	ftst.d	fp0
	fbne.b	L39
L38
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L39
; m1 = r1[0]/r0[0];
	move.l	-$130(a5),a0
	fmove.d	(a0),fp3
	move.l	-$12C(a5),a0
	fmove.d	(a0),fp0
	fdiv.x	fp0,fp3
; m2 = r2[0]/r0[0];
	fmove.d	(a2),fp2
	move.l	-$12C(a5),a0
	fmove.d	(a0),fp0
	fdiv.x	fp0,fp2
; m3 = r3[0]/r0[0];
	move.l	a4,a0
	fmove.d	(a0),fp1
	move.l	-$12C(a5),a0
	fmove.d	(a0),fp0
	fdiv.x	fp0,fp1
; s = r0[1];
	move.l	-$12C(a5),a1
	fmove.d	$8(a1),fp0
; r1[1] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$130(a5),a1
	lea	$8(a1),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r2[1] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$8(a2),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r3[1] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$8(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp4,fp0
	fmove.d	fp0,(a0)
; s = r0[2];
	move.l	-$12C(a5),a1
	fmove.d	$10(a1),fp0
; r1[2] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$130(a5),a1
	lea	$10(a1),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r2[2] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$10(a2),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r3[2] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$10(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp4,fp0
	fmove.d	fp0,(a0)
; s = r0[3];
	move.l	-$12C(a5),a1
	fmove.d	$18(a1),fp0
; r1[3] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$130(a5),a1
	lea	$18(a1),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r2[3] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$18(a2),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r3[3] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$18(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp4,fp0
	fmove.d	fp0,(a0)
; s = r0[4];
	move.l	-$12C(a5),a1
	fmove.d	$20(a1),fp0
; if (s != 0.0) 
	ftst.d	fp0
	fbeq.b	L41
L40
; r1[4] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$130(a5),a1
	lea	$20(a1),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r2[4] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$20(a2),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r3[4] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$20(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp4,fp0
	fmove.d	fp0,(a0)
L41
; s = r0[5];
	move.l	-$12C(a5),a1
	fmove.d	$28(a1),fp0
; if (s != 0.0) 
	ftst.d	fp0
	fbeq.b	L43
L42
; r1[5] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$130(a5),a1
	lea	$28(a1),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r2[5] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$28(a2),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r3[5] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$28(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp4,fp0
	fmove.d	fp0,(a0)
L43
; s = r0[6];
	move.l	-$12C(a5),a1
	fmove.d	$30(a1),fp0
; if (s != 0.0) 
	ftst.d	fp0
	fbeq.b	L45
L44
; r1[6] -= m1 * s;
	fmove.x	fp3,fp5
	fmul.x	fp0,fp5
	move.l	-$130(a5),a1
	lea	$30(a1),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r2[6] -= m2 * s;
	fmove.x	fp2,fp5
	fmul.x	fp0,fp5
	lea	$30(a2),a0
	fmove.d	(a0),fp4
	fsub.x	fp5,fp4
	fmove.d	fp4,(a0)
; r3[6] -= m3 * s;
	fmove.x	fp1,fp4
	fmul.x	fp0,fp4
	lea	$30(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp4,fp0
	fmove.d	fp0,(a0)
L45
; s = r0[7];
	move.l	-$12C(a5),a1
	fmove.d	$38(a1),fp0
; if (s != 0.0) 
	ftst.d	fp0
	fbeq.b	L47
L46
; r1[7] -= m1 * s;
	fmul.x	fp0,fp3
	move.l	-$130(a5),a1
	lea	$38(a1),a0
	fmove.d	(a0),fp4
	fsub.x	fp3,fp4
	fmove.d	fp4,(a0)
; r2[7] -= m2 * s;
	fmul.x	fp0,fp2
	lea	$38(a2),a0
	fmove.d	(a0),fp3
	fsub.x	fp2,fp3
	fmove.d	fp3,(a0)
; r3[7] -= m3 * s;
	fmul.x	fp0,fp1
	lea	$38(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp1,fp0
	fmove.d	fp0,(a0)
L47
; if (fabs(r3[1])>fabs(r2[1])) SWAP_ROWS(r3, r2)
	move.l	$C(a4),-(a7)
	move.l	$8(a4),-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	$C(a2),-(a7)
	move.l	$8(a2),-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L49
L48
; 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
L49
; if (fabs(r2[1])>fabs(r1[1])) SWAP_ROWS(r2, r1)
	move.l	$C(a2),-(a7)
	move.l	$8(a2),-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	-$130(a5),a1
	move.l	$C(a1),-(a7)
	move.l	$8(a1),-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L51
L50
; if (fabs(r2[1])>fabs(
	move.l	a2,a0
; if (fabs(r2[1])>fabs(
	move.l	-$130(a5),a2
; if (fabs(r2[1])>fabs(
	move.l	a0,-$130(a5)
L51
; if (0.0 == r1[1])  
	move.l	-$130(a5),a1
	ftst.d	$8(a1)
	fbne.b	L53
L52
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L53
; m2 = r2[1]/r1[1];
	move.l	-$130(a5),a1
	fmove.d	$8(a2),fp2
	fdiv.d	$8(a1),fp2
; m3 = r3[1]/r1[1];
	move.l	-$130(a5),a1
	fmove.d	$8(a4),fp1
	fdiv.d	$8(a1),fp1
; r2[2] -= m2 * r1[2];
	move.l	-$130(a5),a1
	fmove.x	fp2,fp3
	fmul.d	$10(a1),fp3
	lea	$10(a2),a0
	fmove.d	(a0),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,(a0)
; r3[2] -= m3 * r1[2];
	move.l	-$130(a5),a1
	fmove.x	fp1,fp3
	fmul.d	$10(a1),fp3
	lea	$10(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,(a0)
; r2[3] -= m2 * r1[3];
	move.l	-$130(a5),a1
	fmove.x	fp2,fp3
	fmul.d	$18(a1),fp3
	lea	$18(a2),a0
	fmove.d	(a0),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,(a0)
; r3[3] -= m3 * r1[3];
	move.l	-$130(a5),a1
	fmove.x	fp1,fp3
	fmul.d	$18(a1),fp3
	lea	$18(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,(a0)
; s = r1[4];
	move.l	-$130(a5),a1
	fmove.d	$20(a1),fp0
; if (0.0 != s) 
	ftst.d	fp0
	fbeq.b	L55
L54
; r2[4] -= m2 * s;
	fmove.x	fp2,fp4
	fmul.x	fp0,fp4
	lea	$20(a2),a0
	fmove.d	(a0),fp3
	fsub.x	fp4,fp3
	fmove.d	fp3,(a0)
; r3[4] -= m3 * s;
	fmove.x	fp1,fp3
	fmul.x	fp0,fp3
	lea	$20(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,(a0)
L55
; s = r1[5];
	move.l	-$130(a5),a1
	fmove.d	$28(a1),fp0
; if (0.0 != s) 
	ftst.d	fp0
	fbeq.b	L57
L56
; r2[5] -= m2 * s;
	fmove.x	fp2,fp4
	fmul.x	fp0,fp4
	lea	$28(a2),a0
	fmove.d	(a0),fp3
	fsub.x	fp4,fp3
	fmove.d	fp3,(a0)
; r3[5] -= m3 * s;
	fmove.x	fp1,fp3
	fmul.x	fp0,fp3
	lea	$28(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,(a0)
L57
; s = r1[6];
	move.l	-$130(a5),a1
	fmove.d	$30(a1),fp0
; if (0.0 != s) 
	ftst.d	fp0
	fbeq.b	L59
L58
; r2[6] -= m2 * s;
	fmove.x	fp2,fp4
	fmul.x	fp0,fp4
	lea	$30(a2),a0
	fmove.d	(a0),fp3
	fsub.x	fp4,fp3
	fmove.d	fp3,(a0)
; r3[6] -= m3 * s;
	fmove.x	fp1,fp3
	fmul.x	fp0,fp3
	lea	$30(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp3,fp0
	fmove.d	fp0,(a0)
L59
; s = r1[7];
	move.l	-$130(a5),a1
	fmove.d	$38(a1),fp0
; if (0.0 != s) 
	ftst.d	fp0
	fbeq.b	L61
L60
; r2[7] -= m2 * s;
	fmul.x	fp0,fp2
	lea	$38(a2),a0
	fmove.d	(a0),fp3
	fsub.x	fp2,fp3
	fmove.d	fp3,(a0)
; r3[7] -= m3 * s;
	fmul.x	fp0,fp1
	lea	$38(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp1,fp0
	fmove.d	fp0,(a0)
L61
; if (fabs(r3[2])>fabs(r2[2])) SWAP_ROWS(r3, r2)
	move.l	$14(a4),-(a7)
	move.l	$10(a4),-(a7)
	jsr	_fabs__r
	fmove.x	fp0,fp2
	addq.w	#$8,a7
	move.l	$14(a2),-(a7)
	move.l	$10(a2),-(a7)
	jsr	_fabs__r
	addq.w	#$8,a7
	fcmp.x	fp0,fp2
	fbole.b	L63
L62
; 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
L63
; if (0.0 == r2[2])  
	ftst.d	$10(a2)
	fbne.b	L65
L64
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L65
; m3 = r3[2]/r2[2];
	fmove.d	$10(a4),fp1
	fdiv.d	$10(a2),fp1
; r3[3] -= m3 * r2[3], r3[4] -= m3 * r2[4],
	fmove.x	fp1,fp2
	fmul.d	$18(a2),fp2
	lea	$18(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmove.x	fp1,fp2
	fmul.d	$20(a2),fp2
	lea	$20(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmove.x	fp1,fp2
	fmul.d	$28(a2),fp2
	lea	$28(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmove.x	fp1,fp2
	fmul.d	$30(a2),fp2
	lea	$30(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmul.d	$38(a2),fp1
	lea	$38(a4),a0
	fmove.d	(a0),fp0
	fsub.x	fp1,fp0
	fmove.d	fp0,(a0)
; if (0.0 == r3[3]) 
	ftst.d	$18(a4)
	fbne.b	L67
L66
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L67
; s = 1.0/r3[3];
	fmove.d	#$.3FF00000.00000000,fp0
	fdiv.d	$18(a4),fp0
; r3[4] *= s;
	lea	$20(a4),a0
	fmove.d	(a0),fp1
	fmul.x	fp0,fp1
	fmove.d	fp1,(a0)
; r3[5] *= s;
	lea	$28(a4),a0
	fmove.d	(a0),fp1
	fmul.x	fp0,fp1
	fmove.d	fp1,(a0)
; r3[6] *= s;
	lea	$30(a4),a0
	fmove.d	(a0),fp1
	fmul.x	fp0,fp1
	fmove.d	fp1,(a0)
; r3[7] *= s;
	lea	$38(a4),a0
	fmove.d	(a0),fp1
	fmul.x	fp0,fp1
	fmove.d	fp1,(a0)
; m2 = r2[3];
	fmove.d	$18(a2),fp2
; s  = 1.0/r2[2];
	fmove.d	#$.3FF00000.00000000,fp0
	fdiv.d	$10(a2),fp0
; r2[4] = s * (r2[4] - r3[4] * m2), r2[5] = s * (r2[5] - r3[5] * m2)
	fmove.d	$20(a4),fp3
	fmul.x	fp2,fp3
	fmove.d	$20(a2),fp1
	fsub.x	fp3,fp1
	fmul.x	fp0,fp1
	fmove.d	fp1,$20(a2)
	fmove.d	$28(a4),fp3
	fmul.x	fp2,fp3
	fmove.d	$28(a2),fp1
	fsub.x	fp3,fp1
	fmul.x	fp0,fp1
	fmove.d	fp1,$28(a2)
	fmove.d	$30(a4),fp3
	fmul.x	fp2,fp3
	fmove.d	$30(a2),fp1
	fsub.x	fp3,fp1
	fmul.x	fp0,fp1
	fmove.d	fp1,$30(a2)
	fmove.d	$38(a4),fp3
	fmul.x	fp2,fp3
	fmove.d	$38(a2),fp1
	fsub.x	fp3,fp1
	fmul.x	fp1,fp0
	fmove.d	fp0,$38(a2)
; m1 = r1[3];
	move.l	-$130(a5),a1
	fmove.d	$18(a1),fp3
; r1[4] -= r3[4] * m1, r1[5] -= r3[5] * m1,
	fmove.d	$20(a4),fp1
	fmul.x	fp3,fp1
	move.l	-$130(a5),a1
	lea	$20(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp1,fp0
	fmove.d	fp0,(a0)
	fmove.d	$28(a4),fp1
	fmul.x	fp3,fp1
	move.l	-$130(a5),a1
	lea	$28(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp1,fp0
	fmove.d	fp0,(a0)
	fmove.d	$30(a4),fp1
	fmul.x	fp3,fp1
	move.l	-$130(a5),a1
	lea	$30(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp1,fp0
	fmove.d	fp0,(a0)
	fmove.d	$38(a4),fp1
	fmul.x	fp3,fp1
	move.l	-$130(a5),a1
	lea	$38(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp1,fp0
	fmove.d	fp0,(a0)
; m0 = r0[3];
	move.l	-$12C(a5),a1
	fmove.d	$18(a1),fp1
; r0[4] -= r3[4] * m0, r0[5] -= r3[5] * m0,
	fmove.d	$20(a4),fp2
	fmul.x	fp1,fp2
	move.l	-$12C(a5),a1
	lea	$20(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmove.d	$28(a4),fp2
	fmul.x	fp1,fp2
	move.l	-$12C(a5),a1
	lea	$28(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmove.d	$30(a4),fp2
	fmul.x	fp1,fp2
	move.l	-$12C(a5),a1
	lea	$30(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmove.d	$38(a4),fp2
	fmul.x	fp1,fp2
	move.l	-$12C(a5),a1
	lea	$38(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
; m1 = r1[2];
	move.l	-$130(a5),a1
	fmove.d	$10(a1),fp3
; s  = 1.0/r1[1];
	move.l	-$130(a5),a1
	fmove.d	#$.3FF00000.00000000,fp0
	fdiv.d	$8(a1),fp0
; r1[4] = s * (r1[4] - r2[4] * m1), r1[5] = s * (r1[5] - r2[5] * m1)
	move.l	-$130(a5),a1
	fmove.d	$20(a2),fp2
	fmul.x	fp3,fp2
	fmove.d	$20(a1),fp1
	fsub.x	fp2,fp1
	fmul.x	fp0,fp1
	move.l	-$130(a5),a1
	fmove.d	fp1,$20(a1)
	move.l	-$130(a5),a1
	fmove.d	$28(a2),fp2
	fmul.x	fp3,fp2
	fmove.d	$28(a1),fp1
	fsub.x	fp2,fp1
	fmul.x	fp0,fp1
	move.l	-$130(a5),a1
	fmove.d	fp1,$28(a1)
	move.l	-$130(a5),a1
	fmove.d	$30(a2),fp2
	fmul.x	fp3,fp2
	fmove.d	$30(a1),fp1
	fsub.x	fp2,fp1
	fmul.x	fp0,fp1
	move.l	-$130(a5),a1
	fmove.d	fp1,$30(a1)
	move.l	-$130(a5),a1
	fmove.d	$38(a2),fp2
	fmul.x	fp3,fp2
	fmove.d	$38(a1),fp1
	fsub.x	fp2,fp1
	fmul.x	fp1,fp0
	move.l	-$130(a5),a1
	fmove.d	fp0,$38(a1)
; m0 = r0[2];
	move.l	-$12C(a5),a1
	fmove.d	$10(a1),fp1
; r0[4] -= r2[4] * m0, r0[5] -= r2[5] * m0,
	fmove.d	$20(a2),fp2
	fmul.x	fp1,fp2
	move.l	-$12C(a5),a1
	lea	$20(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmove.d	$28(a2),fp2
	fmul.x	fp1,fp2
	move.l	-$12C(a5),a1
	lea	$28(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmove.d	$30(a2),fp2
	fmul.x	fp1,fp2
	move.l	-$12C(a5),a1
	lea	$30(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
	fmove.d	$38(a2),fp2
	fmul.x	fp1,fp2
	move.l	-$12C(a5),a1
	lea	$38(a1),a0
	fmove.d	(a0),fp0
	fsub.x	fp2,fp0
	fmove.d	fp0,(a0)
; m0 = r0[1];
	move.l	-$12C(a5),a1
	fmove.d	$8(a1),fp1
; s  = 1.0/r0[0];
	move.l	-$12C(a5),a0
	fmove.d	(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	-$12C(a5),a1
	fmove.d	$20(a1),fp2
	move.l	-$130(a5),a1
	fmove.d	$20(a1),fp3
	fmul.x	fp1,fp3
	fsub.x	fp3,fp2
	fmul.x	fp0,fp2
	move.l	-$12C(a5),a1
	fmove.d	fp2,$20(a1)
	move.l	-$12C(a5),a1
	fmove.d	$28(a1),fp2
	move.l	-$130(a5),a1
	fmove.d	$28(a1),fp3
	fmul.x	fp1,fp3
	fsub.x	fp3,fp2
	fmul.x	fp0,fp2
	move.l	-$12C(a5),a1
	fmove.d	fp2,$28(a1)
	move.l	-$12C(a5),a1
	fmove.d	$30(a1),fp2
	move.l	-$130(a5),a1
	fmove.d	$30(a1),fp3
	fmul.x	fp1,fp3
	fsub.x	fp3,fp2
	fmul.x	fp0,fp2
	move.l	-$12C(a5),a1
	fmove.d	fp2,$30(a1)
	move.l	-$12C(a5),a1
	fmove.d	$38(a1),fp2
	move.l	-$130(a5),a1
	fmove.d	$38(a1),fp3
	fmul.x	fp1,fp3
	fsub.x	fp3,fp2
	fmul.x	fp2,fp0
	move.l	-$12C(a5),a1
	fmove.d	fp0,$38(a1)
; MAT(out,0,0) = r0[4];
	move.l	-$12C(a5),a1
	move.l	$C(a5),a0
	move.l	$20(a1),(a0)
	move.l	$24(a1),4(a0)
; MAT(out,0,1) = r0[5],
	move.l	-$12C(a5),a1
	fmove.d	$28(a1),fp0
	move.l	$C(a5),a1
	fmove.d	fp0,$20(a1)
	move.l	-$12C(a5),a1
	fmove.d	$30(a1),fp0
	move.l	$C(a5),a1
	fmove.d	fp0,$40(a1)
; MAT(out,0,3) = r0[7],
	move.l	-$12C(a5),a1
	fmove.d	$38(a1),fp0
	move.l	$C(a5),a1
	fmove.d	fp0,$60(a1)
	move.l	-$130(a5),a1
	fmove.d	$20(a1),fp0
	move.l	$C(a5),a1
	fmove.d	fp0,$8(a1)
; MAT(out,1,1) = r1[5],
	move.l	-$130(a5),a1
	fmove.d	$28(a1),fp0
	move.l	$C(a5),a1
	fmove.d	fp0,$28(a1)
	move.l	-$130(a5),a1
	fmove.d	$30(a1),fp0
	move.l	$C(a5),a1
	fmove.d	fp0,$48(a1)
; MAT(out,1,3) = r1[7],
	move.l	-$130(a5),a1
	fmove.d	$38(a1),fp0
	move.l	$C(a5),a1
	fmove.d	fp0,$68(a1)
	move.l	$C(a5),a1
	move.l	$20(a2),$10(a1)
	move.l	$24(a2),$14(a1)
; MAT(out,2,1) = r2[5],
	move.l	$C(a5),a1
	move.l	$28(a2),$30(a1)
	move.l	$2C(a2),$34(a1)
	move.l	$C(a5),a1
	move.l	$30(a2),$50(a1)
	move.l	$34(a2),$54(a1)
; MAT(out,2,3) = r2[7],
	move.l	$C(a5),a1
	move.l	$38(a2),$70(a1)
	move.l	$3C(a2),$74(a1)
	move.l	$C(a5),a1
	move.l	$20(a4),$18(a1)
	move.l	$24(a4),$1C(a1)
; MAT(out,3,1) = r3[5],
	move.l	$C(a5),a1
	move.l	$28(a4),$38(a1)
	move.l	$2C(a4),$3C(a1)
	move.l	$C(a5),a1
	move.l	$30(a4),$58(a1)
	move.l	$34(a4),$5C(a1)
; MAT(out,3,3) = r3[7];
	move.l	$C(a5),a1
	move.l	$38(a4),$78(a1)
	move.l	$3C(a4),$7C(a1)
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_gluProject:0",CODE


;GLint APIENTRY gluProject(GLdouble objx,GLdouble objy,GLdouble objz,
	XDEF	_gluProject
_gluProject
L72	EQU	-$40
	link	a5,#L72
	movem.l	a2-a4,-(a7)
	fmovem.x fp2,-(a7)
	move.l	$20(a5),a1
	move.l	$28(a5),a2
	move.l	$34(a5),a3
	move.l	$30(a5),a4
	fmove.d	$18(a5),fp0
	fmove.d	$10(a5),fp1
	fmove.d	$8(a5),fp2
L69
;    in[0]=objx;
	fmove.d	fp2,-$20(a5)
; in[1]=objy;
	lea	-$20(a5),a0
	fmove.d	fp1,$8(a0)
; in[2]=objz;
	lea	-$20(a5),a0
	fmove.d	fp0,$10(a0)
; in[3]=1.0;
	lea	-$20(a5),a0
	move.l	#$3FF00000,$18(a0)
	clr.l	$1C(a0)
;    transform_point(out,model,in);
	pea	-$20(a5)
	move.l	a1,-(a7)
	pea	-$40(a5)
	jsr	_transform_point
	add.w	#$C,a7
;    transform_point(in,proj,out);
	pea	-$40(a5)
	move.l	$24(a5),-(a7)
	pea	-$20(a5)
	jsr	_transform_point
	add.w	#$C,a7
;    if (in[3]==0.0)
	lea	-$20(a5),a0
	ftst.d	$18(a0)
	fbne.b	L71
L70
	moveq	#0,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L71
;    in[0]/=in[3];
	lea	-$20(a5),a0
	fmove.d	$18(a0),fp1
	lea	-$20(a5),a0
	fmove.d	(a0),fp0
	fdiv.x	fp1,fp0
	fmove.d	fp0,(a0)
; in[1]/=in[3];
	lea	-$20(a5),a0
	fmove.d	$18(a0),fp1
	lea	-$20(a5),a0
	addq.w	#$8,a0
	fmove.d	(a0),fp0
	fdiv.x	fp1,fp0
	fmove.d	fp0,(a0)
; in[2]/=in[3];
	lea	-$20(a5),a0
	fmove.d	$18(a0),fp1
	lea	-$20(a5),a0
	add.w	#$10,a0
	fmove.d	(a0),fp0
	fdiv.x	fp1,fp0
	fmove.d	fp0,(a0)
;    *winx = viewport[0]+(1+in[0])*viewport[2]/2;
	fmove.l	(a2),fp1
	fmove.d	-$20(a5),fp0
	fadd.d	#$.3FF00000.00000000,fp0
	fmove.l	$8(a2),fp2
	fmul.x	fp2,fp0
	fdiv.d	#$.40000000.00000000,fp0
	fadd.x	fp0,fp1
	move.l	$2C(a5),a0
	fmove.d	fp1,(a0)
;    *winy = viewport[1]+(1+in[1])*viewport[3]/2;
	fmove.l	4(a2),fp1
	lea	-$20(a5),a0
	fmove.d	$8(a0),fp0
	fadd.d	#$.3FF00000.00000000,fp0
	fmove.l	$C(a2),fp2
	fmul.x	fp2,fp0
	fdiv.d	#$.40000000.00000000,fp0
	fadd.x	fp0,fp1
	move.l	a4,a0
	fmove.d	fp1,(a0)
;    *winz = (1+in[2])/2;
	lea	-$20(a5),a0
	fmove.d	$10(a0),fp0
	fadd.d	#$.3FF00000.00000000,fp0
	fdiv.d	#$.40000000.00000000,fp0
	move.l	a3,a0
	fmove.d	fp0,(a0)
	moveq	#1,d0
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_gluUnProject:0",CODE


;GLint APIENTRY gluUnProject(GLdouble winx,GLdouble winy,GLdouble win
	XDEF	_gluUnProject
_gluUnProject
L76	EQU	-$140
	link	a5,#L76
	movem.l	a2-a4,-(a7)
	fmovem.x fp2/fp3,-(a7)
	movem.l	$28(a5),a0/a4
	move.l	$34(a5),a2
	move.l	$30(a5),a3
	fmove.d	$10(a5),fp0
	fmove.d	$8(a5),fp1
	fmove.d	$18(a5),fp3
L73
;    in[0]=(winx-viewport[0])*2/viewport[2] - 1.0;
	fmove.l	(a0),fp2
	fsub.x	fp2,fp1
	fmul.d	#$.40000000.00000000,fp1
	fmove.l	$8(a0),fp2
	fdiv.x	fp2,fp1
	fsub.d	#$.3FF00000.00000000,fp1
	fmove.d	fp1,-$120(a5)
;    in[1]=(winy-viewport[1])*2/viewport[3] - 1.0;
	fmove.l	4(a0),fp1
	fsub.x	fp1,fp0
	fmul.d	#$.40000000.00000000,fp0
	fmove.l	$C(a0),fp1
	fdiv.x	fp1,fp0
	fsub.d	#$.3FF00000.00000000,fp0
	lea	-$120(a5),a0
	fmove.d	fp0,$8(a0)
;    in[2]=2*winz - 1.0;
	fmove.x	fp3,fp0
	fmul.d	#$.40000000.00000000,fp0
	fsub.d	#$.3FF00000.00000000,fp0
	lea	-$120(a5),a0
	fmove.d	fp0,$10(a0)
;    in[3]=1.0;
	lea	-$120(a5),a0
	move.l	#$3FF00000,$18(a0)
	clr.l	$1C(a0)
;    matmul(A,proj,model);
	move.l	$20(a5),-(a7)
	move.l	$24(a5),-(a7)
	pea	-$100(a5)
	jsr	_matmul
	add.w	#$C,a7
;    invert_matrix(A,m);
	pea	-$80(a5)
	pea	-$100(a5)
	jsr	_invert_matrix
	addq.w	#$8,a7
;    transform_point(out,m,in);
	pea	-$120(a5)
	pea	-$80(a5)
	pea	-$140(a5)
	jsr	_transform_point
	add.w	#$C,a7
;    if (out[3]==0.0)
	lea	-$140(a5),a0
	ftst.d	$18(a0)
	fbne.b	L75
L74
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L75
;    *objx=out[0]/out[3];
	lea	-$140(a5),a0
	fmove.d	-$140(a5),fp0
	fdiv.d	$18(a0),fp0
	move.l	a4,a0
	fmove.d	fp0,(a0)
;    *objy=out[1]/out[3];
	lea	-$140(a5),a0
	fmove.d	$8(a0),fp0
	lea	-$140(a5),a0
	fdiv.d	$18(a0),fp0
	move.l	a3,a0
	fmove.d	fp0,(a0)
;    *objz=out[2]/out[3];
	lea	-$140(a5),a0
	fmove.d	$10(a0),fp0
	lea	-$140(a5),a0
	fdiv.d	$18(a0),fp0
	fmove.d	fp0,(a2)
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	END
