
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/alphabuf.c
	mc68030
	mc68881
	XREF	_gl_error
	XREF	_q_memset
	XREF	_malloc
	XREF	_free
	XREF	_CC

	SECTION "_gl_alloc_alpha_buffers:0",CODE


;void gl_alloc_alpha_buffers( GLcontext* ctx )
	XDEF	_gl_alloc_alpha_buffers
_gl_alloc_alpha_buffers
	movem.l	d2/a2,-(a7)
	move.l	$C(a7),a2
L69
;   GLint bytes = ctx->Buffer->Width * ctx->Buffer->Height * sizeo
	move.l	$8FC(a2),a0
	move.l	4(a0),d2
	move.l	$8FC(a2),a0
	muls.l	$8(a0),d2
;   if (ctx->Visual->FrontAlphaEnabled) 
	move.l	$8F8(a2),a0
	tst.b	$24(a0)
	beq.b	L74
L70
;      if (ctx->Buffer->FrontAlpha) 
	move.l	$8FC(a2),a0
	tst.l	$18(a0)
	beq.b	L72
L71
;         free( ctx->Buffer->FrontAlpha );
	move.l	$8FC(a2),a0
	move.l	$18(a0),-(a7)
	jsr	_free
	addq.w	#4,a7
L72
;      ctx->Buffer->FrontAlpha = (GLubyte *) malloc( bytes );
	move.l	d2,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	$8FC(a2),a0
	move.l	d0,$18(a0)
;      if (!ctx->Buffer->FrontAlpha) 
	move.l	$8FC(a2),a0
	tst.l	$18(a0)
	bne.b	L74
