
;  GNU C 2.7.2 [AL 1.1, MM 40] RISC NEWS-OS compiled by CC

;  Cc1 defaults:
;  -mmemcpy

;  Cc1 arguments (-G value = 0, Cpu = 3000, ISA = 1):
;  -quiet -dumpbase -O2 -Wall -o

gcc2_compiled.:
__gnu_compiled_c:
; APP
	
	.code
	.align	1
	.global	PDW_Draw_4BN
PDW_Draw_4BN:
	;// [%sp+0] := ret addr
	;// [%sp+4] := obj.dest
	;// [%sp+8] := obj.dx
	;// [%sp+10] := obj.dy
	;// [%sp+12] := obj.dw
	;// [%sp+14] := obj.dh
	;// [%sp+16] := obj.src
	;// [%sp+20] := obj.sx
	;// [%sp+22] := obj.sy
	;// [%sp+24] := obj.clip.left
	;// [%sp+25] := obj.clip.top
	;// [%sp+26] := obj.clip.right
	;// [%sp+27] := obj.clip.bottom
	;// [%sp+28] := obj.disp
	;// [%sp+29] := obj.param
	;// [%sp+30] := obj.type
	;// [%sp+31] := obj.layer
	ld.h	%r4,[%sp+0xa]	; 	xld.h	%r4, [%sp+20]				; %r4  := obj.sx
	ld.h	%r5,[%sp+0xb]	; 	xld.h	%r5, [%sp+22]				; %r5  := obj.sy
	ld.w	%r6,[%sp+0x4]	; 	xld.w	%r6, [%sp+16]				; %r6  := obj.src
	ld.h	%r7,[%sp+0x6]	; 	xld.h	%r7, [%sp+12]				; %r7  := obj.dw
	ext	0xa		; 	xld.h	%r10, [%r6+10]				; %r10 := obj.src->header.w
	ld.h	%r10,[%r6]
	ext	0x14		; 	xld.w	%r11, [%r6+20]				; %r11 := obj.src->buf
	ld.w	%r11,[%r6]
	ext	0x18		; 	xld.w	%r12, [%r6+24]				; %r12 := obj.src->mask
	ld.w	%r12,[%r6]
	;// %r4  := obj.sx
	;// %r5  := obj.sy
	;// %r6  := obj.src
	;// %r7  := obj.dw
	;// %r10 := obj.src->header.w
	;// %r11 := obj.src->buf
	;// %r12 := obj.src->mask
	ext	0x7		; 	xand	%r13, %r4, 7				; %r13 := step = obj.sx & 7
	and	%r13,%r4
	mlt.h	%r10, %r5				; %alr := obj.src->header.w * obj.sy
	ld.w	%r9, %alr				; %r9  := obj.src->header.w * obj.sy
	add	%r4, %r9				; %r4  := obj.src->header.w * obj.sy + obj.sx
	sra	%r4,0x3		; 	xsra	%r4, 3					; %r4  := n = (obj.src->header.w * obj.sy + obj.sx) / 8
	add	%r12, %r4				; %r12 := src_mask = obj.src->mask + n
	sla	%r4,0x2		; 	xsla	%r4, 2					; %r4  := n * 4
	add	%r11, %r4				; %r11 := src_buf = obj.src->buf + n * 4
	;// %r6  := obj.src
	;// %r7  := obj.dw
	;// %r10 := obj.src->header.w
	;// %r11 := src_buf
	;// %r12 := src_mask
	;// %r13 := step
	sra	%r10,0x3	; 	xsra	%r10, 3					; %r10 := obj.src->header.w / 8
	ld.w	%r9, %r13				; %r9  := step
	add	%r9, %r7				; %r9  := step + obj.dw
	sub	%r9,0x1		; 	xsub	%r9, %r9, 1				; %r9  := (step + obj.dw - 1)
	sra	%r9,0x3		; 	xsra	%r9, 3					; %r9  := (step + obj.dw - 1) / 8
	sub	%r10, %r9				; %r10 := src_stride = obj.src->header.w / 8 - (step + obj.dw - 1) / 8
	ld.w	%ahr, %r10				; %ahr := src_stride
	;// %r6  := obj.src
	;// %r7  := obj.dw
	;// %r11 := src_buf
	;// %r12 := src_mask
	;// %r13 := step
	;// %ahr := src_stride
	ld.w	%r4,[%sp+0x1]	; 	xld.w	%r4, [%sp+4]				; %r4  := obj.dest
	ext	0x4		; 	xld.w	%r5, [%r4+4]				; %r5  := obj.dest->buf
	ld.w	%r5,[%r4]
	ld.h	%r9,[%sp+0x4]	; 	xld.h	%r9, [%sp+8]				; %r9  := obj.dx
	ld.h	%r4, [%r4]				; %r4  := obj.dest->w			*anti-interlock*
	add	%r5, %r9				; %r5  := obj.dest->buf + obj.dx
	ld.h	%r10,[%sp+0x5]	; 	xld.h	%r10, [%sp+10]				; %r10 := obj.dy
	ld.h	%r14,[%sp+0x7]	; 	xld.h	%r14, [%sp+14]				; %r14 := y = obj.dh
	;// %r4  := obj.dest->w
	;// %r5  := obj.dest->buf + obj.dx
	;// %r6  := obj.src
	;// %r7  := obj.dw
	;// %r10 := obj.dy
	;// %r11 := src_buf
	;// %r12 := src_mask
	;// %r13 := step
	;// %r14 := y
	;// %ahr := src_stride
	ld.ub	%r9,[%sp+0x1d]	; 	xld.ub	%r9, [%sp+29]				; %r9  := obj.param
	sra	%r9,0x6		; 	xsra	%r9, 6					; %r9  := obj.param(7:6)		!INTERLOCK!
	jrne	PDW_Draw_4BN_REV	; 	xjrne	PDW_Draw_4BN_REV
	;===============================================;
	;	param=0					;
	;===============================================;
	mlt.h	%r4, %r10				; %alr := obj.dest->w * obj.dy
	ld.w	%r9, %alr				; %r9  := obj.dest->w * obj.dy
	add	%r5, %r9				; %r5  := dest_buf = obj.dest->buf + obj.dest->w * obj.dy + obj.dx
	sub	%r4, %r7				; %r4  := dest_stride = obj.dest->w - obj.dw
	ld.w	%r7,0x1		; 	xld.w	%r7, 1					; %r7  := dest_add
	;// %r4  := dest_stride
	;// %r5  := dest_buf
	;// %r6  := obj.src
	;// %r7  := dest_add
	;// %r11 := src_buf
	;// %r12 := src_mask
	;// %r13 := step
	;// %r14 := y
	;// %ahr := src_stride
	;===============================================;
