
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src-glu/mipmap.c
	mc68030
	mc68881
	XREF	_glTexImage2D
	XREF	_glTexImage1D
	XREF	_glGetIntegerv
	XREF	_malloc
	XREF	_free
	XREF	_std__in
	XREF	_std__out
	XREF	_std__err

	SECTION "_gluScaleImage:0",CODE


;   glGetIntegerv( GL_UNPACK_SKIP_PIXELS,
	XDEF	_gluScaleImage
_gluScaleImage
L419	EQU	-$12C
	link	a5,#L419
	movem.l	d2-d7/a2-a4,-(a7)
	fmovem.x fp2/fp3/fp4/fp5/fp6/fp7,-(a7)
	movem.l	$8(a5),d0/d5
	movem.l	$14(a5),d7/a3
L235
;   switch (format)
	sub.l	#$1900,d0
	cmp.l	#$A,d0
	bhi.b	L240
	move.l	L420(pc,d0.l*4),a0
	jmp	(a0)
L420
	dc.l	L236
	dc.l	L236
	dc.l	L236
	dc.l	L236
	dc.l	L236
	dc.l	L236
	dc.l	L236
	dc.l	L238
	dc.l	L239
	dc.l	L236
	dc.l	L237
;      
L236
;         components = 1;
	moveq	#1,d4
;	 
	bra.b	L241
L237
;	 components = 2;
	moveq	#2,d4
;	 
	bra.b	L241
L238
;	 components = 3;
	moveq	#3,d4
;	 
	bra.b	L241
L239
;	 components = 4;
	moveq	#4,d4
;	 
	bra.b	L241
L240
	move.l	#$18A24,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L241
;	 return 
;   switch (typein)
	move.l	d7,d0
	cmp.l	#$1404,d0
	beq.b	L247
	bgt.b	L421
	cmp.l	#$1402,d0
	beq.b	L245
	bgt.b	L422
	cmp.l	#$1400,d0
	beq.b	L243
	cmp.l	#$1401,d0
	beq.b	L242
	bra.b	L249
L422
	bgt.b	L244
L421
	cmp.l	#$1406,d0
	beq.b	L248
	bgt.b	L423
	blt.b	L246
L423
	cmp.l	#$1A00,d0
	beq.b	L249
	bra.b	L249
;      
L242
;      case GL_UNSIGNED_BYTE:	sizein = s
	moveq	#1,d2
;	
	bra.b	L250
L243
;      case GL_BYTE:		sizein = sizeof(GLbyte);
	moveq	#1,d2
;	
	bra.b	L250
L244
;      case GL_UNSIGNED_SHORT:	sizein =
	moveq	#2,d2
;	
	bra.b	L250
L245
;      case GL_SHORT:		sizein = sizeof(GLshort);
	moveq	#2,d2
;	
	bra.b	L250
L246
;      case GL_UNSIGNED_INT:	sizein = siz
	moveq	#4,d2
;	
	bra.b	L250
L247
;      case GL_INT:		sizein = sizeof(GLint);
	moveq	#4,d2
;		
	bra.b	L250
L248
;      case GL_FLOAT:		sizein = sizeof(GLfloat);
	moveq	#4,d2
;	
	bra.b	L250
L249
	move.l	#$500,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L250
;	 return 
;   switch (typeout)
	move.l	$24(a5),d0
	cmp.l	#$1404,d0
	beq	L256
	bgt.b	L424
	cmp.l	#$1402,d0
	beq.b	L254
	bgt.b	L425
	cmp.l	#$1400,d0
	beq.b	L252
	cmp.l	#$1401,d0
	beq.b	L251
	bra	L258
L425
	bgt.b	L253
L424
	cmp.l	#$1406,d0
	beq.b	L257
	bgt.b	L426
	blt.b	L255
L426
	cmp.l	#$1A00,d0
	beq	L258
	bra.b	L258
;      
L251
;      case GL_UNSIGNED_BYTE:	sizeout = 
	move.l	#1,-$48(a5)
;	
	bra	L259
L252
;      case GL_BYTE:		sizeout = sizeof(GLbyte);
	move.l	#1,-$48(a5)
;	
	bra.b	L259
L253
;      case GL_UNSIGNED_SHORT:	sizeout 
	move.l	#2,-$48(a5)
;	
	bra.b	L259
L254
;      case GL_SHORT:		sizeout = sizeof(GLshort)
	move.l	#2,-$48(a5)
;	
	bra.b	L259
L255
;      case GL_UNSIGNED_INT:	sizeout = si
	move.l	#4,-$48(a5)
;	
	bra.b	L259
L256
;      case GL_INT:		sizeout = sizeof(GLint);
	move.l	#4,-$48(a5)
;	
	bra.b	L259
L257
;      case GL_FLOAT:		sizeout = sizeof(GLfloat)
	move.l	#4,-$48(a5)
;	
	bra.b	L259
L258
	move.l	#$500,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L259
;	 return 
;   glGetIntegerv( GL_UNPACK_ROW_LENGTH, &unpackrowlength );
	pea	-$24(a5)
	pea	$CF2.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   glGetIntegerv( GL_UNPACK_ALIGNMENT, &unpackalignment );
	pea	-$28(a5)
	pea	$CF5.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   glGetIntegerv( GL_UNPACK_SKIP_ROWS, &unpackskiprows );
	pea	-$2C(a5)
	pea	$CF3.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   glGetIntegerv( GL_UNPACK_SKIP_PIXELS, &unpackskippixels );
	pea	-$30(a5)
	pea	$CF4.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   glGetIntegerv( GL_PACK_ROW_LENGTH, &packrowlength );
	pea	-$34(a5)
	pea	$D02.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   glGetIntegerv( GL_PACK_ALIGNMENT, &packalignment );
	pea	-$38(a5)
	pea	$D05.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   glGetIntegerv( GL_PACK_SKIP_ROWS, &packskiprows );
	pea	-$3C(a5)
	pea	$D03.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   glGetIntegerv( GL_PACK_SKIP_PIXELS, &packskippixels );
	pea	-$40(a5)
	pea	$D04.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   tempin = (GLfloat *) malloc( widthin * heightin
	move.l	d5,d0
	muls.l	$10(a5),d0
	muls.l	d4,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a2
;   if (!tempin) 
	cmp.w	#0,a2
	bne.b	L261
L260
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L261
;   tempout = (GLfloat *) malloc( widthout * heightout
	move.l	$1C(a5),d0
	muls.l	$20(a5),d0
	muls.l	d4,d0
	moveq	#2,d1
	asl.l	d1,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,-$18(a5)
;   if (!tempout) 
	tst.l	-$18(a5)
	bne.b	L263
L262
;      free( tempin );
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
	move.l	#$18A26,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L263
;   if (unpackrowlength>0) 
	move.l	-$24(a5),d0
	cmp.l	#0,d0
	ble.b	L265
L264
;      rowlen = unpackrowlength;
	move.l	-$24(a5),d1
	bra.b	L266
L265
;      rowlen = widthin;
	move.l	d5,d1
L266
;   if (sizein >= unpackalignment) 
	cmp.l	-$28(a5),d2
	blt.b	L268
L267
;      rowstride = components * rowlen;
	move.l	d4,d0
	muls.l	d1,d0
	bra	L272
L268
;      rowstride = unpackalignment/sizein
	move.l	-$28(a5),d0
	divsl.l	d2,d0
	move.l	d4,d3
	muls.l	d1,d3
	muls.l	d2,d3
	divsl.l	-$28(a5),d6:d3
	tst.l	d6
	bne.b	L270
L269
	muls.l	d4,d1
	muls.l	d2,d1
	divsl.l	-$28(a5),d1
	bra.b	L271
L270
	muls.l	d4,d1
	muls.l	d2,d1
	divsl.l	-$28(a5),d1
	addq.l	#1,d1
L271
	muls.l	d1,d0
L272
;   switch (typein)
	move.l	d7,d1
	sub.l	#$1400,d1
	cmp.l	#6,d1
	bhi	L322
	move.l	L427(pc,d1.l*4),a0
	jmp	(a0)
L427
	dc.l	L280
	dc.l	L273
	dc.l	L294
	dc.l	L287
	dc.l	L308
	dc.l	L301
	dc.l	L315
;      
L273
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L278
L274
;	    GLubyte *ubptr = (GLubyte *) datain
	move.l	-$8(a5),d1
	muls.l	d0,d1
	lea	0(a3,d1.l),a0
	move.l	-$2C(a5),d1
	muls.l	d0,d1
	add.l	d1,a0
	move.l	-$30(a5),d1
	muls.l	d4,d1
	add.l	d1,a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra.b	L276
L275
;	       tempin[k++] = (GLfloat) *ubptr++;
	moveq	#0,d1
	move.b	(a0)+,d1
	fmove.l	d1,fp0
	move.l	d2,d1
	addq.l	#1,d2
	fmove.s	fp0,0(a2,d1.l*4)
	addq.l	#1,-$C(a5)
L276
	move.l	d5,d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L275
L277
	addq.l	#1,-$8(a5)
L278
	move.l	-$8(a5),d1
	cmp.l	$10(a5),d1
	blt.b	L274
L279
;	 
	bra	L323
L280
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L285
L281
;	    GLbyte *bptr = (GLbyte *) datain
	move.l	-$8(a5),d1
	muls.l	d0,d1
	lea	0(a3,d1.l),a0
	move.l	-$2C(a5),d1
	muls.l	d0,d1
	add.l	d1,a0
	move.l	-$30(a5),d1
	muls.l	d4,d1
	add.l	d1,a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra.b	L283
L282
;	       tempin[k++] = (GLfloat) *bptr++;
	move.b	(a0)+,d1
	extb.l	d1
	fmove.l	d1,fp0
	move.l	d2,d1
	addq.l	#1,d2
	fmove.s	fp0,0(a2,d1.l*4)
	addq.l	#1,-$C(a5)
L283
	move.l	d5,d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L282
L284
	addq.l	#1,-$8(a5)
L285
	move.l	-$8(a5),d1
	cmp.l	$10(a5),d1
	blt.b	L281
L286
;	 
	bra	L323
L287
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L292
L288
;	    GLushort *usptr = (GLushort *) datain
	move.l	-$8(a5),d1
	muls.l	d0,d1
	lea	0(a3,d1.l*2),a0
	move.l	-$2C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*2),a0
	move.l	-$30(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*2),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra.b	L290
L289
;	       tempin[k++] = (GLfloat) *usptr++;
	moveq	#0,d1
	move.w	(a0)+,d1
	fmove.l	d1,fp0
	move.l	d2,d1
	addq.l	#1,d2
	fmove.s	fp0,0(a2,d1.l*4)
	addq.l	#1,-$C(a5)
L290
	move.l	d5,d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L289
L291
	addq.l	#1,-$8(a5)
L292
	move.l	-$8(a5),d1
	cmp.l	$10(a5),d1
	blt.b	L288
L293
;	 
	bra	L323
L294
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L299
L295
;	    GLshort *sptr = (GLshort *) datain
	move.l	-$8(a5),d1
	muls.l	d0,d1
	lea	0(a3,d1.l*2),a0
	move.l	-$2C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*2),a0
	move.l	-$30(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*2),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra.b	L297
L296
;	       tempin[k++] = (GLfloat) *sptr++;
	move.w	(a0)+,d1
	ext.l	d1
	fmove.l	d1,fp0
	move.l	d2,d1
	addq.l	#1,d2
	fmove.s	fp0,0(a2,d1.l*4)
	addq.l	#1,-$C(a5)
L297
	move.l	d5,d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L296
L298
	addq.l	#1,-$8(a5)
L299
	move.l	-$8(a5),d1
	cmp.l	$10(a5),d1
	blt.b	L295
L300
;	 
	bra	L323
L301
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L306
L302
;	    GLuint *uiptr = (GLuint *) datain
	move.l	-$8(a5),d1
	muls.l	d0,d1
	lea	0(a3,d1.l*4),a0
	move.l	-$2C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*4),a0
	move.l	-$30(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*4),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra.b	L304
