
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/bitmap.c
	mc68030
	mc68881
	XREF	_gl_flush_pb
	XREF	_gl_pixel_addr_in_image
	XREF	_gl_feedback_vertex
	XREF	_gl_update_state
	XREF	_gl_error
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err
	XREF	_CC

	SECTION "_render_bitmap:0",CODE


;static void render_bitmap( GLcontext *ctx, GLint px, GLint py,
_render_bitmap
L87	EQU	-$2C
	link	a5,#L87
	movem.l	d2-d7/a2-a4,-(a7)
	move.l	$14(a5),d4
	move.l	$10(a5),d7
	move.l	$8(a5),a4
L43
;   struct pixel_buffer *PB = ctx->PB;
	move.l	a4,a0
	add.l	#$E998,a0
	move.l	(a0),a2
;   if (!bitmap)
	tst.l	$20(a5)
	bne.b	L45
L44
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L45
;   if (ctx->NewState) 
	move.l	a4,a0
	add.l	#$E960,a0
	tst.l	(a0)
	beq.b	L47
L46
;      gl_update_state(ctx);
	move.l	a4,-(a7)
	jsr	_gl_update_state
	addq.w	#4,a7
;      PB_INIT( PB, GL_BITMAP )
	move.l	a2,a0
	add.l	#$27D94,a0
	clr.l	(a0)
;      PB_INIT( PB, GL_BITMAP )
	move.l	a2,a0
	add.l	#$27D98,a0
	clr.b	(a0)
;      PB_INIT( PB, GL_BITMAP )
	move.l	a2,a0
	add.l	#$27D9A,a0
	move.l	#$1A00,(a0)
L47
;   if (ctx->Visual->RGBAflag) 
	move.l	a4,a1
	move.l	$8F8(a1),a0
	tst.b	(a0)
	beq	L55
L48
;      r = (GLint) (ctx->Current.RasterColor[0] * 255.0F);
	fmove.s	$2262(a4),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d0
	move.l	d0,d6
;      g = (GLint) (ctx->Current.RasterColor[1] * 255.0F);
	lea	$2262(a4),a0
	fmove.s	4(a0),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d5
;      b = (GLint) (ctx->Current.RasterColor[2] * 255.0F);
	lea	$2262(a4),a0
	fmove.s	$8(a0),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d3
;      a = (GLint) (ctx->Current.RasterColor[3] * 255.0F);
	lea	$2262(a4),a0
	fmove.s	$C(a0),fp0
	fmul.s	#$.437F0000,fp0
	fmove.l	fp0,d2
;      PB_SET_COLOR( ctx, PB,
	move.l	a2,a0
	add.l	#$27D80,a0
	move.l	(a0),d0
	cmp.l	d6,d0
	bne.b	L53
L49
	move.l	a2,a0
	add.l	#$27D80,a0
	move.l	4(a0),d0
	cmp.l	d5,d0
	bne.b	L53
L50
	move.l	a2,a0
	add.l	#$27D80,a0
	move.l	$8(a0),d0
	cmp.l	d3,d0
	bne.b	L53
L51
	move.l	a2,a0
	add.l	#$27D80,a0
	move.l	$C(a0),d0
	cmp.l	d2,d0
	bne.b	L53
L52
	move.l	a2,a0
	add.l	#$27D98,a0
	tst.b	(a0)
	bne.b	L54
L53
;      PB_SET_COLOR( ctx, PB,
	move.l	a4,-(a7)
	jsr	_gl_flush_pb
	addq.w	#4,a7
L54
;      PB_SET_COLOR( ctx, PB,
	move.l	a2,a0
	add.l	#$27D80,a0
	move.l	d6,(a0)
;      PB_SET_COLOR( ctx, PB,
	move.l	a2,a0
	add.l	#$27D80,a0
	move.l	d5,4(a0)
;      PB_SET_COLOR( ctx, PB,
	move.l	a2,a0
	add.l	#$27D80,a0
	move.l	d3,$8(a0)
;      PB_SET_COLOR( ctx, PB,
	move.l	a2,a0
	add.l	#$27D80,a0
	move.l	d2,$C(a0)
;      PB_SET_COLOR( ctx, PB,
	move.l	a2,a0
	add.l	#$27D98,a0
	move.b	#1,(a0)
	bra.b	L59
L55
;   PB_SET_INDEX( 
	move.l	a2,a0
	add.l	#$27D90,a0
	move.l	(a0),d1
	cmp.l	$2272(a4),d1
	bne.b	L57
L56
	move.l	a2,a0
	add.l	#$27D98,a0
	tst.b	(a0)
	bne.b	L58
L57
;   PB_SET_INDEX( 
	move.l	a4,-(a7)
	jsr	_gl_flush_pb
	addq.w	#4,a7
L58
;   PB_SET_INDEX( 
	move.l	a2,a0
	add.l	#$27D90,a0
	move.l	$2272(a4),(a0)
;   PB_SET_INDEX( 
	move.l	a2,a0
	add.l	#$27D98,a0
	move.b	#1,(a0)
L59
;   pz = (GLint) ( ctx->Current.RasterPos[2] * DEPTH_SCALE );
	lea	$224E(a4),a0
	fmove.s	$8(a0),fp0
	fmul.s	#$.477FFF00,fp0
	fmove.l	fp0,d5
;   for (row=0;
	moveq	#0,d3
	bra	L85
L60
;      GLubyte *src = (GLubyte *) gl_pixel_addr_in_image( unpac
	clr.l	-(a7)
	move.l	d3,-(a7)
	clr.l	-(a7)
	pea	$1A00.w
	pea	$1900.w
	move.l	$18(a5),-(a7)
	move.l	d4,-(a7)
	move.l	$20(a5),-(a7)
	move.l	$1C(a5),-(a7)
	jsr	_gl_pixel_addr_in_image
	add.w	#$24,a7
	move.l	d0,a0
;      if (unpack->LsbFirst) 
	move.l	$1C(a5),a1
	tst.b	$19(a1)
	beq	L73
L61
;         GLubyte bitmask = 1;
	moveq	#1,d2
;         for (col=0;
	moveq	#0,d0
	bra	L67
L62
;            if (*src & bitmask) 
	moveq	#0,d1
	move.b	(a0),d1
	moveq	#0,d6
	move.b	d2,d6
	and.l	d6,d1
	beq.b	L64
L63
;            PB_WR
	move.l	$C(a5),d1
	add.l	d0,d1
	move.l	d1,d6
	move.l	a2,a1
	add.l	#$27D94,a1
	move.l	(a1),d1
	move.l	d6,0(a2,d1.l*4)
;            PB_WR
	move.l	d7,d1
	add.l	d3,d1
	move.l	d1,d6
	move.l	a2,a3
	add.l	#$27D94,a3
	lea	$4B00(a2),a1
	move.l	(a3),d1
	move.l	d6,0(a1,d1.l*4)
;            PB_WR
	move.l	a2,a1
	add.l	#$9600,a1
	move.l	a2,a3
	add.l	#$27D94,a3
	move.l	(a3),d1
	move.w	d5,0(a1,d1.l*2)
;            PB_WR
	move.l	a2,a1
	add.l	#$27D94,a1
	move.l	(a1),d1
	addq.l	#1,d1
	move.l	a2,a1
	add.l	#$27D94,a1
	move.l	d1,(a1)
L64
;            bitmask = bitmask << 1;
	moveq	#0,d1
	move.b	d2,d1
	moveq	#1,d2
	asl.l	d2,d1
	move.b	d1,d2
;            if (bitmask==0) 
	bne.b	L66
L65
;               src++;
	addq.w	#1,a0
;               bitmask = 1;
	moveq	#1,d2
L66
	addq.l	#1,d0
L67
	cmp.l	d4,d0
	blt.b	L62
L68
;         PB_CHECK_FLUSH( ctx, PB )
	move.l	a2,a0
	add.l	#$27D94,a0
	move.l	(a0),d0
	cmp.l	#$C80,d0
	blo	L84
L69
;         PB_CHECK_FLUSH( ctx, PB )
	move.l	a4,-(a7)
	jsr	_gl_flush_pb
	addq.w	#4,a7
L70
;         if (bitmask!=1)
L71
;            src++;
L72
	bra	L84
L73
;         GLubyte bitmask = 128;
	move.b	#$80,d2
;         for (col=0;
	moveq	#0,d0
	bra	L79
L74
;            if (*src & bitmask) 
	moveq	#0,d1
	move.b	(a0),d1
	moveq	#0,d6
	move.b	d2,d6
	and.l	d6,d1
	beq.b	L76
L75
;            PB_WR
	move.l	$C(a5),d1
	add.l	d0,d1
	move.l	d1,d6
	move.l	a2,a1
	add.l	#$27D94,a1
	move.l	(a1),d1
	move.l	d6,0(a2,d1.l*4)
;            PB_WR
	move.l	d7,d1
	add.l	d3,d1
	move.l	d1,d6
	move.l	a2,a3
	add.l	#$27D94,a3
	lea	$4B00(a2),a1
	move.l	(a3),d1
	move.l	d6,0(a1,d1.l*4)
;            PB_WR
	move.l	a2,a1
	add.l	#$9600,a1
	move.l	a2,a3
	add.l	#$27D94,a3
	move.l	(a3),d1
	move.w	d5,0(a1,d1.l*2)
;            PB_WR
	move.l	a2,a1
	add.l	#$27D94,a1
	move.l	(a1),d1
	addq.l	#1,d1
	move.l	a2,a1
	add.l	#$27D94,a1
	move.l	d1,(a1)
L76
;            bitmask = bitmask >> 1;
	moveq	#0,d1
	move.b	d2,d1
	moveq	#1,d2
	asr.l	d2,d1
	move.b	d1,d2
;            if (bitmask==0) 
	bne.b	L78
L77
;               src++;
	addq.w	#1,a0
;               bitmask = 128;
	move.b	#$80,d2
L78
	addq.l	#1,d0
L79
	cmp.l	d4,d0
	blt.b	L74
L80
;         PB_CHECK_FLUSH( ctx, PB )
	move.l	a2,a0
	add.l	#$27D94,a0
	move.l	(a0),d0
	cmp.l	#$C80,d0
	blo.b	L84
L81
;         PB_CHECK_FLUSH( ctx, PB )
	move.l	a4,-(a7)
	jsr	_gl_flush_pb
	addq.w	#4,a7
L82
;         if (bitmask!=128)
L83
;            src++;
L84
	addq.l	#1,d3
L85
	cmp.l	$18(a5),d3
	blt	L60
L86
;   gl_flush_pb(ctx);
	move.l	a4,-(a7)
	jsr	_gl_flush_pb
	addq.w	#4,a7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	SECTION "_gl_direct_bitmap:0",CODE

	rts

;GLboolean gl_direct_bitmap( GLcontext *ctx, 
	XDEF	_gl_direct_bitmap
_gl_direct_bitmap
	movem.l	d2-d5/a2/a3,-(a7)
	fmovem.x fp2/fp3/fp4,-(a7)
	movem.l	$44(a7),d4/d5
	move.l	$40(a7),a2
	move.l	$5C(a7),a3
	fmove.s	$50(a7),fp1
	fmove.s	$58(a7),fp2
	fmove.s	$54(a7),fp3
	fmove.s	$4C(a7),fp4
L88
;   GLint px = (GLint) ( (ctx->Current.RasterPos[0] - xorig) + 0.0
	fmove.s	$224E(a2),fp0
	fsub.x	fp4,fp0
	fadd.s	#$.00000000,fp0
	fmove.l	fp0,d3
;   GLint py = (GLint) ( (ctx->Current.RasterPos[1] - yorig) + 0.0
	lea	$224E(a2),a0
	fmove.s	4(a0),fp0
	fsub.x	fp1,fp0
	fadd.s	#$.00000000,fp0
	fmove.l	fp0,d2
;   GLboolean completed = GL_FALSE;
	moveq	#0,d0
;   if (ctx->Current.RasterPosValid==GL_FALSE) 
	tst.b	$229A(a2)
	bne.b	L90
L89
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3/fp4
	movem.l	(a7)+,d2-d5/a2/a3
	rts
L90
;      color[1] = ctx->Current.RasterColor[1]
	move.l	a2,a0
	add.l	#$E964,a0
	move.l	(a0),d1
	cmp.l	#$1C00,d1
	beq.b	L92
L91
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4
	movem.l	(a7)+,d2-d5/a2/a3
	rts
L92
;   if (ctx->Driver.Bitmap) 
	tst.l	$9B0(a2)
	beq.b	L94
L93
;      completed = (*ctx->Driver.Bitmap)( ctx, px, py, width, h
	move.l	a3,-(a7)
	move.l	a2,a0
	add.l	#$E65E,a0
	pea	(a0)
	move.l	d5,-(a7)
	move.l	d4,-(a7)
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	move.l	$9B0(a2),a0
	jsr	(a0)
	add.w	#$1C,a7
L94
;   if (!completed) 
	tst.b	d0
	bne.b	L96
L95
;      render_bitmap( ctx, px, py, width, height, &ctx->Unpack,
	move.l	a3,-(a7)
	move.l	a2,a0
	add.l	#$E65E,a0
	pea	(a0)
	move.l	d5,-(a7)
	move.l	d4,-(a7)
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	jsr	_render_bitmap
	add.w	#$1C,a7
L96
;   ctx->Current.RasterPos[0] += xmove;
	lea	$224E(a2),a0
	fmove.s	(a0),fp0
	fadd.x	fp3,fp0
	fmove.s	fp0,(a0)
;   ctx->Current.RasterPos[1] += ymove;
	lea	$224E(a2),a0
	addq.w	#4,a0
	fmove.s	(a0),fp0
	fadd.x	fp2,fp0
	fmove.s	fp0,(a0)
	moveq	#1,d0
	fmovem.x (a7)+,fp2/fp3/fp4
	movem.l	(a7)+,d2-d5/a2/a3
	rts

	SECTION "_NoUnpack:1",DATA

_NoUnpack
	dc.l	1,0,0,0,0,0
	dc.b	0,0

	SECTION "_gl_Bitmap:0",CODE


;void gl_Bitmap( GLcontext* ctx,
	XDEF	_gl_Bitmap
_gl_Bitmap
L121	EQU	-$24
	link	a5,#L121
	movem.l	d2-d5/a2/a3,-(a7)
	fmovem.x fp2/fp3/fp4,-(a7)
	move.l	$10(a5),d4
	move.l	$C(a5),d5
	move.l	$8(a5),a2
	move.l	$24(a5),a3
	fmove.s	$18(a5),fp1
	fmove.s	$20(a5),fp2
	fmove.s	$1C(a5),fp3
	fmove.s	$14(a5),fp4
L99
;   if (width<0 || height<0) 
	tst.l	d5
	bmi.b	L101
L100
	tst.l	d4
	bpl.b	L102
L101
;      gl_error( ctx, GL_INVALID_VALUE, "glBitmap" );
	move.l	#L98,-(a7)
	pea	$501.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2/fp3/fp4
	movem.l	(a7)+,d2-d5/a2/a3
	unlk	a5
	rts
L102
;   if (INSIDE_BEGIN_END(ctx)) 
	move.l	a2,a0
	add.l	#$E968,a0
	move.l	(a0),d0
	cmp.l	#$1A00,d0
	beq.b	L104
L103
;      gl_error( ctx, GL_INVALID_OPERATION, "glBitmap" );
	move.l	#L98,-(a7)
	pea	$502.w
	move.l	a2,-(a7)
	jsr	_gl_error
	add.w	#$C,a7
	fmovem.x (a7)+,fp2/fp3/fp4
	movem.l	(a7)+,d2-d5/a2/a3
	unlk	a5
	rts
L104
;   if (ctx->Current.RasterPosValid==GL_FALSE) 
	tst.b	$229A(a2)
	bne.b	L106
L105
	fmovem.x (a7)+,fp2/fp3/fp4
	movem.l	(a7)+,d2-d5/a2/a3
	unlk	a5
	rts
L106
;   if (ctx->RenderMode==GL_RENDER) 
	move.l	a2,a0
	add.l	#$E964,a0
	move.l	(a0),d0
	cmp.l	#$1C00,d0
	bne	L112
L107
;      GLint px = (GLint) ( (ctx->Current.RasterPos[0] - xorig)
	fmove.s	$224E(a2),fp0
	fsub.x	fp4,fp0
	fadd.s	#$.00000000,fp0
	fmove.l	fp0,d3
;      GLint py = (GLint) ( (ctx->Current.RasterPos[1] - yorig)
	lea	$224E(a2),a0
	fmove.s	4(a0),fp0
	fsub.x	fp1,fp0
	fadd.s	#$.00000000,fp0
	fmove.l	fp0,d2
;      GLboolean completed = GL_FALSE;
	moveq	#0,d0
;      if (ctx->Driver.Bitmap) 
	tst.l	$9B0(a2)
	beq.b	L109
L108
;         completed = (*ctx->Driver.Bitmap)( ctx, px, py, wi
	move.l	a3,a1
	move.l	$18(a1),-(a7)
	pea	_NoUnpack(a6)
	move.l	d4,-(a7)
	move.l	d5,-(a7)
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	move.l	$9B0(a2),a0
	jsr	(a0)
	add.w	#$1C,a7
L109
;      if (!completed) 
	tst.b	d0
	bne.b	L111
L110
;         render_bitmap( ctx, px, py, width, height, &NoUnpa
	move.l	a3,a1
	move.l	$18(a1),-(a7)
	pea	_NoUnpack(a6)
	move.l	d4,-(a7)
	move.l	d5,-(a7)
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	a2,-(a7)
	jsr	_render_bitmap
	add.w	#$1C,a7
L111
	bra	L120
L112
;   else if (ctx->RenderMode==GL_FEEDBACK) 
	move.l	a2,a0
	add.l	#$E964,a0
	move.l	(a0),d0
	cmp.l	#$1C01,d0
	bne	L119
L113
;      color[0] = ctx->Current.RasterColor[0];
	move.l	$2262(a2),-$10(a5)
;      color[1] = ctx->Current.RasterColor[1];
	lea	$2262(a2),a0
	fmove.s	4(a0),fp0
	lea	-$10(a5),a0
	fmove.s	fp0,4(a0)
;      color[2] = ctx->Current.RasterColor[2];
	lea	$2262(a2),a0
	fmove.s	$8(a0),fp0
	lea	-$10(a5),a0
	fmove.s	fp0,$8(a0)
;      color[3] = ctx->Current.RasterColor[3];
	lea	$2262(a2),a0
	fmove.s	$C(a0),fp0
	lea	-$10(a5),a0
	fmove.s	fp0,$C(a0)
;      if (ctx->Current.TexCoord[3] == 0.0)
	move.l	$222A(a2),a0
	fmove.s	$C(a0),fp0
	ftst.d	fp0
	fbne.b	L115
L114
;         invq = 1.0F;
	fmove.s	#$.3F800000,fp0
	bra.b	L116
L115
;         invq = 1.0F / ctx->Current.RasterTexCoord[3];
	move.l	$2276(a2),a0
	fmove.s	#$.3F800000,fp0
	fdiv.s	$C(a0),fp0
L116
;      texcoord[0] = ctx->Current.RasterTexCoord[0] * invq;
	move.l	$2276(a2),a0
	fmove.s	(a0),fp1
	fmul.x	fp0,fp1
	fmove.s	fp1,-$20(a5)
;      texcoord[1] = ctx->Current.RasterTexCoord[1] * invq;
	move.l	$2276(a2),a0
	fmove.s	4(a0),fp1
	fmul.x	fp0,fp1
	lea	-$20(a5),a0
	fmove.s	fp1,4(a0)
;      texcoord[2] = ctx->Current.RasterTexCoord[2] * invq;
	move.l	$2276(a2),a0
	fmove.s	$8(a0),fp1
	fmul.x	fp0,fp1
	lea	-$20(a5),a0
	fmove.s	fp1,$8(a0)
;      texcoord[3] = ctx->Current.RasterTexCoord[3];
	move.l	$2276(a2),a0
	fmove.s	$C(a0),fp0
	lea	-$20(a5),a0
	fmove.s	fp0,$C(a0)
;BACK_TOKEN( ctx, 
	move.l	a2,a0
	add.l	#$E828,a0
	move.l	$10(a0),d1
	move.l	a2,a0
	add.l	#$E828,a0
	cmp.l	$C(a0),d1
	bhs.b	L118
L117
;BACK_TOKEN( ctx, 
	move.l	a2,a0
	add.l	#$E828,a0
	move.l	$8(a0),a1
	move.l	a2,a0
	add.l	#$E828,a0
	move.l	$10(a0),d0
	move.l	#$44E08000,0(a1,d0.l*4)
L118
;BACK_TOKEN( ctx, 
	move.l	a2,a0
	add.l	#$E838,a0
	move.l	(a0),d0
	addq.l	#1,d0
	move.l	a2,a0
	add.l	#$E838,a0
	move.l	d0,(a0)
;      gl_feedback_vertex( ctx,
	pea	-$20(a5)
	fmove.l	$2272(a2),fp0
	fmove.s	fp0,-(a7)
	pea	-$10(a5)
	lea	$224E(a2),a0
	move.l	$C(a0),-(a7)
	lea	$224E(a2),a0
	move.l	$8(a0),-(a7)
	lea	$224E(a2),a0
	move.l	4(a0),-(a7)
	move.l	$224E(a2),-(a7)
	move.l	a2,-(a7)
	jsr	_gl_feedback_vertex
	add.w	#$20,a7
L119
;   else if (ctx->RenderMode==GL_SELECT) 
L120
;   ctx->Current.RasterPos[0] += xmove;
	lea	$224E(a2),a0
	fmove.s	(a0),fp0
	fadd.x	fp3,fp0
	fmove.s	fp0,(a0)
;   ctx->Current.RasterPos[1] += ymove;
	lea	$224E(a2),a0
	addq.w	#4,a0
	fmove.s	(a0),fp0
	fadd.x	fp2,fp0
	fmove.s	fp0,(a0)
	fmovem.x (a7)+,fp2/fp3/fp4
	movem.l	(a7)+,d2-d5/a2/a3
	unlk	a5
	rts

L98
	dc.b	'glBitmap',0

	END
