
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/shade.c
	mc68030
	mc68881
	XREF	_sqrt__r
	XREF	_pow__r

	SECTION "_gl_pow__r:0",CODE


;static GLfloat gl_pow( GLfloat x, GLfloat y )
_gl_pow__r
	fmove.s	$8(a7),fp0
	fmove.s	4(a7),fp1
L98
;   GLdouble z = pow(x, y);
	fmove.d	fp0,-(a7)
	fmove.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_pow__r
	add.w	#$10,a7
;   if (z<1.0e-10)
	fcmp.d	#$.3DDB7CDF.D9D7BDBA,fp0
	fboge.b	L100
L99
	fmove.s	#$.00000000,fp0
	rts
L100
	rts

	SECTION "_gl_shade_rgba:0",CODE

	rts

;void gl_shade_rgba( GLcontext *ctx,
	XDEF	_gl_shade_rgba
_gl_shade_rgba
L164	EQU	-$164
	link	a5,#L164
	movem.l	d2-d6/a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	movem.l	$C(a5),d5/d6/a4
L101
;   mat = &ctx->Light.Material[side];
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA3E,a0
	move.l	d5,d0
	muls.l	#$370,d0
	add.l	a0,d0
	move.l	d0,a3
;   baseR = mat->Emission[0] + ctx->Light.Model.Ambient[0] * mat->
	move.l	$30(a3),-$8(a5)
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA28,a0
	fmove.s	(a0),fp0
	move.l	a3,a0
	fmul.s	(a0),fp0
	fmove.s	-$8(a5),fp1
	fadd.x	fp0,fp1
	fmove.s	fp1,-$8(a5)
;   baseG = mat->Emission[1] + ctx->Light.Model.Ambient[1] * mat->
	lea	$30(a3),a0
	move.l	4(a0),-$C(a5)
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA28,a0
	fmove.s	4(a0),fp0
	fmul.s	4(a3),fp0
	fmove.s	-$C(a5),fp1
	fadd.x	fp0,fp1
	fmove.s	fp1,-$C(a5)
;   baseB = mat->Emission[2] + ctx->Light.Model.Ambient[2] * mat->
	lea	$30(a3),a0
	move.l	$8(a0),-$10(a5)
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA28,a0
	fmove.s	$8(a0),fp0
	fmul.s	$8(a3),fp0
	fmove.s	-$10(a5),fp1
	fadd.x	fp0,fp1
	fmove.s	fp1,-$10(a5)
;   baseA = mat->Diffuse[3];
	lea	$10(a3),a0
	fmove.s	$C(a0),fp0
;   FLOAT_COLOR_TO_UBYTE_C
	fcmp.s	#$.00000000,fp0
	fboge.b	L103
L102
	fmove.s	#$.00000000,fp0
	bra.b	L107
L103
	fcmp.s	#$.3F800000,fp0
	fbole.b	L105
L104
	fmove.s	#$.3F800000,fp0
L105
L106
L107
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d4
;   for (j=0;
	moveq	#0,d2
	bra	L162
L108
;      if (side==0) 
	tst.l	d5
	bne.b	L110
L109
;         nx = normal[j][0];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	move.l	0(a1,d0.l),-$30(a5)
;         ny = normal[j][1];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	4(a0),-$34(a5)
;         nz = normal[j][2];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	$8(a0),-$38(a5)
	bra.b	L111
L110
;         nx = -normal[j][0];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	move.l	0(a1,d0.l),-$30(a5)
	fmove.s	-$30(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$30(a5)
;         ny = -normal[j][1];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	4(a0),-$34(a5)
	fmove.s	-$34(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$34(a5)
;         nz = -normal[j][2];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	$8(a0),-$38(a5)
	fmove.s	-$38(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$38(a5)
L111
;      sumR = baseR;
	move.l	-$8(a5),-$24(a5)
;      sumG = baseG;
	move.l	-$C(a5),-$28(a5)
;      sumB = baseB;
	move.l	-$10(a5),-$2C(a5)
;      for (light=ctx->Light.FirstEnabled;
	move.l	$8(a5),a1
	lea	$2318(a1),a0
	add.l	#$8E1A,a0
	move.l	(a0),a2
	bra	L142
L112
;         if (light->Position[3]==0.0) 
	lea	$30(a2),a0
	fmove.s	$C(a0),fp0
	ftst.d	fp0
	fbne.b	L114
L113
;            VPx = light->VP_inf_norm[0];
	fmove.s	$6E(a2),fp4
;            VPy = light->VP_inf_norm[1];
	lea	$6E(a2),a0
	fmove.s	4(a0),fp3
;            VPz = light->VP_inf_norm[2];
	lea	$6E(a2),a0
	fmove.s	$8(a0),fp2
;            attenuation = 1.0F;
	move.l	#$3F800000,-$48(a5)
	bra	L117
L114
;            VPx = light->Position[0] - vertex[j][0];
	move.l	d2,d0
	asl.l	#4,d0
	fmove.s	$30(a2),fp4
	fsub.s	0(a4,d0.l),fp4
;            VPy = light->Position[1] - vertex[j][1];
	lea	$30(a2),a0
	fmove.s	4(a0),fp3
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	fsub.s	4(a0),fp3
;            VPz = light->Position[2] - vertex[j][2];
	lea	$30(a2),a0
	fmove.s	$8(a0),fp2
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	fsub.s	$8(a0),fp2
;            d = (GLfloat) GL_SQRT( VPx*VPx + VPy*VPy + V
	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 (d>0.001F) 
	fcmp.s	#$.3A83126E,fp0
	fbole.b	L116
L115
;               GLfloat invd = 1.0F / d;
	fmove.s	#$.3F800000,fp1
	fdiv.x	fp0,fp1
;               VPx *= invd;
	fmul.x	fp1,fp4
;               VPy *= invd;
	fmul.x	fp1,fp3
;               VPz *= invd;
	fmul.x	fp1,fp2
L116
;            attenuation = 1.0F / (light->ConstantAttenua
	fmove.x	fp0,fp6
	fmul.s	$64(a2),fp6
	fmove.s	$60(a2),fp5
	fadd.x	fp6,fp5
	fmul.x	fp5,fp0
	fmove.s	$5C(a2),fp1
	fadd.x	fp0,fp1
	fmove.s	#$.3F800000,fp0
	fdiv.x	fp1,fp0
	fmove.s	fp0,-$48(a5)
L117
;         if (light->SpotCutoff==180.0F) 
	fmove.s	$54(a2),fp0
	fcmp.s	#$.43340000,fp0
	fbne.b	L119
L118
;            spot = 1.0F;
	move.l	#$3F800000,-$4C(a5)
	bra	L123
L119
;            PVx = -VPx;
	fmove.x	fp4,fp0
	fneg.s	fp0
	fmove.x	fp0,fp6
;            PVy = -VPy;
	fmove.x	fp3,fp5
	fneg.s	fp5
;            PVz = -VPz;
	fmove.x	fp2,fp1
	fneg.s	fp1
;            n_dot_h = n
	fmove.s	$86(a2),fp0
	fmul.x	fp6,fp0
	lea	$86(a2),a0
	fmul.s	4(a0),fp5
	fadd.x	fp5,fp0
	lea	$86(a2),a0
	fmul.s	$8(a0),fp1
	fadd.x	fp1,fp0
;            if (PV_dot_dir<=0.0F || PV_dot_dir<light->Co
	fcmp.s	#$.00000000,fp0
	fbole.b	L121
L120
	fcmp.s	$58(a2),fp0
	fboge.b	L122
L121
;               spot = 0.0F;
	clr.l	-$4C(a5)
	bra.b	L123
L122
;               double x = PV_dot_dir * (EXP_TABLE_SIZ
	fmul.s	#$.43FF8000,fp0
;               int k = (int) x;
	fmove.l	fp0,d0
;               spot = light->SpotExpTable[k][0]
	lea	$92(a2),a0
	fmove.s	0(a0,d0.l*8),fp1
	fmove.l	d0,fp5
	fsub.x	fp5,fp0
	lea	$92(a2),a0
	lea	0(a0,d0.l*8),a0
	fmove.s	4(a0),fp5
	fmul.x	fp5,fp0
	fadd.x	fp0,fp1
	fmove.s	fp1,-$4C(a5)
L123
;         ambientR = mat->Ambient[0] * light->Ambient[0];
	move.l	a3,a0
	move.l	(a0),-$3C(a5)
	fmove.s	-$3C(a5),fp0
	fmul.s	(a2),fp0
	fmove.s	fp0,-$3C(a5)
;         ambientG = mat->Ambient[1] * light->Ambient[1];
	fmove.s	4(a3),fp0
	fmul.s	4(a2),fp0
	fmove.s	fp0,fp7
;         ambientB = mat->Ambient[2] * light->Ambient[2];
	fmove.s	$8(a3),fp5
	fmul.s	$8(a2),fp5
;         n_dot_VP = nx * VPx + ny * VPy + nz * VPz;
	fmove.s	-$30(a5),fp0
	fmul.x	fp4,fp0
	fmove.s	-$34(a5),fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.s	-$38(a5),fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
;         if (n_dot_VP<=0.0F) 
	fcmp.s	#$.00000000,fp0
	fbogt.b	L125
L124
;            GLfloat t = attenuation * spot;
	fmove.s	-$48(a5),fp0
	fmul.s	-$4C(a5),fp0
;            sumR += t * ambientR;
	fmove.x	fp0,fp1
	fmul.s	-$3C(a5),fp1
	fmove.s	-$24(a5),fp2
	fadd.x	fp1,fp2
	fmove.s	fp2,-$24(a5)
;            sumG += t * ambientG;
	fmove.x	fp0,fp1
	fmul.x	fp7,fp1
	fmove.s	-$28(a5),fp2
	fadd.x	fp1,fp2
	fmove.s	fp2,-$28(a5)
;            sumB += t * ambientB;
	fmul.x	fp5,fp0
	fmove.s	-$2C(a5),fp1
	fadd.x	fp0,fp1
	fmove.s	fp1,-$2C(a5)
	bra	L141
L125
;            diffuseR = n_dot_VP * mat->Diffuse[0] * ligh
	fmove.x	fp0,fp1
	fmul.s	$10(a3),fp1
	fmove.s	fp1,-$84(a5)
	fmove.s	-$84(a5),fp1
	fmul.s	$10(a2),fp1
	fmove.s	fp1,-$84(a5)
;            diffuseG = n_dot_VP * mat->Diffuse[1] * ligh
	lea	$10(a3),a0
	fmove.x	fp0,fp1
	fmul.s	4(a0),fp1
	fmove.s	fp1,-$88(a5)
	lea	$10(a2),a0
	fmove.s	-$88(a5),fp1
	fmul.s	4(a0),fp1
	fmove.s	fp1,-$88(a5)
;            diffuseB = n_dot_VP * mat->Diffuse[2] * ligh
	lea	$10(a3),a0
	fmul.s	$8(a0),fp0
	fmove.s	fp0,-$8C(a5)
	lea	$10(a2),a0
	fmove.s	-$8C(a5),fp0
	fmul.s	$8(a0),fp0
	fmove.s	fp0,-$8C(a5)
;            if (ctx->Light.Model.LocalViewer) 
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA28,a0
	tst.b	$10(a0)
	beq	L129
L126
;               vx = vertex[j][0];
	move.l	d2,d0
	asl.l	#4,d0
	move.l	0(a4,d0.l),-$B0(a5)
;               vy = vertex[j][1];
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	move.l	4(a0),-$B4(a5)
;               vz = vertex[j][2];
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	move.l	$8(a0),-$B8(a5)
;               vlen = GL_SQRT( vx*vx + vy*vy + vz*vz )
	fmove.s	-$B0(a5),fp0
	fmul.s	-$B0(a5),fp0
	fmove.s	-$B4(a5),fp1
	fmul.s	-$B4(a5),fp1
	fadd.x	fp1,fp0
	fmove.s	-$B8(a5),fp1
	fmul.s	-$B8(a5),fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;               if (vlen>0.0001F) 
	fcmp.s	#$.38D1B717,fp0
	fbole.b	L128
L127
;                  GLfloat invlen = 1.0F / vlen;
	fmove.s	#$.3F800000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
;                  vx *= invlen;
	fmove.s	-$B0(a5),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,-$B0(a5)
;                  vy *= invlen;
	fmove.s	-$B4(a5),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,-$B4(a5)
;                  vz *= invlen;
	fmove.s	-$B8(a5),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,-$B8(a5)
L128
;               h_x = VPx - vx;
	fmove.x	fp4,fp1
	fsub.s	-$B0(a5),fp1
;               h_y = VPy - vy;
	fsub.s	-$B4(a5),fp3
;               h_z = VPz - vz;
	fsub.s	-$B8(a5),fp2
	bra.b	L130
L129
;               h_x = VPx;
	fmove.x	fp4,fp1
;               h_y = VPy;
;               h_z = VPz + 1.0F;
	fadd.s	#$.3F800000,fp2
L130
;            n_dot_h = nx*h_x + ny*h_y + nz*h_z;
	fmove.s	-$30(a5),fp0
	fmul.x	fp1,fp0
	fmove.s	-$34(a5),fp4
	fmul.x	fp3,fp4
	fadd.x	fp4,fp0
	fmove.s	-$38(a5),fp4
	fmul.x	fp2,fp4
	fadd.x	fp4,fp0
;            if (n_dot_h<=0.0F) 
	fcmp.s	#$.00000000,fp0
	fbogt.b	L132
L131
;               specularR = 0.0F;
	fmove.s	#$.00000000,fp3
;               specularG = 0.0F;
	fmove.s	#$.00000000,fp2
;               specularB = 0.0F;
	fmove.s	#$.00000000,fp0
	bra	L140
L132
;               n_dot_h = n_dot_h / GL_SQRT( h_x*h_x +
	fmove.x	fp0,fp4
	fmove.x	fp1,fp0
	fmul.x	fp1,fp0
	fmove.x	fp0,fp1
	fmove.x	fp3,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp1
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fadd.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
	fdiv.x	fp0,fp4
	fmove.x	fp4,fp0
;               if (n_dot_h>1.0F) 
	fcmp.s	#$.3F800000,fp0
	fbole.b	L134
L133
;                  spec_coef = pow( n_dot_h, mat->S
	move.l	a3,a0
	fmove.s	$40(a0),fp1
	fmove.d	fp1,-(a7)
	fmove.d	fp0,-(a7)
	jsr	_pow__r
	add.w	#$10,a7
	bra.b	L137
L134
;                  int k = (int) (n_dot_h * (GLfloa
	fmove.x	fp0,fp1
	fmul.s	#$.43470000,fp1
	fmove.l	fp1,d3
;                  if (mat->ShineTable[k] < 0.0F)
	lea	$50(a3),a0
	fmove.s	0(a0,d3.l*4),fp1
	fcmp.s	#$.00000000,fp1
	fboge.b	L136
L135
;                     mat->ShineTable[k] = gl_po
	move.l	a3,a0
	move.l	$40(a0),-(a7)
	fmove.s	fp0,-(a7)
	jsr	_gl_pow__r
	addq.w	#$8,a7
	lea	$50(a3),a0
	fmove.s	fp0,0(a0,d3.l*4)
L136
;                  spec_coef = mat->ShineTable[k];
	lea	$50(a3),a0
	fmove.s	0(a0,d3.l*4),fp0
L137
;               if (spec_coef<1.0e-10) 
	fmove.x	fp0,fp1
	fcmp.d	#$.3DDB7CDF.D9D7BDBA,fp1
	fboge.b	L139
L138
;                  specularR = 0.0F;
	fmove.s	#$.00000000,fp3
;                  specularG = 0.0F;
	fmove.s	#$.00000000,fp2
;                  specularB = 0.0F;
	fmove.s	#$.00000000,fp0
	bra.b	L140
L139
;                  specularR = spec_coef * mat->Spe
	fmove.x	fp0,fp3
	fmul.s	$20(a3),fp3
	fmul.s	$20(a2),fp3
;                  specularG = spec_coef * mat->Spe
	lea	$20(a3),a0
	fmove.x	fp0,fp2
	fmul.s	4(a0),fp2
	lea	$20(a2),a0
	fmul.s	4(a0),fp2
;                  specularB = spec_coef * mat->Spe
	lea	$20(a3),a0
	fmul.s	$8(a0),fp0
	lea	$20(a2),a0
	fmul.s	$8(a0),fp0
L140
;            t = attenuation * spot;
	fmove.s	-$48(a5),fp1
	fmul.s	-$4C(a5),fp1
;            sumR += t * (ambientR + diffuseR + specularR)
	fmove.s	-$3C(a5),fp4
	fadd.s	-$84(a5),fp4
	fmove.s	fp4,-$3C(a5)
	fmove.s	-$3C(a5),fp4
	fadd.x	fp3,fp4
	fmove.s	fp4,-$3C(a5)
	fmove.x	fp1,fp3
	fmul.s	-$3C(a5),fp3
	fmove.s	-$24(a5),fp4
	fadd.x	fp3,fp4
	fmove.s	fp4,-$24(a5)
;            sumG += t * (ambientG + diffuseG + specularG)
	fmove.x	fp7,fp3
	fadd.s	-$88(a5),fp3
	fadd.x	fp2,fp3
	fmove.x	fp1,fp2
	fmul.x	fp3,fp2
	fmove.s	-$28(a5),fp3
	fadd.x	fp2,fp3
	fmove.s	fp3,-$28(a5)
;            sumB += t * (ambientB + diffuseB + specularB)
	fadd.s	-$8C(a5),fp5
	fadd.x	fp0,fp5
	fmul.x	fp5,fp1
	fmove.s	-$2C(a5),fp0
	fadd.x	fp1,fp0
	fmove.s	fp0,-$2C(a5)
L141
	move.l	$6A(a2),a2
L142
	cmp.w	#0,a2
	bne	L112
L143
;     FLOAT_COLOR_
	fmove.s	-$24(a5),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L145
L144
	clr.l	-$24(a5)
	bra.b	L149
L145
	fmove.s	-$24(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L147
L146
	move.l	#$3F800000,-$24(a5)
L147
L148
L149
	fmove.s	-$24(a5),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,-$24(a5)
	fmove.s	-$24(a5),fp0
	fmove.l	fp0,d0
	move.l	$1C(a5),a1
	move.b	d0,0(a1,d2.l*4)
;     FLOAT_COLOR_
	fmove.s	-$28(a5),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L151
L150
	clr.l	-$28(a5)
	bra.b	L155
L151
	fmove.s	-$28(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L153
L152
	move.l	#$3F800000,-$28(a5)
L153
L154
L155
	fmove.s	-$28(a5),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,-$28(a5)
	fmove.s	-$28(a5),fp0
	fmove.l	fp0,d0
	move.l	$1C(a5),a1
	lea	0(a1,d2.l*4),a0
	move.b	d0,1(a0)
;     FLOAT_COLOR_
	fmove.s	-$2C(a5),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L157
L156
	clr.l	-$2C(a5)
	bra.b	L161
L157
	fmove.s	-$2C(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L159
L158
	move.l	#$3F800000,-$2C(a5)
L159
L160
L161
	fmove.s	-$2C(a5),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,-$2C(a5)
	fmove.s	-$2C(a5),fp0
	fmove.l	fp0,d0
	move.l	$1C(a5),a1
	lea	0(a1,d2.l*4),a0
	move.b	d0,2(a0)
;      color[j][3] = sumA;
	move.l	$1C(a5),a1
	lea	0(a1,d2.l*4),a0
	move.b	d4,3(a0)
	addq.l	#1,d2
L162
	cmp.l	d6,d2
	blo	L108
L163
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_gl_shade_rgba_spec:0",CODE


;               GLfloat invd = 1.0F / d;
	XDEF	_gl_shade_rgba_spec
_gl_shade_rgba_spec
L246	EQU	-$190
	link	a5,#L246
	movem.l	d2-d6/a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	movem.l	$C(a5),d5/d6/a4
L165
;   mat = &ctx->Light.Material[side];
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA3E,a0
	move.l	d5,d0
	muls.l	#$370,d0
	add.l	a0,d0
	move.l	d0,a3
;   baseR = mat->Emission[0] + ctx->Light.Model.Ambient[0] * mat->
	move.l	$30(a3),-$8(a5)
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA28,a0
	fmove.s	(a0),fp0
	move.l	a3,a0
	fmul.s	(a0),fp0
	fmove.s	-$8(a5),fp1
	fadd.x	fp0,fp1
	fmove.s	fp1,-$8(a5)
;   baseG = mat->Emission[1] + ctx->Light.Model.Ambient[1] * mat->
	lea	$30(a3),a0
	move.l	4(a0),-$C(a5)
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA28,a0
	fmove.s	4(a0),fp0
	fmul.s	4(a3),fp0
	fmove.s	-$C(a5),fp1
	fadd.x	fp0,fp1
	fmove.s	fp1,-$C(a5)
;   baseB = mat->Emission[2] + ctx->Light.Model.Ambient[2] * mat->
	lea	$30(a3),a0
	move.l	$8(a0),-$10(a5)
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA28,a0
	fmove.s	$8(a0),fp0
	fmul.s	$8(a3),fp0
	fmove.s	-$10(a5),fp1
	fadd.x	fp0,fp1
	fmove.s	fp1,-$10(a5)
;   baseA = mat->Diffuse[3];
	lea	$10(a3),a0
	fmove.s	$C(a0),fp0
;   FLOAT_COLOR_TO_UBY
	fcmp.s	#$.00000000,fp0
	fboge.b	L167
L166
	fmove.s	#$.00000000,fp0
	bra.b	L171
L167
	fcmp.s	#$.3F800000,fp0
	fbole.b	L169
L168
	fmove.s	#$.3F800000,fp0
L169
L170
L171
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d4
;   for (j=0;
	moveq	#0,d2
	bra	L244
L172
;      if (side==0) 
	tst.l	d5
	bne.b	L174
L173
;         nx = normal[j][0];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	move.l	0(a1,d0.l),-$3C(a5)
;         ny = normal[j][1];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	4(a0),-$40(a5)
;         nz = normal[j][2];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	$8(a0),-$44(a5)
	bra.b	L175
L174
;         nx = -normal[j][0];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	move.l	0(a1,d0.l),-$3C(a5)
	fmove.s	-$3C(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$3C(a5)
;         ny = -normal[j][1];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	4(a0),-$40(a5)
	fmove.s	-$40(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$40(a5)
;         nz = -normal[j][2];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	$8(a0),-$44(a5)
	fmove.s	-$44(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$44(a5)
L175
;      sumBaseR = baseR;
	move.l	-$8(a5),-$24(a5)
;      sumBaseG = baseG;
	move.l	-$C(a5),-$28(a5)
;      sumBaseB = baseB;
	move.l	-$10(a5),-$2C(a5)
;      sumSpecR = sumSpecG = sumSpecB = 0.0;
	clr.l	-$30(a5)
	move.l	-$30(a5),-$38(a5)
	move.l	-$30(a5),-$34(a5)
;      for (light=ctx->Light.FirstEnabled;
	move.l	$8(a5),a1
	lea	$2318(a1),a0
	add.l	#$8E1A,a0
	move.l	(a0),a2
	bra	L206
L176
;         if (light->Position[3]==0.0) 
	lea	$30(a2),a0
	fmove.s	$C(a0),fp0
	ftst.d	fp0
	fbne.b	L178
L177
;            VPx = light->VP_inf_norm[0];
	fmove.s	$6E(a2),fp4
;            VPy = light->VP_inf_norm[1];
	lea	$6E(a2),a0
	fmove.s	4(a0),fp3
;            VPz = light->VP_inf_norm[2];
	lea	$6E(a2),a0
	fmove.s	$8(a0),fp2
;            attenuation = 1.0F;
	move.l	#$3F800000,-$54(a5)
	bra	L181
L178
;            VPx = light->Position[0] - vertex[j][0];
	move.l	d2,d0
	asl.l	#4,d0
	fmove.s	$30(a2),fp4
	fsub.s	0(a4,d0.l),fp4
;            VPy = light->Position[1] - vertex[j][1];
	lea	$30(a2),a0
	fmove.s	4(a0),fp3
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	fsub.s	4(a0),fp3
;            VPz = light->Position[2] - vertex[j][2];
	lea	$30(a2),a0
	fmove.s	$8(a0),fp2
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	fsub.s	$8(a0),fp2
;            d = (GLfloat) GL_SQRT( VPx*VPx + VPy*VPy + V
	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 (d>0.001F) 
	fcmp.s	#$.3A83126E,fp0
	fbole.b	L180
L179
;               GLfloat invd = 1.0F / d;
	fmove.s	#$.3F800000,fp1
	fdiv.x	fp0,fp1
;               VPx *= invd;
	fmul.x	fp1,fp4
;               VPy *= invd;
	fmul.x	fp1,fp3
;               VPz *= invd;
	fmul.x	fp1,fp2
L180
;                  GLfloa
	fmove.x	fp0,fp6
	fmul.s	$64(a2),fp6
	fmove.s	$60(a2),fp5
	fadd.x	fp6,fp5
	fmul.x	fp5,fp0
	fmove.s	$5C(a2),fp1
	fadd.x	fp0,fp1
	fmove.s	#$.3F800000,fp0
	fdiv.x	fp1,fp0
	fmove.s	fp0,-$54(a5)
L181
;         if (light->SpotCutoff==180.0F) 
	fmove.s	$54(a2),fp0
	fcmp.s	#$.43340000,fp0
	fbne.b	L183
L182
;            spot = 1.0F;
	move.l	#$3F800000,-$58(a5)
	bra	L187
L183
;            PVx = -VPx;
	fmove.x	fp4,fp0
	fneg.s	fp0
	fmove.x	fp0,fp6
;            PVy = -VPy;
	fmove.x	fp3,fp5
	fneg.s	fp5
;            PVz = -VPz;
	fmove.x	fp2,fp1
	fneg.s	fp1
;            PV_dot_dir = PVx*light->NormDirection[0]
	fmove.s	$86(a2),fp0
	fmul.x	fp6,fp0
	lea	$86(a2),a0
	fmul.s	4(a0),fp5
	fadd.x	fp5,fp0
	lea	$86(a2),a0
	fmul.s	$8(a0),fp1
	fadd.x	fp1,fp0
;            if (PV_dot_dir<=0.0F || PV_dot_dir<light->Co
	fcmp.s	#$.00000000,fp0
	fbole.b	L185
L184
	fcmp.s	$58(a2),fp0
	fboge.b	L186
L185
;               spot = 0.0F;
	clr.l	-$58(a5)
	bra.b	L187
L186
;               double x = PV_dot_dir * (EXP_TABLE_SIZ
	fmul.s	#$.43FF8000,fp0
;               int k = (int) x;
	fmove.l	fp0,d0
;               spot = light->SpotExpTable[k][0]
	lea	$92(a2),a0
	fmove.s	0(a0,d0.l*8),fp1
	fmove.l	d0,fp5
	fsub.x	fp5,fp0
	lea	$92(a2),a0
	lea	0(a0,d0.l*8),a0
	fmove.s	4(a0),fp5
	fmul.x	fp5,fp0
	fadd.x	fp0,fp1
	fmove.s	fp1,-$58(a5)
L187
;         ambientR = mat->Ambient[0] * light->Ambient[0];
	move.l	a3,a0
	move.l	(a0),-$48(a5)
	fmove.s	-$48(a5),fp0
	fmul.s	(a2),fp0
	fmove.s	fp0,-$48(a5)
;         ambientG = mat->Ambient[1] * light->Ambient[1];
	fmove.s	4(a3),fp0
	fmul.s	4(a2),fp0
	fmove.s	fp0,fp7
;         ambientB = mat->Ambient[2] * light->Ambient[2];
	fmove.s	$8(a3),fp5
	fmul.s	$8(a2),fp5
;         n_dot_VP = nx * VPx + ny * VPy + nz * VPz;
	fmove.s	-$3C(a5),fp0
	fmul.x	fp4,fp0
	fmove.s	-$40(a5),fp1
	fmul.x	fp3,fp1
	fadd.x	fp1,fp0
	fmove.s	-$44(a5),fp1
	fmul.x	fp2,fp1
	fadd.x	fp1,fp0
;         if (n_dot_VP<=0.0F) 
	fcmp.s	#$.00000000,fp0
	fbogt.b	L189
L188
;            GLfloat t = attenuation * spot;
	fmove.s	-$54(a5),fp0
	fmul.s	-$58(a5),fp0
;            sumBaseR += t * ambientR;
	fmove.x	fp0,fp1
	fmul.s	-$48(a5),fp1
	fmove.s	-$24(a5),fp2
	fadd.x	fp1,fp2
	fmove.s	fp2,-$24(a5)
;            sumBaseG += t * ambientG;
	fmove.x	fp0,fp1
	fmul.x	fp7,fp1
	fmove.s	-$28(a5),fp2
	fadd.x	fp1,fp2
	fmove.s	fp2,-$28(a5)
;            sumBaseB += t * ambientB;
	fmul.x	fp5,fp0
	fmove.s	-$2C(a5),fp1
	fadd.x	fp0,fp1
	fmove.s	fp1,-$2C(a5)
	bra	L205
L189
;            diffuseR = n_dot_VP * mat->Diffuse[0] * ligh
	fmove.x	fp0,fp1
	fmul.s	$10(a3),fp1
	fmove.s	fp1,-$90(a5)
	fmove.s	-$90(a5),fp1
	fmul.s	$10(a2),fp1
	fmove.s	fp1,-$90(a5)
;            diffuseG = n_dot_VP * mat->Diffuse[1] * ligh
	lea	$10(a3),a0
	fmove.x	fp0,fp1
	fmul.s	4(a0),fp1
	fmove.s	fp1,-$94(a5)
	lea	$10(a2),a0
	fmove.s	-$94(a5),fp1
	fmul.s	4(a0),fp1
	fmove.s	fp1,-$94(a5)
;            diffuseB = n_dot_VP * mat->Diffuse[2] * ligh
	lea	$10(a3),a0
	fmul.s	$8(a0),fp0
	fmove.s	fp0,-$98(a5)
	lea	$10(a2),a0
	fmove.s	-$98(a5),fp0
	fmul.s	$8(a0),fp0
	fmove.s	fp0,-$98(a5)
;            if (ctx->Light.Model.LocalViewer) 
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA28,a0
	tst.b	$10(a0)
	beq	L193
L190
;               vx = vertex[j][0];
	move.l	d2,d0
	asl.l	#4,d0
	move.l	0(a4,d0.l),-$BC(a5)
;               vy = vertex[j][1];
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	move.l	4(a0),-$C0(a5)
;               vz = vertex[j][2];
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	move.l	$8(a0),-$C4(a5)
;               vlen = GL_SQRT( vx*vx + vy*vy + vz*vz )
	fmove.s	-$BC(a5),fp0
	fmul.s	-$BC(a5),fp0
	fmove.s	-$C0(a5),fp1
	fmul.s	-$C0(a5),fp1
	fadd.x	fp1,fp0
	fmove.s	-$C4(a5),fp1
	fmul.s	-$C4(a5),fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;               if (vlen>0.0001F) 
	fcmp.s	#$.38D1B717,fp0
	fbole.b	L192
L191
;                  GLfloat invlen = 1.0F / vlen;
	fmove.s	#$.3F800000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
;                  vx *= invlen;
	fmove.s	-$BC(a5),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,-$BC(a5)
;                  vy *= invlen;
	fmove.s	-$C0(a5),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,-$C0(a5)
;                  vz *= invlen;
	fmove.s	-$C4(a5),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,-$C4(a5)
L192
;               h_x = VPx - vx;
	fmove.x	fp4,fp1
	fsub.s	-$BC(a5),fp1
;               h_y = VPy - vy;
	fsub.s	-$C0(a5),fp3
;               h_z = VPz - vz;
	fsub.s	-$C4(a5),fp2
	bra.b	L194
L193
;               h_x = VPx;
	fmove.x	fp4,fp1
;               h_y = VPy;
;               h_z = VPz + 1.0F;
	fadd.s	#$.3F800000,fp2
L194
;            n_dot_h = nx*h_x + ny*h_y + nz*h_z;
	fmove.s	-$3C(a5),fp0
	fmul.x	fp1,fp0
	fmove.s	-$40(a5),fp4
	fmul.x	fp3,fp4
	fadd.x	fp4,fp0
	fmove.s	-$44(a5),fp4
	fmul.x	fp2,fp4
	fadd.x	fp4,fp0
;            if (n_dot_h<=0.0F) 
	fcmp.s	#$.00000000,fp0
	fbogt.b	L196
L195
;               specularR = 0.0F;
	fmove.s	#$.00000000,fp3
;               specularG = 0.0F;
	fmove.s	#$.00000000,fp2
;               specularB = 0.0F;
	fmove.s	#$.00000000,fp0
	bra	L204
L196
;               n_dot_h = n_dot_h / GL_SQRT( h_x*h_x +
	fmove.x	fp0,fp4
	fmove.x	fp1,fp0
	fmul.x	fp1,fp0
	fmove.x	fp0,fp1
	fmove.x	fp3,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp1
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fadd.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
	fdiv.x	fp0,fp4
	fmove.x	fp4,fp0
;               if (n_dot_h>1.0F) 
	fcmp.s	#$.3F800000,fp0
	fbole.b	L198
L197
;                  spec_coef = pow( n_dot_h, mat->S
	move.l	a3,a0
	fmove.s	$40(a0),fp1
	fmove.d	fp1,-(a7)
	fmove.d	fp0,-(a7)
	jsr	_pow__r
	add.w	#$10,a7
	bra.b	L201
L198
;                  int k = (int) (n_dot_h * (GLfloa
	fmove.x	fp0,fp1
	fmul.s	#$.43470000,fp1
	fmove.l	fp1,d3
;                  if (mat->ShineTable[k] < 0.0F)
	lea	$50(a3),a0
	fmove.s	0(a0,d3.l*4),fp1
	fcmp.s	#$.00000000,fp1
	fboge.b	L200
L199
;                     mat->ShineTable[k] = gl_po
	move.l	a3,a0
	move.l	$40(a0),-(a7)
	fmove.s	fp0,-(a7)
	jsr	_gl_pow__r
	addq.w	#$8,a7
	lea	$50(a3),a0
	fmove.s	fp0,0(a0,d3.l*4)
L200
;                  spec_coef = mat->ShineTable[k];
	lea	$50(a3),a0
	fmove.s	0(a0,d3.l*4),fp0
L201
;               if (spec_coef<1.0e-10) 
	fmove.x	fp0,fp1
	fcmp.d	#$.3DDB7CDF.D9D7BDBA,fp1
	fboge.b	L203
L202
;                  specularR = 0.0F;
	fmove.s	#$.00000000,fp3
;                  specularG = 0.0F;
	fmove.s	#$.00000000,fp2
;                  specularB = 0.0F;
	fmove.s	#$.00000000,fp0
	bra.b	L204
L203
;                  specularR = spec_coef * mat->Spe
	fmove.x	fp0,fp3
	fmul.s	$20(a3),fp3
	fmul.s	$20(a2),fp3
;                  specularG = spec_coef * mat->Spe
	lea	$20(a3),a0
	fmove.x	fp0,fp2
	fmul.s	4(a0),fp2
	lea	$20(a2),a0
	fmul.s	4(a0),fp2
;                  specularB = spec_coef * mat->Spe
	lea	$20(a3),a0
	fmul.s	$8(a0),fp0
	lea	$20(a2),a0
	fmul.s	$8(a0),fp0
L204
;            t = attenuation * spot;
	fmove.s	-$54(a5),fp1
	fmul.s	-$58(a5),fp1
;            sumBaseR += t * (ambientR + diffuseR);
	fmove.s	-$48(a5),fp4
	fadd.s	-$90(a5),fp4
	fmove.s	fp4,-$48(a5)
	fmove.x	fp1,fp4
	fmul.s	-$48(a5),fp4
	fmove.s	-$24(a5),fp6
	fadd.x	fp4,fp6
	fmove.s	fp6,-$24(a5)
;            sumBaseG += t * (ambientG + diffuseG);
	fmove.x	fp7,fp4
	fadd.s	-$94(a5),fp4
	fmove.x	fp1,fp6
	fmul.x	fp4,fp6
	fmove.s	-$28(a5),fp4
	fadd.x	fp6,fp4
	fmove.s	fp4,-$28(a5)
;            sumBaseB += t * (ambientB + diffuseB);
	fadd.s	-$98(a5),fp5
	fmove.x	fp1,fp4
	fmul.x	fp5,fp4
	fmove.s	-$2C(a5),fp5
	fadd.x	fp4,fp5
	fmove.s	fp5,-$2C(a5)
;            sumSpecR += t * specularR;
	fmul.x	fp1,fp3
	fmove.s	-$30(a5),fp4
	fadd.x	fp3,fp4
	fmove.s	fp4,-$30(a5)
;            sumSpecG += t * specularG;
	fmul.x	fp1,fp2
	fmove.s	-$34(a5),fp3
	fadd.x	fp2,fp3
	fmove.s	fp3,-$34(a5)
;            sumSpecB += t * specularB;
	fmul.x	fp0,fp1
	fmove.s	-$38(a5),fp0
	fadd.x	fp1,fp0
	fmove.s	fp0,-$38(a5)
L205
	move.l	$6A(a2),a2
L206
	cmp.w	#0,a2
	bne	L176
L207
;AT_COLOR_TO_UBYTE
	fmove.s	-$24(a5),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L209
L208
	clr.l	-$24(a5)
	bra.b	L213
L209
	fmove.s	-$24(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L211
L210
	move.l	#$3F800000,-$24(a5)
L211
L212
L213
	fmove.s	-$24(a5),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,-$24(a5)
	fmove.s	-$24(a5),fp0
	fmove.l	fp0,d0
	move.l	$1C(a5),a1
	move.b	d0,0(a1,d2.l*4)
;AT_COLOR_TO_UBYTE
	fmove.s	-$28(a5),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L215
L214
	clr.l	-$28(a5)
	bra.b	L219
L215
	fmove.s	-$28(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L217
L216
	move.l	#$3F800000,-$28(a5)
L217
L218
L219
	fmove.s	-$28(a5),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,-$28(a5)
	fmove.s	-$28(a5),fp0
	fmove.l	fp0,d0
	move.l	$1C(a5),a1
	lea	0(a1,d2.l*4),a0
	move.b	d0,1(a0)
;AT_COLOR_TO_UBYTE
	fmove.s	-$2C(a5),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L221
L220
	clr.l	-$2C(a5)
	bra.b	L225
L221
	fmove.s	-$2C(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L223
L222
	move.l	#$3F800000,-$2C(a5)
L223
L224
L225
	fmove.s	-$2C(a5),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,-$2C(a5)
	fmove.s	-$2C(a5),fp0
	fmove.l	fp0,d0
	move.l	$1C(a5),a1
	lea	0(a1,d2.l*4),a0
	move.b	d0,2(a0)
;      baseColor[j][3] = sumBaseA;
	move.l	$1C(a5),a1
	lea	0(a1,d2.l*4),a0
	move.b	d4,3(a0)
;AT_COLOR_TO_UBYTE
	fmove.s	-$30(a5),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L227
L226
	clr.l	-$30(a5)
	bra.b	L231
L227
	fmove.s	-$30(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L229
L228
	move.l	#$3F800000,-$30(a5)
L229
L230
L231
	fmove.s	-$30(a5),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,-$30(a5)
	fmove.s	-$30(a5),fp0
	fmove.l	fp0,d0
	move.l	$20(a5),a1
	move.b	d0,0(a1,d2.l*4)
;AT_COLOR_TO_UBYTE
	fmove.s	-$34(a5),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L233
L232
	clr.l	-$34(a5)
	bra.b	L237
L233
	fmove.s	-$34(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L235
L234
	move.l	#$3F800000,-$34(a5)
L235
L236
L237
	fmove.s	-$34(a5),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,-$34(a5)
	fmove.s	-$34(a5),fp0
	fmove.l	fp0,d0
	move.l	$20(a5),a1
	lea	0(a1,d2.l*4),a0
	move.b	d0,1(a0)
;AT_COLOR_TO_UBYTE
	fmove.s	-$38(a5),fp0
	fcmp.s	#$.00000000,fp0
	fboge.b	L239
L238
	clr.l	-$38(a5)
	bra.b	L243
L239
	fmove.s	-$38(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L241
L240
	move.l	#$3F800000,-$38(a5)
L241
L242
L243
	fmove.s	-$38(a5),fp0
	fmul.s	#$.437F0000,fp0
	fmove.s	fp0,-$38(a5)
	fmove.s	-$38(a5),fp0
	fmove.l	fp0,d0
	move.l	$20(a5),a1
	lea	0(a1,d2.l*4),a0
	move.b	d0,2(a0)
;      specColor[j][3] = 255;
	move.l	$20(a5),a1
	lea	0(a1,d2.l*4),a0
	move.b	#$FF,3(a0)
	addq.l	#1,d2
L244
	cmp.l	d6,d2
	blo	L172
L245
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_gl_shade_rgba_fast:0",CODE


;void gl_shade_rgba_fast( GLcontext *ctx,
	XDEF	_gl_shade_rgba_fast
_gl_shade_rgba_fast
L290	EQU	-$50
	link	a5,#L290
	movem.l	d2-d6/a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	movem.l	$C(a5),d2/d6
	move.l	$8(a5),a4
L247
;   GLfloat *baseColor = ctx->Light.BaseColor[side];
	move.l	a4,a0
	add.l	#$B138,a0
	move.l	d2,d0
	asl.l	#4,d0
	add.l	a0,d0
	move.l	d0,-$C(a5)
;   sumA = (GLint) (baseColor[3] * 255.0F);
	move.l	-$C(a5),a1
	fmove.s	$C(a1),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d5
;   for (j=0;
	moveq	#0,d4
	bra	L288
L248
;      if (side==0) 
	tst.l	d2
	bne.b	L250
L249
;         nx = normal[j][0];
	move.l	d4,d0
	muls.l	#$C,d0
	move.l	$14(a5),a1
	move.l	0(a1,d0.l),-$1C(a5)
;         ny = normal[j][1];
	move.l	d4,d0
	muls.l	#$C,d0
	move.l	$14(a5),a1
	lea	0(a1,d0.l),a0
	fmove.s	4(a0),fp7
;         nz = normal[j][2];
	move.l	d4,d0
	muls.l	#$C,d0
	move.l	$14(a5),a1
	lea	0(a1,d0.l),a0
	fmove.s	$8(a0),fp5
	bra.b	L251
L250
;         nx = -normal[j][0];
	move.l	d4,d0
	muls.l	#$C,d0
	move.l	$14(a5),a1
	move.l	0(a1,d0.l),-$1C(a5)
	fmove.s	-$1C(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$1C(a5)
;         ny = -normal[j][1];
	move.l	d4,d0
	muls.l	#$C,d0
	move.l	$14(a5),a1
	lea	0(a1,d0.l),a0
	fmove.s	4(a0),fp0
	fneg.s	fp0
	fmove.s	fp0,fp7
;         nz = -normal[j][2];
	move.l	d4,d0
	muls.l	#$C,d0
	move.l	$14(a5),a1
	lea	0(a1,d0.l),a0
	fmove.s	$8(a0),fp5
	fneg.s	fp5
L251
;      sumR = baseColor[0];
	move.l	-$C(a5),a0
	fmove.s	(a0),fp4
;      sumG = baseColor[1];
	move.l	-$C(a5),a1
	fmove.s	4(a1),fp3
;      sumB = baseColor[2];
	move.l	-$C(a5),a1
	fmove.s	$8(a1),fp2
;      for (light=ctx->Light.FirstEnabled;
	lea	$2318(a4),a0
	add.l	#$8E1A,a0
	move.l	(a0),a2
	bra	L262
L252
;         n_dot_VP = nx * light->VP_inf_norm[0]
	fmove.s	$6E(a2),fp0
	fmul.s	-$1C(a5),fp0
	lea	$6E(a2),a0
	fmove.s	4(a0),fp1
	fmul.x	fp7,fp1
	fadd.x	fp1,fp0
	lea	$6E(a2),a0
	fmove.s	$8(a0),fp1
	fmul.x	fp5,fp1
	fadd.x	fp1,fp0
;         if (n_dot_VP>0.0F) 
	fcmp.s	#$.00000000,fp0
	fbole.b	L261
L253
;            GLfloat *lightMatDiffuse = light->MatDiffuse
	lea	$10AA(a2),a0
	move.l	d2,d0
	muls.l	#$C,d0
	add.l	d0,a0
;            sumR += n_dot_VP * lightMatDiffuse[0];
	fmove.s	(a0),fp1
	fmul.x	fp0,fp1
	fadd.x	fp1,fp4
;            sumG += n_dot_VP * lightMatDiffuse[1];
	fmove.s	4(a0),fp1
	fmul.x	fp0,fp1
	fadd.x	fp1,fp3
;            sumB += n_dot_VP * lightMatDiffuse[2];
	fmul.s	$8(a0),fp0
	fadd.x	fp0,fp2
;            n_dot_h = nx * light->h_inf_norm[0]
	fmove.s	$7A(a2),fp0
	fmul.s	-$1C(a5),fp0
	lea	$7A(a2),a0
	fmove.s	4(a0),fp1
	fmul.x	fp7,fp1
	fadd.x	fp1,fp0
	lea	$7A(a2),a0
	fmove.s	$8(a0),fp1
	fmul.x	fp5,fp1
	fadd.x	fp1,fp0
;            if (n_dot_h>0.0F) 
	fcmp.s	#$.00000000,fp0
	fbole.b	L261
L254
;               if (n_dot_h>1.0F) 
	fcmp.s	#$.3F800000,fp0
	fbole.b	L258
L255
;      GLfloat diffuse, specular;  /* accumulated diffuse and
	move.l	a4,a0
	add.l	#$AA3E,a0
	move.l	d2,d0
	muls.l	#$370,d0
	fmove.s	$40(a0,d0.l),fp1
	fmove.d	fp1,-(a7)
	fmove.d	fp0,-(a7)
	jsr	_pow__r
	add.w	#$10,a7
;                  if (spec_coef>1.0e-10F) 
	fcmp.s	#$.2EDBE6FE,fp0
	fbole.b	L257
L256
;                     sumR += spec_coef * light-
	lea	$10C2(a2),a0
	move.l	d2,d0
	muls.l	#$C,d0
	fmove.s	0(a0,d0.l),fp1
	fmul.x	fp0,fp1
	fadd.x	fp1,fp4
;                     sumG += spec_coef * light-
	lea	$10C2(a2),a0
	move.l	d2,d0
	muls.l	#$C,d0
	lea	0(a0,d0.l),a0
	fmove.s	4(a0),fp1
	fmul.x	fp0,fp1
	fadd.x	fp1,fp3
;                     sumB += spec_coef * light-
	lea	$10C2(a2),a0
	move.l	d2,d0
	muls.l	#$C,d0
	lea	0(a0,d0.l),a0
	fmul.s	$8(a0),fp0
	fadd.x	fp0,fp2
L257
	bra	L261
L258
;                  int k = (int) (n_dot_h * (GLfloa
	fmove.x	fp0,fp1
	fmul.s	#$.43470000,fp1
	fmove.l	fp1,d3
;                  struct gl_material *m = &ctx->Li
	move.l	a4,a0
	add.l	#$AA3E,a0
	move.l	d2,d0
	muls.l	#$370,d0
	add.l	a0,d0
	move.l	d0,a3
;                  if (m->ShineTable[k] < 0.0F)
	lea	$50(a3),a0
	fmove.s	0(a0,d3.l*4),fp1
	fcmp.s	#$.00000000,fp1
	fboge.b	L260
L259
;                     m->ShineTable[k] = gl_pow(
	move.l	a3,a0
	move.l	$40(a0),-(a7)
	fmove.s	fp0,-(a7)
	jsr	_gl_pow__r
	addq.w	#$8,a7
	lea	$50(a3),a0
	fmove.s	fp0,0(a0,d3.l*4)
L260
;                  spec_coef = m->ShineTable[k];
	lea	$50(a3),a0
	fmove.s	0(a0,d3.l*4),fp0
;                  sumR += spec_coef * light->MatSp
	lea	$10C2(a2),a0
	move.l	d2,d0
	muls.l	#$C,d0
	fmove.s	0(a0,d0.l),fp1
	fmul.x	fp0,fp1
	fadd.x	fp1,fp4
;                  sumG += spec_coef * light->MatSp
	lea	$10C2(a2),a0
	move.l	d2,d0
	muls.l	#$C,d0
	lea	0(a0,d0.l),a0
	fmove.s	4(a0),fp1
	fmul.x	fp0,fp1
	fadd.x	fp1,fp3
;                  sumB += spec_coef * light->MatSp
	lea	$10C2(a2),a0
	move.l	d2,d0
	muls.l	#$C,d0
	lea	0(a0,d0.l),a0
	fmul.s	$8(a0),fp0
	fadd.x	fp0,fp2
L261
	move.l	$6A(a2),a2
L262
	cmp.w	#0,a2
	bne	L252
L263
;     FLOAT_COLOR_
	fcmp.s	#$.00000000,fp4
	fboge.b	L265
L264
	fmove.s	#$.00000000,fp0
	bra.b	L269
L265
	fcmp.s	#$.3F800000,fp4
	fbole.b	L267
L266
	fmove.s	#$.3F800000,fp0
	bra.b	L268
L267
	fmove.x	fp4,fp0
L268
L269
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d0
	move.l	$18(a5),a1
	move.b	d0,0(a1,d4.l*4)
;     FLOAT_COLOR_
	fcmp.s	#$.00000000,fp3
	fboge.b	L271
L270
	fmove.s	#$.00000000,fp3
	bra.b	L275
L271
	fcmp.s	#$.3F800000,fp3
	fbole.b	L273
L272
	fmove.s	#$.3F800000,fp3
L273
L274
L275
	fmul.s	#$.437F0000,fp3
	fmove.l	fp3,d0
	move.l	$18(a5),a1
	lea	0(a1,d4.l*4),a0
	move.b	d0,1(a0)
;     FLOAT_COLOR_
	fcmp.s	#$.00000000,fp2
	fboge.b	L277
L276
	fmove.s	#$.00000000,fp2
	bra.b	L281
L277
	fcmp.s	#$.3F800000,fp2
	fbole.b	L279
L278
	fmove.s	#$.3F800000,fp2
L279
L280
L281
	fmul.s	#$.437F0000,fp2
	fmove.l	fp2,d0
	move.l	$18(a5),a1
	lea	0(a1,d4.l*4),a0
	move.b	d0,2(a0)
;      color[j][3] = sumA;
	move.l	$18(a5),a1
	lea	0(a1,d4.l*4),a0
	move.b	d5,3(a0)
;         GLubyte r0 = FloatToInt(CLAMP(sumR, 0, 1) * 255.0);
	fcmp.s	#$.00000000,fp4
	fboge.b	L283
L282
	bra.b	L287
L283
	fcmp.s	#$.3F800000,fp4
	fbole.b	L285
L284
L285
L286
L287
	addq.l	#1,d4
L288
	cmp.l	d6,d4
	blo	L248
L289
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_gl_shade_ci:0",CODE


;void gl_shade_ci( GLcontext *ctx,
	XDEF	_gl_shade_ci
_gl_shade_ci
L330	EQU	-$AC
	link	a5,#L330
	movem.l	d2-d5/a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	movem.l	$C(a5),d4/d5/a4
L291
;   struct gl_material *mat = &ctx->Light.Material[side];
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA3E,a0
	move.l	d4,d0
	muls.l	#$370,d0
	add.l	a0,d0
	move.l	d0,a3
;   for (j=0;
	moveq	#0,d2
	bra	L328
L292
;      if (side==0) 
	tst.l	d4
	bne.b	L294
L293
;         nx = normal[j][0];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	move.l	0(a1,d0.l),-$18(a5)
;         ny = normal[j][1];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	4(a0),-$1C(a5)
;         nz = normal[j][2];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	$8(a0),-$20(a5)
	bra.b	L295
L294
;         nx = -normal[j][0];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	move.l	0(a1,d0.l),-$18(a5)
	fmove.s	-$18(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$18(a5)
;         ny = -normal[j][1];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	4(a0),-$1C(a5)
	fmove.s	-$1C(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$1C(a5)
;         nz = -normal[j][2];
	move.l	d2,d0
	muls.l	#$C,d0
	move.l	$18(a5),a1
	lea	0(a1,d0.l),a0
	move.l	$8(a0),-$20(a5)
	fmove.s	-$20(a5),fp0
	fneg.s	fp0
	fmove.s	fp0,-$20(a5)
L295
;      diffuse = specular = 0.0F;
	clr.l	-$10(a5)
	move.l	-$10(a5),-$14(a5)
;      for (light=ctx->Light.FirstEnabled;
	move.l	$8(a5),a1
	lea	$2318(a1),a0
	add.l	#$8E1A,a0
	move.l	(a0),a2
	bra	L322
L296
;         if (light->Position[3]==0.0) 
	lea	$30(a2),a0
	fmove.s	$C(a0),fp0
	ftst.d	fp0
	fbne.b	L298
L297
;            lx = light->VP_inf_norm[0];
	fmove.s	$6E(a2),fp4
;            ly = light->VP_inf_norm[1];
	lea	$6E(a2),a0
	fmove.s	4(a0),fp3
;            lz = light->VP_inf_norm[2];
	lea	$6E(a2),a0
	fmove.s	$8(a0),fp2
;            attenuation = 1.0F;
	fmove.s	#$.3F800000,fp7
	bra	L301
L298
;            lx = light->Position[0] - vertex[j][0];
	move.l	d2,d0
	asl.l	#4,d0
	fmove.s	$30(a2),fp4
	fsub.s	0(a4,d0.l),fp4
;            ly = light->Position[1] - vertex[j][1];
	lea	$30(a2),a0
	fmove.s	4(a0),fp3
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	fsub.s	4(a0),fp3
;            lz = light->Position[2] - vertex[j][2];
	lea	$30(a2),a0
	fmove.s	$8(a0),fp2
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	fsub.s	$8(a0),fp2
;            d = (GLfloat) GL_SQRT( lx*lx + ly*ly + lz*lz
	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 (d>0.001F) 
	fcmp.s	#$.3A83126E,fp0
	fbole.b	L300
L299
;               GLfloat invd = 1.0F / d;
	fmove.s	#$.3F800000,fp1
	fdiv.x	fp0,fp1
;               lx *= invd;
	fmul.x	fp1,fp4
;               ly *= invd;
	fmul.x	fp1,fp3
;               lz *= invd;
	fmul.x	fp1,fp2
L300
;            attenuation = 1.0F / (light->ConstantAttenua
	fmove.x	fp0,fp6
	fmul.s	$64(a2),fp6
	fmove.s	$60(a2),fp5
	fadd.x	fp6,fp5
	fmul.x	fp5,fp0
	fmove.s	$5C(a2),fp1
	fadd.x	fp0,fp1
	fmove.s	#$.3F800000,fp0
	fdiv.x	fp1,fp0
	fmove.s	fp0,fp7
L301
;         l_dot_norm = lx*nx + ly*ny + lz*nz;
	fmove.x	fp4,fp1
	fmul.s	-$18(a5),fp1
	fmove.x	fp3,fp0
	fmul.s	-$1C(a5),fp0
	fadd.x	fp0,fp1
	fmove.x	fp2,fp0
	fmul.s	-$20(a5),fp0
	fadd.x	fp0,fp1
;         if (l_dot_norm>0.0F) 
	fcmp.s	#$.00000000,fp1
	fbole.b	L321
L302
;            if (light->SpotCutoff==180.0F) 
	fmove.s	$54(a2),fp0
	fcmp.s	#$.43340000,fp0
	fbne.b	L304
L303
;               spot_times_atten = attenuation;
	fmove.s	fp7,-$3C(a5)
	bra	L308
L304
;               v[0] = -lx;
	fmove.x	fp4,fp0
	fneg.s	fp0
	fmove.s	fp0,-$4C(a5)
;               v[1] = -ly;
	fmove.x	fp3,fp0
	fneg.s	fp0
	lea	-$4C(a5),a0
	fmove.s	fp0,4(a0)
;               v[2] = -lz;
	fmove.x	fp2,fp0
	fneg.s	fp0
	lea	-$4C(a5),a0
	fmove.s	fp0,$8(a0)
;               dot = DOT3( v, light->NormDirection );
	fmove.s	-$4C(a5),fp0
	fmul.s	$86(a2),fp0
	lea	-$4C(a5),a0
	fmove.s	4(a0),fp5
	lea	$86(a2),a0
	fmul.s	4(a0),fp5
	fadd.x	fp5,fp0
	lea	-$4C(a5),a0
	fmove.s	$8(a0),fp5
	lea	$86(a2),a0
	fmul.s	$8(a0),fp5
	fadd.x	fp5,fp0
;               if (dot<=0.0F || dot<light->CosCutoff)
	fcmp.s	#$.00000000,fp0
	fbole.b	L306
L305
	fcmp.s	$58(a2),fp0
	fboge.b	L307
L306
;                  spot_times_atten = 0.0F;
	clr.l	-$3C(a5)
	bra.b	L308
L307
;                  double x = dot * (EXP_TABLE_SIZE
	fmul.s	#$.43FF8000,fp0
;                  int k = (int) x;
	fmove.l	fp0,d0
;                  GLfloat spot = light->SpotExpTab
	lea	$92(a2),a0
	fmove.s	0(a0,d0.l*8),fp5
	fmove.l	d0,fp6
	fsub.x	fp6,fp0
	lea	$92(a2),a0
	lea	0(a0,d0.l*8),a0
	fmove.s	4(a0),fp6
	fmul.x	fp6,fp0
	fadd.x	fp0,fp5
	fmove.x	fp5,fp0
;                  spot_times_atten = spot * attenu
	fmul.x	fp7,fp0
	fmove.s	fp0,-$3C(a5)
L308
;            diffuse += l_dot_norm * light->dli * spot_ti
	fmul.s	$10DA(a2),fp1
	fmul.s	-$3C(a5),fp1
	fmove.s	-$10(a5),fp0
	fadd.x	fp1,fp0
	fmove.s	fp0,-$10(a5)
;               if (ctx->Light.Model.LocalViewer) 
	move.l	$8(a5),a1
	move.l	a1,a0
	add.l	#$AA28,a0
	tst.b	$10(a0)
	beq	L312
L309
;                  vx = vertex[j][0];
	move.l	d2,d0
	asl.l	#4,d0
	move.l	0(a4,d0.l),-$58(a5)
;                  vy = vertex[j][1];
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	fmove.s	4(a0),fp7
;                  vz = vertex[j][2];
	move.l	d2,d0
	asl.l	#4,d0
	lea	0(a4,d0.l),a0
	fmove.s	$8(a0),fp5
;                  vlen = GL_SQRT( vx*vx + vy*vy + 
	fmove.s	-$58(a5),fp0
	fmul.s	-$58(a5),fp0
	fmove.x	fp7,fp1
	fmul.x	fp7,fp1
	fadd.x	fp1,fp0
	fmove.x	fp5,fp1
	fmul.x	fp5,fp1
	fadd.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
;                  if (vlen>0.0001F) 
	fcmp.s	#$.38D1B717,fp0
	fbole.b	L311
L310
;                     GLfloat invlen = 1.0F / vl
	fmove.s	#$.3F800000,fp1
	fdiv.x	fp0,fp1
	fmove.x	fp1,fp0
;                     vx *= invlen;
	fmove.s	-$58(a5),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,-$58(a5)
;                     vy *= invlen;
	fmove.x	fp7,fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,fp7
;                     vz *= invlen;
	fmul.x	fp0,fp5
L311
;                  h_x = lx - vx;
	fmove.x	fp4,fp1
	fsub.s	-$58(a5),fp1
;                  h_y = ly - vy;
	fsub.x	fp7,fp3
;                  h_z = lz - vz;
	fsub.x	fp5,fp2
	bra.b	L313
L312
;                  h_x = lx;
	fmove.x	fp4,fp1
;                  h_y = ly;
;                  h_z = lz + 1.0F;
	fadd.s	#$.3F800000,fp2
L313
;               n_dot_h = h_x*nx + h_y*ny + h_z*nz;
	fmove.x	fp1,fp0
	fmul.s	-$18(a5),fp0
	fmove.x	fp3,fp4
	fmul.s	-$1C(a5),fp4
	fadd.x	fp4,fp0
	fmove.x	fp2,fp4
	fmul.s	-$20(a5),fp4
	fadd.x	fp4,fp0
;               if (n_dot_h <= 0.0F) 
	fcmp.s	#$.00000000,fp0
	fbogt.b	L315
L314
;                  spec_coef = 0.0F;
	fmove.s	#$.00000000,fp0
	bra	L320
L315
;                  n_dot_h = n_dot_h / GL_SQRT(h_x*
	fmove.x	fp0,fp4
	fmove.x	fp1,fp0
	fmul.x	fp1,fp0
	fmove.x	fp0,fp1
	fmove.x	fp3,fp0
	fmul.x	fp3,fp0
	fadd.x	fp0,fp1
	fmove.x	fp2,fp0
	fmul.x	fp2,fp0
	fadd.x	fp0,fp1
	fmove.x	fp1,fp0
	fmove.d	fp0,-(a7)
	jsr	_sqrt__r
	addq.w	#$8,a7
	fdiv.x	fp0,fp4
	fmove.x	fp4,fp0
;                  if (n_dot_h>1.0F) 
	fcmp.s	#$.3F800000,fp0
	fbole.b	L317
L316
;                     spec_coef = pow( n_dot_h, 
	move.l	a3,a0
	fmove.s	$40(a0),fp1
	fmove.d	fp1,-(a7)
	fmove.d	fp0,-(a7)
	jsr	_pow__r
	add.w	#$10,a7
	bra.b	L320
L317
;                     int k = (int) (n_dot_h * (
	fmove.x	fp0,fp1
	fmul.s	#$.43470000,fp1
	fmove.l	fp1,d3
;                     if (mat->ShineTable[k] < 0
	lea	$50(a3),a0
	fmove.s	0(a0,d3.l*4),fp1
	fcmp.s	#$.00000000,fp1
	fboge.b	L319
L318
;                        mat->ShineTable[k] =
	move.l	a3,a0
	move.l	$40(a0),-(a7)
	fmove.s	fp0,-(a7)
	jsr	_gl_pow__r
	addq.w	#$8,a7
	lea	$50(a3),a0
	fmove.s	fp0,0(a0,d3.l*4)
L319
;                     spec_coef = mat->ShineTabl
	lea	$50(a3),a0
	fmove.s	0(a0,d3.l*4),fp0
L320
;               specular += spec_coef * light->sli * s
	fmul.s	$10DE(a2),fp0
	fmul.s	-$3C(a5),fp0
	fmove.s	-$14(a5),fp1
	fadd.x	fp0,fp1
	fmove.s	fp1,-$14(a5)
L321
	move.l	$6A(a2),a2
L322
	cmp.w	#0,a2
	bne	L296
L323
;      if (specular>1.0F) 
	fmove.s	-$14(a5),fp0
	fcmp.s	#$.3F800000,fp0
	fbole.b	L325
L324
;         index = mat->SpecularIndex;
	move.l	a3,a0
	fmove.s	$4C(a0),fp0
	bra	L327
L325
;         d_a = mat->DiffuseIndex - mat->AmbientIndex;
	move.l	a3,a0
	fmove.s	$48(a0),fp2
	move.l	a3,a0
	fsub.s	$44(a0),fp2
;         s_a = mat->SpecularIndex - mat->AmbientIndex;
	move.l	a3,a0
	fmove.s	$4C(a0),fp1
	move.l	a3,a0
	fsub.s	$44(a0),fp1
;         index = mat->AmbientIndex
	move.l	a3,a0
	fmove.s	$44(a0),fp0
	fmove.s	#$.3F800000,fp3
	fsub.s	-$14(a5),fp3
	fmove.s	-$10(a5),fp4
	fmul.x	fp3,fp4
	fmove.s	fp4,-$10(a5)
	fmove.s	-$10(a5),fp3
	fmul.x	fp2,fp3
	fmove.s	fp3,-$10(a5)
	fadd.s	-$10(a5),fp0
	fmove.s	-$14(a5),fp2
	fmul.x	fp1,fp2
	fmove.s	fp2,-$14(a5)
	fadd.s	-$14(a5),fp0
;         if (index>mat->SpecularIndex) 
	move.l	a3,a0
	fcmp.s	$4C(a0),fp0
	fbole.b	L327
L326
;            index = mat->SpecularIndex;
	move.l	a3,a0
	fmove.s	$4C(a0),fp0
L327
;      indexResult[j] = (GLuint) (GLint) index;
	fmove.l	fp0,d0
	move.l	$1C(a5),a1
	move.l	d0,0(a1,d2.l*4)
	addq.l	#1,d2
L328
	cmp.l	d5,d2
	blo	L292
L329
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d5/a2-a4
	unlk	a5
	rts

	END
