
;  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:
	.code
	.align	2
__LC0:
	.ascii	"clipgc.$(%d)\000"
	.code
	.align	1
	.global	gc_init
gc_init:
;	.frame	%sp,16,$31		# vars= 0, regs= 2/0, args= 8, extra= 0
;	.mask	0x80010000,-4
;	.fmask	0x00000000,0
	pushn	%r0
	sub	%sp,0x2		; 	xsub	%sp,%sp,8
	ext	_gc+0x0@h	; 	xld.w	%r0,_gc
	ext	_gc+0x0@m
	ld.w	%r0,_gc+0x0@l
	call	gc_free		; 	xcall	gc_free
	ext	pceSystemGetInfo@rm	; 	xcall	pceSystemGetInfo
	call	pceSystemGetInfo@rl
	ext	0x10		; 	xld.w	%r11,[%r10+16]
	ld.w	%r11,[%r10]
	ext	_gc+0x4@ah	; 	xld.w	[_gc+4],%r11
	ext	_gc+0x4@al
	ld.w	[%r8],%r11
	ext	0x14		; 	xld.w	%r10,[%r10+20]
	ld.w	%r10,[%r10]
	ext	_gc+0x8@ah	; 	xld.w	[_gc+8],%r10
	ext	_gc+0x8@al
	ld.w	[%r8],%r10
	ext	__START_DEFAULT_CODE+0x18@ah	; 	xld.w	%r11,[__START_DEFAULT_CODE+24]
	ext	__START_DEFAULT_CODE+0x18@al
	ld.w	%r11,[%r8]
	cmp	%r11,0x0
	jreq	__LX71		; 	xjreq	__L71
	ext	__START_DEFAULT_CODE+0x1c@ah	; 	xld.w	%r10,[__START_DEFAULT_CODE+28]
	ext	__START_DEFAULT_CODE+0x1c@al
	ld.w	%r10,[%r8]
	ext	_gc+0xc@ah	; 	xld.w	[_gc+12],%r10
	ext	_gc+0xc@al
	ld.w	[%r8],%r10
	add	%r10,%r11
	ext	_gc+0x10@ah	; 	xld.w	[_gc+16],%r10
	ext	_gc+0x10@al
	ld.w	[%r8],%r10
	jp	__LX74		; 	xjp	__L74
__LX71:				; __L71:
	ext	__END_FRAM_ADDR+0x0@h	; 	xld.w	%r10,__END_FRAM_ADDR
	ext	__END_FRAM_ADDR+0x0@m
	ld.w	%r10,__END_FRAM_ADDR+0x0@l
	ext	_gc+0xc@ah	; 	xld.w	[_gc+12],%r10
	ext	_gc+0xc@al
	ld.w	[%r8],%r10
	ext	0x80		; 	xld.w	%r10,0x00002000		; 8192
	ld.w	%r10,0x0
	ext	_gc+0x10@ah	; 	xld.w	[_gc+16],%r10
	ext	_gc+0x10@al
	ld.w	[%r8],%r10
	ext	__START_DEFAULT_CODE+0x1c@ah	; 	xld.w	%r10,[__START_DEFAULT_CODE+28]
	ext	__START_DEFAULT_CODE+0x1c@al
	ld.w	%r10,[%r8]
__LX74:				; __L74:
	ext	_gc+0x14@ah	; 	xld.w	[_gc+20],%r10
	ext	_gc+0x14@al
	ld.w	[%r8],%r10
	ext	0x14		; 	xld.w	%r10,[%r0+20]
	ld.w	%r10,[%r0]
	ld.uh	%r10,[%r10]	; 	xld.uh	%r10,[%r10]
	ext	0x290		; 	xcmp	%r10,42033
	cmp	%r10,0x31
	jreq	__LX73		; 	xjreq	__L73
	ext	__LC0+0x0@h	; 	xld.w	%r10,__LC0
	ext	__LC0+0x0@m
	ld.w	%r10,__LC0+0x0@l
	ld.w	[%sp+0x0],%r10	; 	xld.w	[%sp],%r10
	ext	0x2		; 	xld.w	%r10,0x00000098		; 152
	ld.w	%r10,0x18
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX73:				; __L73:
	ext	0x1		; 	xld.w	%r12,0x00000070		; 112
	ld.w	%r12,0x30
	ext	new_pceHeapAlloc+0x0@h	; 	xld.w	%r13,new_pceHeapAlloc
	ext	new_pceHeapAlloc+0x0@m
	ld.w	%r13,new_pceHeapAlloc+0x0@l
	ext	pceVectorSetKs@rm	; 	xcall	pceVectorSetKs
	call	pceVectorSetKs@rl
	ld.w	[%r0],%r10	; 	xld.w	[%r0],%r10
	add	%sp,0x2		; 	xadd	%sp,%sp,8
	popn	%r0
	ret
	.align	1
	.global	gc_free