PDW_Draw_4BN_LOOP:
	ext	0x9		; 	xbtst	[%r6+9], 0				; if(obj.src->header.mask)
	btst	[%r6],0x0
	jreq.d	PDW_Draw_4BN_NOMASK_Y	; 	xjreq.d	PDW_Draw_4BN_NOMASK_Y
	 ld.w	%alr, %r4				; %alr := dest_stride			*delay*
	;// %r5  := dest_buf
	;// %r7  := dest_add
	;// %r11 := src_buf
	;// %r12 := src_mask
	;// %r13 := step
	;// %r14 := y
	;// %alr := dest_stride
	;// %ahr := src_stride
	;-----------------------------------------------;
PDW_Draw_4BN_MASK_Y:
	ld.ub	%r6, [%r12]				; %r6  := mask = *src_mask	(0000 0000 0000 0000 0000 0000 abcd efgh)
	ld.w	%r4, [%r11]				; %r4  := pixel = *src_buf	(gggg hhhh eeee ffff cccc dddd aaaa bbbb)
	rr	%r6,0x8		; 	xrr	%r6, 8					; %r6  := mask			(abcd efgh 0000 0000 0000 0000 0000 0000)
	swap	%r4, %r4				; %r4  := pixel			(aaaa bbbb cccc dddd eeee ffff gggg hhhh)
	rl	%r6, %r13				; %r6  := mask
	rl	%r4, %r13				; %r4  := pixel
	rl	%r4, %r13
	rl	%r4, %r13
	rl	%r4, %r13
	ld.h	%r10,[%sp+0x6]	; 	xld.h	%r10, [%sp+12]				; %r10 := x = obj.dw
	ld.w	%r15,0x8	; 	xld.w	%r15, 8					; %r15 := 8
	sub	%r15, %r13				; %r15 := i = 8 - step
	;// %r4  := pixel
	;// %r5  := dest_buf
	;// %r6  := mask
	;// %r7  := dest_add
	;// %r10 := x
	;// %r11 := src_buf
	;// %r12 := src_mask
	;// %r13 := step
	;// %r14 := y
	;// %r15 := i
	;// %alr := dest_stride
	;// %ahr := src_stride
