
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/fog.c
	mc68030
	mc68881
	XREF	_gl_error
	XREF	_gl_problem
	XREF	_exp__r
	XREF	_CC

	SECTION "_gl_Fogfv:0",CODE


;void gl_Fogfv( GLcontext *ctx, GLenum pname, const GLfloat *params )
	XDEF	_gl_Fogfv
_gl_Fogfv
	move.l	a2,-(a7)
	movem.l	$C(a7),d0/a1
	move.l	$8(a7),a0
L76
;   switch (pname)
	sub.l	#$B61,d0
	cmp.l	#5,d0
	bhi	L91
	move.l	L93(pc,d0.l*4),a2
	jmp	(a2)
L93
	dc.l	L89
	dc.l	L83
	dc.l	L87
	dc.l	L88
	dc.l	L77
	dc.l	L90
;      
L77
;         m = (GLenum) (GLint) *params;
	fmove.s	(a1),fp0
	fmove.l	fp0,d0
;         if (m==GL_LINEAR || m==GL_EXP || m==GL_EXP2) 
	cmp.l	#$2601,d0
	beq.b	L80
L78
	cmp.l	#$800,d0
	beq.b	L80
L79
	cmp.l	#$801,d0
	bne.b	L81
L80
;            ctx->Fog.Mode = m;
	move.l	d0,$2300(a0)
	bra	L92
L81
;            gl_error( ctx, GL_INVALID_ENUM, "glFog" );
	move.l	#L75,-(a7)
	pea	$500.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
L82
;         
	bra	L92
L83
;         if (*params<0.0) 
	fmove.s	(a1),fp0
	fcmp.d	#$.00000000.00000000,fp0
	fboge.b	L85
L84
;            gl_error( ctx, GL_INVALID_VALUE, "glFog" );
	move.l	#L75,-(a7)
	pea	$501.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	bra.b	L92
L85
;            ctx->Fog.Density = *params;
	move.l	(a1),$22F0(a0)
L86
;         
	bra.b	L92
L87
;         ctx->Fog.Start = *params;
	move.l	(a1),$22F4(a0)
;         
	bra.b	L92
L88
;         ctx->Fog.End = *params;
	move.l	(a1),$22F8(a0)
;         
	bra.b	L92
L89
;         ctx->Fog.Index = *params;
	move.l	(a1),$22FC(a0)
;         
	bra.b	L92
L90
;         ctx->Fog.Color[0] = params[0];
	move.l	(a1),$22E0(a0)
;         ctx->Fog.Color[1] = params[1];
	lea	$22E0(a0),a2
	move.l	4(a1),4(a2)
;         ctx->Fog.Color[2] = params[2];
	lea	$22E0(a0),a2
	move.l	$8(a1),$8(a2)
;         ctx->Fog.Color[3] = params[3];
	lea	$22E0(a0),a0
	move.l	$C(a1),$C(a0)
;         
	bra.b	L92
L91
;         gl_error( ctx, GL_INVALID_ENUM, "glFog" );
	move.l	#L75,-(a7)
	pea	$500.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
L92
	move.l	(a7)+,a2
	rts

L75
	dc.b	'glFog',0

	SECTION "_gl_fog_rgba_vertices:0",CODE

	rts

;void gl_fog_rgba_vertices( const GLcontext *ctx,
	XDEF	_gl_fog_rgba_vertices
_gl_fog_rgba_vertices
L137	EQU	-$28
	link	a5,#L137
	movem.l	d2/d3/a2/a3,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	movem.l	$C(a5),d3/a3
	move.l	$8(a5),a0
	move.l	$14(a5),a2
L95
;   GLfloat rFog = ctx->Fog.Color[0] * 255.0F;
	fmove.s	$22E0(a0),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,fp7
;   GLfloat gFog = ctx->Fog.Color[1] * 255.0F;
	lea	$22E0(a0),a1
	fmove.s	4(a1),fp5
	fmul.s	#$.437F0000,fp5
;   GLfloat bFog = ctx->Fog.Color[2] * 255.0F;
	lea	$22E0(a0),a1
	fmove.s	$8(a1),fp4
	fmul.s	#$.437F0000,fp4
;   GLfloat end = ctx->Fog.End;
	move.l	$22F8(a0),-$18(a5)
;   switch (ctx->Fog.Mode)
	move.l	$2300(a0),d0
	cmp.l	#$801,d0
	beq	L122
	bgt.b	L138
	cmp.l	#$800,d0
	beq	L109
	bra	L135
L138
	cmp.l	#$2601,d0
	beq.b	L96
	bra	L135
;      
L96
;         d = 1.0F / (ctx->Fog.End - ctx->Fog.Start);
	fmove.s	$22F8(a0),fp0
	fsub.s	$22F4(a0),fp0
	fmove.s	#$.3F800000,fp2
	fdiv.x	fp0,fp2
;         for (i=0;
	moveq	#0,d2
	bra	L107
L97
;            GLfloat f = (end - ABSF(v[i][2])) * d;
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a3,d0.l),a0
	fmove.s	$8(a0),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L99
L98
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a3,d0.l),a0
	fmove.s	$8(a0),fp0
	fneg.s	fp0
	bra.b	L100
