// File: /workspace/github_c_makefile_star2_O0/azhai[P]mlite/mlite.c
// Function: gc
int gc(void) {
	int	i, k;
	char	buf[100];

	if (Run_stats)
		count(&Collections);
	for (i=0; i<MAX_STREAMS; i++)
		if (Stream_flags[i] & LOCK_TAG)
			Stream_flags[i] |= USED_TAG;
		else
			Stream_flags[i] &= ~USED_TAG;
	for (i=0; GC_root[i] != NULL; i++)
		mark(GC_root[i][0]);
	k = 0;
	Free_list = NIL;
	for (i=0; i<Cons_pool_size; i++) {
		if (!(Tag[i] & MARK_TAG)) {
			cdr(i) = Free_list;
			Free_list = i;
			k++;
		}
		else {
			Tag[i] &= ~MARK_TAG;
		}
	}
	for (i=0; i<MAX_STREAMS; i++) {
		if (!(Stream_flags[i] & USED_TAG) && Streams[i] != NULL) {
			fclose(Streams[i]);
			Streams[i] = NULL;
		}
	}
	if (Verbose_GC > 1) {
		sprintf(buf, "GC: %d nodes reclaimed", k);
		pr(buf); nl();
	}
	return k;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
cmpl $0x0, 0x24251(%rip)     # 0x28630
je 0x43ed
leaq 0x2424c(%rip), %rdi     # 0x28634
callq 0x3390
movl $0x0, -0x4(%rbp)
cmpl $0x20, -0x4(%rbp)
jge 0x445e
movslq -0x4(%rbp), %rcx
leaq 0x2420b(%rip), %rax     # 0x28610
movzbl (%rax,%rcx), %eax
andl $0x80, %eax
cmpl $0x0, %eax
je 0x4433
movslq -0x4(%rbp), %rcx
leaq 0x241f2(%rip), %rax     # 0x28610
movzbl (%rax,%rcx), %eax
orl $0x40, %eax
movb %al, %dl
leaq 0x241e2(%rip), %rax     # 0x28610
movb %dl, (%rax,%rcx)
jmp 0x4451
movslq -0x4(%rbp), %rcx
leaq 0x241d2(%rip), %rax     # 0x28610
movzbl (%rax,%rcx), %eax
andl $-0x41, %eax
movb %al, %dl
leaq 0x241c2(%rip), %rax     # 0x28610
movb %dl, (%rax,%rcx)
jmp 0x4453
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x43f4
movl $0x0, -0x4(%rbp)
movslq -0x4(%rbp), %rcx
leaq 0x22e30(%rip), %rax     # 0x272a0
cmpq $0x0, (%rax,%rcx,8)
je 0x4499
movslq -0x4(%rbp), %rcx
leaq 0x22e1e(%rip), %rax     # 0x272a0
movq (%rax,%rcx,8), %rax
movq (%rax), %rdi
callq 0x3ea0
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x4465
movl $0x0, -0x8(%rbp)
movq $-0x1, 0x2419d(%rip) # 0x28648
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
cmpl 0x24129(%rip), %eax     # 0x285e4
jge 0x4522
movq 0x2412c(%rip), %rax     # 0x285f0
movslq -0x4(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x2, %eax
cmpl $0x0, %eax
jne 0x4500
movq 0x2416d(%rip), %rdx     # 0x28648
movq 0x240ee(%rip), %rax     # 0x285d0
movslq -0x4(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movslq -0x4(%rbp), %rax
movq %rax, 0x24153(%rip)     # 0x28648
movl -0x8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x8(%rbp)
jmp 0x4515
movq 0x240e9(%rip), %rax     # 0x285f0
movslq -0x4(%rbp), %rcx
movsbl (%rax,%rcx), %edx
andl $-0x3, %edx
movb %dl, (%rax,%rcx)
jmp 0x4517
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x44b2
movl $0x0, -0x4(%rbp)
cmpl $0x20, -0x4(%rbp)
jge 0x458c
movslq -0x4(%rbp), %rcx
leaq 0x240d6(%rip), %rax     # 0x28610
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
jne 0x457f
movslq -0x4(%rbp), %rcx
leaq 0x23c3f(%rip), %rax     # 0x28190
cmpq $0x0, (%rax,%rcx,8)
je 0x457f
movslq -0x4(%rbp), %rcx
leaq 0x23c2d(%rip), %rax     # 0x28190
movq (%rax,%rcx,8), %rdi
callq 0x3090
movslq -0x4(%rbp), %rcx
leaq 0x23c19(%rip), %rax     # 0x28190
movq $0x0, (%rax,%rcx,8)
jmp 0x4581
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x4529
cmpl $0x1, 0x23b6d(%rip)     # 0x28100
jle 0x45bf
leaq -0x70(%rbp), %rdi
movl -0x8(%rbp), %edx
leaq 0x1bd48(%rip), %rsi     # 0x202eb
movb $0x0, %al
callq 0x3200
leaq -0x70(%rbp), %rdi
callq 0x3ab0
leaq 0x1d419(%rip), %rdi     # 0x219d3
callq 0x3ab0
movl -0x8(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
nopl (%rax,%rax)