L303
;	       tempin[k++] = (GLfloat) *uiptr++;
	fmove.l	(a0)+,fp0
	move.l	d2,d1
	addq.l	#1,d2
	fmove.s	fp0,0(a2,d1.l*4)
	addq.l	#1,-$C(a5)
L304
	move.l	d5,d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L303
L305
	addq.l	#1,-$8(a5)
L306
	move.l	-$8(a5),d1
	cmp.l	$10(a5),d1
	blt.b	L302
L307
;	 
	bra	L323
L308
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L313
L309
;	    GLint *iptr = (GLint *) datain
	move.l	-$8(a5),d1
	muls.l	d0,d1
	lea	0(a3,d1.l*4),a0
	move.l	-$2C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*4),a0
	move.l	-$30(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*4),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra.b	L311
L310
;	       tempin[k++] = (GLfloat) *iptr++;
	fmove.l	(a0)+,fp0
	move.l	d2,d1
	addq.l	#1,d2
	fmove.s	fp0,0(a2,d1.l*4)
	addq.l	#1,-$C(a5)
L311
	move.l	d5,d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L310
L312
	addq.l	#1,-$8(a5)
L313
	move.l	-$8(a5),d1
	cmp.l	$10(a5),d1
	blt.b	L309
L314
;	 
	bra	L323