PDW_Draw_4BN_MASK_X:
	add	%r6, %r6				; %r6  := mask <<= 1		(bcde fgh0 0000 0000 0000 0000 0000 0000)
	jruge.d	5
	 rl	%r4, 4					; %r4  := pixel <<= 4		(bbbb cccc dddd eeee ffff gggg hhhh aaaa)	*delay*
	 ext	15					;// xand %r9,%r4,15
	 and	%r9, %r4				; %r9  := pixel & 15
	 ld.b	[%r5], %r9				; *dest_buf = pixel & 15
	sub	%r10,0x1	; 	xsub	%r10, %r10, 1				; %r10 := --x
	jreq.d	PDW_Draw_4BN_MASK_X_BREAK	; 	xjreq.d	PDW_Draw_4BN_MASK_X_BREAK		; if(!--x) break
	 add	%r5, %r7				; %r5  := dest_buf += dest_add		*delay*
	sub	%r15,0x1	; 	xsub	%r15, %r15, 1				; %r15 := --i
	jrne	PDW_Draw_4BN_MASK_X	; 	xjrne	PDW_Draw_4BN_MASK_X			; if(!--i)
	ld.w	%r15,0x8	; 	xld.w	%r15, 8					;   %r15 := i = 8
	add	%r12,0x1	; 	xadd	%r12, %r12, 1				;   %r12 := ++src_mask
	add	%r11,0x4	; 	xadd	%r11, %r11, 4				;   %r11 := ++src_buf
	ld.ub	%r6, [%r12]				;   %r6  := mask = *++src_mask
	ld.w	%r4, [%r11]				;   %r4  := pixel = *++src_buf
	rr	%r6,0x8		; 	xrr	%r6, 8					;   %r6  := mask
	jp.d	PDW_Draw_4BN_MASK_X	; 	xjp.d	PDW_Draw_4BN_MASK_X
	 swap	%r4, %r4				;   %r4  := pixel			*delay*
PDW_Draw_4BN_MASK_X_BREAK:
	ld.w	%r9, %ahr				; %r9  := src_stride
	add	%r12, %r9				; %r12 := src_mask += src_stride
	sla	%r9,0x2		; 	xsla	%r9, 2					; %r9  := src_stride * 4
	add	%r11, %r9				; %r11 := src_buf += src_stride * 4
	ld.w	%r9, %alr				; %r9  := dest_stride
	sub	%r14,0x1	; 	xsub	%r14, %r14, 1				; %r14 := --y
	jrne.d	PDW_Draw_4BN_MASK_Y	; 	xjrne.d	PDW_Draw_4BN_MASK_Y			; while(--y)
	 add	%r5, %r9				; %r5  := dest_buf += dest_stride	*delay*
	ret
	;-----------------------------------------------;
PDW_Draw_4BN_NOMASK_Y:
	ld.w	%r4, [%r11]				; %r4  := pixel = *src_buf	(gggg hhhh eeee ffff cccc dddd aaaa bbbb)
	ld.h	%r10,[%sp+0x6]	; 	xld.h	%r10, [%sp+12]				; <-------------------+			*anti-interlock*
	swap	%r4, %r4				; %r4  := pixel       |		(aaaa bbbb cccc dddd eeee ffff gggg hhhh)
	rl	%r4, %r13				; %r4  := pixel       |
	rl	%r4, %r13				;                     |
	rl	%r4, %r13				;                     |
	rl	%r4, %r13				;                     |
