;	StormC Compiler V 3.00.28.PPC

	XREF	_shared_pens
	XREF	@__shared_pens

	SECTION	":0",Code

;	void DrawMandelbrot(struct Rect *view, struct DrawMsg *gfxport, int 
	XDEF	_DrawMandelbrot
_DrawMandelbrot:
	stw	r31,-4(r1)
	stw	r30,-8(r1)
	stw	r29,-12(r1)
	stw	r13,-16(r1)
	mflr	r0
	stw	r0,8(r1)
	stwu	r1,-176(r1)
;		width = gfxport->xsize;
	lwz	r12,12(r4)
;		height = gfxport->ysize;
	lwz	r13,16(r4)
;		dx = (view->x1 - view->x0) / (double) width;
	addis	r0,r0,17200
	lfd	f2,16(r3)
	lfd	f1,0(r3)
	fsub	f2,f2,f1
	stw	r0,-8(r1)
	xoris	r0,r12,-32768
	stw	r0,-4(r1)
	addis	r0,r0,-32768
	lfd	f1,-8(r1)
	stw	r0,-4(r1)
	lfd	f13,-8(r1)
	fsub	f1,f1,f13
	fdiv	f8,f2,f1
;		dy = (view->y1 - view->y0) / (double) height;
	addis	r0,r0,17200
	lfd	f2,24(r3)
	lfd	f1,8(r3)
	stw	r0,-8(r1)
	xoris	r0,r13,-32768
	stw	r0,-4(r1)
	addis	r0,r0,-32768
	fsub	f2,f2,f1
	lfd	f1,-8(r1)
	stw	r0,-4(r1)
	lfd	f13,-8(r1)
	fsub	f1,f1,f13
	fdiv	f9,f2,f1
;		cy = view->y0;
	lfd	f7,8(r3)
;		for (y = gfxport->offsety;
	lwz	r11,8(r4)
	b	L116
L52
;		
;			cx = view->x0;
	lfd	f5,0(r3)
;			for (x = gfxport->offsetx;
	lwz	r8,4(r4)
	b	L114
L53
;			
;				double zx = 0.0;
	lfd	f2,@x0x0(r2)
;				double zy = 0.0;
	fmr	f1,f2
;				int i = N;
	mr	r6,r5	;dst=src
;				double c = 16.0;
	lfd	f6,@x40300000x0(r2)
;				
L54
;				
;					h1 = zx*zx;
	fmul	f4,f2,f2
;					h2 = zy*zy;
	fmul	f3,f1,f1
;					g = zx*zy;
	fmul	f1,f2,f1
;					h3 = h1 - h2;
	fsub	f2,f4,f3
;					h4 = g+g;
	fadd	f1,f1,f1
;					zx = h3 + cx;
	fadd	f2,f2,f5
;					zy = h4 + cy;
	fadd	f1,f1,f7
;					i--;
	addi	r6,r6,-1
	fadd	f3,f4,f3
	fcmpu	cr1,f3,f6
	bge	cr1,L56
	cmpi	cr0,r6,0
	bne	cr0,L54
L56
;				i = N - i;
	subf	r6,r6,r5	;dst=b-a
;				address = gfxport->memptr + y * gfxport->bytesperrow + x * gfx
	lwz	r9,0(r4)
	lhz	r7,20(r4)
	rlwinm	r7,r7,0,16,31
	mullw	r7,r11,r7
	add	r9,r9,r7
	lhz	r7,22(r4)
	rlwinm	r7,r7,0,16,31
	mullw	r7,r8,r7
	add	r7,r9,r7
;				switch (gfxport->colormodel)
	lhz	r9,24(r4)
	cmpli	cr0,r9,6
	bgt	cr0,L118
	beq	cr0,L81
	cmpli	cr0,r9,2
	bgt	cr0,L119
	beq	cr0,L65
	cmpli	cr0,r9,0
	beq	cr0,L57
	cmpli	cr0,r9,1
	beq	cr0,L61
	b	L113
L119
	cmpli	cr0,r9,3
	beq	cr0,L69
	cmpli	cr0,r9,4
	beq	cr0,L73
	cmpli	cr0,r9,5
	beq	cr0,L77
	b	L113
L118
	cmpli	cr0,r9,10
	bgt	cr0,L120
	beq	cr0,L97
	cmpli	cr0,r9,7
	beq	cr0,L85
	cmpli	cr0,r9,8
	beq	cr0,L89
	cmpli	cr0,r9,9
	beq	cr0,L93
	b	L113
L120
	cmpli	cr0,r9,11
	beq	cr0,L101
	cmpli	cr0,r9,12
	beq	cr0,L105
	cmpli	cr0,r9,13
	beq	cr0,L109
	b	L113
L57
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L59
;							*address = shared_pens[(UBYTE)(i*256/N)];
	rlwinm	r6,r6,8,0,23
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r6,r6,0,24,31
	rlwinm	r6,r6,0,24,31
	rlwinm	r6,r6,0,24,31
	addi	r9,r2,_shared_pens
	add	r6,r9,r6
	lbz	r6,0(r6)
	stb	r6,0(r7)
	b	L60
L59
;							*address = shared_pens[0];
	addi	r6,r2,_shared_pens
	lbz	r6,0(r6)
	stb	r6,0(r7)
L60
;						
	b	L113
L61
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L63
;							*((UWORD *) address) = ((i*32/N) << 10) | ((i*32/N) << 5)
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,10,0,21
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,5,0,26
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r9,r9,5,0,26
	or	r9,r10,r9
	or	r6,r9,r6
	rlwinm	r6,r6,0,16,31
	rlwinm	r6,r6,0,16,31
	sth	r6,0(r7)
	b	L64
L63
;							*((UWORD *) address) = 0;
	addi	r10,r0,0
	sth	r10,0(r7)
L64
;						
	b	L113
L65
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L67
;							*((UWORD *) address) = ((i*32/N) << 10) | ((i*32/N) << 5)
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,10,0,21
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,5,0,26
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r9,r9,5,0,26
	or	r9,r10,r9
	or	r6,r9,r6
	rlwinm	r6,r6,0,16,31
	rlwinm	r6,r6,0,16,31
	sth	r6,0(r7)
	b	L68
L67
;							*((UWORD *) address) = 0;
	addi	r10,r0,0
	sth	r10,0(r7)
L68
;						
	b	L113
L69
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L71
;						
;							UWORD c = ((i*32/N) << 10) | ((i*32/N) << 5) | (i*32/N);
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,10,0,21
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,5,0,26
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r9,r9,5,0,26
	or	r9,r10,r9
	or	r6,r9,r6
	rlwinm	r6,r6,0,16,31
;							*address++ = c;
	mr	r9,r7	;dst=src
	rlwinm	r6,r6,0,16,31
	rlwinm	r10,r6,0,24,31
	rlwinm	r10,r10,0,24,31
	stb	r10,0(r9)
	addi	r7,r7,1
;							*address = c >> 8;
	rlwinm	r6,r6,0,16,31
	rlwinm	r6,r6,0,16,31
	srawi	r6,r6,8
	rlwinm	r6,r6,0,24,31
	rlwinm	r6,r6,0,24,31
	stb	r6,0(r7)
	b	L72
L71
;							*((UWORD *) address) = 0;
	addi	r10,r0,0
	sth	r10,0(r7)
L72
;						
	b	L113
L73
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L75
;						
;							UWORD c = ((i*32/N) << 10) | ((i*32/N) << 5) | (i*32/N);
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,10,0,21
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,5,0,26
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r9,r9,5,0,26
	or	r9,r10,r9
	or	r6,r9,r6
	rlwinm	r6,r6,0,16,31
;							*address++ = c;
	mr	r9,r7	;dst=src
	rlwinm	r6,r6,0,16,31
	rlwinm	r10,r6,0,24,31
	rlwinm	r10,r10,0,24,31
	stb	r10,0(r9)
	addi	r7,r7,1
;							*address = c >> 8;
	rlwinm	r6,r6,0,16,31
	rlwinm	r6,r6,0,16,31
	srawi	r6,r6,8
	rlwinm	r6,r6,0,24,31
	rlwinm	r6,r6,0,24,31
	stb	r6,0(r7)
	b	L76
L75
;							*((UWORD *) address) = 0;
	addi	r10,r0,0
	sth	r10,0(r7)
L76
;						
	b	L113
L77
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L79
;							*((UWORD *) address) = ((i*32/N) << 11) | ((i*64/N) << 5)
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,11,0,20
	rlwinm	r9,r6,6,0,25
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,5,0,26
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r9,r9,5,0,26
	or	r9,r10,r9
	or	r6,r9,r6
	rlwinm	r6,r6,0,16,31
	rlwinm	r6,r6,0,16,31
	sth	r6,0(r7)
	b	L80
L79
;							*((UWORD *) address) = 0;
	addi	r10,r0,0
	sth	r10,0(r7)
L80
;						
	b	L113
L81
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L83
;							*((UWORD *) address) = ((i*32/N) << 11) | ((i*64/N) << 5)
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,11,0,20
	rlwinm	r9,r6,6,0,25
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,5,0,26
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r9,r9,5,0,26
	or	r9,r10,r9
	or	r6,r9,r6
	rlwinm	r6,r6,0,16,31
	rlwinm	r6,r6,0,16,31
	sth	r6,0(r7)
	b	L84
L83
;							*((UWORD *) address) = 0;
	addi	r10,r0,0
	sth	r10,0(r7)
L84
;						
	b	L113
L85
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L87
;						
;							UWORD c = ((i*32/N) << 11) | ((i*64/N) << 5) | (i*32/N);
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,11,0,20
	rlwinm	r9,r6,6,0,25
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,5,0,26
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r9,r9,5,0,26
	or	r9,r10,r9
	or	r6,r9,r6
	rlwinm	r6,r6,0,16,31
;							*address++ = c;
	mr	r9,r7	;dst=src
	rlwinm	r6,r6,0,16,31
	rlwinm	r10,r6,0,24,31
	rlwinm	r10,r10,0,24,31
	stb	r10,0(r9)
	addi	r7,r7,1
;							*address = c >> 8;
	rlwinm	r6,r6,0,16,31
	rlwinm	r6,r6,0,16,31
	srawi	r6,r6,8
	rlwinm	r6,r6,0,24,31
	rlwinm	r6,r6,0,24,31
	stb	r6,0(r7)
	b	L88
L87
;							*((UWORD *) address) = 0;
	addi	r10,r0,0
	sth	r10,0(r7)
L88
;						
	b	L113
L89
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L91
;						
;							UWORD c = ((i*32/N) << 11) | ((i*64/N) << 5) | (i*32/N);
	rlwinm	r9,r6,5,0,26
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,11,0,20
	rlwinm	r9,r6,6,0,25
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,5,0,26
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r9,r9,5,0,26
	or	r9,r10,r9
	or	r6,r9,r6
	rlwinm	r6,r6,0,16,31
;							*address++ = c;
	mr	r9,r7	;dst=src
	rlwinm	r6,r6,0,16,31
	rlwinm	r10,r6,0,24,31
	rlwinm	r10,r10,0,24,31
	stb	r10,0(r9)
	addi	r7,r7,1
;							*address = c >> 8;
	rlwinm	r6,r6,0,16,31
	rlwinm	r6,r6,0,16,31
	srawi	r6,r6,8
	rlwinm	r6,r6,0,24,31
	rlwinm	r6,r6,0,24,31
	stb	r6,0(r7)
	b	L92
L91
;							*((UWORD *) address) = 0;
	addi	r10,r0,0
	sth	r10,0(r7)
L92
;						
	b	L113
L93
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L95
;						
;							*((UWORD *) address)++ = ((i*256/N) << 8) | (i*256/N);
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,8,0,23
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	or	r9,r10,r9
	rlwinm	r10,r9,0,16,31
	rlwinm	r10,r10,0,16,31
	mr	r9,r7	;dst=src
	sth	r10,0(r9)
	addi	r7,r7,2
;							*address = i*256/N;
	rlwinm	r6,r6,8,0,23
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r6,r6,0,24,31
	rlwinm	r6,r6,0,24,31
	stb	r6,0(r7)
	b	L96
L95
;						
;							*((UWORD *) address)++ = 0;
	mr	r6,r7	;dst=src
	addi	r7,r7,2
	addi	r10,r0,0
	sth	r10,0(r6)
;							*address = 0;
	stb	r10,0(r7)
L96
;						
	b	L113
L97
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L99
;						
;							*((UWORD *) address)++ = ((i*256/N) << 8) | (i*256/N);
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,8,0,23
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	or	r9,r10,r9
	rlwinm	r10,r9,0,16,31
	mr	r9,r7	;dst=src
	rlwinm	r10,r10,0,16,31
	sth	r10,0(r9)
	addi	r7,r7,2
;							*address = i*256/N;
	rlwinm	r6,r6,8,0,23
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r6,r6,0,24,31
	rlwinm	r6,r6,0,24,31
	stb	r6,0(r7)
	b	L100
L99
;						
;							*((UWORD *) address)++ = 0;
	mr	r6,r7	;dst=src
	addi	r7,r7,2
	addi	r10,r0,0
	sth	r10,0(r6)
;							*address = 0;
	stb	r10,0(r7)
L100
;						
	b	L113
L101
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L103
;						
;							*((ULONG *) address) = ((i*256/N) << 16) | ((i*256/N) <<
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,16,0,15
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,8,0,23
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r9,r9,8,0,23
	or	r9,r10,r9
	or	r6,r9,r6
	stw	r6,0(r7)
	b	L104
L103
;						
;							*((ULONG *) address) = 0;
	addi	r10,r0,0
	stw	r10,0(r7)
L104
;						
	b	L113
L105
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L107
;						
;							*((ULONG *) address) = ((i*256/N) << 24) | ((i*256/N) <<
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,24,0,7
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,8,0,23
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r6,r6,8,0,23
	rlwinm	r9,r9,16,0,15
	or	r9,r10,r9
	or	r6,r9,r6
	stw	r6,0(r7)
	b	L108
L107
;						
;							*((ULONG *) address) = 0;
	addi	r10,r0,0
	stw	r10,0(r7)
L108
;						
	b	L113
L109
;						if (i < N)
	cmp	cr0,r6,r5
	bge	cr0,L111
;						
;							*((ULONG *) address) = ((i*256/N) << 24) | ((i*256/N) <<
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r10,r9,24,0,7
	rlwinm	r9,r6,8,0,23
	divw	r9,r9,r5	;dst = a/b
	rlwinm	r6,r6,8,0,23
	divw	r6,r6,r5	;dst = a/b
	rlwinm	r6,r6,8,0,23
	rlwinm	r9,r9,16,0,15
	or	r9,r10,r9
	or	r6,r9,r6
	stw	r6,0(r7)
	b	L112
L111
;						
;							*((ULONG *) address) = 0;
	addi	r10,r0,0
	stw	r10,0(r7)
L112
;						
L113
;				cx += dx;
	fadd	f5,f5,f8
	addi	r8,r8,1
L114
	cmp	cr0,r8,r12
	blt	cr0,L53
;			cy += dy;
	fadd	f7,f7,f9
	addi	r11,r11,1
L116
	cmp	cr0,r11,r13
	blt	cr0,L52
	addi	r1,r1,176
	lwz	r0,8(r1)
	mtlr	r0
	lwz	r31,-4(r1)
	lwz	r30,-8(r1)
	lwz	r29,-12(r1)
	lwz	r13,-16(r1)
	blr

	SECTION	"@x40300000x0:1",Data
	CNOP	0,8
	XDEF	@x40300000x0
@x40300000x0:
	CNOP	0,8
	dc.l	$40300000,0

	SECTION	"@x0x0:1",Data
	CNOP	0,8
	XDEF	@x0x0
@x0x0:
	CNOP	0,8
	dc.l	0,0

	SECTION	"@__DrawMandelbrot:1",Data
	XDEF	@__DrawMandelbrot
@__DrawMandelbrot:
	dc.l	_DrawMandelbrot

	END