L315
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L320
L316
;	    GLfloat *fptr = (GLfloat *) datain
	move.l	-$8(a5),d1
	muls.l	d0,d1
	lea	0(a3,d1.l*4),a0
	move.l	-$2C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*4),a0
	move.l	-$30(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*4),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra.b	L318
L317
;	       tempin[k++] = *fptr++;
	move.l	d2,d1
	addq.l	#1,d2
	move.l	(a0)+,0(a2,d1.l*4)
	addq.l	#1,-$C(a5)
L318
	move.l	d5,d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L317
L319
	addq.l	#1,-$8(a5)
L320
	move.l	-$8(a5),d1
	cmp.l	$10(a5),d1
	blt.b	L316
L321
;	 
	bra	L323
L322
	move.l	#$18A24,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L323
;	 return 
;   sx = (GLfloat) (widthin-1) / (GLfloat) (widthout-1);
	move.l	d5,d0
	subq.l	#1,d0
	fmove.l	d0,fp5
	move.l	$1C(a5),d0
	subq.l	#1,d0
	fmove.l	d0,fp0
	fdiv.x	fp0,fp5
;   sy = (GLfloat) (heightin-1) / (GLfloat) (heightout-1);
	move.l	$10(a5),d0
	subq.l	#1,d0
	fmove.l	d0,fp0
	fmove.s	fp0,fp7
	move.l	$20(a5),d0
	subq.l	#1,d0
	fmove.l	d0,fp0
	fmove.x	fp7,fp1
	fdiv.x	fp0,fp1
	fmove.s	fp1,fp7
;   if (sx<1.0 && sy<1.0) 
	fmove.x	fp5,fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fboge.b	L339
L324
	fmove.x	fp7,fp0
	fcmp.d	#$.3FF00000.00000000,fp0
	fboge.b	L339