;//	xld.h	%r10, [%sp+12]				; %r10 := x = obj.dw -+
	ld.w	%r15,0x8	; 	xld.w	%r15, 8					; %r15 := 8
	sub	%r15, %r13				; %r15 := i = 8 - step
	;// %r4  := pixel
	;// %r5  := dest_buf
	;// %r7  := dest_add
	;// %r10 := x
	;// %r11 := src_buf
	;// %r13 := step
	;// %r14 := y
	;// %r15 := i
	;// %alr := dest_stride
	;// %ahr := src_stride
PDW_Draw_4BN_NOMASK_X:
	rl	%r4,0x4		; 	xrl	%r4, 4					; %r4  := pixel <<= 4		(bbbb cccc dddd eeee ffff gggg hhhh aaaa)
	ext	0xf		; 	xand	%r9, %r4, 15				; %r9  := pixel & 15
	and	%r9,%r4
	ld.b	[%r5], %r9				; *dest_buf = pixel & 15
	sub	%r10,0x1	; 	xsub	%r10, %r10, 1				; %r10 := --x
	jreq.d	PDW_Draw_4BN_NOMASK_X_BREAK	; 	xjreq.d	PDW_Draw_4BN_NOMASK_X_BREAK		; if(!--x) break
	 add	%r5, %r7				; %r5  := dest_buf += dest_add		*delay*
	sub	%r15,0x1	; 	xsub	%r15, %r15, 1				; %r15 := --i
	jrne	PDW_Draw_4BN_NOMASK_X	; 	xjrne	PDW_Draw_4BN_NOMASK_X			; if(!--i)
	ld.w	%r15,0x8	; 	xld.w	%r15, 8					;   %r15 := i = 8
	add	%r11,0x4	; 	xadd	%r11, %r11, 4				;   %r11 := ++src_buf
	ld.w	%r4, [%r11]				;   %r4  := pixel = *++src_buf
	jp.d	PDW_Draw_4BN_NOMASK_X	; 	xjp.d	PDW_Draw_4BN_NOMASK_X
	 swap	%r4, %r4				;   %r4  := pixel			*delay*
PDW_Draw_4BN_NOMASK_X_BREAK:
	ld.w	%r9, %ahr				; %r9  := src_stride
	sla	%r9,0x2		; 	xsla	%r9, 2					; %r9  := src_stride * 4
	add	%r11, %r9				; %r11 := src_buf += src_stride * 4
	ld.w	%r9, %alr				; %r9  := dest_stride
	sub	%r14,0x1	; 	xsub	%r14, %r14, 1				; %r14 := --y
	jrne.d	PDW_Draw_4BN_NOMASK_Y	; 	xjrne.d	PDW_Draw_4BN_NOMASK_Y			; while(--y)
	 add	%r5, %r9				; %r5  := dest_buf += dest_stride	*delay*
	ret
	;===============================================;
PDW_Draw_4BN_REV:
	cmp	%r9,0x2		; 	xcmp	%r9, 2
	jrlt	PDW_Draw_4BN_REVY	; 	xjrlt	PDW_Draw_4BN_REVY
	jrgt	PDW_Draw_4BN_REVXY	; 	xjrgt	PDW_Draw_4BN_REVXY
	;===============================================;
	;	param=DRW_REVX				;
	;===============================================;
	mlt.h	%r4, %r10				; %alr := obj.dest->w * obj.dy
	ld.w	%r9, %alr				; %r9  := obj.dest->w * obj.dy
	add	%r5, %r9				; %r5  := obj.dest->buf + obj.dest->w * obj.dy + obj.dx
	add	%r5, %r7				; %r5  := obj.dest->buf + obj.dest->w * obj.dy + obj.dx + obj.dw
	sub	%r5,0x1		; 	xsub	%r5, %r5, 1				; %r5  := dest_buf = obj.dest->buf + obj.dest->w * obj.dy + obj.dx + obj.dw - 1
	add	%r4, %r7				; %r4  := dest_stride = obj.dest->w + obj.dw
	jp.d	PDW_Draw_4BN_LOOP	; 	xjp.d	PDW_Draw_4BN_LOOP
	 ld.w	%r7, -1					; %r7  := dest_add			*delay*
	;// %r4  := dest_stride
	;// %r5  := dest_buf
	;// %r6  := obj.src
	;// %r7  := dest_add
	;// %r11 := src_buf
	;// %r12 := src_mask
	;// %r13 := step
	;// %r14 := y
	;// %ahr := src_stride
	;===============================================;
	;	param=DRW_REVY				;
	;===============================================;
