
;  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	draw_scanline_woz_color
	;// %r12 := v0
	;// %r13 := v1
	;// %r14 := param
draw_scanline_woz_color:
	ld.uh	%r4, [%r12]+			; %r4  := v0->x
	ld.uh	%r5, [%r12]			; %r5  := v0->y
	ld.uh	%r6, [%r13]			; %r6  := v1->x
	ld.w	%r7, [%r14]+			; %r7  := {surface_w,surface_h}
	ld.w	%r10, [%r14]			; %r10 := surface_vbuff
	cmp	%r4, %r6
	jrle.d	5				; if(v0->x > v1->x)
	add	%r14, 20			; %r14 := &param->fore_color			*delay*
	 xor	%r4, %r6			;   %r4  :=                 (v0->x ^ v1->x)
	 xor	%r6, %r4			;   %r6  := v0->x = v1->x ^ (v0->x ^ v1->x)
	 xor	%r4, %r6			;   %r4  := v1->x =         (v0->x ^ v1->x) ^ v0->x
	ld.ub	%r11, [%r14]			; %r11 := fore_color
	;// %r4  := v0->x
	;// %r5  := v0->y
	;// %r6  := v1->x
	;// %r7  := {surface_w,surface_h}	(surface_hはmlt.hによって無視されます)
	;// %r10 := surface_vbuff
	;// %r11 := fore_color

	;// 始点アドレスを求めます。
	mlt.h	%r5, %r7			; %alr :=       surface_w * v0->y
	ld.w	%r9, %alr			; %r9  :=       surface_w * v0->y
	add	%r9, %r4			; %r9  := ofs = surface_w * v0->y + v0->x
	add	%r10, %r9			; %r10 := vptr = surface_vbuff + ofs
	;// %r4  := v0->x
	;// %r6  := v1->x
	;// %r10 := vptr
	;// %r11 := fore_color

	;// 主軸のDDAセットアップ。
	jp.d	draw_scanline_woz_color_NEXT
	sub	%r6, %r4			; %r6  := n = v1->x - v0->x			*delay*
	;// %r6     := n
	;// %r10    := vptr
	;// %r11    := fore_color
	;// %psr(Z) := n==0

	;// DDAループ。
draw_scanline_woz_color_LOOP:
	ld.b	[%r10]+, %r11			; *vptr = fore_color
draw_scanline_woz_color_NEXT:
	;// 初回はここから始まります。
	;// ・n==0ならば、何も描かずに抜けます。
	;//   n=(n-1)になりますが、ダミー動作です。
	;// ・n!=0ならば、n=(n-1)、フラグに(n-1)==0を反映して、ループします。
	;// 2回目にここへ来たときも、フラグが維持されていることを利用します。
	;// ループカウンタとフラグは前のループの遅延スロットで先に変化させておき、
	;// 次のループでその結果を参照するわけです。
	jrne.d	draw_scanline_woz_color_LOOP
	sub	%r6, 1				;						*delay*
	;// %r6     := (n-1)
	;// %r10    := vptr
	;// %r11    := fore_color
	;// %psr(Z) := (n-1)==0
	ret