gc_free:
;	.frame	%sp,8,$31		# vars= 0, regs= 2/0, args= 0, extra= 0
;	.mask	0x80010000,-4
;	.fmask	0x00000000,0
	pushn	%r0
	ext	_gc+0x0@h	; 	xld.w	%r0,_gc
	ext	_gc+0x0@m
	ld.w	%r0,_gc+0x0@l
	ld.w	%r13,[%r0]	; 	xld.w	%r13,[%r0]
	cmp	%r13,0x0
	jreq	__LX75		; 	xjreq	__L75
	ext	0x1		; 	xld.w	%r12,0x00000070		; 112
	ld.w	%r12,0x30
	ext	pceVectorSetKs@rm	; 	xcall	pceVectorSetKs
	call	pceVectorSetKs@rl
	ld.w	%r12,%r0
	ld.w	%r13,0x0
	ld.w	%r14,0x18	; 	xld.w	%r14,0x00000018		; 24
	ext	memset@rm	; 	xcall	memset
	call	memset@rl
__LX75:				; __L75:
	popn	%r0
	ret
; APP
	
	.code
	.global gc_run
gc_run:
	; 呼び出し側関数が、有効なメモリブロックへのポインタを%r0-3に保持している可能性があります。
	; ガーベージコレクターはレジスタからのメモリブロック参照を検査しないので、
	; そのままでは、レジスタから参照されているメモリブロックを誤って開放してしまう可能性があります。
	; この問題を回避するため、%r0-3をスタックに積んでから、ガーベージコレクター本体を呼び出すことにしました。
	pushn %r3
	call _gc_run
	popn %r3
	ret

; NO_APP
	.align	1
_gc_run:
;	.frame	%sp,28,$31		# vars= 4, regs= 4/0, args= 8, extra= 0
;	.mask	0x80070000,-4
;	.fmask	0x00000000,0
	pushn	%r2
	sub	%sp,0x3		; 	xsub	%sp,%sp,12
	ext	_gc+0x0@h	; 	xld.w	%r2,_gc
	ext	_gc+0x0@m
	ld.w	%r2,_gc+0x0@l
	ld.w	%r10,[%r2]	; 	xld.w	%r10,[%r2]
	cmp	%r10,0x0
	jrne	__LX78		; 	xjrne	__L78
	ext	__LC0+0x0@h	; 	xld.w	%r10,__LC0
	ext	__LC0+0x0@m
	ld.w	%r10,__LC0+0x0@l
	ld.w	[%sp+0x0],%r10	; 	xld.w	[%sp],%r10
	ext	0x3		; 	xld.w	%r10,0x000000c5		; 197
	ld.w	%r10,0x5
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX78:				; __L78:
	ld.w	%r12,%sp	; 	xadd	%r12,%sp,8
	add	%r12,0x8
	ext	pceSyncEnterCriticalSection@rm	; 	xcall	pceSyncEnterCriticalSection
	call	pceSyncEnterCriticalSection@rl
	ext	_gc+0x14@ah	; 	xld.w	%r0,[_gc+20]
	ext	_gc+0x14@al
	ld.w	%r0,[%r8]
	cmp	%r0,0x0
	jreq	__LX83		; 	xjreq	__L83
	ext	__LC0+0x0@h	; 	xld.w	%r11,__LC0
	ext	__LC0+0x0@m
	ld.w	%r11,__LC0+0x0@l