L325
;      for (i=0;
	clr.l	-$8(a5)
	bra	L337
L326
;	 i0 = i * sy;
	fmove.l	-$8(a5),fp0
	fmul.x	fp7,fp0
	fmove.l	fp0,d0
	move.l	d0,d7
;	 i1 = i0 + 1;
	move.l	d7,d3
	addq.l	#1,d3
;	 if (i1 >= heightin) 
	cmp.l	$10(a5),d3
	blt.b	L328
L327
;	 if (i1 >= heightin) i1 = heightin-1;
	move.l	$10(a5),d3
	subq.l	#1,d3
L328
;	 alpha = i*sy - i0;
	fmove.l	-$8(a5),fp3
	fmul.x	fp7,fp3
	fmove.l	d7,fp0
	fsub.x	fp0,fp3
;	 for (j=0;
	clr.l	-$C(a5)
	bra	L335
L329
;	    j0 = j * sx;
	fmove.l	-$C(a5),fp0
	fmul.x	fp5,fp0
	fmove.l	fp0,d2
;	    j1 = j0 + 1;
	move.l	d2,d1
	addq.l	#1,d1
;	    if (j1 >= widthin) 
	cmp.l	d5,d1
	blt.b	L331
L330
;	    if (j1 >= widthin) j1 = widthin-1;
	move.l	d5,d1
	subq.l	#1,d1
L331
;	    beta = j*sx - j0;
	fmove.l	-$C(a5),fp1
	fmul.x	fp5,fp1
	fmove.l	d2,fp0
	fsub.x	fp0,fp1
;	    src00 = tempin + (i0 * widthin + j0) * components;
	move.l	d7,d0
	muls.l	d5,d0
	add.l	d2,d0
	muls.l	d4,d0
	asl.l	#2,d0
	add.l	a2,d0
	move.l	d0,-$6C(a5)
;	    src01 = tempin + (i0 * widthin + j1) * components;
	move.l	d7,d0
	muls.l	d5,d0
	add.l	d1,d0
	muls.l	d4,d0
	asl.l	#2,d0
	add.l	a2,d0
	move.l	d0,-$70(a5)
;	    src10 = tempin + (i1 * widthin + j0) * components;
	move.l	d3,d0
	muls.l	d5,d0
	add.l	d2,d0
	muls.l	d4,d0
	asl.l	#2,d0
	add.l	a2,d0
	move.l	d0,a4
;	    src11 = tempin + (i1 * widthin + j1) * components;
	move.l	d3,d0
	muls.l	d5,d0
	add.l	d1,d0
	muls.l	d4,d0
	lea	0(a2,d0.l*4),a1
;	    dst = tempout + (i * widthout + j) * components;
	move.l	-$8(a5),d0
	muls.l	$1C(a5),d0
	add.l	-$C(a5),d0
	muls.l	d4,d0
	move.l	-$18(a5),a3
	lea	0(a3,d0.l*4),a0
;	    for (k=0;
	moveq	#0,d2
	bra	L333
L332
;	       s1 = *src00++ * (1.0-beta) + *src01++ * beta;
	move.l	-$6C(a5),a3
	moveq	#4,d0
	add.l	d0,-$6C(a5)
	fmove.s	(a3),fp0
	fmove.x	fp1,fp2
	fmove.d	#$.3FF00000.00000000,fp4
	fsub.x	fp2,fp4
	fmul.x	fp4,fp0
	move.l	-$70(a5),a3
	moveq	#4,d0
	add.l	d0,-$70(a5)
	fmove.s	(a3),fp2
	fmul.x	fp1,fp2
	fadd.x	fp2,fp0
	fmove.x	fp0,fp4
;	       s2 = *src10++ * (1.0-beta) + *src11++ * beta;
	fmove.s	(a4)+,fp0
	fmove.x	fp1,fp2
	fmove.d	#$.3FF00000.00000000,fp6
	fsub.x	fp2,fp6
	fmul.x	fp6,fp0
	fmove.s	(a1)+,fp2
	fmul.x	fp1,fp2
	fadd.x	fp2,fp0
	fmove.x	fp0,fp2
;	       *dst++ = s1 * (1.0-alpha) + s2 * alpha;
	fmove.x	fp4,fp0
	fmove.x	fp3,fp4
	fmove.d	#$.3FF00000.00000000,fp6
	fsub.x	fp4,fp6
	fmul.x	fp6,fp0
	fmul.x	fp3,fp2
	fadd.x	fp2,fp0
	fmove.s	fp0,(a0)+
	addq.l	#1,d2
L333
	cmp.l	d4,d2
	blt	L332
L334
	addq.l	#1,-$C(a5)
L335
	move.l	-$C(a5),d0
	cmp.l	$1C(a5),d0
	blt	L329
L336
	addq.l	#1,-$8(a5)
L337
	move.l	-$8(a5),d0
	cmp.l	$20(a5),d0
	blt	L326
L338
	bra	L358
L339
;      for (i=0;
	clr.l	-$8(a5)
	bra	L357
L340
;	 i0 = i * sy;
	fmove.l	-$8(a5),fp0
	fmul.x	fp7,fp0
	fmove.l	fp0,d0
	move.l	d0,-$64(a5)
;	 i1 = i0 + 1;
	move.l	-$64(a5),d0
	addq.l	#1,d0
	move.l	d0,-$68(a5)
;	 if (i1 >= heightin) 
	move.l	-$68(a5),d0
	cmp.l	$10(a5),d0
	blt.b	L342
L341
;	 if (i1 >= heightin) i1 = heightin-1;
	move.l	$10(a5),d0
	subq.l	#1,d0
	move.l	d0,-$68(a5)
L342
;	 for (j=0;
	clr.l	-$C(a5)
	bra	L355
L343
;	    j0 = j * sx;
	fmove.l	-$C(a5),fp0
	fmul.x	fp5,fp0
	fmove.l	fp0,d0
	move.l	d0,-$6C(a5)
;	    j1 = j0 + 1;
	move.l	-$6C(a5),d0
	addq.l	#1,d0
	move.l	d0,d7
;	    if (j1 >= widthin) 
	move.l	d7,d0
	cmp.l	d5,d0
	blt.b	L345
L344
;	    if (j1 >= widthin) j1 = widthin-1;
	move.l	d5,d0
	subq.l	#1,d0
	move.l	d0,d7
L345
;	    dst = tempout + (i * widthout + j) * components;
	move.l	-$8(a5),d0
	muls.l	$1C(a5),d0
	add.l	-$C(a5),d0
	muls.l	d4,d0
	move.l	-$18(a5),a0
	lea	0(a0,d0.l*4),a1
;	    for (k=0;
	moveq	#0,d2
	bra	L353
L346
;	       sum = 0.0;
	fmove.s	#$.00000000,fp0
;	       for (ii=i0;
	move.l	-$64(a5),d3
	bra	L351
L347
;		  for (jj=j0;
	move.l	-$6C(a5),d1
	bra	L349
L348
;		     sum += *(tempin + (ii * widthin + jj) * components + k)
	move.l	d3,d0
	muls.l	d5,d0
	add.l	d1,d0
	muls.l	d4,d0
	lea	0(a2,d0.l*4),a0
	fadd.s	0(a0,d2.l*4),fp0
	addq.l	#1,d1
L349
	cmp.l	d7,d1
	ble.b	L348
L350
	addq.l	#1,d3
L351
	cmp.l	-$68(a5),d3
	ble.b	L347
L352
;	       sum /= (j1-j0+1) * (i1-i0+1);
	move.l	d7,d0
	sub.l	-$6C(a5),d0
	addq.l	#1,d0
	move.l	-$68(a5),d1
	sub.l	-$64(a5),d1
	addq.l	#1,d1
	muls.l	d1,d0
	fmove.l	d0,fp1
	fdiv.x	fp1,fp0
;	       *dst++ = sum;
	fmove.s	fp0,(a1)+
	addq.l	#1,d2
L353
	cmp.l	d4,d2
	blt.b	L346
L354
	addq.l	#1,-$C(a5)
L355
	move.l	-$C(a5),d0
	cmp.l	$1C(a5),d0
	blt	L343
L356
	addq.l	#1,-$8(a5)
L357
	move.l	-$8(a5),d0
	cmp.l	$20(a5),d0
	blt	L340
L358
;   if (packrowlength>0) 
	move.l	-$34(a5),d0
	cmp.l	#0,d0
	ble	L360
L359
;      rowlen = packrowlength;
	move.l	-$34(a5),d1
	bra	L361
L360
;      rowlen = widthout;
	move.l	$1C(a5),d1
L361
;   if (sizeout >= packalignment) 
	move.l	-$48(a5),d0
	cmp.l	-$38(a5),d0
	blt	L363
L362
;      rowstride = components * rowlen;
	move.l	d4,d0
	muls.l	d1,d0
	bra	L367
L363
;      rowstride = packalignment/sizeout
	move.l	-$38(a5),d0
	divsl.l	-$48(a5),d0
	move.l	d4,d2
	muls.l	d1,d2
	muls.l	-$48(a5),d2
	divsl.l	-$38(a5),d3:d2
	tst.l	d3
	bne	L365
L364
	muls.l	d4,d1
	muls.l	-$48(a5),d1
	divsl.l	-$38(a5),d1
	bra	L366
L365
	muls.l	d4,d1
	muls.l	-$48(a5),d1
	divsl.l	-$38(a5),d1
	addq.l	#1,d1
L366
	muls.l	d1,d0
L367
;   switch (typeout)
	move.l	$24(a5),d1
	sub.l	#$1400,d1
	cmp.l	#6,d1
	bhi	L417
	move.l	L428(pc,d1.l*4),a0
	jmp	(a0)
L428
	dc.l	L375
	dc.l	L368
	dc.l	L389
	dc.l	L382
	dc.l	L403
	dc.l	L396
	dc.l	L410
;      
L368
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L373
L369
;	    GLubyte *ubptr = (GLubyte *) dataout
	move.l	-$8(a5),d1
	muls.l	d0,d1
	move.l	$28(a5),a1
	lea	0(a1,d1.l),a0
	move.l	-$3C(a5),d1
	muls.l	d0,d1
	add.l	d1,a0
	move.l	-$40(a5),d1
	muls.l	d4,d1
	add.l	d1,a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra	L371
L370
;	       *ubptr++ = (GLubyte) tempout[k++];
	move.l	d2,d1
	addq.l	#1,d2
	move.l	-$18(a5),a3
	fmove.s	0(a3,d1.l*4),fp0
	fmove.l	fp0,d1
	move.b	d1,(a0)+
	addq.l	#1,-$C(a5)
L371
	move.l	$1C(a5),d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L370
L372
	addq.l	#1,-$8(a5)
L373
	move.l	-$8(a5),d1
	cmp.l	$20(a5),d1
	blt.b	L369
L374
;	 
	bra	L418
L375
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L380
L376
;	    GLbyte *bptr = (GLbyte *) dataout
	move.l	-$8(a5),d1
	muls.l	d0,d1
	move.l	$28(a5),a1
	lea	0(a1,d1.l),a0
	move.l	-$3C(a5),d1
	muls.l	d0,d1
	add.l	d1,a0
	move.l	-$40(a5),d1
	muls.l	d4,d1
	add.l	d1,a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra	L378
L377
;	       *bptr++ = (GLbyte) tempout[k++];
	move.l	d2,d1
	addq.l	#1,d2
	move.l	-$18(a5),a3
	fmove.s	0(a3,d1.l*4),fp0
	fmove.l	fp0,d1
	move.b	d1,(a0)+
	addq.l	#1,-$C(a5)
L378
	move.l	$1C(a5),d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L377
L379
	addq.l	#1,-$8(a5)
L380
	move.l	-$8(a5),d1
	cmp.l	$20(a5),d1
	blt.b	L376
L381
;	 
	bra	L418
L382
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L387
L383
;	    GLushort *usptr = (GLushort *) dataout
	move.l	-$8(a5),d1
	muls.l	d0,d1
	move.l	$28(a5),a1
	lea	0(a1,d1.l*2),a0
	move.l	-$3C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*2),a0
	move.l	-$40(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*2),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra	L385
L384
;	       *usptr++ = (GLushort) tempout[k++];
	move.l	d2,d1
	addq.l	#1,d2
	move.l	-$18(a5),a3
	fmove.s	0(a3,d1.l*4),fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)+
	addq.l	#1,-$C(a5)
L385
	move.l	$1C(a5),d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L384
L386
	addq.l	#1,-$8(a5)
L387
	move.l	-$8(a5),d1
	cmp.l	$20(a5),d1
	blt.b	L383
L388
;	 
	bra	L418
L389
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L394
L390
;	    GLshort *sptr = (GLshort *) dataout
	move.l	-$8(a5),d1
	muls.l	d0,d1
	move.l	$28(a5),a1
	lea	0(a1,d1.l*2),a0
	move.l	-$3C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*2),a0
	move.l	-$40(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*2),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra	L392
L391
;	       *sptr++ = (GLshort) tempout[k++];
	move.l	d2,d1
	addq.l	#1,d2
	move.l	-$18(a5),a3
	fmove.s	0(a3,d1.l*4),fp0
	fmove.l	fp0,d1
	move.w	d1,(a0)+
	addq.l	#1,-$C(a5)
L392
	move.l	$1C(a5),d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L391
L393
	addq.l	#1,-$8(a5)
L394
	move.l	-$8(a5),d1
	cmp.l	$20(a5),d1
	blt.b	L390
L395
;	 
	bra	L418
L396
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L401
L397
;	    GLuint *uiptr = (GLuint *) dataout
	move.l	-$8(a5),d1
	muls.l	d0,d1
	move.l	$28(a5),a1
	lea	0(a1,d1.l*4),a0
	move.l	-$3C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*4),a0
	move.l	-$40(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*4),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra	L399
L398
;	       *uiptr++ = (GLuint) tempout[k++];
	move.l	d2,d1
	addq.l	#1,d2
	move.l	-$18(a5),a3
	fmove.s	0(a3,d1.l*4),fp0
	fmove.l	fp0,d1
	move.l	d1,(a0)+
	addq.l	#1,-$C(a5)
L399
	move.l	$1C(a5),d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L398
L400
	addq.l	#1,-$8(a5)
L401
	move.l	-$8(a5),d1
	cmp.l	$20(a5),d1
	blt.b	L397
L402
;	 
	bra	L418
L403
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L408
L404
;	    GLint *iptr = (GLint *) dataout
	move.l	-$8(a5),d1
	muls.l	d0,d1
	move.l	$28(a5),a1
	lea	0(a1,d1.l*4),a0
	move.l	-$3C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*4),a0
	move.l	-$40(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*4),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra	L406
L405
;	       *iptr++ = (GLint) tempout[k++];
	move.l	d2,d1
	addq.l	#1,d2
	move.l	-$18(a5),a3
	fmove.s	0(a3,d1.l*4),fp0
	fmove.l	fp0,d1
	move.l	d1,(a0)+
	addq.l	#1,-$C(a5)
L406
	move.l	$1C(a5),d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L405
L407
	addq.l	#1,-$8(a5)
L408
	move.l	-$8(a5),d1
	cmp.l	$20(a5),d1
	blt.b	L404
L409
;	 
	bra	L418
L410
;	 k = 0;
	moveq	#0,d2
;	 for (i=0;
	clr.l	-$8(a5)
	bra	L415
L411
;	    GLfloat *fptr = (GLfloat *) dataout
	move.l	-$8(a5),d1
	muls.l	d0,d1
	move.l	$28(a5),a1
	lea	0(a1,d1.l*4),a0
	move.l	-$3C(a5),d1
	muls.l	d0,d1
	lea	0(a0,d1.l*4),a0
	move.l	-$40(a5),d1
	muls.l	d4,d1
	lea	0(a0,d1.l*4),a0
;	    for (j=0;
	clr.l	-$C(a5)
	bra	L413
L412
;	       *fptr++ = tempout[k++];
	move.l	d2,d1
	addq.l	#1,d2
	move.l	-$18(a5),a3
	fmove.s	0(a3,d1.l*4),fp0
	fmove.s	fp0,(a0)+
	addq.l	#1,-$C(a5)
L413
	move.l	$1C(a5),d1
	muls.l	d4,d1
	move.l	-$C(a5),d3
	cmp.l	d1,d3
	blt.b	L412
L414
	addq.l	#1,-$8(a5)
L415
	move.l	-$8(a5),d1
	cmp.l	$20(a5),d1
	blt.b	L411
L416
;	 
	bra	L418
L417
	move.l	#$18A24,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L418
;	 return 
;   free( tempin );
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;   free( tempout );
	move.l	-$18(a5),-(a7)
	jsr	_free
	addq.w	#4,a7
	moveq	#0,d0
	fmovem.x (a7)+,fp2/fp3/fp4/fp5/fp6/fp7
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	SECTION "_ilog2:0",CODE

	rts

;static GLint ilog2( GLint n )
_ilog2
	move.l	d2,-(a7)
	move.l	$8(a7),d1
L429
;   if (n<=0) 
	cmp.l	#0,d1
	bgt.b	L431
L430
	moveq	#0,d0
	move.l	(a7)+,d2
	rts
L431
;   for (k=0;
	moveq	#0,d0
	bra.b	L433
L432
	addq.l	#1,d0
L433
	moveq	#1,d2
	asr.l	d2,d1
	tst.l	d1
	bne.b	L432
L434
	move.l	(a7)+,d2
	rts

	SECTION "_round2:0",CODE


;static GLint round2( GLint n )
_round2
	movem.l	d2-d4,-(a7)
	move.l	$10(a7),d1
L435
;   for (m=1;
	moveq	#1,d0
	bra.b	L437
L436
	moveq	#1,d2
	asl.l	d2,d0
L437
	cmp.l	d1,d0
	blt.b	L436
L438
;   if (m-n <= n-m/2) 
	move.l	d0,d3
	sub.l	d1,d3
	move.l	d0,d2
	divsl.l	#2,d2
	sub.l	d2,d1
	cmp.l	d1,d3
	bgt.b	L440
L439
	movem.l	(a7)+,d2-d4
	rts
L440
	divsl.l	#2,d0
	movem.l	(a7)+,d2-d4
	rts

	SECTION "_bytes_per_pixel:0",CODE


;static GLint bytes_per_pixel( GLenum format, GLenum type )
_bytes_per_pixel
	movem.l	4(a7),d0/d1
L441
;   switch (format)
	sub.l	#$1900,d0
	cmp.l	#$A,d0
	bhi.b	L446
	move.l	L458(pc,d0.l*4),a0
	jmp	(a0)
L458
	dc.l	L442
	dc.l	L442
	dc.l	L442
	dc.l	L442
	dc.l	L442
	dc.l	L442
	dc.l	L442
	dc.l	L444
	dc.l	L445
	dc.l	L442
	dc.l	L443
;      
L442
;	 n = 1;
	moveq	#1,d0
;	 
	bra.b	L447
L443
;	 n = 2;
	moveq	#2,d0
;	 
	bra.b	L447
L444
;	 n = 3;
	moveq	#3,d0
;	 
	bra.b	L447
L445
;	 n = 4;
	moveq	#4,d0
;	 
	bra.b	L447
L446
;	 n = 0;
	moveq	#0,d0
L447
;   switch (type)
	cmp.l	#$1404,d1
	beq.b	L454
	bgt.b	L459
	cmp.l	#$1402,d1
	beq.b	L452
	bgt.b	L460
	cmp.l	#$1400,d1
	beq.b	L449
	cmp.l	#$1401,d1
	beq.b	L448
	bra.b	L456
L460
	bgt.b	L451
L459
	cmp.l	#$1406,d1
	beq.b	L455
	bgt.b	L461
	blt.b	L453
L461
	cmp.l	#$1A00,d1
	beq.b	L450
	bra.b	L456
;      
L448
;      case GL_UNSIGNED_BYTE:	m = sizeof
	moveq	#1,d1
;	
	bra.b	L457
L449
;      case GL_BYTE:		m = sizeof(GLbyte);
	moveq	#1,d1
;	
	bra.b	L457
L450
;      case GL_BITMAP:		m = 1;
	moveq	#1,d1
;			
	bra.b	L457
L451
;      case GL_UNSIGNED_SHORT:	m = size
	moveq	#2,d1
;	
	bra.b	L457
L452
;      case GL_SHORT:		m = sizeof(GLshort);
	moveq	#2,d1
;	
	bra.b	L457
L453
;      case GL_UNSIGNED_INT:	m = sizeof(G
	moveq	#4,d1
;	
	bra.b	L457
L454
;      case GL_INT:		m = sizeof(GLint);
	moveq	#4,d1
;	
	bra.b	L457
L455
;      case GL_FLOAT:		m = sizeof(GLfloat);
	moveq	#4,d1
;	
	bra.b	L457
L456
;      default:			m = 0;
	moveq	#0,d1
L457
	muls.l	d1,d0
	rts

	SECTION "_gluBuild1DMipmaps:0",CODE


;GLint APIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
	XDEF	_gluBuild1DMipmaps
_gluBuild1DMipmaps
L491	EQU	-$34
	link	a5,#L491
	movem.l	d2-d7/a2/a3,-(a7)
	movem.l	$18(a5),d2/a3
	move.l	$C(a5),d3
L462
;   if (width < 1)
	move.l	$10(a5),d0
	cmp.l	#1,d0
	bge.b	L464
L463
	move.l	#$18A25,d0
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L464
;   glGetIntegerv( GL_MAX_TEXTURE_SIZE, &max_width );
	pea	-$14(a5)
	pea	$D33.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   max_levels = ilog2( max_width ) + 1;
	move.l	-$14(a5),-(a7)
	jsr	_ilog2
	addq.w	#4,a7
	addq.l	#1,d0
	move.l	d0,-$C(a5)
;   levels = ilog2( width ) + 1;
	move.l	$10(a5),-(a7)
	jsr	_ilog2
	addq.w	#4,a7
	addq.l	#1,d0
	move.l	d0,-$8(a5)
;   if (levels>max_levels) 
	move.l	-$8(a5),d0
	cmp.l	-$C(a5),d0
	ble.b	L466
L465
;      levels = max_levels;
	move.l	-$C(a5),-$8(a5)
L466
;   new_width = 1 << (levels-1);
	move.l	-$8(a5),d0
	subq.l	#1,d0
	moveq	#1,d5
	asl.l	d0,d5
;   texture = (GLubyte *) malloc( new_width * components );
	move.l	d5,d0
	muls.l	d3,d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a2
;   if (!texture) 
	cmp.w	#0,a2
	bne.b	L468
L467
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L468
;   if (width != new_width) 
	move.l	$10(a5),d0
	cmp.l	d5,d0
	beq.b	L478
L469
;      switch (type)
	cmp.l	#$1401,d2
	beq.b	L470
	bra.b	L477
;	 
L470
;	       GLubyte *ub_data = (GLubyte *) data;
	move.l	a3,a1
;	       for (i=0;
	moveq	#0,d4
	bra.b	L475
L471
;		  j = i * width / new_width;
	move.l	d4,d0
	muls.l	$10(a5),d0
	divsl.l	d5,d0
	move.l	d0,d7
;		  for (k=0;
	moveq	#0,d1
	bra.b	L473
L472
;		     texture[i*components+k] = ub_data[j*components+k];
	move.l	d7,d0
	muls.l	d3,d0
	add.l	d1,d0
	move.b	0(a1,d0.l),d2
	move.l	d4,d0
	muls.l	d3,d0
	add.l	d1,d0
	move.b	d2,0(a2,d0.l)
	addq.l	#1,d1
L473
	cmp.l	d3,d1
	blt.b	L472
L474
	addq.l	#1,d4
L475
	cmp.l	d5,d4
	blt.b	L471
L476
;	    
	bra.b	L478
L477
	move.l	#$18707,d0
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts
L478
;   for (l=0;
	moveq	#0,d7
	bra	L486
L479
;      glTexImage1D( GL_TEXTURE_1D, l, components, new_width, 0
	move.l	a2,-(a7)
	pea	$1401.w
	move.l	$14(a5),-(a7)
	clr.l	-(a7)
	move.l	d5,-(a7)
	move.l	d3,-(a7)
	move.l	d7,-(a7)
	pea	$DE0.w
	jsr	_glTexImage1D
	add.w	#$20,a7
;      new_width = new_width / 2;
	divsl.l	#2,d5
;      for (i=0;
	moveq	#0,d4
	bra.b	L484
L480
;	 for (k=0;
	moveq	#0,d1
	bra.b	L482
L481
;	    sample1 = (GLint) texture[i*2*components+k];
	move.l	d4,d0
	moveq	#1,d2
	asl.l	d2,d0
	muls.l	d3,d0
	add.l	d1,d0
	moveq	#0,d2
	move.b	0(a2,d0.l),d2
;	    sample2 = (GLint) texture[(i*2+1)*components+k];
	move.l	d4,d0
	moveq	#1,d6
	asl.l	d6,d0
	addq.l	#1,d0
	muls.l	d3,d0
	add.l	d1,d0
	move.b	0(a2,d0.l),d0
	and.l	#$FF,d0
;	    texture[i*components+k] = (GLubyte) ((sample1 + sample2) /
	add.l	d0,d2
	divsl.l	#2,d2
	move.l	d4,d0
	muls.l	d3,d0
	add.l	d1,d0
	move.b	d2,0(a2,d0.l)
	addq.l	#1,d1
L482
	cmp.l	d3,d1
	blt.b	L481
L483
	addq.l	#1,d4
L484
	cmp.l	d5,d4
	blt.b	L480
L485
	move.l	d7,d0
	addq.l	#1,d0
	move.l	d0,d7
L486
	move.l	d7,d0
	cmp.l	-$8(a5),d0
	blt	L479
L487
;   free( texture );
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
;   for (l=levels;
	move.l	-$8(a5),d7
	bra.b	L489
L488
;      glTexImage1D( GL_TEXTURE_1D, l, components, 0, 0,
	clr.l	-(a7)
	pea	$1401.w
	move.l	$14(a5),-(a7)
	clr.l	-(a7)
	clr.l	-(a7)
	move.l	d3,-(a7)
	move.l	d7,-(a7)
	pea	$DE0.w
	jsr	_glTexImage1D
	add.w	#$20,a7
	move.l	d7,d0
	addq.l	#1,d0
	move.l	d0,d7
L489
	move.l	d7,d0
	cmp.l	-$C(a5),d0
	blt.b	L488
L490
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2/a3
	unlk	a5
	rts

	SECTION "_gluBuild2DMipmaps:0",CODE


;GLint APIENTRY gluBuild2DMipmaps( GLenum target, GLint components,
	XDEF	_gluBuild2DMipmaps
_gluBuild2DMipmaps
L530	EQU	-$28
	link	a5,#L530
	movem.l	d2-d7/a2-a4,-(a7)
	move.l	$14(a5),d4
	move.l	$10(a5),d5
	move.l	$1C(a5),d6
	move.l	$20(a5),a4
L492
;   if (width < 1 || height < 1)
	cmp.l	#1,d5
	blt.b	L494
L493
	cmp.l	#1,d4
	bge.b	L495
L494
	move.l	#$18A25,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L495
;   glGetIntegerv( GL_MAX_TEXTURE_SIZE, &maxsize );
	pea	-$C(a5)
	pea	$D33.w
	jsr	_glGetIntegerv
	addq.w	#$8,a7
;   w = round2( width );
	move.l	d5,-(a7)
	jsr	_round2
	addq.w	#4,a7
	move.l	d0,d3
;   if (w>maxsize) 
	cmp.l	-$C(a5),d3
	ble.b	L497
L496
;      w = maxsize;
	move.l	-$C(a5),d3
L497
;   h = round2( height );
	move.l	d4,-(a7)
	jsr	_round2
	addq.w	#4,a7
	move.l	d0,d2
;   if (h>maxsize) 
	cmp.l	-$C(a5),d2
	ble.b	L499
L498
;      h = maxsize;
	move.l	-$C(a5),d2
L499
;   bpp = bytes_per_pixel( format, type );
	move.l	d6,-(a7)
	move.l	$18(a5),-(a7)
	jsr	_bytes_per_pixel
	addq.w	#$8,a7
	move.l	d0,-$24(a5)
;   if (bpp==0) 
	tst.l	-$24(a5)
	bne.b	L501
L500
	move.l	#$18A24,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L501
;   if (w!=width || h!=height) 
	cmp.l	d5,d3
	bne.b	L503
L502
	cmp.l	d4,d2
	beq.b	L508
L503
;      image = malloc( (w+4) * h * bpp );
	move.l	d3,d0
	addq.l	#4,d0
	muls.l	d2,d0
	muls.l	-$24(a5),d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a2
;      if (!image) 
	cmp.w	#0,a2
	bne.b	L505
L504
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L505
;      error = gluScaleImage( format, width, height, type, data
	move.l	a2,-(a7)
	move.l	d6,-(a7)
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	a4,-(a7)
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	move.l	d5,-(a7)
	move.l	$18(a5),-(a7)
	jsr	_gluScaleImage
	add.w	#$24,a7
;      if (error) 
	tst.l	d0
	beq.b	L507
L506
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L507
;	 return 
	bra.b	L509
L508
;      image = (void *) data;
	move.l	a4,a2
L509
;   level = 0;
	moveq	#0,d7
;   while (1) 
	bra	L526
L510
;      glTexImage2D( target, level, components, w, h, 0, format
	move.l	a2,-(a7)
	move.l	d6,-(a7)
	move.l	$18(a5),-(a7)
	clr.l	-(a7)
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	$C(a5),-(a7)
	move.l	d7,-(a7)
	move.l	$8(a5),-(a7)
	jsr	_glTexImage2D
	add.w	#$24,a7
;      if (w==1 && h==1)  
	cmp.l	#1,d3
	bne.b	L513
L511
	cmp.l	#1,d2
	bne.b	L513
L512
;      if (w==1 && h==1)  
	bra	L527
L513
;      neww = (w<2) ? 1 : w/2;
	cmp.l	#2,d3
	bge.b	L515
L514
	moveq	#1,d5
	bra.b	L516
L515
	move.l	d3,d5
	divsl.l	#2,d5
L516
;      newh = (h<2) ? 1 : h/2;
	cmp.l	#2,d2
	bge.b	L518
L517
	moveq	#1,d4
	bra.b	L519
L518
	move.l	d2,d4
	divsl.l	#2,d4
L519
;      newimage = malloc( (neww+4) * newh * bpp );
	move.l	d5,d0
	addq.l	#4,d0
	muls.l	d4,d0
	muls.l	-$24(a5),d0
	move.l	d0,-(a7)
	jsr	_malloc
	addq.w	#4,a7
	move.l	d0,a3
;      if (!newimage) 
	cmp.w	#0,a3
	bne.b	L521
L520
	move.l	#$18A26,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L521
;      error =  gluScaleImage( format, w, h, type, image,
	move.l	a3,-(a7)
	move.l	d6,-(a7)
	move.l	d4,-(a7)
	move.l	d5,-(a7)
	move.l	a2,-(a7)
	move.l	d6,-(a7)
	move.l	d2,-(a7)
	move.l	d3,-(a7)
	move.l	$18(a5),-(a7)
	jsr	_gluScaleImage
	add.w	#$24,a7
;      if (error) 
	tst.l	d0
	beq.b	L523
L522
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts
L523
;      if (image!=data) 
	cmp.l	a4,a2
	beq.b	L525
L524
;	 free( image );
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
L525
;      image = newimage;
	move.l	a3,a2
;      w = neww;
	move.l	d5,d3
;      h = newh;
	move.l	d4,d2
;      level++;
	move.l	d7,d0
	addq.l	#1,d0
	move.l	d0,d7
L526
	bra	L510
L527
;   if (image!=data) 
	cmp.l	a4,a2
	beq.b	L529
L528
;      free( image );
	move.l	a2,-(a7)
	jsr	_free
	addq.w	#4,a7
L529
	moveq	#0,d0
	movem.l	(a7)+,d2-d7/a2-a4
	unlk	a5
	rts

	END
