
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/masking.c
	mc68030
	mc68881
	XREF	_gl_read_index_span
	XREF	_gl_read_rgba_span
	XREF	_gl_error
	XREF	_CC

	SECTION "_gl_IndexMask:0",CODE


;void gl_IndexMask( GLcontext *ctx, GLuint mask )
	XDEF	_gl_IndexMask
_gl_IndexMask
	move.l	$8(a7),d1
	move.l	4(a7),a0
L16
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a0,a1
	add.l	#$E968,a1
	move.l	(a1),d0
	cmp.l	#$1A00,d0
	beq.b	L18
L17
;      gl_error( ctx, GL_INVALID_OPERATION, "glIndexMask" );
	move.l	#L15,-(a7)
	pea	$502.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	rts
L18
;   ctx->Color.IndexMask = mask;
	move.l	d1,$21D8(a0)
;   ctx->NewState |= NEW_RASTER_OPS;
	move.l	a0,a1
	add.l	#$E960,a1
	move.l	(a1),d0
	or.l	#2,d0
	add.l	#$E960,a0
	move.l	d0,(a0)
	rts

L15
	dc.b	'glIndexMask',0

	SECTION "_gl_ColorMask:0",CODE

	rts

;void gl_ColorMask( GLcontext *ctx, GLboolean red, GLboolean green,
	XDEF	_gl_ColorMask
_gl_ColorMask
	movem.l	d2-d4,-(a7)
	move.b	$1A(a7),d1
	move.b	$18(a7),d2
	move.b	$16(a7),d3
	move.b	$14(a7),d4
	move.l	$10(a7),a0
L20
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a0,a1
	add.l	#$E968,a1
	move.l	(a1),d0
	cmp.l	#$1A00,d0
	beq.b	L22
L21
;      gl_error( ctx, GL_INVALID_OPERATION, "glColorMask" );
	move.l	#L19,-(a7)
	pea	$502.w
	move.l	a0,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	movem.l	(a7)+,d2-d4
	rts
L22
;   ctx->Color.ColorMask[RCOMP] = red    ? 0xff : 0x0;
	tst.b	d4
	beq.b	L24
L23
	move.l	#$FF,d0
	bra.b	L25
L24
	moveq	#0,d0
L25
	move.b	d0,$21DC(a0)
;   ctx->Color.ColorMask[GCOMP] = green  ? 0xff : 0x0;
	tst.b	d3
	beq.b	L27
L26
	move.l	#$FF,d0
	bra.b	L28
L27
	moveq	#0,d0
L28
	lea	$21DC(a0),a1
	move.b	d0,1(a1)
;   ctx->Color.ColorMask[BCOMP] = blue   ? 0xff : 0x0;
	tst.b	d2
	beq.b	L30
L29
	move.l	#$FF,d0
	bra.b	L31
L30
	moveq	#0,d0
L31
	lea	$21DC(a0),a1
	move.b	d0,2(a1)
;   ctx->Color.ColorMask[ACOMP] = alpha  ? 0xff : 0x0;
	tst.b	d1
	beq.b	L33
L32
	move.l	#$FF,d0
	bra.b	L34
L33
	moveq	#0,d0
L34
	lea	$21DC(a0),a1
	move.b	d0,3(a1)
;   ctx->NewState |= NEW_RASTER_OPS;
	move.l	a0,a1
	add.l	#$E960,a1
	move.l	(a1),d0
	or.l	#2,d0
	add.l	#$E960,a0
	move.l	d0,(a0)
	movem.l	(a7)+,d2-d4
	rts

L19
	dc.b	'glColorMask',0

	SECTION "_gl_mask_rgba_span:0",CODE


;void gl_mask_rgba_span( GLcontext *ctx,
	XDEF	_gl_mask_rgba_span
_gl_mask_rgba_span
L39	EQU	-$1914
	link	a5,#L39
	movem.l	d2-d6/a2/a3,-(a7)
	movem.l	$10(a5),d0/d1/a2
	move.l	$C(a5),d4
	move.l	$8(a5),a1
L35
;   GLuint srcMask = *((GLuint*)ctx->Color.ColorMask);
	move.l	$21DC(a1),d3
;   GLuint dstMask = ~srcMask;
	move.l	d3,d5
	not.l	d5
;   GLuint *rgba32 = (GLuint *) rgba;
;   GLuint *dest32 = (GLuint *) dest;
	lea	-$1900(a5),a0
	move.l	a0,a3
;   gl_read_rgba_span( ctx, n, x, y, dest );
	pea	-$1900(a5)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	move.l	d4,-(a7)
	move.l	a1,-(a7)
	jsr	_gl_read_rgba_span
	add.w	#$14,a7
;   for (i=0;
	moveq	#0,d0
	bra.b	L37
L36
;      rgba32[i] = (rgba32[i] & srcMask) | (dest32[i] & dstMask)
	move.l	0(a2,d0.l*4),d1
	and.l	d3,d1
	move.l	0(a3,d0.l*4),d2
	and.l	d5,d2
	or.l	d2,d1
	move.l	d1,0(a2,d0.l*4)
	addq.l	#1,d0
L37
	cmp.l	d4,d0
	blo.b	L36
L38
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_gl_mask_rgba_pixels:0",CODE


;void gl_mask_rgba_pixels( GLcontext *ctx,
	XDEF	_gl_mask_rgba_pixels
_gl_mask_rgba_pixels
L44	EQU	-$4B14
	link	a5,#L44
	movem.l	d2-d6/a2-a4,-(a7)
	movem.l	$C(a5),d4/a4
	move.l	$8(a5),a0
	move.l	$18(a5),a2
L40
;   GLuint srcMask = *((GLuint*)ctx->Color.ColorMask);
	move.l	$21DC(a0),d3
;   GLuint dstMask = ~srcMask;
	move.l	d3,d5
	not.l	d5
;   GLuint *rgba32 = (GLuint *) rgba;
;   GLuint *dest32 = (GLuint *) dest;
	lea	-$4B00(a5),a1
	move.l	a1,a3
;   (*ctx->Driver.ReadRGBAPixels)( ctx, n, x, y, dest, mask );
	move.l	$1C(a5),-(a7)
	pea	-$4B00(a5)
	move.l	$14(a5),-(a7)
	move.l	a4,-(a7)
	move.l	d4,-(a7)
	move.l	a0,-(a7)
	move.l	$958(a0),a0
	jsr	(a0)
	add.w	#$18,a7
;   for (i=0;
	moveq	#0,d0
	bra.b	L42
L41
;      rgba32[i] = (rgba32[i] & srcMask) | (dest32[i] & dstMask)
	move.l	0(a2,d0.l*4),d1
	and.l	d3,d1
	move.l	0(a3,d0.l*4),d2
	and.l	d5,d2
	or.l	d2,d1
	move.l	d1,0(a2,d0.l*4)
	addq.l	#1,d0
L42
	cmp.l	d4,d0
	blo.b	L41
L43
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	SECTION "_gl_mask_index_span:0",CODE


;void gl_mask_index_span( GLcontext *ctx,
	XDEF	_gl_mask_index_span
_gl_mask_index_span
L49	EQU	-$190C
	link	a5,#L49
	movem.l	d2-d6/a2/a3,-(a7)
	movem.l	$10(a5),d0/d1/a2
	move.l	$C(a5),d5
	move.l	$8(a5),a3
L45
;   gl_read_index_span( ctx, n, x, y, fbindexes );
	pea	-$1904(a5)
	move.l	d1,-(a7)
	move.l	d0,-(a7)
	move.l	d5,-(a7)
	move.l	a3,-(a7)
	jsr	_gl_read_index_span
	add.w	#$14,a7
;   msrc = ctx->Color.IndexMask;
	move.l	$21D8(a3),d3
;   mdest = ~msrc;
	move.l	d3,d4
	not.l	d4
;   for (i=0;
	moveq	#0,d0
	bra.b	L47
L46
;      index[i] = (index[i] & msrc) | (fbindexes[i] & mdest);
	move.l	0(a2,d0.l*4),d1
	and.l	d3,d1
	lea	-$1904(a5),a0
	move.l	0(a0,d0.l*4),d2
	and.l	d4,d2
	or.l	d2,d1
	move.l	d1,0(a2,d0.l*4)
	addq.l	#1,d0
L47
	cmp.l	d5,d0
	blo.b	L46
L48
	movem.l	(a7)+,d2-d6/a2/a3
	unlk	a5
	rts

	SECTION "_gl_mask_index_pixels:0",CODE


;void gl_mask_index_pixels( GLcontext *ctx,
	XDEF	_gl_mask_index_pixels
_gl_mask_index_pixels
L54	EQU	-$4B0C
	link	a5,#L54
	movem.l	d2-d6/a2-a4,-(a7)
	movem.l	$C(a5),d5/a1/a4
	move.l	$1C(a5),a0
	move.l	$18(a5),a2
	move.l	$8(a5),a3
L50
;   (*ctx->Driver.ReadCI32Pixels)( ctx, n, x, y, fbindexes, mask );
	move.l	a0,-(a7)
	pea	-$4B04(a5)
	move.l	a4,-(a7)
	move.l	a1,-(a7)
	move.l	d5,-(a7)
	move.l	a3,-(a7)
	move.l	$954(a3),a0
	jsr	(a0)
	add.w	#$18,a7
;   msrc = ctx->Color.IndexMask;
	move.l	$21D8(a3),d3
;   mdest = ~msrc;
	move.l	d3,d4
	not.l	d4
;   for (i=0;
	moveq	#0,d0
	bra.b	L52
L51
;      index[i] = (index[i] & msrc) | (fbindexes[i] & mdest);
	move.l	0(a2,d0.l*4),d1
	and.l	d3,d1
	lea	-$4B04(a5),a0
	move.l	0(a0,d0.l*4),d2
	and.l	d4,d2
	or.l	d2,d1
	move.l	d1,0(a2,d0.l*4)
	addq.l	#1,d0
L52
	cmp.l	d5,d0
	blo.b	L51
L53
	movem.l	(a7)+,d2-d6/a2-a4
	unlk	a5
	rts

	END