__LX85:				; __L85:
	ld.uh	%r10,[%r0]	; 	xld.uh	%r10,[%r0]
	ext	0x290		; 	xcmp	%r10,42033
	cmp	%r10,0x31
	jreq	__LX86		; 	xjreq	__L86
	ld.w	[%sp+0x0],%r11	; 	xld.w	[%sp],%r11
	ext	0x3		; 	xld.w	%r10,0x000000cb		; 203
	ld.w	%r10,0xb
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX86:				; __L86:
	ext	0x2		; 	xld.uh	%r10,[%r0+2]
	ld.uh	%r10,[%r0]
	cmp	%r10,0x1	; 	xcmp	%r10,1
	jreq	__LX91		; 	xjreq	__L91
	jrgt	__LX94		; 	xjrgt	__L94
	cmp	%r10,0x0
	jreq	__LX84		; 	xjreq	__L84
	jp	__LX92		; 	xjp	__L92
__LX94:				; __L94:
	ext	0x3ff		; 	xcmp	%r10,65535
	cmp	%r10,0x3f
	jrne	__LX92		; 	xjrne	__L92
	ext	0x4		; 	xld.w	%r10,[%r0+4]
	ld.w	%r10,[%r0]
	cmp	%r10,0x0
	jreq	__LX84		; 	xjreq	__L84
	ld.w	[%sp+0x0],%r11	; 	xld.w	[%sp],%r11
	ext	0x3		; 	xld.w	%r10,0x000000d3		; 211
	ld.w	%r10,0x13
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX91:				; __L91:
	ext	0x44		; 	xld.w	%r10,0x00001111		; 4369
	ld.w	%r10,0x11
	ext	0x2		; 	xld.h	[%r0+2],%r10
	ld.h	[%r0],%r10
	jp	__LX84		; 	xjp	__L84
__LX92:				; __L92:
	ld.w	[%sp+0x0],%r11	; 	xld.w	[%sp],%r11
	ext	0x3		; 	xld.w	%r10,0x000000db		; 219
	ld.w	%r10,0x1b
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX84:				; __L84:
	ext	0x4		; 	xld.w	%r0,[%r0+4]
	ld.w	%r0,[%r0]
	cmp	%r0,0x0
	jrne	__LX85		; 	xjrne	__L85
__LX83:				; __L83:
	ext	0xc		; 	xld.w	%r12,[%r2+12]
	ld.w	%r12,[%r2]
	ext	0x10		; 	xld.w	%r13,[%r2+16]
	ld.w	%r13,[%r2]
	call	gc_scan		; 	xcall	gc_scan
	ext	__START_DEFAULT_DATA+0x0@h	; 	xld.w	%r12,__START_DEFAULT_DATA
	ext	__START_DEFAULT_DATA+0x0@m
	ld.w	%r12,__START_DEFAULT_DATA+0x0@l
	ext	__END_DEFAULT_DATA+0x0@h	; 	xld.w	%r13,__END_DEFAULT_DATA
	ext	__END_DEFAULT_DATA+0x0@m
	ld.w	%r13,__END_DEFAULT_DATA+0x0@l
	call	gc_scan		; 	xcall	gc_scan
	ext	__START_DEFAULT_BSS+0x0@h	; 	xld.w	%r12,__START_DEFAULT_BSS
	ext	__START_DEFAULT_BSS+0x0@m
	ld.w	%r12,__START_DEFAULT_BSS+0x0@l
	ext	__END_DEFAULT_BSS+0x0@h	; 	xld.w	%r13,__END_DEFAULT_BSS
	ext	__END_DEFAULT_BSS+0x0@m
	ld.w	%r13,__END_DEFAULT_BSS+0x0@l
	call	gc_scan		; 	xcall	gc_scan
__LX96:				; __L96:
	ld.w	%r1,0x0
	ext	0x14		; 	xld.w	%r0,[%r2+20]
	ld.w	%r0,[%r2]
	cmp	%r0,0x0
	jreq	__LX98		; 	xjreq	__L98
__LX102:				; __L102:
	ld.uh	%r10,[%r0]	; 	xld.uh	%r10,[%r0]
	ext	0x290		; 	xcmp	%r10,42033
	cmp	%r10,0x31
	jreq	__LX103		; 	xjreq	__L103
	ext	__LC0+0x0@h	; 	xld.w	%r10,__LC0
	ext	__LC0+0x0@m
	ld.w	%r10,__LC0+0x0@l
	ld.w	[%sp+0x0],%r10	; 	xld.w	[%sp],%r10
	ext	0x3		; 	xld.w	%r10,0x000000e8		; 232
	ld.w	%r10,0x28
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX103:				; __L103:
	ext	0x2		; 	xld.uh	%r10,[%r0+2]
	ld.uh	%r10,[%r0]
	ext	0x88		; 	xcmp	%r10,8738
	cmp	%r10,0x22
	jrne	__LX101		; 	xjrne	__L101
	ext	0x8		; 	xadd	%r12,%r0,8
	add	%r12,%r0
	ext	0x4		; 	xld.w	%r13,[%r0+4]
	ld.w	%r13,[%r0]
	call	gc_scan		; 	xcall	gc_scan
	or	%r1,%r10
	ld.w	%r10,0x1	; 	xld.w	%r10,0x00000001		; 1
	ext	0x2		; 	xld.h	[%r0+2],%r10
	ld.h	[%r0],%r10