L73
;         gl_error( ctx, GL_OUT_OF_MEMORY, "Couldn't allocat
	move.l	#L67,-(a7)
	pea	$505.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
L74
;   if (ctx->Visual->BackAlphaEnabled) 
	move.l	$8F8(a2),a0
	tst.b	$25(a0)
	beq.b	L79
L75
;      if (ctx->Buffer->BackAlpha) 
	move.l	$8FC(a2),a0
	tst.l	$1C(a0)
	beq.b	L77
L76
;         free( ctx->Buffer->BackAlpha );
	move.l	$8FC(a2),a0
	move.l	$1C(a0),-(a7)
	jsr	_free
	addq.w	#4,a7
L77
;      ctx->Buffer->BackAlpha = (GLubyte *) malloc( bytes );
	move.l	d2,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	$8FC(a2),a0
	move.l	d0,$1C(a0)
;      if (!ctx->Buffer->BackAlpha) 
	move.l	$8FC(a2),a0
	tst.l	$1C(a0)
	bne.b	L79
L78
;         gl_error( ctx, GL_OUT_OF_MEMORY, "Couldn't allocat
	move.l	#L68,-(a7)
	pea	$505.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
L79
;   if (ctx->Color.DrawBuffer==GL_FRONT) 
	move.l	$21E2(a2),d0
	cmp.l	#$404,d0
	bne.b	L81
L80
;      ctx->Buffer->Alpha = ctx->Buffer->FrontAlpha;
	move.l	$8FC(a2),a0
	move.l	$18(a0),a1
	move.l	$8FC(a2),a0
	move.l	a1,$20(a0)
L81
;   if (ctx->Color.DrawBuffer==GL_BACK) 
	move.l	$21E2(a2),d0
	cmp.l	#$405,d0
	bne.b	L83
L82
;      ctx->Buffer->Alpha = ctx->Buffer->BackAlpha;
	move.l	$8FC(a2),a0
	move.l	$1C(a0),a1
	move.l	$8FC(a2),a0
	move.l	a1,$20(a0)
L83
	movem.l	(a7)+,d2/a2
	rts

L68
	dc.b	'Couldn't allocate back alpha buffer',0
L67
	dc.b	'Couldn't allocate front alpha buffer',0

	SECTION "_gl_clear_alpha_buffers:0",CODE

	rts

;void gl_clear_alpha_buffers( GLcontext* ctx )
	XDEF	_gl_clear_alpha_buffers
_gl_clear_alpha_buffers
	movem.l	d2-d4/a2,-(a7)
	move.l	$14(a7),a2
L84
;   for (buffer=0;
	moveq	#0,d4
	bra	L108
L85
;      GLubyte *abuffer = NULL;
	sub.l	a0,a0
;      if (buffer==0
	tst.l	d4
	bne.b	L91
L86
	move.l	$21E2(a2),d0
	cmp.l	#$404,d0
	beq.b	L88
L87
	move.l	$21E2(a2),d0
	cmp.l	#$408,d0
	bne.b	L91
L88
	move.l	$8F8(a2),a1
	tst.b	$24(a1)
	beq.b	L91
L89
	move.l	$8FC(a2),a1
	tst.l	$18(a1)
	beq.b	L91
L90
;         abuffer = ctx->Buffer->FrontAlpha;
	move.l	$8FC(a2),a0
	move.l	$18(a0),a0
	bra.b	L97
L91
;      else if (buffer==1
	cmp.l	#1,d4
	bne.b	L97
L92
	move.l	$21E2(a2),d0
	cmp.l	#$405,d0
	beq.b	L94
L93
	move.l	$21E2(a2),d0
	cmp.l	#$408,d0
	bne.b	L97
L94
	move.l	$8F8(a2),a1
	tst.b	$25(a1)
	beq.b	L97
L95
	move.l	$8FC(a2),a1
	tst.l	$1C(a1)
	beq.b	L97
L96
;         abuffer = ctx->Buffer->BackAlpha;
	move.l	$8FC(a2),a0
	move.l	$1C(a0),a0
L97
;      if (abuffer) 
	cmp.w	#0,a0
	beq	L107
L98
;         GLubyte aclear = (GLint) (ctx->Color.ClearColor[3]
	lea	$21C8(a2),a1
	fmove.s	$C(a1),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d0
	move.b	d0,d2
;         if (ctx->Scissor.Enabled) 
	move.l	a2,a1
	add.l	#$DE92,a1
	tst.b	(a1)
	beq.b	L106
L99
;            for (j=0;
	moveq	#0,d3
	bra.b	L104
L100
;               GLubyte *aptr = ALPHA_ADDR(ctx->Buffer
	move.l	$8FC(a2),a0
	move.l	$20(a0),a1
	move.l	$8FC(a2),a0
	move.l	$2C(a0),d0
	add.l	d3,d0
	move.l	$8FC(a2),a0
	muls.l	4(a0),d0
	add.l	d0,a1
	move.l	$8FC(a2),a0
	move.l	$24(a0),d0
	lea	0(a1,d0.l),a0
;               for (i=0;
	moveq	#0,d0
	bra.b	L102
L101
;                  *aptr++ = aclear;
	move.b	d2,(a0)+
	addq.l	#1,d0
L102
	move.l	a2,a1
	add.l	#$DE92,a1
	cmp.l	$A(a1),d0
	blt.b	L101
L103
	addq.l	#1,d3
L104
	move.l	a2,a0
	add.l	#$DE92,a0
	cmp.l	$E(a0),d3
	blt.b	L100
L105
	bra.b	L107
L106
;er, aclear, ctx->
	move.l	$8FC(a2),a1
	move.l	4(a1),d0
	move.l	$8FC(a2),a1
	muls.l	$8(a1),d0
	move.l	d0,-(a7)
	moveq	#0,d0
	move.b	d2,d0
	move.l	d0,-(a7)
	move.l	a0,-(a7)
	jsr	_q_memset
	add.w	#$C,a7
L107
	addq.l	#1,d4
L108
	cmp.l	#2,d4
	blt	L85
L109
	movem.l	(a7)+,d2-d4/a2
	rts

	SECTION "_gl_write_alpha_span:0",CODE


;void gl_write_alpha_span( GLcontext* ctx, GLuint n, GLint x, GLint y
	XDEF	_gl_write_alpha_span
_gl_write_alpha_span
	movem.l	d2/d3/a2-a4,-(a7)
	movem.l	$24(a7),d0/a2/a4
	movem.l	$1C(a7),d2/d3
	move.l	$18(a7),a3
L110
;   GLubyte *aptr = ALPHA_ADDR( x, y );
	move.l	a3,a1
	move.l	$8FC(a1),a0
	move.l	$20(a0),a1
	move.l	$8FC(a3),a0
	muls.l	4(a0),d0
	lea	0(a1,d0.l),a0
	add.l	d3,a0
;   if (mask) 
	cmp.w	#0,a4
	beq.b	L117
L111
;      for (i=0;
	moveq	#0,d0
	bra.b	L115
L112
;         if (mask[i]) 
	tst.b	0(a4,d0.l)
	beq.b	L114
L113
;            *aptr = rgba[i][ACOMP];
	lea	0(a2,d0.l*4),a1
	move.b	3(a1),(a0)
L114
;         aptr++;
	addq.w	#1,a0
	addq.l	#1,d0
L115
	cmp.l	d2,d0
	blo.b	L112
L116
	bra.b	L120
L117
;      for (i=0;
	moveq	#0,d0
	bra.b	L119
L118
;         *aptr++ = rgba[i][ACOMP];
	lea	0(a2,d0.l*4),a1
	move.b	3(a1),d1
	move.b	d1,(a0)+
	addq.l	#1,d0
L119
	cmp.l	d2,d0
	blo.b	L118
L120
	movem.l	(a7)+,d2/d3/a2-a4
	rts

	SECTION "_gl_write_mono_alpha_span:0",CODE


;void gl_write_mono_alpha_span( GLcontext* ctx, GLuint n, GLint x, GL
	XDEF	_gl_write_mono_alpha_span
_gl_write_mono_alpha_span
	movem.l	d2-d4/a2/a3,-(a7)
	move.l	$24(a7),d0
	move.l	$1C(a7),d1
	move.b	$28(a7),d2
	move.l	$20(a7),d4
	move.l	$2A(a7),a2
	move.l	$18(a7),a3
L121
;   GLubyte *aptr = ALPHA_ADDR( x, y );
	move.l	a3,a1
	move.l	$8FC(a1),a0
	move.l	$20(a0),a1
	move.l	$8FC(a3),a0
	muls.l	4(a0),d0
	lea	0(a1,d0.l),a0
	add.l	d4,a0
;   if (mask) 
	cmp.w	#0,a2
	beq.b	L128
L122
;      for (i=0;
	moveq	#0,d0
	bra.b	L126
L123
;         if (mask[i]) 
	tst.b	0(a2,d0.l)
	beq.b	L125
L124
;            *aptr = alpha;
	move.b	d2,(a0)
L125
;         aptr++;
	addq.w	#1,a0
	addq.l	#1,d0
L126
	cmp.l	d1,d0
	blo.b	L123
L127
	bra.b	L131
L128
;      for (i=0;
	moveq	#0,d0
	bra.b	L130
L129
;         *aptr++ = alpha;
	move.b	d2,(a0)+
	addq.l	#1,d0
L130
	cmp.l	d1,d0
	blo.b	L129
L131
	movem.l	(a7)+,d2-d4/a2/a3
	rts

	SECTION "_gl_write_alpha_pixels:0",CODE


;void gl_write_alpha_pixels( GLcontext* ctx,
	XDEF	_gl_write_alpha_pixels
_gl_write_alpha_pixels
L143	EQU	-$8
	link	a5,#L143
	movem.l	d2/d3/a2-a4,-(a7)
	move.l	$C(a5),d3
	move.l	$8(a5),a0
	move.l	$18(a5),a4
L132
;   if (mask) 
	tst.l	$1C(a5)
	beq.b	L139
L133
;      for (i=0;
	moveq	#0,d0
	bra.b	L137
L134
;         if (mask[i]) 
	move.l	$1C(a5),a2
	tst.b	0(a2,d0.l)
	beq.b	L136
L135
;            GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
	move.l	$8FC(a0),a1
	move.l	$20(a1),a2
	move.l	$14(a5),a3
	move.l	$8FC(a0),a1
	move.l	0(a3,d0.l*4),d1
	muls.l	4(a1),d1
	add.l	d1,a2
	move.l	$10(a5),a3
	move.l	0(a3,d0.l*4),d1
	add.l	d1,a2
;            *aptr = rgba[i][ACOMP];
	lea	0(a4,d0.l*4),a1
	move.b	3(a1),(a2)
L136
	addq.l	#1,d0
L137
	cmp.l	d3,d0
	blo.b	L134
L138
	bra.b	L142
L139
;      for (i=0;
	moveq	#0,d0
	bra.b	L141
L140
;         GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
	move.l	$8FC(a0),a1
	move.l	$20(a1),a2
	move.l	$14(a5),a3
	move.l	$8FC(a0),a1
	move.l	0(a3,d0.l*4),d1
	muls.l	4(a1),d1
	add.l	d1,a2
	move.l	$10(a5),a3
	move.l	0(a3,d0.l*4),d1
	add.l	d1,a2
;         *aptr = rgba[i][ACOMP];
	lea	0(a4,d0.l*4),a1
	move.b	3(a1),(a2)
	addq.l	#1,d0
L141
	cmp.l	d3,d0
	blo.b	L140
L142
	movem.l	(a7)+,d2/d3/a2-a4
	unlk	a5
	rts

	SECTION "_gl_write_mono_alpha_pixels:0",CODE


;void gl_write_mono_alpha_pixels( GLcontext* ctx,
	XDEF	_gl_write_mono_alpha_pixels
_gl_write_mono_alpha_pixels
L155	EQU	-$8
	link	a5,#L155
	movem.l	d2-d4/a2-a4,-(a7)
	movem.l	$C(a5),d3/a4
	move.b	$18(a5),d4
	move.l	$8(a5),a0
L144
;   if (mask) 
	tst.l	$1A(a5)
	beq.b	L151
L145
;      for (i=0;
	moveq	#0,d0
	bra.b	L149
L146
;         if (mask[i]) 
	move.l	$1A(a5),a2
	tst.b	0(a2,d0.l)
	beq.b	L148
L147
;            GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
	move.l	$8FC(a0),a1
	move.l	$20(a1),a2
	move.l	$14(a5),a3
	move.l	$8FC(a0),a1
	move.l	0(a3,d0.l*4),d1
	muls.l	4(a1),d1
	add.l	d1,a2
	move.l	0(a4,d0.l*4),d1
;            *aptr = alpha;
	move.b	d4,0(a2,d1.l)
L148
	addq.l	#1,d0
L149
	cmp.l	d3,d0
	blo.b	L146
L150
	bra.b	L154
L151
;      for (i=0;
	moveq	#0,d0
	bra.b	L153
L152
;         GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
	move.l	$8FC(a0),a1
	move.l	$20(a1),a2
	move.l	$14(a5),a3
	move.l	$8FC(a0),a1
	move.l	0(a3,d0.l*4),d1
	muls.l	4(a1),d1
	add.l	d1,a2
	move.l	0(a4,d0.l*4),d1
;         *aptr = alpha;
	move.b	d4,0(a2,d1.l)
	addq.l	#1,d0
L153
	cmp.l	d3,d0
	blo.b	L152
L154
	movem.l	(a7)+,d2-d4/a2-a4
	unlk	a5
	rts

	SECTION "_gl_read_alpha_span:0",CODE


;void gl_read_alpha_span( GLcontext *ctx,
	XDEF	_gl_read_alpha_span
_gl_read_alpha_span
	movem.l	d2/d3/a2/a3,-(a7)
	movem.l	$20(a7),d0/a2
	movem.l	$18(a7),d2/d3
	move.l	$14(a7),a3
L156
;   GLubyte *aptr = ALPHA_ADDR( x, y );
	move.l	a3,a1
	move.l	$8FC(a1),a0
	move.l	$20(a0),a1
	move.l	$8FC(a3),a0
	muls.l	4(a0),d0
	lea	0(a1,d0.l),a0
	add.l	d3,a0
;   for (i=0;
	moveq	#0,d0
	bra.b	L158
L157
;      rgba[i][ACOMP] = *aptr++;
	lea	0(a2,d0.l*4),a1
	move.b	(a0)+,3(a1)
	addq.l	#1,d0
L158
	cmp.l	d2,d0
	blo.b	L157
L159
	movem.l	(a7)+,d2/d3/a2/a3
	rts

	SECTION "_gl_read_alpha_pixels:0",CODE


;void gl_read_alpha_pixels( GLcontext *ctx,
	XDEF	_gl_read_alpha_pixels
_gl_read_alpha_pixels
L166	EQU	-$8
	link	a5,#L166
	movem.l	d2/d3/a2-a4,-(a7)
	move.l	$C(a5),d3
	move.l	$8(a5),a2
	move.l	$18(a5),a4
L160
;   for (i=0;
	moveq	#0,d0
	bra.b	L164
L161
;      if (mask[i]) 
	move.l	$1C(a5),a1
	tst.b	0(a1,d0.l)
	beq.b	L163
L162
;         GLubyte *aptr = ALPHA_ADDR( x[i], y[i] );
	move.l	$8FC(a2),a0
	move.l	$20(a0),a1
	move.l	$14(a5),a3
	move.l	$8FC(a2),a0
	move.l	0(a3,d0.l*4),d1
	muls.l	4(a0),d1
	add.l	d1,a1
	move.l	$10(a5),a3
	move.l	0(a3,d0.l*4),d1
;         rgba[i][ACOMP] = *aptr;
	move.b	0(a1,d1.l),d1
	lea	0(a4,d0.l*4),a0
	move.b	d1,3(a0)
L163
	addq.l	#1,d0
L164
	cmp.l	d3,d0
	blo.b	L161
L165
	movem.l	(a7)+,d2/d3/a2-a4
	unlk	a5
	rts

	END
