
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/accum.c
	mc68030
	mc68881
	XREF	_gl_read_rgba_span
	XREF	_gl_mask_rgba_span
	XREF	_gl_update_state
	XREF	_gl_error
	XREF	_gl_warning
	XREF	_q_memset
	XREF	_malloc
	XREF	_free
	XREF	_CC

	SECTION "_gl_alloc_accum_buffer:0",CODE


;void gl_alloc_accum_buffer( GLcontext *ctx )
	XDEF	_gl_alloc_accum_buffer
_gl_alloc_accum_buffer
	move.l	a2,-(a7)
	move.l	$8(a7),a2
L72
;   if (ctx->Buffer->Accum) 
	move.l	$8FC(a2),a0
	tst.l	$14(a0)
	beq.b	L74
L73
;      free( ctx->Buffer->Accum );
	move.l	$8FC(a2),a0
	move.l	$14(a0),-(a7)
	jsr	_free
	addq.w	#4,a7
;      ctx->Buffer->Accum = NULL;
	move.l	$8FC(a2),a0
	clr.l	$14(a0)
L74
;   n = ctx->Buffer->Width * ctx->Buffer->Height * 4 * sizeof(GLac
	move.l	$8FC(a2),a0
	move.l	4(a0),d0
	move.l	$8FC(a2),a0
	muls.l	$8(a0),d0
	moveq	#2,d1
	asl.l	d1,d0
	moveq	#1,d1
	asl.l	d1,d0
;   ctx->Buffer->Accum = (GLaccum *) malloc( n );
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	$8FC(a2),a0
	move.l	d0,$14(a0)
;   if (!ctx->Buffer->Accum) 
	move.l	$8FC(a2),a0
	tst.l	$14(a0)
	bne.b	L76
L75
;      gl_error( ctx, GL_OUT_OF_MEMORY, "glAccum" );
	move.l	#L71,-(a7)
	pea	$505.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
L76
	move.l	(a7)+,a2
	rts

L71
	dc.b	'glAccum',0

	SECTION "_gl_ClearAccum:0",CODE

	rts

;void gl_ClearAccum( GLcontext *ctx,
	XDEF	_gl_ClearAccum
_gl_ClearAccum
	fmovem.x fp2/fp3/fp4,-(a7)
	move.l	$28(a7),a0
	fmove.s	$2C(a7),fp0
	fmove.s	$38(a7),fp1
	fmove.s	$34(a7),fp2
	fmove.s	$30(a7),fp3
L78
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a0,a1
	add.l	#$E968,a1
	move.l	(a1),d0
	cmp.l	#$1A00,d0
	beq.b	L80
L79
;      gl_error( ctx, GL_INVALID_OPERATION, "glAccum" );
	move.l	#L77,-(a7)
	pea	$502.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2/fp3/fp4
	rts
L80
;   ctx->Accum.ClearColor[0] = CLAMP( red, -1.0, 1.0 );
	fmove.x	fp0,fp4
	fcmp.d	#$.BFF00000.00000000,fp4
	fboge.b	L82
L81
	fmove.d	#$.BFF00000.00000000,fp0
	bra.b	L86
L82
	fmove.x	fp0,fp4
	fcmp.d	#$.3FF00000.00000000,fp4
	fbole.b	L84
L83
	fmove.d	#$.3FF00000.00000000,fp0
L84
L85
L86
	fmove.s	fp0,$21B4(a0)
;   ctx->Accum.ClearColor[1] = CLAMP( green, -1.0, 1.0 );
	fmove.x	fp3,fp0
	fcmp.d	#$.BFF00000.00000000,fp0
	fboge.b	L88
L87
	fmove.d	#$.BFF00000.00000000,fp0
	bra.b	L92
L88
	fmove.x	fp3,fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbole.b	L90
L89
	fmove.d	#$.3FF00000.00000000,fp0
	bra.b	L91
L90
	fmove.x	fp3,fp0
L91
L92
	lea	$21B4(a0),a1
	fmove.s	fp0,4(a1)
;   ctx->Accum.ClearColor[2] = CLAMP( blue, -1.0, 1.0 );
	fmove.x	fp2,fp0
	fcmp.d	#$.BFF00000.00000000,fp0
	fboge.b	L94
L93
	fmove.d	#$.BFF00000.00000000,fp0
	bra.b	L98
L94
	fmove.x	fp2,fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbole.b	L96
L95
	fmove.d	#$.3FF00000.00000000,fp0
	bra.b	L97
L96
	fmove.x	fp2,fp0
L97
L98
	lea	$21B4(a0),a1
	fmove.s	fp0,$8(a1)
;   ctx->Accum.ClearColor[3] = CLAMP( alpha, -1.0, 1.0 );
	fmove.x	fp1,fp0
	fcmp.d	#$.BFF00000.00000000,fp0
	fboge.b	L100
L99
	fmove.d	#$.BFF00000.00000000,fp0
	bra.b	L104
L100
	fmove.x	fp1,fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fbole.b	L102
L101
	fmove.d	#$.3FF00000.00000000,fp0
	bra.b	L103
L102
	fmove.x	fp1,fp0
L103
L104
	lea	$21B4(a0),a0
	fmove.s	fp0,$C(a0)
	fmovem.x (a7)+,fp2/fp3/fp4
	rts

L77
	dc.b	'glAccum',0

	SECTION "_gl_Accum:0",CODE


;void gl_Accum( GLcontext *ctx, GLenum op, GLfloat value )
	XDEF	_gl_Accum
_gl_Accum
L181	EQU	-$3278
	link	a5,#L181
	movem.l	d2-d7/a2,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6,-(a7)
	move.l	$C(a5),d3
	move.l	$8(a5),a2
	fmove.s	$10(a5),fp2
L107
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L109
L108
;      gl_error( ctx, GL_INVALID_OPERATION, "glAccum" );
	move.l	#L105,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
	movem.l	(a7)+,d2-d7/a2
	unlk	a5
	rts
L109
;   if (ctx->Visual->AccumBits==0 || !ctx->Buffer->Accum) 
	move.l	$8F8(a2),a0
	tst.l	$18(a0)
	beq.b	L111
L110
	move.l	$8FC(a2),a0
	tst.l	$14(a0)
	bne.b	L112
L111
;      gl_warning(ctx, "Calling glAccum() without an accumulati
	move.l	#L106,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_warning
	addq.w	#$8,a7
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
	movem.l	(a7)+,d2-d7/a2
	unlk	a5
	rts
L112
;   if (sizeof(GLaccum)==1) 
;   else if (sizeof(GLaccum)==2) 
;      acc_scale = 32767.0;
	fmove.s	#$.46FFFE00,fp6
;   if (ctx->NewState)
	move.l	a2,a0
	add.l	#$E960,a0
	tst.l	(a0)
	beq.b	L114
L113
;      gl_update_state( ctx );
	move.l	a2,-(a7)
	jsr	_gl_update_state
	addq.w	#4,a7
L114
;   if (ctx->Scissor.Enabled) 
	move.l	a2,a0
	add.l	#$DE92,a0
	tst.b	(a0)
	beq.b	L116
L115
;      xpos = ctx->Scissor.X;
	move.l	a2,a0
	add.l	#$DE92,a0
	move.l	2(a0),d7
;      ypos = ctx->Scissor.Y;
	move.l	a2,a0
	add.l	#$DE92,a0
	move.l	6(a0),d6
;      width = ctx->Scissor.Width;
	move.l	a2,a0
	add.l	#$DE92,a0
	move.l	$A(a0),d2
;      height = ctx->Scissor.Height;
	move.l	a2,a0
	add.l	#$DE92,a0
	move.l	$E(a0),-$10(a5)
	bra.b	L117
L116
;      xpos = 0;
	moveq	#0,d7
;      ypos = 0;
	moveq	#0,d6
;      width = ctx->Buffer->Width;
	move.l	$8FC(a2),a0
	move.l	4(a0),d2
;      height = ctx->Buffer->Height;
	move.l	$8FC(a2),a0
	move.l	$8(a0),-$10(a5)
L117
;   switch (op)
	cmp.l	#$102,d3
	beq	L146
	bgt.b	L182
	cmp.l	#$100,d3
	beq	L132
	cmp.l	#$101,d3
	beq	L139
	bra	L179
L182
	cmp.l	#$103,d3
	beq.b	L125
	cmp.l	#$104,d3
	beq.b	L118
	bra	L179
;      
L118
;	    ival = (GLaccum) (value * acc_scale);
	fmul.x	fp6,fp2
	fmove.l	fp2,d0
;	    for (j=0;
	moveq	#0,d4
	bra.b	L123
L119
;	       acc = ctx->Buffer->Accum
	move.l	$8FC(a2),a0
	move.l	$14(a0),a1
	move.l	$8FC(a2),a0
	move.l	4(a0),d1
	mulu.l	d6,d1
	add.l	d7,d1
	moveq	#2,d3
	asl.l	d3,d1
	lea	0(a1,d1.l*2),a0
;	       for (i=0;
	moveq	#0,d3
	bra.b	L121
L120
;		  *acc += ival;
	add.w	d0,(a0)
;   acc++;
	addq.w	#2,a0
;		  *acc += ival;
	add.w	d0,(a0)
;   acc++;
	addq.w	#2,a0
;		  *acc += ival;
	add.w	d0,(a0)
;   acc++;
	addq.w	#2,a0
;		  *acc += ival;
	add.w	d0,(a0)
;   acc++;
	addq.w	#2,a0
	addq.l	#1,d3
L121
	cmp.l	d2,d3
	blo.b	L120
L122
;	       ypos++;
	move.l	d6,d1
	addq.l	#1,d1
	move.l	d1,d6
	addq.l	#1,d4
L123
	cmp.l	-$10(a5),d4
	blo.b	L119
L124
;	 
	bra	L180
L125
;	    for (j=0;
	moveq	#0,d3
	bra	L130
L126
;	       acc = ctx->Buffer->Accum
	move.l	$8FC(a2),a0
	move.l	$14(a0),a1
	move.l	$8FC(a2),a0
	move.l	4(a0),d0
	mulu.l	d6,d0
	add.l	d7,d0
	moveq	#2,d1
	asl.l	d1,d0
	lea	0(a1,d0.l*2),a0
;	       for (i=0;
	moveq	#0,d0
	bra.b	L128
L127
;		  *acc = (GLaccum) ( (GLfloat) *acc * value );
	move.w	(a0),d1
	ext.l	d1
	fmove.l	d1,fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)
;    acc++;
	addq.w	#2,a0
;		  *acc = (GLaccum) ( (GLfloat) *acc * value );
	move.w	(a0),d1
	ext.l	d1
	fmove.l	d1,fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)
;    acc++;
	addq.w	#2,a0
;		  *acc = (GLaccum) ( (GLfloat) *acc * value );
	move.w	(a0),d1
	ext.l	d1
	fmove.l	d1,fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)
;    acc++;
	addq.w	#2,a0
;		  *acc = (GLaccum) ( (GLfloat) *acc * value );
	move.w	(a0),d1
	ext.l	d1
	fmove.l	d1,fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)
;    acc++;
	addq.w	#2,a0
	addq.l	#1,d0
L128
	cmp.l	d2,d0
	blo.b	L127
L129
;	       ypos++;
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
	addq.l	#1,d3
L130
	cmp.l	-$10(a5),d3
	blo	L126
L131
;	 
	bra	L180
L132
;	    (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Pixel.ReadBuffe
	move.l	a2,a0
	add.l	#$B168,a0
	move.l	(a0),-(a7)
	move.l	a2,-(a7)
	move.l	$91C(a2),a0
	jsr	(a0)
	addq.w	#$8,a7
;	    rscale = value * acc_scale / 255.0;
	fmove.x	fp2,fp0
	fmul.x	fp6,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	fmove.x	fp0,fp5
;	    gscale = value * acc_scale / 255.0;
	fmove.x	fp2,fp0
	fmul.x	fp6,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	fmove.x	fp0,fp4
;	    bscale = value * acc_scale / 255.0;
	fmove.x	fp2,fp0
	fmul.x	fp6,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	fmove.x	fp0,fp3
;	    ascale = value * acc_scale / 255.0;
	fmul.x	fp6,fp2
	fmove.x	fp2,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	fmove.x	fp0,fp2
;	    for (j=0;
	moveq	#0,d4
	bra	L137
L133
;	       gl_read_rgba_span(ctx, width, xpos, ypos, rgba);
	pea	-$1926(a5)
	move.l	d6,-(a7)
	move.l	d7,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_read_rgba_span
	add.w	#$14,a7
;	       acc = ctx->Buffer->Accum
	move.l	$8FC(a2),a0
	move.l	$14(a0),a1
	move.l	$8FC(a2),a0
	move.l	4(a0),d0
	mulu.l	d6,d0
	add.l	d7,d0
	moveq	#2,d1
	asl.l	d1,d0
	lea	0(a1,d0.l*2),a0
;	       for (i=0;
	moveq	#0,d0
	bra	L135
L134
;		  *acc += (GLaccum) ( (GLfloat) rgba[i][RCOMP] * rscale );
	lea	-$1926(a5),a1
	moveq	#0,d1
	move.b	0(a1,d0.l*4),d1
	fmove.l	d1,fp0
	fmul.x	fp5,fp0
	fmove.l	fp0,d1
	move.w	d1,d3
	add.w	d3,(a0)
;  acc++;
	addq.w	#2,a0
;		  *acc += (GLaccum) ( (GLfloat) rgba[i][GCOMP] * gscale );
	lea	-$1926(a5),a1
	lea	0(a1,d0.l*4),a1
	moveq	#0,d1
	move.b	1(a1),d1
	fmove.l	d1,fp0
	fmul.x	fp4,fp0
	fmove.l	fp0,d1
	move.w	d1,d3
	add.w	d3,(a0)
;  acc++;
	addq.w	#2,a0
;		  *acc += (GLaccum) ( (GLfloat) rgba[i][BCOMP] * bscale );
	lea	-$1926(a5),a1
	lea	0(a1,d0.l*4),a1
	moveq	#0,d1
	move.b	2(a1),d1
	fmove.l	d1,fp0
	fmul.x	fp3,fp0
	fmove.l	fp0,d1
	move.w	d1,d3
	add.w	d3,(a0)
;  acc++;
	addq.w	#2,a0
;		  *acc += (GLaccum) ( (GLfloat) rgba[i][ACOMP] * ascale );
	lea	-$1926(a5),a1
	lea	0(a1,d0.l*4),a1
	moveq	#0,d1
	move.b	3(a1),d1
	fmove.l	d1,fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d1
	move.w	d1,d3
	add.w	d3,(a0)
;  acc++;
	addq.w	#2,a0
	addq.l	#1,d0
L135
	cmp.l	d2,d0
	blo	L134
L136
;	       ypos++;
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
	addq.l	#1,d4
L137
	cmp.l	-$10(a5),d4
	blo	L133
L138
;	    (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Color.DrawBuffe
	move.l	$21E2(a2),-(a7)
	move.l	a2,-(a7)
	move.l	$91C(a2),a0
	jsr	(a0)
	addq.w	#$8,a7
;	 
	bra	L180
L139
;	    (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Pixel.ReadBuffe
	move.l	a2,a0
	add.l	#$B168,a0
	move.l	(a0),-(a7)
	move.l	a2,-(a7)
	move.l	$91C(a2),a0
	jsr	(a0)
	addq.w	#$8,a7
;	    rscale = value * acc_scale / 255.0;
	fmove.x	fp2,fp0
	fmul.x	fp6,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	fmove.x	fp0,fp5
;	    gscale = value * acc_scale / 255.0;
	fmove.x	fp2,fp0
	fmul.x	fp6,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	fmove.x	fp0,fp4
;	    bscale = value * acc_scale / 255.0;
	fmove.x	fp2,fp0
	fmul.x	fp6,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	fmove.x	fp0,fp3
;	    ascale = value * acc_scale / 255.0;
	fmul.x	fp6,fp2
	fmove.x	fp2,fp0
	fdiv.d	#$.406FE000.00000000,fp0
	fmove.x	fp0,fp2
;	    for (j=0;
	moveq	#0,d3
	bra	L144
L140
;	       gl_read_rgba_span(ctx, width, xpos, ypos, rgba);
	pea	-$1926(a5)
	move.l	d6,-(a7)
	move.l	d7,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_read_rgba_span
	add.w	#$14,a7
;	       acc = ctx->Buffer->Accum
	move.l	$8FC(a2),a0
	move.l	$14(a0),a1
	move.l	$8FC(a2),a0
	move.l	4(a0),d0
	mulu.l	d6,d0
	add.l	d7,d0
	moveq	#2,d1
	asl.l	d1,d0
	lea	0(a1,d0.l*2),a0
;	       for (i=0;
	moveq	#0,d0
	bra.b	L142
L141
;		  *acc++ = (GLaccum) ( (GLfloat) rgba[i][RCOMP] * rscale );
	lea	-$1926(a5),a1
	moveq	#0,d1
	move.b	0(a1,d0.l*4),d1
	fmove.l	d1,fp0
	fmul.x	fp5,fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)+
;		  *acc++ = (GLaccum) ( (GLfloat) rgba[i][GCOMP] * gscale );
	lea	-$1926(a5),a1
	lea	0(a1,d0.l*4),a1
	moveq	#0,d1
	move.b	1(a1),d1
	fmove.l	d1,fp0
	fmul.x	fp4,fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)+
;		  *acc++ = (GLaccum) ( (GLfloat) rgba[i][BCOMP] * bscale );
	lea	-$1926(a5),a1
	lea	0(a1,d0.l*4),a1
	moveq	#0,d1
	move.b	2(a1),d1
	fmove.l	d1,fp0
	fmul.x	fp3,fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)+
;		  *acc++ = (GLaccum) ( (GLfloat) rgba[i][ACOMP] * ascale );
	lea	-$1926(a5),a1
	lea	0(a1,d0.l*4),a1
	moveq	#0,d1
	move.b	3(a1),d1
	fmove.l	d1,fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)+
	addq.l	#1,d0
L142
	cmp.l	d2,d0
	blo.b	L141
L143
;	       ypos++;
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
	addq.l	#1,d3
L144
	cmp.l	-$10(a5),d3
	blo	L140
L145
;	    (void) (*ctx->Driver.SetBuffer)( ctx, ctx->Color.DrawBuffe
	move.l	$21E2(a2),-(a7)
	move.l	a2,-(a7)
	move.l	$91C(a2),a0
	jsr	(a0)
	addq.w	#$8,a7
;	 
	bra	L180
L146
;	    rscale = value / acc_scale * 255.0F;
	fmove.x	fp2,fp5
	fdiv.x	fp6,fp5
	fmul.s	#$.437F0000,fp5
;	    gscale = value / acc_scale * 255.0F;
	fmove.x	fp2,fp4
	fdiv.x	fp6,fp4
	fmul.s	#$.437F0000,fp4
;	    bscale = value / acc_scale * 255.0F;
	fmove.x	fp2,fp3
	fdiv.x	fp6,fp3
	fmul.s	#$.437F0000,fp3
;	    ascale = value / acc_scale * 255.0F;
	fdiv.x	fp6,fp2
	fmul.s	#$.437F0000,fp2
;	    for (j=0;
	clr.l	-$325A(a5)
	bra	L177
L147
;	       acc = ctx->Buffer->Accum
	move.l	$8FC(a2),a0
	move.l	$14(a0),a1
	move.l	$8FC(a2),a0
	move.l	4(a0),d0
	mulu.l	d6,d0
	add.l	d7,d0
	moveq	#2,d1
	asl.l	d1,d0
	lea	0(a1,d0.l*2),a0
;	       for (i=0;
	moveq	#0,d0
	bra	L173
L148
;		  r = (GLint) ( (GLfloat) (*acc++) * rscale + 0.5F );
	move.w	(a0)+,d1
	ext.l	d1
	fmove.l	d1,fp0
	fmul.x	fp5,fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d5
;		  g = (GLint) ( (GLfloat) (*acc++) * gscale + 0.5F );
	move.w	(a0)+,d1
	ext.l	d1
	fmove.l	d1,fp0
	fmul.x	fp4,fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d4
;		  b = (GLint) ( (GLfloat) (*acc++) * bscale + 0.5F );
	move.w	(a0)+,d1
	ext.l	d1
	fmove.l	d1,fp0
	fmul.x	fp3,fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d3
;		  a = (GLint) ( (GLfloat) (*acc++) * ascale + 0.5F );
	move.w	(a0)+,d1
	ext.l	d1
	fmove.l	d1,fp0
	fmul.x	fp2,fp0
	fadd.s	#$.3F000000,fp0
	fmove.l	fp0,d1
;		  rgba[i][RCOMP] = CLAMP( r, 0, 255 );
	tst.l	d5
	bpl.b	L150
L149
	moveq	#0,d5
	bra.b	L154
L150
	cmp.l	#$FF,d5
	ble.b	L152
L151
	move.l	#$FF,d5
L152
L153
L154
	lea	-$323E(a5),a1
	move.b	d5,0(a1,d0.l*4)
;		  rgba[i][GCOMP] = CLAMP( g, 0, 255 );
	tst.l	d4
	bpl.b	L156
L155
	moveq	#0,d4
	bra.b	L160
L156
	cmp.l	#$FF,d4
	ble.b	L158
L157
	move.l	#$FF,d4
L158
L159
L160
	lea	-$323E(a5),a1
	lea	0(a1,d0.l*4),a1
	move.b	d4,1(a1)
;		  rgba[i][BCOMP] = CLAMP( b, 0, 255 );
	tst.l	d3
	bpl.b	L162
L161
	moveq	#0,d3
	bra.b	L166
L162
	cmp.l	#$FF,d3
	ble.b	L164
L163
	move.l	#$FF,d3
L164
L165
L166
	lea	-$323E(a5),a1
	lea	0(a1,d0.l*4),a1
	move.b	d3,2(a1)
;		  rgba[i][ACOMP] = CLAMP( a, 0, 255 );
	tst.l	d1
	bpl.b	L168
L167
	moveq	#0,d1
	bra.b	L172
L168
	cmp.l	#$FF,d1
	ble.b	L170
L169
	move.l	#$FF,d1
L170
L171
L172
	lea	-$323E(a5),a1
	lea	0(a1,d0.l*4),a1
	move.b	d1,3(a1)
	addq.l	#1,d0
L173
	cmp.l	d2,d0
	blo	L148
L174
;	       if (ctx->Color.SWmasking) 
	tst.b	$21E0(a2)
	beq.b	L176
L175
;		  gl_mask_rgba_span( ctx, width, xpos, ypos, rgba );
	pea	-$323E(a5)
	move.l	d6,-(a7)
	move.l	d7,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	jsr	_gl_mask_rgba_span
	add.w	#$14,a7
L176
;	       (*ctx->Driver.WriteRGBASpan)( ctx, width, xpos, ypos
	clr.l	-(a7)
	pea	-$323E(a5)
	move.l	d6,-(a7)
	move.l	d7,-(a7)
	move.l	d2,-(a7)
	move.l	a2,-(a7)
	move.l	$924(a2),a0
	jsr	(a0)
	add.w	#$18,a7
;	       ypos++;
	move.l	d6,d0
	addq.l	#1,d0
	move.l	d0,d6
	addq.l	#1,-$325A(a5)
L177
	move.l	-$325A(a5),d0
	cmp.l	-$10(a5),d0
	blo	L147
L178
;	 
	bra.b	L180
L179
;	 gl_error( ctx, GL_INVALID_ENUM, "glAccum" );
	move.l	#L105,-(a7)
	pea	$500.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
L180
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6
	movem.l	(a7)+,d2-d7/a2
	unlk	a5
	rts

L106
	dc.b	'Calling glAccum() without an accumulation buffer',0
L105
	dc.b	'glAccum',0

	SECTION "_gl_clear_accum_buffer:0",CODE


;void gl_clear_accum_buffer( GLcontext *ctx )
	XDEF	_gl_clear_accum_buffer
_gl_clear_accum_buffer
L205	EQU	-$40
	link	a5,#L205
	movem.l	d2-d7/a2,-(a7)
	fmovem.x fp2,-(a7)
	move.l	$8(a5),a2
L183
;   if (ctx->Visual->AccumBits==0) 
	move.l	$8F8(a2),a0
	tst.l	$18(a0)
	bne.b	L185
L184
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2
	unlk	a5
	rts
L185
;   if (sizeof(GLaccum)==1) 
;   else if (sizeof(GLaccum)==2) 
;      acc_scale = 32767.0;
	fmove.s	#$.46FFFE00,fp2
;   buffersize = ctx->Buffer->Width * ctx->Buffer->Height;
	move.l	$8FC(a2),a0
	move.l	4(a0),d2
	move.l	$8FC(a2),a0
	muls.l	$8(a0),d2
;   if (!ctx->Buffer->Accum) 
	move.l	$8FC(a2),a0
	tst.l	$14(a0)
	bne.b	L187
L186
;      ctx->Buffer->Accum = (GLaccum *)
	move.l	d2,d0
	moveq	#2,d1
	asl.l	d1,d0
	moveq	#1,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	$8FC(a2),a0
	move.l	d0,$14(a0)
L187
;   if (ctx->Buffer->Accum) 
	move.l	$8FC(a2),a0
	tst.l	$14(a0)
	beq	L204
L188
;      if (ctx->Scissor.Enabled) 
	move.l	a2,a0
	add.l	#$DE92,a0
	tst.b	(a0)
	beq	L196
L189
;	 r = (GLaccum) (ctx->Accum.ClearColor[0] * acc_scale);
	fmove.s	$21B4(a2),fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d0
	move.w	d0,d5
;	 g = (GLaccum) (ctx->Accum.ClearColor[1] * acc_scale);
	lea	$21B4(a2),a0
	fmove.s	4(a0),fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d0
	move.w	d0,d4
;	 b = (GLaccum) (ctx->Accum.ClearColor[2] * acc_scale);
	lea	$21B4(a2),a0
	fmove.s	$8(a0),fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d0
	move.w	d0,d3
;	 a = (GLaccum) (ctx->Accum.ClearColor[3] * acc_scale);
	lea	$21B4(a2),a0
	fmove.s	$C(a0),fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d0
	move.w	d0,d2
;	 width = 4 * (ctx->Buffer->Xmax - ctx->Buffer->Xmin + 1);
	move.l	$8FC(a2),a0
	move.l	$28(a0),d0
	move.l	$8FC(a2),a0
	sub.l	$24(a0),d0
	addq.l	#1,d0
	move.l	d0,d1
	moveq	#2,d0
	asl.l	d0,d1
;	 height = ctx->Buffer->Ymax - ctx->Buffer->Ymin + 1;
	move.l	$8FC(a2),a0
	move.l	$30(a0),-$20(a5)
	move.l	$8FC(a2),a0
	move.l	-$20(a5),d0
	sub.l	$2C(a0),d0
	move.l	d0,-$20(a5)
	addq.l	#1,-$20(a5)
;	 row = ctx->Buffer->Accum
	move.l	$8FC(a2),a0
	move.l	$14(a0),a1
	move.l	$8FC(a2),a0
	move.l	$2C(a0),d0
	move.l	$8FC(a2),a0
	muls.l	4(a0),d0
	move.l	$8FC(a2),a0
	add.l	$24(a0),d0
	moveq	#2,d6
	asl.l	d6,d0
	lea	0(a1,d0.l*2),a0
;	 for (j=0;
	moveq	#0,d7
	bra.b	L194
L190
;	    for (i=0;
	moveq	#0,d0
	bra.b	L192
L191
;	       row[i+0] = r;
	move.w	d5,0(a0,d0.l*2)
;	       row[i+1] = g;
	lea	2(a0),a1
	move.w	d4,0(a1,d0.l*2)
;	       row[i+2] = b;
	lea	4(a0),a1
	move.w	d3,0(a1,d0.l*2)
;	       row[i+3] = a;
	lea	6(a0),a1
	move.w	d2,0(a1,d0.l*2)
	addq.l	#4,d0
L192
	cmp.l	d1,d0
	blt.b	L191
L193
;	    row += 4 * ctx->Buffer->Width;
	move.l	$8FC(a2),a1
	move.l	4(a1),d0
	moveq	#2,d6
	asl.l	d6,d0
	moveq	#1,d6
	asl.l	d6,d0
	add.l	d0,a0
	move.l	d7,d0
	addq.l	#1,d0
	move.l	d0,d7
L194
	move.l	d7,d0
	cmp.l	-$20(a5),d0
	blt.b	L190
L195
	bra	L204
L196
;	 if (ctx->Accum.ClearColor[0]==0.0 &&
	fmove.s	$21B4(a2),fp0
	ftst.d	fp0
	fbne.b	L201
L197
	lea	$21B4(a2),a0
	fmove.s	4(a0),fp0
	ftst.d	fp0
	fbne.b	L201
L198
	lea	$21B4(a2),a0
	fmove.s	$8(a0),fp0
	ftst.d	fp0
	fbne.b	L201
L199
	lea	$21B4(a2),a0
	fmove.s	$C(a0),fp0
	ftst.d	fp0
	fbne.b	L201
L200
;Buffer->Accum, 0,
	moveq	#2,d0
	asl.l	d0,d2
	moveq	#1,d0
	asl.l	d0,d2
	move.l	d2,-(a7)
	clr.l	-(a7)
	move.l	$8FC(a2),a0
	move.l	$14(a0),-(a7)
	jsr	_q_memset
	add.w	#$C,a7
	bra.b	L204
L201
;	    acc = ctx->Buffer->Accum;
	move.l	$8FC(a2),a0
	move.l	$14(a0),a0
;	    r = (GLaccum) (ctx->Accum.ClearColor[0] * acc_scale);
	fmove.s	$21B4(a2),fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d0
	move.w	d0,d5
;	    g = (GLaccum) (ctx->Accum.ClearColor[1] * acc_scale);
	lea	$21B4(a2),a1
	fmove.s	4(a1),fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d0
	move.w	d0,d4
;	    b = (GLaccum) (ctx->Accum.ClearColor[2] * acc_scale);
	lea	$21B4(a2),a1
	fmove.s	$8(a1),fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d0
	move.w	d0,d3
;	    a = (GLaccum) (ctx->Accum.ClearColor[3] * acc_scale);
	lea	$21B4(a2),a1
	fmove.s	$C(a1),fp0
	fmul.x	fp2,fp0
	fmove.l	fp0,d0
	move.w	d0,d1
;	    for (i=0;
	moveq	#0,d0
	bra.b	L203
L202
;	       *acc++ = r;
	move.w	d5,(a0)+
;	       *acc++ = g;
	move.w	d4,(a0)+
;	       *acc++ = b;
	move.w	d3,(a0)+
;	       *acc++ = a;
	move.w	d1,(a0)+
	addq.l	#1,d0
L203
	cmp.l	d2,d0
	blo.b	L202
L204
	fmovem.x (a7)+,fp2
	movem.l	(a7)+,d2-d7/a2
	unlk	a5
	rts

	END