__LX101:				; __L101:
	ext	0x4		; 	xld.w	%r0,[%r0+4]
	ld.w	%r0,[%r0]
	cmp	%r0,0x0
	jrne	__LX102		; 	xjrne	__L102
__LX98:				; __L98:
	cmp	%r1,0x0
	jrne	__LX96		; 	xjrne	__L96
	ext	__LC0+0x0@h	; 	xld.w	%r1,__LC0
	ext	__LC0+0x0@m
	ld.w	%r1,__LC0+0x0@l
__LX107:				; __L107:
	ext	0x14		; 	xld.w	%r0,[%r2+20]
	ld.w	%r0,[%r2]
	cmp	%r0,0x0
	jreq	__LX120		; 	xjreq	__L120
__LX113:				; __L113:
	ld.uh	%r10,[%r0]	; 	xld.uh	%r10,[%r0]
	ext	0x290		; 	xcmp	%r10,42033
	cmp	%r10,0x31
	jreq	__LX114		; 	xjreq	__L114
	ld.w	[%sp+0x0],%r1	; 	xld.w	[%sp],%r1
	ext	0x3		; 	xld.w	%r10,0x000000f3		; 243
	ld.w	%r10,0x33
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX114:				; __L114:
	ext	0x2		; 	xld.uh	%r10,[%r0+2]
	ld.uh	%r10,[%r0]
	ext	0x44		; 	xcmp	%r10,4369
	cmp	%r10,0x11
	jrne	__LX112		; 	xjrne	__L112
	ext	0x8		; 	xadd	%r12,%r0,8
	add	%r12,%r0
	ext	pceHeapFree@rm	; 	xcall	pceHeapFree
	call	pceHeapFree@rl
	cmp	%r10,0x0
	jreq	__LX109		; 	xjreq	__L109
	ld.w	[%sp+0x0],%r1	; 	xld.w	[%sp],%r1
	ext	0x3		; 	xld.w	%r10,0x000000f6		; 246
	ld.w	%r10,0x36
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX112:				; __L112:
	ext	0x4		; 	xld.w	%r0,[%r0+4]
	ld.w	%r0,[%r0]
	cmp	%r0,0x0
	jrne	__LX113		; 	xjrne	__L113
__LX109:				; __L109:
	cmp	%r0,0x0
	jrne	__LX107		; 	xjrne	__L107
__LX120:				; __L120:
	ld.w	%r12,%sp	; 	xadd	%r12,%sp,8
	add	%r12,0x8
	ext	pceSyncLeaveCriticalSection@rm	; 	xcall	pceSyncLeaveCriticalSection
	call	pceSyncLeaveCriticalSection@rl
	add	%sp,0x3		; 	xadd	%sp,%sp,12
	popn	%r2
	ret
	.align	1
gc_scan:
;	.frame	%sp,12,$31		# vars= 0, regs= 1/0, args= 8, extra= 0
;	.mask	0x80000000,-4
;	.fmask	0x00000000,0
	sub	%sp,0x2		; 	xsub	%sp,%sp,8
	ld.w	%r15,0x0
	ext	_gc+0x0@h	; 	xld.w	%r4,_gc
	ext	_gc+0x0@m
	ld.w	%r4,_gc+0x0@l
	cmp	%r12,%r13
	jruge	__LX123		; 	xjruge	__L123
