
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/tesselat.c
	mc68030
	mc68881
	XREF	_free

	SECTION "_edge_flag:2",BSS

_edge_flag
	ds.b	1

	SECTION "_twice_the_triangle_area__r:0",CODE

	rts

;static GLdouble twice_the_triangle_area(
_twice_the_triangle_area__r
	move.l	a2,-(a7)
	fmovem.x fp2/fp3,-(a7)
	movem.l	$20(a7),a0/a2
	move.l	$28(a7),a1
L70
	fmove.d	$1C(a2),fp0
	fsub.d	$1C(a0),fp0
	fmove.d	$24(a1),fp1
	fsub.d	$24(a0),fp1
	fmul.x	fp1,fp0
	fmove.d	$24(a2),fp1
	fsub.d	$24(a0),fp1
	fmove.d	$1C(a1),fp2
	fsub.d	$1C(a0),fp2
	fmul.x	fp2,fp1
	fsub.x	fp1,fp0
	fmovem.x (a7)+,fp2/fp3
	move.l	(a7)+,a2
	rts

	SECTION "_left:0",CODE


;static GLboolean left(
_left
	fmovem.x fp2/fp3/fp4,-(a7)
	fmove.d	$28(a7),fp0
	fmove.d	$30(a7),fp1
	fmove.d	$38(a7),fp2
	fmove.d	$48(a7),fp3
	fmove.d	$40(a7),fp4
L71
;	if(A*x+B*y+C > -EPSILON)
	fmul.x	fp4,fp0
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fadd.x	fp2,fp0
	fcmp.d	#$.BEB0C6F7.A0B5ED8D,fp0
	fbole.b	L73
L72
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3/fp4
	rts
L73
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4
	rts

	SECTION "_right:0",CODE


;static GLboolean right(
_right
	fmovem.x fp2/fp3/fp4,-(a7)
	fmove.d	$28(a7),fp0
	fmove.d	$30(a7),fp1
	fmove.d	$38(a7),fp2
	fmove.d	$48(a7),fp3
	fmove.d	$40(a7),fp4
L74
;	if(A*x+B*y+C < EPSILON)
	fmul.x	fp4,fp0
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fadd.x	fp2,fp0
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fboge.b	L76
L75
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3/fp4
	rts
L76
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4
	rts

	SECTION "_convex_ccw:0",CODE


;static GLint convex_ccw(
_convex_ccw
	move.l	a2,-(a7)
	movem.l	$8(a7),a0-a2
L77
;	d = twice_the_triangle_area(va,vb,vc);
	move.l	a2,-(a7)
	move.l	a1,-(a7)
	move.l	a0,-(a7)
	jsr	_twice_the_triangle_area__r
	add.w	#$C,a7
;	if (d > EPSILON ) 
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L79
L78
	moveq	#1,d0
	move.l	(a7)+,a2
	rts
L79
; else if (d < -EPSILON ) 
	fcmp.d	#$.BEB0C6F7.A0B5ED8D,fp0
	fboge.b	L81
L80
	moveq	#0,d0
	move.l	(a7)+,a2
	rts
L81
	moveq	#-1,d0
	move.l	(a7)+,a2
	rts

	SECTION "_convex_cw:0",CODE


;static GLint convex_cw(
_convex_cw
	move.l	a2,-(a7)
	movem.l	$8(a7),a0-a2
L82
;	d = twice_the_triangle_area(va,vb,vc);
	move.l	a2,-(a7)
	move.l	a1,-(a7)
	move.l	a0,-(a7)
	jsr	_twice_the_triangle_area__r
	add.w	#$C,a7
;	if (d < -EPSILON ) 
	fcmp.d	#$.BEB0C6F7.A0B5ED8D,fp0
	fboge.b	L84
L83
	moveq	#1,d0
	move.l	(a7)+,a2
	rts
L84
; else if (d > EPSILON ) 
	fcmp.d	#$.3EB0C6F7.A0B5ED8D,fp0
	fbole.b	L86
L85
	moveq	#0,d0
	move.l	(a7)+,a2
	rts
L86
	moveq	#-1,d0
	move.l	(a7)+,a2
	rts

	SECTION "_diagonal_ccw:0",CODE


;static GLboolean diagonal_ccw(
_diagonal_ccw
L104	EQU	-$84
	link	a5,#L104
	movem.l	a2-a4,-(a7)
	fmovem.x fp2/fp3,-(a7)
	move.l	$10(a5),a0
	move.l	$8(a5),a3
	move.l	$C(a5),a4
L87
;	tess_vertex *vc=va->next 
	move.l	a3,a1
	move.l	$32(a1),-4(a5)
;	GLint	 res = convex_ccw(va,vc,vb,tobj);
	move.l	a0,-(a7)
	move.l	a4,-(a7)
	move.l	-4(a5),-(a7)
	move.l	a3,-(a7)
	jsr	_convex_ccw
	add.w	#$10,a7
;	if (res == 0) 
	tst.l	d0
	bne.b	L89
L88
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L89
;	if (res == -1) 
	cmp.l	#-1,d0
	bne.b	L91
L90
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L91
;	ba.A=vb->y - va->y;
	move.l	a4,a0
	fmove.d	$24(a0),fp0
	move.l	a3,a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-$54(a5)
;	ba.B=va->x - vb->x;
	move.l	a3,a0
	fmove.d	$1C(a0),fp0
	move.l	a4,a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-$4C(a5)
;	ba.C= -ba.A*va->x - ba.B*va->y;
	fmove.d	-$54(a5),fp0
	fneg.d	fp0
	move.l	a3,a0
	fmul.d	$1C(a0),fp0
	move.l	a3,a0
	fmove.d	-$4C(a5),fp1
	fmul.d	$24(a0),fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,-$44(a5)
;	ac.A=va->y - vc->y;
	move.l	a3,a0
	fmove.d	$24(a0),fp0
	move.l	-4(a5),a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-$24(a5)
;	ac.B=vc->x - va->x;
	move.l	-4(a5),a0
	fmove.d	$1C(a0),fp0
	move.l	a3,a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-$1C(a5)
;	ac.C= -ac.A*vc->x - ac.B*vc->y;
	fmove.d	-$24(a5),fp0
	fneg.d	fp0
	move.l	-4(a5),a0
	fmul.d	$1C(a0),fp0
	move.l	-4(a5),a0
	fmove.d	-$1C(a5),fp1
	fmul.d	$24(a0),fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,-$14(a5)
;	cb.A=vc->y - vb->y;
	move.l	-4(a5),a0
	fmove.d	$24(a0),fp0
	move.l	a4,a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-$3C(a5)
;	cb.B=vb->x - vc->x;
	move.l	a4,a0
	fmove.d	$1C(a0),fp0
	move.l	-4(a5),a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-$34(a5)
;	cb.C= -cb.A*vb->x - cb.B*vb->y;
	fmove.d	-$3C(a5),fp0
	fneg.d	fp0
	move.l	a4,a0
	fmul.d	$1C(a0),fp0
	move.l	a4,a0
	fmove.d	-$34(a5),fp1
	fmul.d	$24(a0),fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,-$2C(a5)
;	for(vertex=vb->next;
	move.l	a4,a0
	move.l	$32(a0),a2
	bra	L102
L92
;		shadow_vertex=vertex->shadow_vertex;
	move.l	$2E(a2),a0
;		if(shadow_vertex!=NULL && 
	cmp.w	#0,a0
	beq.b	L97
L93
	cmp.l	a3,a0
	beq.b	L96
L94
	cmp.l	a4,a0
	beq.b	L96
L95
	cmp.l	-4(a5),a0
	bne.b	L97
L96
;			
	bra	L101
L97
;		x=vertex->x;
	fmove.d	$1C(a2),fp3
;		y=vertex->y;
	fmove.d	$24(a2),fp2
;		if(left(ba.A,ba.B,ba.C,x,y) &&
	fmove.d	fp2,-(a7)
	fmove.d	fp3,-(a7)
	move.l	-$40(a5),-(a7)
	move.l	-$44(a5),-(a7)
	move.l	-$48(a5),-(a7)
	move.l	-$4C(a5),-(a7)
	move.l	-$50(a5),-(a7)
	move.l	-$54(a5),-(a7)
	jsr	_left
	add.w	#$28,a7
	tst.b	d0
	beq.b	L101
L98
	fmove.d	fp2,-(a7)
	fmove.d	fp3,-(a7)
	move.l	-$10(a5),-(a7)
	move.l	-$14(a5),-(a7)
	move.l	-$18(a5),-(a7)
	move.l	-$1C(a5),-(a7)
	move.l	-$20(a5),-(a7)
	move.l	-$24(a5),-(a7)
	jsr	_left
	add.w	#$28,a7
	tst.b	d0
	beq.b	L101
L99
	fmove.d	fp2,-(a7)
	fmove.d	fp3,-(a7)
	move.l	-$28(a5),-(a7)
	move.l	-$2C(a5),-(a7)
	move.l	-$30(a5),-(a7)
	move.l	-$34(a5),-(a7)
	move.l	-$38(a5),-(a7)
	move.l	-$3C(a5),-(a7)
	jsr	_left
	add.w	#$28,a7
	tst.b	d0
	beq.b	L101
L100
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L101
	move.l	$32(a2),a2
L102
	cmp.l	a3,a2
	bne	L92
L103
;			return 
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_diagonal_cw:0",CODE


;static GLboolean diagonal_cw(
_diagonal_cw
L122	EQU	-$84
	link	a5,#L122
	movem.l	a2-a4,-(a7)
	fmovem.x fp2/fp3,-(a7)
	move.l	$10(a5),a0
	move.l	$8(a5),a3
	move.l	$C(a5),a4
L105
;	tess_vertex *vc=va->next 
	move.l	a3,a1
	move.l	$32(a1),-4(a5)
;	GLint	 res = convex_cw(va,vc,vb,tobj);
	move.l	a0,-(a7)
	move.l	a4,-(a7)
	move.l	-4(a5),-(a7)
	move.l	a3,-(a7)
	jsr	_convex_cw
	add.w	#$10,a7
;	if (res == 0) 
	tst.l	d0
	bne.b	L107
L106
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L107
;	if (res == -1) 
	cmp.l	#-1,d0
	bne.b	L109
L108
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L109
;	ba.A=vb->y - va->y;
	move.l	a4,a0
	fmove.d	$24(a0),fp0
	move.l	a3,a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-$54(a5)
;	ba.B=va->x - vb->x;
	move.l	a3,a0
	fmove.d	$1C(a0),fp0
	move.l	a4,a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-$4C(a5)
;	ba.C= -ba.A*va->x - ba.B*va->y;
	fmove.d	-$54(a5),fp0
	fneg.d	fp0
	move.l	a3,a0
	fmul.d	$1C(a0),fp0
	move.l	a3,a0
	fmove.d	-$4C(a5),fp1
	fmul.d	$24(a0),fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,-$44(a5)
;	ac.A=va->y - vc->y;
	move.l	a3,a0
	fmove.d	$24(a0),fp0
	move.l	-4(a5),a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-$24(a5)
;	ac.B=vc->x - va->x;
	move.l	-4(a5),a0
	fmove.d	$1C(a0),fp0
	move.l	a3,a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-$1C(a5)
;	ac.C= -ac.A*vc->x - ac.B*vc->y;
	fmove.d	-$24(a5),fp0
	fneg.d	fp0
	move.l	-4(a5),a0
	fmul.d	$1C(a0),fp0
	move.l	-4(a5),a0
	fmove.d	-$1C(a5),fp1
	fmul.d	$24(a0),fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,-$14(a5)
;	cb.A=vc->y - vb->y;
	move.l	-4(a5),a0
	fmove.d	$24(a0),fp0
	move.l	a4,a0
	fsub.d	$24(a0),fp0
	fmove.d	fp0,-$3C(a5)
;	cb.B=vb->x - vc->x;
	move.l	a4,a0
	fmove.d	$1C(a0),fp0
	move.l	-4(a5),a0
	fsub.d	$1C(a0),fp0
	fmove.d	fp0,-$34(a5)
;	cb.C= -cb.A*vb->x - cb.B*vb->y;
	fmove.d	-$3C(a5),fp0
	fneg.d	fp0
	move.l	a4,a0
	fmul.d	$1C(a0),fp0
	move.l	a4,a0
	fmove.d	-$34(a5),fp1
	fmul.d	$24(a0),fp1
	fsub.x	fp1,fp0
	fmove.d	fp0,-$2C(a5)
;	for(vertex=vb->next;
	move.l	a4,a0
	move.l	$32(a0),a2
	bra	L120
L110
;		shadow_vertex=vertex->shadow_vertex;
	move.l	$2E(a2),a0
;		if(shadow_vertex!=NULL && 
	cmp.w	#0,a0
	beq.b	L115
L111
	cmp.l	a3,a0
	beq.b	L114
L112
	cmp.l	a4,a0
	beq.b	L114
L113
	cmp.l	-4(a5),a0
	bne.b	L115
L114
;			
	bra	L119
L115
;		x=vertex->x;
	fmove.d	$1C(a2),fp3
;		y=vertex->y;
	fmove.d	$24(a2),fp2
;		if(right(ba.A,ba.B,ba.C,x,y) &&
	fmove.d	fp2,-(a7)
	fmove.d	fp3,-(a7)
	move.l	-$40(a5),-(a7)
	move.l	-$44(a5),-(a7)
	move.l	-$48(a5),-(a7)
	move.l	-$4C(a5),-(a7)
	move.l	-$50(a5),-(a7)
	move.l	-$54(a5),-(a7)
	jsr	_right
	add.w	#$28,a7
	tst.b	d0
	beq.b	L119
L116
	fmove.d	fp2,-(a7)
	fmove.d	fp3,-(a7)
	move.l	-$10(a5),-(a7)
	move.l	-$14(a5),-(a7)
	move.l	-$18(a5),-(a7)
	move.l	-$1C(a5),-(a7)
	move.l	-$20(a5),-(a7)
	move.l	-$24(a5),-(a7)
	jsr	_right
	add.w	#$28,a7
	tst.b	d0
	beq.b	L119
L117
	fmove.d	fp2,-(a7)
	fmove.d	fp3,-(a7)
	move.l	-$28(a5),-(a7)
	move.l	-$2C(a5),-(a7)
	move.l	-$30(a5),-(a7)
	move.l	-$34(a5),-(a7)
	move.l	-$38(a5),-(a7)
	move.l	-$3C(a5),-(a7)
	jsr	_right
	add.w	#$28,a7
	tst.b	d0
	beq.b	L119
L118
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts
L119
	move.l	$32(a2),a2
L120
	cmp.l	a3,a2
	bne	L110
L121
;			return 
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_clip_ear:0",CODE


;static void clip_ear(
_clip_ear
	movem.l	a2-a4,-(a7)
	movem.l	$10(a7),a1/a2/a4
L123
;	emit_triangle(tobj,v->previous,v,v->next);
	move.l	$32(a2),-(a7)
	move.l	a2,-(a7)
	move.l	$36(a2),-(a7)
	move.l	a1,-(a7)
	jsr	_emit_triangle
	add.w	#$10,a7
;	if(contour->vertices==v)
	move.l	a4,a1
	move.l	$14(a1),a0
	cmp.l	a2,a0
	bne.b	L125
L124
;		contour->vertices=v->next;
	move.l	a4,a1
	move.l	$32(a2),$14(a1)
;		contour->last_vertex->next=v->next;
	move.l	a4,a3
	move.l	$18(a3),a0
	move.l	$32(a2),$32(a0)
;		v->next->previous=contour->last_vertex;
	move.l	a4,a0
	move.l	$18(a0),a1
	move.l	$32(a2),a0
	move.l	a1,$36(a0)
	bra.b	L128
L125
;	if(contour->last_vertex==v)
	move.l	a4,a1
	move.l	$18(a1),a0
	cmp.l	a2,a0
	bne.b	L127
L126
;		contour->vertices->previous=v->previous;
	move.l	a4,a3
	move.l	$14(a3),a0
	move.l	$36(a2),$36(a0)
;		v->previous->next=v->next;
	move.l	$36(a2),a0
	move.l	$32(a2),$32(a0)
;		contour->last_vertex=v->previous;
	move.l	a4,a1
	move.l	$36(a2),$18(a1)
	bra.b	L128
L127
;		v->next->previous=v->previous;
	move.l	$32(a2),a0
	move.l	$36(a2),$36(a0)
;		v->previous->next=v->next;
	move.l	$36(a2),a0
	move.l	$32(a2),$32(a0)
L128
;	free(v);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;	--(contour->vertex_cnt);
	move.l	a4,a0
	move.l	4(a0),d0
	subq.l	#1,d0
	move.l	a4,a0
	move.l	d0,4(a0)
	movem.l	(a7)+,a2-a4
	rts

	SECTION "_clip_ear_with_edge_flag:0",CODE


;static void clip_ear_with_edge_flag(
_clip_ear_with_edge_flag
	movem.l	a2-a4,-(a7)
	movem.l	$10(a7),a1/a2/a4
L129
;	emit_triangle_with_edge_flag(tobj,v->previous,v->previous->edge_fl
	clr.b	-(a7)
	move.l	$32(a2),-(a7)
	move.b	$2C(a2),-(a7)
	move.l	a2,-(a7)
	move.l	$36(a2),a0
	move.b	$2C(a0),-(a7)
	move.l	$36(a2),-(a7)
	move.l	a1,-(a7)
	jsr	_emit_triangle_with_edge_flag
	add.w	#$16,a7
;	v->previous->edge_flag=GL_FALSE;
	move.l	$36(a2),a0
	clr.b	$2C(a0)
;	if(contour->vertices==v)
	move.l	a4,a1
	move.l	$14(a1),a0
	cmp.l	a2,a0
	bne.b	L131
L130
;		contour->vertices=v->next;
	move.l	a4,a1
	move.l	$32(a2),$14(a1)
;		contour->last_vertex->next=v->next;
	move.l	a4,a3
	move.l	$18(a3),a0
	move.l	$32(a2),$32(a0)
;		v->next->previous=contour->last_vertex;
	move.l	a4,a0
	move.l	$18(a0),a1
	move.l	$32(a2),a0
	move.l	a1,$36(a0)
	bra.b	L134
L131
;	if(contour->last_vertex==v)
	move.l	a4,a1
	move.l	$18(a1),a0
	cmp.l	a2,a0
	bne.b	L133
L132
;		contour->vertices->previous=v->previous;
	move.l	a4,a3
	move.l	$14(a3),a0
	move.l	$36(a2),$36(a0)
;		v->previous->next=v->next;
	move.l	$36(a2),a0
	move.l	$32(a2),$32(a0)
;		contour->last_vertex=v->previous;
	move.l	a4,a1
	move.l	$36(a2),$18(a1)
	bra.b	L134
L133
;		v->next->previous=v->previous;
	move.l	$32(a2),a0
	move.l	$36(a2),$36(a0)
;		v->previous->next=v->next;
	move.l	$36(a2),a0
	move.l	$32(a2),$32(a0)
L134
;	free(v);
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;	--(contour->vertex_cnt);
	move.l	a4,a0
	move.l	4(a0),d0
	subq.l	#1,d0
	move.l	a4,a0
	move.l	d0,4(a0)
	movem.l	(a7)+,a2-a4
	rts

	SECTION "_triangulate_ccw:0",CODE


;static void triangulate_ccw(
_triangulate_ccw
	movem.l	d2/a2-a4,-(a7)
	movem.l	$14(a7),a3/a4
L135
;	GLuint vertex_cnt=contour->vertex_cnt;
	move.l	a4,a0
	move.l	4(a0),d2
;	while(vertex_cnt > 3)
	bra.b	L143
L136
;		vertex=contour->vertices;
	move.l	a4,a0
	move.l	$14(a0),a2
;		while(diagonal_ccw(vertex,vertex->next->next,tobj,contour)==GL_F
	bra.b	L138
L137
;			vertex=vertex->next;
	move.l	$32(a2),a2
L138
	move.l	a4,-(a7)
	move.l	a3,-(a7)
	move.l	$32(a2),a0
	move.l	$32(a0),-(a7)
	move.l	a2,-(a7)
	jsr	_diagonal_ccw
	add.w	#$10,a7
	tst.b	d0
	bne.b	L140
L139
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L137
L140
;		if(tobj->error!=GLU_NO_ERROR)
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L142
L141
	movem.l	(a7)+,d2/a2-a4
	rts
L142
;		clip_ear(tobj,vertex->next,contour);
	move.l	a4,-(a7)
	move.l	$32(a2),-(a7)
	move.l	a3,-(a7)
	jsr	_clip_ear
	add.w	#$C,a7
;		--vertex_cnt;
	subq.l	#1,d2
L143
	cmp.l	#3,d2
	bhi.b	L136
L144
	movem.l	(a7)+,d2/a2-a4
	rts

	SECTION "_triangulate_cw:0",CODE


;static void triangulate_cw(
_triangulate_cw
	movem.l	d2/a2-a4,-(a7)
	movem.l	$14(a7),a3/a4
L145
;	GLuint vertex_cnt=contour->vertex_cnt;
	move.l	a4,a0
	move.l	4(a0),d2
;	while(vertex_cnt > 3)
	bra.b	L153
L146
;		vertex=contour->vertices;
	move.l	a4,a0
	move.l	$14(a0),a2
;		while(diagonal_cw(vertex,vertex->next->next,tobj,contour)==GL_FA
	bra.b	L148
L147
;			vertex=vertex->next;
	move.l	$32(a2),a2
L148
	move.l	a4,-(a7)
	move.l	a3,-(a7)
	move.l	$32(a2),a0
	move.l	$32(a0),-(a7)
	move.l	a2,-(a7)
	jsr	_diagonal_cw
	add.w	#$10,a7
	tst.b	d0
	bne.b	L150
L149
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L147
L150
;		if(tobj->error!=GLU_NO_ERROR)
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L152
L151
	movem.l	(a7)+,d2/a2-a4
	rts
L152
;		clip_ear(tobj,vertex->next,contour);
	move.l	a4,-(a7)
	move.l	$32(a2),-(a7)
	move.l	a3,-(a7)
	jsr	_clip_ear
	add.w	#$C,a7
;		--vertex_cnt;
	subq.l	#1,d2
L153
	cmp.l	#3,d2
	bhi.b	L146
L154
	movem.l	(a7)+,d2/a2-a4
	rts

	SECTION "_triangulate_ccw_with_edge_flag:0",CODE


;static void triangulate_ccw_with_edge_flag(
_triangulate_ccw_with_edge_flag
	movem.l	d2/a2-a4,-(a7)
	movem.l	$14(a7),a3/a4
L155
;	GLuint vertex_cnt=contour->vertex_cnt;
	move.l	a4,a0
	move.l	4(a0),d2
;	while(vertex_cnt > 3)
	bra.b	L163
L156
;		vertex=contour->vertices;
	move.l	a4,a0
	move.l	$14(a0),a2
;		while(diagonal_ccw(vertex,vertex->next->next,tobj,contour)==GL_F
	bra.b	L158
L157
;			vertex=vertex->next;
	move.l	$32(a2),a2
L158
	move.l	a4,-(a7)
	move.l	a3,-(a7)
	move.l	$32(a2),a0
	move.l	$32(a0),-(a7)
	move.l	a2,-(a7)
	jsr	_diagonal_ccw
	add.w	#$10,a7
	tst.b	d0
	bne.b	L160
L159
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L157
L160
;		if(tobj->error!=GLU_NO_ERROR)
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L162
L161
	movem.l	(a7)+,d2/a2-a4
	rts
L162
;		clip_ear_with_edge_flag(tobj,vertex->next,contour);
	move.l	a4,-(a7)
	move.l	$32(a2),-(a7)
	move.l	a3,-(a7)
	jsr	_clip_ear_with_edge_flag
	add.w	#$C,a7
;		--vertex_cnt;
	subq.l	#1,d2
L163
	cmp.l	#3,d2
	bhi.b	L156
L164
	movem.l	(a7)+,d2/a2-a4
	rts

	SECTION "_triangulate_cw_with_edge_flag:0",CODE


;static void triangulate_cw_with_edge_flag(
_triangulate_cw_with_edge_flag
	movem.l	d2/a2-a4,-(a7)
	movem.l	$14(a7),a3/a4
L165
;	GLuint vertex_cnt=contour->vertex_cnt;
	move.l	a4,a0
	move.l	4(a0),d2
;	while(vertex_cnt > 3)
	bra.b	L173
L166
;		vertex=contour->vertices;
	move.l	a4,a0
	move.l	$14(a0),a2
;		while(diagonal_cw(vertex,vertex->next->next,tobj,contour)==GL_FA
	bra.b	L168
L167
;			vertex=vertex->next;
	move.l	$32(a2),a2
L168
	move.l	a4,-(a7)
	move.l	a3,-(a7)
	move.l	$32(a2),a0
	move.l	$32(a0),-(a7)
	move.l	a2,-(a7)
	jsr	_diagonal_cw
	add.w	#$10,a7
	tst.b	d0
	bne.b	L170
L169
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L167
L170
;		if(tobj->error!=GLU_NO_ERROR)
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L172
L171
	movem.l	(a7)+,d2/a2-a4
	rts
L172
;		clip_ear_with_edge_flag(tobj,vertex->next,contour);
	move.l	a4,-(a7)
	move.l	$32(a2),-(a7)
	move.l	a3,-(a7)
	jsr	_clip_ear_with_edge_flag
	add.w	#$C,a7
;		--vertex_cnt;
	subq.l	#1,d2
L173
	cmp.l	#3,d2
	bhi.b	L166
L174
	movem.l	(a7)+,d2/a2-a4
	rts

	SECTION "_tess_tesselate:0",CODE


;void tess_tesselate(GLUtriangulatorObj *tobj)
	XDEF	_tess_tesselate
_tess_tesselate
	movem.l	a2/a3,-(a7)
	move.l	$C(a7),a3
L175
;	for(contour=tobj->contours;
	move.l	a3,a0
	move.l	(a0),a2
	bra.b	L182
L176
;		if(contour->orientation==GLU_CCW) 
	move.l	$10(a2),d0
	cmp.l	#$18719,d0
	bne.b	L178
L177
;			triangulate_ccw(tobj,contour);
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	jsr	_triangulate_ccw
	addq.w	#$8,a7
	bra.b	L179
L178
;			triangulate_cw(tobj,contour);
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	jsr	_triangulate_cw
	addq.w	#$8,a7
L179
;		if(tobj->error!=GLU_NO_ERROR)
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L181
L180
	movem.l	(a7)+,a2/a3
	rts
L181
;		emit_triangle(tobj,contour->vertices,contour->vertices->next,
	move.l	$14(a2),a0
	move.l	$32(a0),a0
	move.l	$32(a0),-(a7)
	move.l	$14(a2),a0
	move.l	$32(a0),-(a7)
	move.l	$14(a2),-(a7)
	move.l	a3,-(a7)
	jsr	_emit_triangle
	add.w	#$10,a7
	move.l	$1C(a2),a2
L182
	cmp.w	#0,a2
	bne.b	L176
L183
	movem.l	(a7)+,a2/a3
	rts

	SECTION "_tess_tesselate_with_edge_flag:0",CODE


;void tess_tesselate_with_edge_flag(GLUtriangulatorObj *tobj)
	XDEF	_tess_tesselate_with_edge_flag
_tess_tesselate_with_edge_flag
	movem.l	a2/a3,-(a7)
	move.l	$C(a7),a3
L184
;	edge_flag=GL_TRUE;
	move.b	#1,_edge_flag(a6)
;	(tobj->callbacks.edgeFlag)(GL_TRUE);
	move.b	#1,-(a7)
	move.l	$10(a3),a0
	jsr	(a0)
	addq.w	#2,a7
;	for(contour=tobj->contours;
	move.l	a3,a0
	move.l	(a0),a2
	bra	L191
L185
;		if(contour->orientation==GLU_CCW)
	move.l	$10(a2),d0
	cmp.l	#$18719,d0
	bne.b	L187
L186
;			triangulate_ccw_with_edge_flag(tobj,contour);
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	jsr	_triangulate_ccw_with_edge_flag
	addq.w	#$8,a7
	bra.b	L188
L187
;			triangulate_cw_with_edge_flag(tobj,contour);
	move.l	a2,-(a7)
	move.l	a3,-(a7)
	jsr	_triangulate_cw_with_edge_flag
	addq.w	#$8,a7
L188
;		if(tobj->error!=GLU_NO_ERROR)
	move.l	a3,a0
	tst.l	$24(a0)
	beq.b	L190
L189
	movem.l	(a7)+,a2/a3
	rts
L190
;		emit_triangle_with_edge_flag(tobj,contour->vertices,
	move.l	$14(a2),a0
	move.l	$32(a0),a0
	move.l	$32(a0),a0
	move.b	$2C(a0),-(a7)
	move.l	$14(a2),a0
	move.l	$32(a0),a0
	move.l	$32(a0),-(a7)
	move.l	$14(a2),a0
	move.l	$32(a0),a0
	move.b	$2C(a0),-(a7)
	move.l	$14(a2),a0
	move.l	$32(a0),-(a7)
	move.l	$14(a2),a0
	move.b	$2C(a0),-(a7)
	move.l	$14(a2),-(a7)
	move.l	a3,-(a7)
	jsr	_emit_triangle_with_edge_flag
	add.w	#$16,a7
	move.l	$1C(a2),a2
L191
	cmp.w	#0,a2
	bne	L185
L192
	movem.l	(a7)+,a2/a3
	rts

	SECTION "_emit_triangle:0",CODE


;static void emit_triangle(
_emit_triangle
L194	EQU	-4
	link	a5,#L194
	movem.l	a2-a4,-(a7)
	move.l	$8(a5),a2
	move.l	$14(a5),a3
	move.l	$10(a5),a4
L193
;	(tobj->callbacks.begin)(GL_TRIANGLES);
	pea	4.w
	move.l	$C(a2),a0
	jsr	(a0)
	addq.w	#4,a7
;	(tobj->callbacks.vertex)(v1->data);
	move.l	$C(a5),a1
	move.l	(a1),-(a7)
	move.l	$14(a2),a0
	jsr	(a0)
	addq.w	#4,a7
;	(tobj->callbacks.vertex)(v2->data);
	move.l	a4,a1
	move.l	(a1),-(a7)
	move.l	$14(a2),a0
	jsr	(a0)
	addq.w	#4,a7
;	(tobj->callbacks.vertex)(v3->data);
	move.l	a3,a1
	move.l	(a1),-(a7)
	move.l	$14(a2),a0
	jsr	(a0)
	addq.w	#4,a7
;	(tobj->callbacks.end)();
	move.l	$18(a2),a0
	jsr	(a0)
	movem.l	(a7)+,a2-a4
	unlk	a5
	rts

	SECTION "_emit_triangle_with_edge_flag:0",CODE


;static void emit_triangle_with_edge_flag(
_emit_triangle_with_edge_flag
L211	EQU	-4
	link	a5,#L211
	movem.l	d2-d4/a2-a4,-(a7)
	move.b	$1C(a5),d2
	move.b	$16(a5),d3
	move.b	$10(a5),d4
	move.l	$8(a5),a2
	move.l	$18(a5),a3
	move.l	$12(a5),a4
L195
;	(tobj->callbacks.begin)(GL_TRIANGLES);
	pea	4.w
	move.l	$C(a2),a0
	jsr	(a0)
	addq.w	#4,a7
;	if(edge_flag1!=edge_flag)
	cmp.b	_edge_flag(a6),d4
	beq.b	L200
L196
;		edge_flag = (edge_flag==GL_TRUE ? GL_FALSE : GL_TRUE);
	move.b	_edge_flag(a6),d0
	cmp.b	#1,d0
	bne.b	L198
L197
	moveq	#0,d0
	bra.b	L199
L198
	moveq	#1,d0
L199
	move.b	d0,_edge_flag(a6)
;		(tobj->callbacks.edgeFlag)(edge_flag);
	move.b	_edge_flag(a6),-(a7)
	move.l	$10(a2),a0
	jsr	(a0)
	addq.w	#2,a7
L200
;	(tobj->callbacks.vertex)(v1->data);
	move.l	$C(a5),a1
	move.l	(a1),-(a7)
	move.l	$14(a2),a0
	jsr	(a0)
	addq.w	#4,a7
;	if(edge_flag2!=edge_flag)
	cmp.b	_edge_flag(a6),d3
	beq.b	L205
L201
;		edge_flag = (edge_flag==GL_TRUE ? GL_FALSE : GL_TRUE);
	move.b	_edge_flag(a6),d0
	cmp.b	#1,d0
	bne.b	L203
L202
	moveq	#0,d0
	bra.b	L204
L203
	moveq	#1,d0
L204
	move.b	d0,_edge_flag(a6)
;		(tobj->callbacks.edgeFlag)(edge_flag);
	move.b	_edge_flag(a6),-(a7)
	move.l	$10(a2),a0
	jsr	(a0)
	addq.w	#2,a7
L205
;	(tobj->callbacks.vertex)(v2->data);
	move.l	a4,a1
	move.l	(a1),-(a7)
	move.l	$14(a2),a0
	jsr	(a0)
	addq.w	#4,a7
;	if(edge_flag3!=edge_flag)
	cmp.b	_edge_flag(a6),d2
	beq.b	L210
L206
;		edge_flag = (edge_flag==GL_TRUE ? GL_FALSE : GL_TRUE);
	move.b	_edge_flag(a6),d0
	cmp.b	#1,d0
	bne.b	L208
L207
	moveq	#0,d0
	bra.b	L209
L208
	moveq	#1,d0
L209
	move.b	d0,_edge_flag(a6)
;		(tobj->callbacks.edgeFlag)(edge_flag);
	move.b	_edge_flag(a6),-(a7)
	move.l	$10(a2),a0
	jsr	(a0)
	addq.w	#2,a7
L210
;	(tobj->callbacks.vertex)(v3->data);
	move.l	a3,a1
	move.l	(a1),-(a7)
	move.l	$14(a2),a0
	jsr	(a0)
	addq.w	#4,a7
;	(tobj->callbacks.end)();
	move.l	$18(a2),a0
	jsr	(a0)
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts

	END