PDW_Draw_4BN_REVY:
	add	%r10, %r14				; %r10 := obj.dy + obj.dh
	sub	%r10,0x1	; 	xsub	%r10, %r10, 1				; %r10 := obj.dy + obj.dh - 1
	mlt.h	%r4, %r10				; %alr := obj.dest->w * (obj.dy + obj.dh - 1)
	ld.w	%r9, %alr				; %r9  := obj.dest->w * (obj.dy + obj.dh - 1)
	add	%r5, %r9				; %r5  := dest_buf = obj.dest->buf + obj.dest->w * (obj.dy + obj.dh - 1) + obj.dx
	add	%r4, %r7				; %r4  := obj.dest->w + obj.dw
	not	%r4, %r4				; %r4  := -(obj.dest->w + obj.dw) - 1
	add	%r4,0x1		; 	xadd	%r4, %r4, 1				; %r4  := dest_stride = -obj.dest->w - obj.dw
	jp.d	PDW_Draw_4BN_LOOP	; 	xjp.d	PDW_Draw_4BN_LOOP
	 ld.w	%r7, 1					; %r7  := dest_add			*delay*
	;// %r4  := dest_stride
	;// %r5  := dest_buf
	;// %r6  := obj.src
	;// %r7  := dest_add
	;// %r11 := src_buf
	;// %r12 := src_mask
	;// %r13 := step
	;// %r14 := y
	;// %ahr := src_stride
	;===============================================;
	;	param=DRW_REVX|DRW_REVY			;
	;===============================================;
PDW_Draw_4BN_REVXY:
	add	%r10, %r14				; %r10 := obj.dy + obj.dh
	sub	%r10,0x1	; 	xsub	%r10, %r10, 1				; %r10 := obj.dy + obj.dh - 1
	mlt.h	%r4, %r10				; %alr := obj.dest->w * (obj.dy + obj.dh - 1)
	ld.w	%r9, %alr				; %r9  := obj.dest->w * (obj.dy + obj.dh - 1)
	add	%r5, %r9				; %r5  := obj.dest->buf + obj.dest->w * (obj.dy + obj.dh - 1) + obj.dx
	add	%r5, %r7				; %r5  := obj.dest->buf + obj.dest->w * (obj.dy + obj.dh - 1) + obj.dx + obj.dw
	sub	%r5,0x1		; 	xsub	%r5, %r5, 1				; %r5  := dest_buf = obj.dest->buf + obj.dest->w * (obj.dy + obj.dh - 1) + obj.dx + obj.dw - 1
	sub	%r4, %r7				; %r4  := obj.dest->w - obj.dw
	not	%r4, %r4				; %r4  := -(obj.dest->w - obj.dw) - 1
	add	%r4,0x1		; 	xadd	%r4, %r4, 1				; %r4  := dest_stride = -obj.dest->w + obj.dw
	jp.d	PDW_Draw_4BN_LOOP	; 	xjp.d	PDW_Draw_4BN_LOOP
	 ld.w	%r7, -1					; %r7  := dest_add			*delay*
	;// %r4  := dest_stride
	;// %r5  := dest_buf
	;// %r6  := obj.src
	;// %r7  := dest_add
	;// %r11 := src_buf
	;// %r12 := src_mask
	;// %r13 := step
	;// %r14 := y
	;// %ahr := src_stride
	;===============================================;