__LX125:				; __L125:
	ld.w	%r10,[%r12]	; 	xld.w	%r10,[%r12]
	ext	0x8		; 	xsub	%r14,%r10,8
	sub	%r14,%r10
	ld.w	%r10,%r14
	and	%r10,0x3	; 	xand	%r10,%r10,0x00000003
	jrne	__LX124		; 	xjrne	__L124
	ext	0x4		; 	xld.w	%r10,[%r4+4]
	ld.w	%r10,[%r4]
	cmp	%r14,%r10
	jrult	__LX124		; 	xjrult	__L124
	ext	0x8		; 	xld.w	%r10,[%r4+8]
	ld.w	%r10,[%r4]
	cmp	%r14,%r10
	jruge	__LX124		; 	xjruge	__L124
	ext	0x14		; 	xld.w	%r11,[%r4+20]
	ld.w	%r11,[%r4]
	cmp	%r11,0x0
	jreq	__LX124		; 	xjreq	__L124
__LX130:				; __L130:
	ld.uh	%r10,[%r11]	; 	xld.uh	%r10,[%r11]
	ext	0x290		; 	xcmp	%r10,42033
	cmp	%r10,0x31
	jreq	__LX131		; 	xjreq	__L131
	ext	__LC0+0x0@h	; 	xld.w	%r10,__LC0
	ext	__LC0+0x0@m
	ld.w	%r10,__LC0+0x0@l
	ld.w	[%sp+0x0],%r10	; 	xld.w	[%sp],%r10
	ext	0x4		; 	xld.w	%r10,0x00000110		; 272
	ld.w	%r10,0x10
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX131:				; __L131:
	cmp	%r11,%r14
	jrne	__LX129		; 	xjrne	__L129
	ext	0x2		; 	xld.uh	%r10,[%r11+2]
	ld.uh	%r10,[%r11]
	ext	0x44		; 	xcmp	%r10,4369
	cmp	%r10,0x11
	jrne	__LX124		; 	xjrne	__L124
	ext	0x88		; 	xld.w	%r10,0x00002222		; 8738
	ld.w	%r10,0x22
	ext	0x2		; 	xld.h	[%r11+2],%r10
	ld.h	[%r11],%r10
	ld.w	%r15,0x1	; 	xld.w	%r15,0x00000001		; 1
	jp	__LX124		; 	xjp	__L124
__LX129:				; __L129:
	ext	0x4		; 	xld.w	%r11,[%r11+4]
	ld.w	%r11,[%r11]
	cmp	%r11,0x0
	jrne	__LX130		; 	xjrne	__L130
__LX124:				; __L124:
	add	%r12,0x4	; 	xadd	%r12,%r12,4
	cmp	%r12,%r13
	jrult	__LX125		; 	xjrult	__L125
__LX123:				; __L123:
	ld.w	%r10,%r15
	add	%sp,0x2		; 	xadd	%sp,%sp,8
	ret
	.align	1
new_pceHeapAlloc:
;	.frame	%sp,20,$31		# vars= 0, regs= 3/0, args= 8, extra= 0
;	.mask	0x80030000,-4
;	.fmask	0x00000000,0
	pushn	%r1
	sub	%sp,0x2		; 	xsub	%sp,%sp,8
	ld.w	%r0,%r12
	ext	_gc+0x0@h	; 	xld.w	%r1,_gc
	ext	_gc+0x0@m
	ld.w	%r1,_gc+0x0@l
	ld.w	%r10,[%r1]	; 	xld.w	%r10,[%r1]
	call	%r10
	cmp	%r10,0x0
	jrne	__LX137		; 	xjrne	__L137
	ext	gc_run@rm	; 	xcall	gc_run
	call	gc_run@rl
	ld.w	%r10,[%r1]	; 	xld.w	%r10,[%r1]
	ld.w	%r12,%r0
	call	%r10
	cmp	%r10,0x0
	jrne	__LX137		; 	xjrne	__L137
	ext	__LC0+0x0@h	; 	xld.w	%r10,__LC0
	ext	__LC0+0x0@m
	ld.w	%r10,__LC0+0x0@l
	ld.w	[%sp+0x0],%r10	; 	xld.w	[%sp],%r10
	ext	0x4		; 	xld.w	%r10,0x0000012a		; 298
	ld.w	%r10,0x2a
	ld.w	[%sp+0x1],%r10	; 	xld.w	[%sp+4],%r10
	ext	die@rm		; 	xcall	die
	call	die@rl
__LX137:				; __L137:
	add	%sp,0x2		; 	xadd	%sp,%sp,8
	popn	%r1
	ret

	.lcomm	_gc 24