L99
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a3,d0.l),a0
	fmove.s	$8(a0),fp0
L100
	fmove.s	-$18(a5),fp1
	fsub.x	fp0,fp1
	fmove.x	fp1,fp0
	fmul.x	fp2,fp0
;            f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L102
L101
	fmove.s	#$.00000000,fp0
	bra.b	L106
L102
	fcmp.s	#$.3F800000,fp0
	fbole.b	L104
L103
	fmove.s	#$.3F800000,fp0
L104
L105
L106
;            color[i][0] = (GLint) (f * color[i][0] + (1.
	moveq	#0,d0
	move.b	0(a2,d2.l*4),d0
	fmove.l	d0,fp1
	fmul.x	fp0,fp1
	fmove.s	#$.3F800000,fp3
	fsub.x	fp0,fp3
	fmul.x	fp7,fp3
	fadd.x	fp3,fp1
	fmove.l	fp1,d0
	move.b	d0,0(a2,d2.l*4)
;            color[i][1] = (GLint) (f * color[i][1] + (1.
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	1(a0),d0
	fmove.l	d0,fp1
	fmul.x	fp0,fp1
	fmove.s	#$.3F800000,fp3
	fsub.x	fp0,fp3
	fmul.x	fp5,fp3
	fadd.x	fp3,fp1
	fmove.l	fp1,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,1(a0)
;            color[i][2] = (GLint) (f * color[i][2] + (1.
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	2(a0),d0
	fmove.l	d0,fp1
	fmul.x	fp0,fp1
	fmove.s	#$.3F800000,fp3
	fsub.x	fp0,fp3
	fmove.x	fp3,fp0
	fmul.x	fp4,fp0
	fadd.x	fp0,fp1
	fmove.l	fp1,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,2(a0)
	addq.l	#1,d2
L107
	cmp.l	d3,d2
	blo	L97
L108
;         
	bra	L136
L109
;         d = -ctx->Fog.Density;
	fmove.s	$22F0(a0),fp2
	fneg.s	fp2
;         for (i=0;
	moveq	#0,d2
	bra	L120
L110
;            GLfloat f = exp( d * ABSF(v[i][2]) );
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a3,d0.l),a0
	fmove.s	$8(a0),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L112
L111
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a3,d0.l),a0
	fmove.s	$8(a0),fp0
	fneg.s	fp0
	bra.b	L113
L112
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a3,d0.l),a0
	fmove.s	$8(a0),fp0
L113
	fmul.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_exp__r
	addq.w	#$8,a7
;            f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L115
L114
	fmove.s	#$.00000000,fp0
	bra.b	L119
L115
	fcmp.s	#$.3F800000,fp0
	fbole.b	L117
L116
	fmove.s	#$.3F800000,fp0
L117
L118
L119
;            color[i][0] = (GLint) (f * color[i][0] + (1.
	moveq	#0,d0
	move.b	0(a2,d2.l*4),d0
	fmove.l	d0,fp1
	fmul.x	fp0,fp1
	fmove.s	#$.3F800000,fp3
	fsub.x	fp0,fp3
	fmul.x	fp7,fp3
	fadd.x	fp3,fp1
	fmove.l	fp1,d0
	move.b	d0,0(a2,d2.l*4)
;            color[i][1] = (GLint) (f * color[i][1] + (1.
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	1(a0),d0
	fmove.l	d0,fp1
	fmul.x	fp0,fp1
	fmove.s	#$.3F800000,fp3
	fsub.x	fp0,fp3
	fmul.x	fp5,fp3
	fadd.x	fp3,fp1
	fmove.l	fp1,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,1(a0)
;            color[i][2] = (GLint) (f * color[i][2] + (1.
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	2(a0),d0
	fmove.l	d0,fp1
	fmul.x	fp0,fp1
	fmove.s	#$.3F800000,fp3
	fsub.x	fp0,fp3
	fmove.x	fp3,fp0
	fmul.x	fp4,fp0
	fadd.x	fp0,fp1
	fmove.l	fp1,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,2(a0)
	addq.l	#1,d2
L120
	cmp.l	d3,d2
	blo	L110
L121
;         
	bra	L136
L122
;         d = -(ctx->Fog.Density*ctx->Fog.Density);
	fmove.s	$22F0(a0),fp2
	fmul.s	$22F0(a0),fp2
	fneg.s	fp2
;         for (i=0;
	moveq	#0,d2
	bra	L133
L123
;            GLfloat z = ABSF(v[i][2]);
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a3,d0.l),a0
	fmove.s	$8(a0),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L125
L124
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a3,d0.l),a0
	fmove.s	$8(a0),fp0
	fneg.s	fp0
	bra.b	L126
L125
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a3,d0.l),a0
	fmove.s	$8(a0),fp0
L126
;            GLfloat f = exp( d * z*z );
	fmove.x	fp2,fp1
	fmul.x	fp0,fp1
	fmul.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_exp__r
	addq.w	#$8,a7
;            f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L128
L127
	fmove.s	#$.00000000,fp0
	bra.b	L132
L128
	fcmp.s	#$.3F800000,fp0
	fbole.b	L130
L129
	fmove.s	#$.3F800000,fp0
L130
L131
L132
;            color[i][0] = (GLint) (f * color[i][0] + (1.
	moveq	#0,d0
	move.b	0(a2,d2.l*4),d0
	fmove.l	d0,fp1
	fmul.x	fp0,fp1
	fmove.s	#$.3F800000,fp3
	fsub.x	fp0,fp3
	fmul.x	fp7,fp3
	fadd.x	fp3,fp1
	fmove.l	fp1,d0
	move.b	d0,0(a2,d2.l*4)
;            color[i][1] = (GLint) (f * color[i][1] + (1.
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	1(a0),d0
	fmove.l	d0,fp1
	fmul.x	fp0,fp1
	fmove.s	#$.3F800000,fp3
	fsub.x	fp0,fp3
	fmul.x	fp5,fp3
	fadd.x	fp3,fp1
	fmove.l	fp1,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,1(a0)
;            color[i][2] = (GLint) (f * color[i][2] + (1.
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	2(a0),d0
	fmove.l	d0,fp1
	fmul.x	fp0,fp1
	fmove.s	#$.3F800000,fp3
	fsub.x	fp0,fp3
	fmove.x	fp3,fp0
	fmul.x	fp4,fp0
	fadd.x	fp0,fp1
	fmove.l	fp1,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,2(a0)
	addq.l	#1,d2
L133
	cmp.l	d3,d2
	blo	L123
L134
;         
	bra.b	L136
L135
;         gl_problem(ctx, "Bad fog mode in gl_fog_rgba_verti
	move.l	#L94,-(a7)
	move.l	a0,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2/d3/a2/a3
	unlk	a5
	rts
L136
;         return;
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2/d3/a2/a3
	unlk	a5
	rts

L94
	dc.b	'Bad fog mode in gl_fog_rgba_vertices',0

	SECTION "_gl_fog_ci_vertices:0",CODE


;            GLfloat fogEnd = ctx->Fog.End;
	XDEF	_gl_fog_ci_vertices
_gl_fog_ci_vertices
	movem.l	d2/d3/a2/a3,-(a7)
	fmovem.x fp2/fp3/fp4/fp5,-(a7)
	movem.l	$48(a7),d3/a2/a3
	move.l	$44(a7),a0
L140
;   switch (ctx->Fog.Mode)
	move.l	$2300(a0),d0
	cmp.l	#$801,d0
	beq	L167
	bgt.b	L182
	cmp.l	#$800,d0
	beq	L154
	bra	L180
L182
	cmp.l	#$2601,d0
	beq.b	L141
	bra	L180
;      
L141
;            GLfloat d = 1.0F / (ctx->Fog.End - ctx->Fog.
	fmove.s	$22F8(a0),fp0
	fsub.s	$22F4(a0),fp0
	fmove.s	#$.3F800000,fp4
	fdiv.x	fp0,fp4
;            GLfloat fogindex = ctx->Fog.Index;
	fmove.s	$22FC(a0),fp3
;            GLfloat fogend = ctx->Fog.End;
	fmove.s	$22F8(a0),fp2
;            for (i=0;
	moveq	#0,d0
	bra	L152
L142
;               GLfloat f = (fogend - ABSF(v[i][2])) *
	move.l	d0,d1
	asl.l	#4,d1
	lea	0(a2,d1.l),a0
	fmove.s	$8(a0),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L144
L143
	move.l	d0,d1
	asl.l	#4,d1
	lea	0(a2,d1.l),a0
	fmove.s	$8(a0),fp0
	fneg.s	fp0
	bra.b	L145
L144
	move.l	d0,d1
	asl.l	#4,d1
	lea	0(a2,d1.l),a0
	fmove.s	$8(a0),fp0
L145
	fmove.x	fp2,fp1
	fsub.x	fp0,fp1
	fmove.x	fp1,fp0
	fmul.x	fp4,fp0
;               f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L147
L146
	fmove.s	#$.00000000,fp0
	bra.b	L151
L147
	fcmp.s	#$.3F800000,fp0
	fbole.b	L149
L148
	fmove.s	#$.3F800000,fp0
L149
L150
L151
;               indx[i] = (GLint)
	fmove.l	0(a3,d0.l*4),fp1
	fmove.s	#$.3F800000,fp5
	fsub.x	fp0,fp5
	fmove.x	fp5,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp1
	fmove.l	fp1,d1
	move.l	d1,0(a3,d0.l*4)
	addq.l	#1,d0
L152
	cmp.l	d3,d0
	blo	L142
L153
;         
	bra	L181
L154
;            GLfloat d = -ctx->Fog.Density;
	fmove.s	$22F0(a0),fp2
	fneg.s	fp2
;            GLfloat fogindex = ctx->Fog.Index;
	fmove.s	$22FC(a0),fp3
;            for (i=0;
	moveq	#0,d2
	bra	L165
L155
;               GLfloat f = exp( d * ABSF(v[i][2]) );
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a2,d0.l),a0
	fmove.s	$8(a0),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L157
L156
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a2,d0.l),a0
	fmove.s	$8(a0),fp0
	fneg.s	fp0
	bra.b	L158
L157
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a2,d0.l),a0
	fmove.s	$8(a0),fp0
L158
	fmul.x	fp2,fp0
	fmove.d	fp0,-(a7)
	jsr	_exp__r
	addq.w	#$8,a7
;               f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L160
L159
	fmove.s	#$.00000000,fp0
	bra.b	L164
L160
	fcmp.s	#$.3F800000,fp0
	fbole.b	L162
L161
	fmove.s	#$.3F800000,fp0
L162
L163
L164
;               indx[i] = (GLint)
	fmove.l	0(a3,d2.l*4),fp1
	fmove.s	#$.3F800000,fp4
	fsub.x	fp0,fp4
	fmove.x	fp4,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp1
	fmove.l	fp1,d0
	move.l	d0,0(a3,d2.l*4)
	addq.l	#1,d2
L165
	cmp.l	d3,d2
	blo	L155
L166
;         
	bra	L181
L167
;            GLfloat d = -(ctx->Fog.Density*ctx->Fog.Dens
	fmove.s	$22F0(a0),fp2
	fmul.s	$22F0(a0),fp2
	fneg.s	fp2
;            GLfloat fogindex = ctx->Fog.Index;
	fmove.s	$22FC(a0),fp3
;            for (i=0;
	moveq	#0,d2
	bra	L178
L168
;               GLfloat z = ABSF(v[i][2]);
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a2,d0.l),a0
	fmove.s	$8(a0),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L170
L169
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a2,d0.l),a0
	fmove.s	$8(a0),fp1
	fneg.s	fp1
	bra.b	L171
L170
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a2,d0.l),a0
	fmove.s	$8(a0),fp1
L171
;               GLfloat f = exp( -d * z*z );
	fmove.x	fp2,fp0
	fneg.s	fp0
	fmul.x	fp1,fp0
	fmul.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_exp__r
	addq.w	#$8,a7
;               f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L173
L172
	fmove.s	#$.00000000,fp0
	bra.b	L177
L173
	fcmp.s	#$.3F800000,fp0
	fbole.b	L175
L174
	fmove.s	#$.3F800000,fp0
L175
L176
L177
;               indx[i] = (GLint)
	fmove.l	0(a3,d2.l*4),fp1
	fmove.s	#$.3F800000,fp4
	fsub.x	fp0,fp4
	fmove.x	fp4,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp1
	fmove.l	fp1,d0
	move.l	d0,0(a3,d2.l*4)
	addq.l	#1,d2
L178
	cmp.l	d3,d2
	blo	L168
L179
;         
	bra.b	L181
L180
;         gl_problem(ctx, "Bad fog mode in gl_fog_ci_vertice
	move.l	#L139,-(a7)
	move.l	a0,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,d2/d3/a2/a3
	rts
L181
;         return;
	fmovem.x (a7)+,fp2/fp3/fp4/fp5
	movem.l	(a7)+,d2/d3/a2/a3
	rts

L139
	dc.b	'Bad fog mode in gl_fog_ci_vertices',0

	SECTION "_gl_fog_rgba_pixels:0",CODE


;void gl_fog_rgba_pixels( const GLcontext *ctx,
	XDEF	_gl_fog_rgba_pixels
_gl_fog_rgba_pixels
L223	EQU	-$70
	link	a5,#L223
	movem.l	d2/d3/a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	movem.l	$C(a5),d3/a4
	move.l	$14(a5),a2
	move.l	$8(a5),a3
L184
;   GLfloat c = ctx->ProjectionMatrix[10];
	lea	$1284(a3),a0
	move.l	$28(a0),-4(a5)
;   GLfloat d = ctx->ProjectionMatrix[14];
	lea	$1284(a3),a0
	move.l	$38(a0),-$8(a5)
;   GLfloat rFog = ctx->Fog.Color[0] * 255.0F;
	fmove.s	$22E0(a3),fp5
	fmul.s	#$.437F0000,fp5
;   GLfloat gFog = ctx->Fog.Color[1] * 255.0F;
	lea	$22E0(a3),a0
	fmove.s	4(a0),fp4
	fmul.s	#$.437F0000,fp4
;   GLfloat bFog = ctx->Fog.Color[2] * 255.0F;
	lea	$22E0(a3),a0
	fmove.s	$8(a0),fp3
	fmul.s	#$.437F0000,fp3
;   GLfloat tz = ctx->Viewport.Tz;
	move.l	a3,a0
	add.l	#$E540,a0
	move.l	$2C(a0),-$1C(a5)
;   GLfloat szInv = 1.0F / ctx->Viewport.Sz;
	move.l	a3,a0
	add.l	#$E540,a0
	fmove.s	#$.3F800000,fp0
	fdiv.s	$20(a0),fp0
	fmove.s	fp0,-$20(a5)
;   switch (ctx->Fog.Mode)
	move.l	$2300(a3),d0
	cmp.l	#$801,d0
	beq	L209
	bgt.b	L224
	cmp.l	#$800,d0
	beq	L197
	bra	L221
L224
	cmp.l	#$2601,d0
	beq.b	L185
	bra	L221
;      
L185
;            GLfloat fogEnd = ctx->Fog.End;
	move.l	$22F8(a3),-$24(a5)
;            GLfloat fogScale = 1.0F / (ctx->Fog.End - ct
	fmove.s	$22F8(a3),fp0
	fsub.s	$22F4(a3),fp0
	fmove.s	#$.3F800000,fp1
	fdiv.x	fp0,fp1
	fmove.s	fp1,-$28(a5)
;            for (i=0;
	moveq	#0,d2
	bra	L195
L186
;               GLfloat ndcz = ((GLfloat) z[i] - tz) *
	moveq	#0,d0
	move.w	0(a4,d2.l*2),d0
	fmove.l	d0,fp1
	fsub.s	-$1C(a5),fp1
	fmul.s	-$20(a5),fp1
;               GLfloat eyez = -d / (c+ndcz);
	fmove.s	-$8(a5),fp0
	fneg.s	fp0
	fadd.s	-4(a5),fp1
	fdiv.x	fp1,fp0
;               if (eyez < 0.0)  
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fboge.b	L188
L187
;               if (eyez < 0.0)  eyez
	fneg.s	fp0
L188
;               f = (fogEnd - eyez) * fogScale;
	fmove.s	-$24(a5),fp1
	fsub.x	fp0,fp1
	fmove.x	fp1,fp0
	fmul.s	-$28(a5),fp0
;               f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L190
L189
	fmove.s	#$.00000000,fp0
	bra.b	L194
L190
	fcmp.s	#$.3F800000,fp0
	fbole.b	L192
L191
	fmove.s	#$.3F800000,fp0
L192
L193
L194
;               g = 1.0F - f;
	fmove.s	#$.3F800000,fp1
	fsub.x	fp0,fp1
;               rgba[i][RCOMP] = (GLint) (f * rgba[i][
	moveq	#0,d0
	move.b	0(a2,d2.l*4),d0
	fmove.l	d0,fp2
	fmul.x	fp0,fp2
	fmove.x	fp1,fp6
	fmul.x	fp5,fp6
	fadd.x	fp6,fp2
	fmove.l	fp2,d0
	move.b	d0,0(a2,d2.l*4)
;               rgba[i][GCOMP] = (GLint) (f * rgba[i][
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	1(a0),d0
	fmove.l	d0,fp2
	fmul.x	fp0,fp2
	fmove.x	fp1,fp6
	fmul.x	fp4,fp6
	fadd.x	fp6,fp2
	fmove.l	fp2,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,1(a0)
;               rgba[i][BCOMP] = (GLint) (f * rgba[i][
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	2(a0),d0
	fmove.l	d0,fp2
	fmul.x	fp2,fp0
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.l	fp0,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,2(a0)
	addq.l	#1,d2
L195
	cmp.l	d3,d2
	blo	L186
L196
;         
	bra	L222
L197
;         for (i=0;
	moveq	#0,d2
	bra	L207
L198
;            GLfloat ndcz = ((GLfloat) z[i] - tz) * szInv;
	moveq	#0,d0
	move.w	0(a4,d2.l*2),d0
	fmove.l	d0,fp1
	fsub.s	-$1C(a5),fp1
	fmul.s	-$20(a5),fp1
;            GLfloat eyez = -d / (c+ndcz);
	fmove.s	-$8(a5),fp0
	fneg.s	fp0
	fadd.s	-4(a5),fp1
	fdiv.x	fp1,fp0
;            if (eyez < 0.0)  
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fboge.b	L200
L199
;            if (eyez < 0.0)  eyez = -ey
	fneg.s	fp0
L200
;            f = exp( -ctx->Fog.Density * eyez );
	fmove.s	$22F0(a3),fp1
	fneg.s	fp1
	fmul.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_exp__r
	addq.w	#$8,a7
;            f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L202
L201
	fmove.s	#$.00000000,fp0
	bra.b	L206
L202
	fcmp.s	#$.3F800000,fp0
	fbole.b	L204
L203
	fmove.s	#$.3F800000,fp0
L204
L205
L206
;            g = 1.0F - f;
	fmove.s	#$.3F800000,fp1
	fsub.x	fp0,fp1
;            rgba[i][RCOMP] = (GLint) (f * rgba[i][RCOMP]
	moveq	#0,d0
	move.b	0(a2,d2.l*4),d0
	fmove.l	d0,fp2
	fmul.x	fp0,fp2
	fmove.x	fp1,fp6
	fmul.x	fp5,fp6
	fadd.x	fp6,fp2
	fmove.l	fp2,d0
	move.b	d0,0(a2,d2.l*4)
;            rgba[i][GCOMP] = (GLint) (f * rgba[i][GCOMP]
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	1(a0),d0
	fmove.l	d0,fp2
	fmul.x	fp0,fp2
	fmove.x	fp1,fp6
	fmul.x	fp4,fp6
	fadd.x	fp6,fp2
	fmove.l	fp2,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,1(a0)
;            rgba[i][BCOMP] = (GLint) (f * rgba[i][BCOMP]
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	2(a0),d0
	fmove.l	d0,fp2
	fmul.x	fp2,fp0
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.l	fp0,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,2(a0)
	addq.l	#1,d2
L207
	cmp.l	d3,d2
	blo	L198
L208
;         
	bra	L222
L209
;            GLfloat negDensitySquared = -ctx->Fog.Densit
	move.l	$22F0(a3),-$3C(a5)
	fmove.s	-$3C(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$3C(a5)
	fmove.s	-$3C(a5),fp0
	fmul.s	$22F0(a3),fp0
	fmove.s	fp0,-$3C(a5)
;            for (i=0;
	moveq	#0,d2
	bra	L219
L210
;               GLfloat ndcz = ((GLfloat) z[i] - tz) *
	moveq	#0,d0
	move.w	0(a4,d2.l*2),d0
	fmove.l	d0,fp1
	fsub.s	-$1C(a5),fp1
	fmul.s	-$20(a5),fp1
;               GLfloat eyez = -d / (c+ndcz);
	fmove.s	-$8(a5),fp0
	fneg.s	fp0
	fadd.s	-4(a5),fp1
	fdiv.x	fp1,fp0
;               if (eyez < 0.0)  
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fboge.b	L212
L211
;               if (eyez < 0.0)  eyez
	fneg.s	fp0
L212
;               f = exp( negDensitySquared * eyez*eyez
	fmove.s	-$3C(a5),fp1
	fmul.x	fp0,fp1
	fmul.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_exp__r
	addq.w	#$8,a7
;               f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L214
L213
	fmove.s	#$.00000000,fp0
	bra.b	L218
L214
	fcmp.s	#$.3F800000,fp0
	fbole.b	L216
L215
	fmove.s	#$.3F800000,fp0
L216
L217
L218
;               g = 1.0F - f;
	fmove.s	#$.3F800000,fp1
	fsub.x	fp0,fp1
;               rgba[i][RCOMP] = (GLint) (f * rgba[i][
	moveq	#0,d0
	move.b	0(a2,d2.l*4),d0
	fmove.l	d0,fp2
	fmul.x	fp0,fp2
	fmove.x	fp1,fp6
	fmul.x	fp5,fp6
	fadd.x	fp6,fp2
	fmove.l	fp2,d0
	move.b	d0,0(a2,d2.l*4)
;               rgba[i][GCOMP] = (GLint) (f * rgba[i][
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	1(a0),d0
	fmove.l	d0,fp2
	fmul.x	fp0,fp2
	fmove.x	fp1,fp6
	fmul.x	fp4,fp6
	fadd.x	fp6,fp2
	fmove.l	fp2,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,1(a0)
;               rgba[i][BCOMP] = (GLint) (f * rgba[i][
	lea	0(a2,d2.l*4),a0
	moveq	#0,d0
	move.b	2(a0),d0
	fmove.l	d0,fp2
	fmul.x	fp2,fp0
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.l	fp0,d0
	lea	0(a2,d2.l*4),a0
	move.b	d0,2(a0)
	addq.l	#1,d2
L219
	cmp.l	d3,d2
	blo	L210
L220
;         
	bra.b	L222
L221
;         gl_problem(ctx, "Bad fog mode in gl_fog_rgba_pixel
	move.l	#L183,-(a7)
	move.l	a3,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2/d3/a2-a4
	unlk	a5
	rts
L222
;         return;
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2/d3/a2-a4
	unlk	a5
	rts

L183
	dc.b	'Bad fog mode in gl_fog_rgba_pixels',0

	SECTION "_gl_fog_ci_pixels:0",CODE


;void gl_fog_ci_pixels( const GLcontext *ctx,
	XDEF	_gl_fog_ci_pixels
_gl_fog_ci_pixels
L265	EQU	-$3C
	link	a5,#L265
	movem.l	d2/d3/a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	movem.l	$C(a5),d3/a4
	move.l	$8(a5),a2
	move.l	$14(a5),a3
L226
;   GLfloat c = ctx->ProjectionMatrix[10];
	lea	$1284(a2),a0
	fmove.s	$28(a0),fp5
;   GLfloat d = ctx->ProjectionMatrix[14];
	lea	$1284(a2),a0
	fmove.s	$38(a0),fp4
;   GLfloat tz = ctx->Viewport.Tz;
	move.l	a2,a0
	add.l	#$E540,a0
	fmove.s	$2C(a0),fp3
;   GLfloat szInv = 1.0F / ctx->Viewport.Sz;
	move.l	a2,a0
	add.l	#$E540,a0
	fmove.s	#$.3F800000,fp2
	fdiv.s	$20(a0),fp2
;   switch (ctx->Fog.Mode)
	move.l	$2300(a2),d0
	cmp.l	#$801,d0
	beq	L251
	bgt.b	L266
	cmp.l	#$800,d0
	beq	L239
	bra	L263
L266
	cmp.l	#$2601,d0
	beq.b	L227
	bra	L263
;      
L227
;            GLfloat fogEnd = ctx->Fog.End;
	move.l	$22F8(a2),-$18(a5)
;            GLfloat fogScale = 1.0F / (ctx->Fog.End - ct
	fmove.s	$22F8(a2),fp0
	fsub.s	$22F4(a2),fp0
	fmove.s	#$.3F800000,fp1
	fdiv.x	fp0,fp1
	fmove.s	fp1,fp7
;            for (i=0;
	moveq	#0,d2
	bra	L237
L228
;               GLfloat ndcz = ((GLfloat) z[i] - tz) *
	moveq	#0,d0
	move.w	0(a4,d2.l*2),d0
	fmove.l	d0,fp1
	fsub.x	fp3,fp1
	fmul.x	fp2,fp1
;               GLfloat eyez = -d / (c+ndcz);
	fmove.x	fp4,fp0
	fneg.s	fp0
	fadd.x	fp5,fp1
	fdiv.x	fp1,fp0
;               if (eyez < 0.0)  
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fboge.b	L230
L229
;               if (eyez < 0.0)  eyez
	fneg.s	fp0
L230
;               f = (fogEnd - eyez) * fogScale;
	fmove.s	-$18(a5),fp1
	fsub.x	fp0,fp1
	fmove.x	fp1,fp0
	fmul.x	fp7,fp0
;               f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L232
L231
	fmove.s	#$.00000000,fp0
	bra.b	L236
L232
	fcmp.s	#$.3F800000,fp0
	fbole.b	L234
L233
	fmove.s	#$.3F800000,fp0
L234
L235
L236
;               index[i] = (GLuint) ((GLfloat) index[i
	fmove.l	0(a3,d2.l*4),fp1
	fmove.s	#$.3F800000,fp6
	fsub.x	fp0,fp6
	fmove.x	fp6,fp0
	fmul.s	$22FC(a2),fp0
	fadd.x	fp0,fp1
	fmove.l	fp1,d0
	move.l	d0,0(a3,d2.l*4)
	addq.l	#1,d2
L237
	cmp.l	d3,d2
	blo	L228
L238
;         
	bra	L264
L239
;         for (i=0;
	moveq	#0,d2
	bra	L249
L240
;            GLfloat ndcz = ((GLfloat) z[i] - tz) * szInv;
	moveq	#0,d0
	move.w	0(a4,d2.l*2),d0
	fmove.l	d0,fp1
	fsub.x	fp3,fp1
	fmul.x	fp2,fp1
;            GLfloat eyez = -d / (c+ndcz);
	fmove.x	fp4,fp0
	fneg.s	fp0
	fadd.x	fp5,fp1
	fdiv.x	fp1,fp0
;            if (eyez < 0.0)  
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fboge.b	L242
L241
;            if (eyez < 0.0)  eyez = -ey
	fneg.s	fp0
L242
;            f = exp( -ctx->Fog.Density * eyez );
	fmove.s	$22F0(a2),fp1
	fneg.s	fp1
	fmul.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_exp__r
	addq.w	#$8,a7
;            f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L244
L243
	fmove.s	#$.00000000,fp0
	bra.b	L248
L244
	fcmp.s	#$.3F800000,fp0
	fbole.b	L246
L245
	fmove.s	#$.3F800000,fp0
L246
L247
L248
;            index[i] = (GLuint) ((GLfloat) index[i] + (1
	fmove.l	0(a3,d2.l*4),fp1
	fmove.s	#$.3F800000,fp6
	fsub.x	fp0,fp6
	fmove.x	fp6,fp0
	fmul.s	$22FC(a2),fp0
	fadd.x	fp0,fp1
	fmove.l	fp1,d0
	move.l	d0,0(a3,d2.l*4)
	addq.l	#1,d2
L249
	cmp.l	d3,d2
	blo	L240
L250
;         
	bra	L264
L251
;            GLfloat negDensitySquared = -ctx->Fog.Densit
	fmove.s	$22F0(a2),fp0
	fneg.s	fp0
	fmove.s	fp0,fp7
	fmove.x	fp7,fp0
	fmul.s	$22F0(a2),fp0
	fmove.s	fp0,fp7
;            for (i=0;
	moveq	#0,d2
	bra	L261
L252
;               GLfloat ndcz = ((GLfloat) z[i] - tz) *
	moveq	#0,d0
	move.w	0(a4,d2.l*2),d0
	fmove.l	d0,fp1
	fsub.x	fp3,fp1
	fmul.x	fp2,fp1
;               GLfloat eyez = -d / (c+ndcz);
	fmove.x	fp4,fp0
	fneg.s	fp0
	fadd.x	fp5,fp1
	fdiv.x	fp1,fp0
;               if (eyez < 0.0)  
	fmove.x	fp0,fp1
	fcmp.d	#$.00000000.00000000,fp1
	fboge.b	L254
L253
;               if (eyez < 0.0)  eyez
	fneg.s	fp0
L254
;               f = exp( negDensitySquared * eyez*eyez
	fmove.x	fp7,fp1
	fmul.x	fp0,fp1
	fmul.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_exp__r
	addq.w	#$8,a7
;               f = CLAMP( f, 0.0F, 1.0F );
	fcmp.s	#$.00000000,fp0
	fboge.b	L256
L255
	fmove.s	#$.00000000,fp0
	bra.b	L260
L256
	fcmp.s	#$.3F800000,fp0
	fbole.b	L258
L257
	fmove.s	#$.3F800000,fp0
L258
L259
L260
;               index[i] = (GLuint) ((GLfloat) index[i
	fmove.l	0(a3,d2.l*4),fp1
	fmove.s	#$.3F800000,fp6
	fsub.x	fp0,fp6
	fmove.x	fp6,fp0
	fmul.s	$22FC(a2),fp0
	fadd.x	fp0,fp1
	fmove.l	fp1,d0
	move.l	d0,0(a3,d2.l*4)
	addq.l	#1,d2
L261
	cmp.l	d3,d2
	blo	L252
L262
;         
	bra.b	L264
L263
;         gl_problem(ctx, "Bad fog mode in gl_fog_ci_pixels")
	move.l	#L225,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_problem
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2/d3/a2-a4
	unlk	a5
	rts
L264
;         return;
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2/d3/a2-a4
	unlk	a5
	rts

L225
	dc.b	'Bad fog mode in gl_fog_ci_pixels',0

	END
