// File: /workspace/github_c_makefile_star2_O0/azhai[P]mlite/mlite.c
// Function: mark
void mark(cell n) {
	cell	p, parent, *v;
	int	i;

	parent = NIL;	/* Initially, there is no parent node */
	while (1) {
		if (special_value_p(n) || Tag[n] & MARK_TAG) {
			if (parent == NIL)
				break;
			if (Tag[parent] & VECTOR_TAG) {	/* S1 --> S1|done */
				i = vector_index(parent);
				v = vector(parent);
				if (Tag[parent] & STATE_TAG &&
				    i+1 < vector_len(parent)
				) {			/* S1 --> S1 */
					p = v[i+1];
					v[i+1] = v[i];
					v[i] = n;
					n = p;
					vector_index(parent) = i+1;
				}
				else {			/* S1 --> done */
					p = parent;
					parent = v[i];
					v[i] = n;
					n = p;
				}
			}
			else if (Tag[parent] & STATE_TAG) {	/* S1 --> S2 */
				p = cdr(parent);
				cdr(parent) = car(parent);
				car(parent) = n;
				Tag[parent] &= ~STATE_TAG;
				Tag[parent] |=  MARK_TAG;
				n = p;
			}
			else {				/* S2 --> done */
				p = parent;
				parent = cdr(p);
				cdr(p) = n;
				n = p;
			}
		}
		else {
			if (Tag[n] & VECTOR_TAG) {	/* S0 --> S1|S2 */
				Tag[n] |= MARK_TAG;
				/* Tag[n] &= ~STATE_TAG; */
				vector_link(n) = n;
				if (car(n) == T_VECTOR && vector_len(n) != 0) {
					Tag[n] |= STATE_TAG;
					vector_index(n) = 0;
					v = vector(n);
					p = v[0];
					v[0] = parent;
					parent = n;
					n = p;
				}
			}
			else if (Tag[n] & ATOM_TAG) {	/* S0 --> S2 */
				if (instream_p(n) || outstream_p(n))
					Stream_flags[stream_id(n)] |= USED_TAG;
				p = cdr(n);
				cdr(n) = parent;
				/*Tag[n] &= ~STATE_TAG;*/
				parent = n;
				n = p;
				Tag[parent] |= MARK_TAG;
			}
			else {				/* S0 --> S1 */
				p = car(n);
				car(n) = parent;
				Tag[n] |= MARK_TAG;
				parent = n;
				n = p;
				Tag[parent] |= STATE_TAG;
			}
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq $-0x1, -0x18(%rbp)
cmpq $0x0, -0x8(%rbp)
jl 0x3ed2
movq 0x24732(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x4109
cmpq $-0x1, -0x18(%rbp)
jne 0x3ede
jmp 0x43bf
movq 0x2470b(%rip), %rax     # 0x285f0
movq -0x18(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0x403d
movq 0x246f8(%rip), %rax     # 0x285f8
movq 0x246c9(%rip), %rcx     # 0x285d0
movq -0x18(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
subq $0x2, %rcx
movq (%rax,%rcx,8), %rax
movl %eax, -0x24(%rbp)
movq 0x246d7(%rip), %rax     # 0x285f8
movq 0x246a8(%rip), %rcx     # 0x285d0
movq -0x18(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movq 0x246ae(%rip), %rax     # 0x285f0
movq -0x18(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x4008
movl -0x24(%rbp), %eax
addl $0x1, %eax
cltq
movq 0x24693(%rip), %rcx     # 0x285f8
movq 0x24664(%rip), %rdx     # 0x285d0
movq -0x18(%rbp), %rsi
movq (%rdx,%rsi,8), %rdx
subq $0x1, %rdx
movq (%rcx,%rdx,8), %rcx
addq $0x8, %rcx
subq $0x1, %rcx
shrq $0x3, %rcx
addq $0x3, %rcx
subq $0x3, %rcx
cmpq %rcx, %rax
jae 0x4008
movq -0x20(%rbp), %rax
movl -0x24(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x10(%rbp)
movq -0x20(%rbp), %rax
movslq -0x24(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq -0x20(%rbp), %rax
movl -0x24(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x8(%rbp), %rdx
movq -0x20(%rbp), %rax
movslq -0x24(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rdx
movq 0x24609(%rip), %rax     # 0x285f8
movq 0x245da(%rip), %rcx     # 0x285d0
movq -0x18(%rbp), %rsi
movq (%rcx,%rsi,8), %rcx
subq $0x2, %rcx
movq %rdx, (%rax,%rcx,8)
jmp 0x4038
movq -0x18(%rbp), %rax
movq %rax, -0x10(%rbp)
movq -0x20(%rbp), %rax
movslq -0x24(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rdx
movq -0x20(%rbp), %rax
movslq -0x24(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x4104
movq 0x245ac(%rip), %rax     # 0x285f0
movq -0x18(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x40cc
movq 0x24575(%rip), %rax     # 0x285d0
movq -0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x10(%rbp)
movq 0x24112(%rip), %rax     # 0x28180
movq -0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rdx
movq 0x24553(%rip), %rax     # 0x285d0
movq -0x18(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x8(%rbp), %rdx
movq 0x240f0(%rip), %rax     # 0x28180
movq -0x18(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x24551(%rip), %rax     # 0x285f0
movq -0x18(%rbp), %rcx
movsbl (%rax,%rcx), %edx
andl $-0x5, %edx
movb %dl, (%rax,%rcx)
movq 0x2453c(%rip), %rax     # 0x285f0
movq -0x18(%rbp), %rcx
movsbl (%rax,%rcx), %edx
orl $0x2, %edx
movb %dl, (%rax,%rcx)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x4102
movq -0x18(%rbp), %rax
movq %rax, -0x10(%rbp)
movq 0x244f5(%rip), %rax     # 0x285d0
movq -0x10(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rdx
movq 0x244de(%rip), %rax     # 0x285d0
movq -0x10(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x4104
jmp 0x43ba
movq 0x244e0(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x10, %eax
cmpl $0x0, %eax
je 0x422c
movq 0x244c5(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %edx
orl $0x2, %edx
movb %dl, (%rax,%rcx)
movq -0x8(%rbp), %rdx
movq 0x244b4(%rip), %rax     # 0x285f8
movq 0x24485(%rip), %rcx     # 0x285d0
movq -0x8(%rbp), %rsi
movq (%rcx,%rsi,8), %rcx
subq $0x3, %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x2401e(%rip), %rax     # 0x28180
movq -0x8(%rbp), %rcx
cmpq $-0x24, (%rax,%rcx,8)
jne 0x4227
movq 0x24480(%rip), %rax     # 0x285f8
movq 0x24451(%rip), %rcx     # 0x285d0
movq -0x8(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
subq $0x1, %rcx
movq (%rax,%rcx,8), %rax
addq $0x8, %rax
subq $0x1, %rax
shrq $0x3, %rax
addq $0x3, %rax
subq $0x3, %rax
cmpq $0x0, %rax
je 0x4227
movq 0x24440(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %edx
orl $0x4, %edx
movb %dl, (%rax,%rcx)
movq 0x24433(%rip), %rax     # 0x285f8
movq 0x24404(%rip), %rcx     # 0x285d0
movq -0x8(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
subq $0x2, %rcx
movq $0x0, (%rax,%rcx,8)
movq 0x24411(%rip), %rax     # 0x285f8
movq 0x243e2(%rip), %rcx     # 0x285d0
movq -0x8(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x43b8
movq 0x243bd(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x4356
cmpq $0x0, -0x8(%rbp)
jl 0x428e
movq 0x2439b(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x428e
movq 0x24384(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x428e
movq 0x23efd(%rip), %rax     # 0x28180
movq -0x8(%rbp), %rcx
cmpq $-0x17, (%rax,%rcx,8)
je 0x42d5
cmpq $0x0, -0x8(%rbp)
jl 0x4309
movq 0x24354(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x4309
movq 0x2433d(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x4309
movq 0x23eb6(%rip), %rax     # 0x28180
movq -0x8(%rbp), %rcx
cmpq $-0x19, (%rax,%rcx,8)
jne 0x4309
movq 0x23ea4(%rip), %rax     # 0x28180
movq 0x242ed(%rip), %rcx     # 0x285d0
movq -0x8(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
movq (%rax,%rcx,8), %rcx
leaq 0x2431a(%rip), %rax     # 0x28610
movzbl (%rax,%rcx), %eax
orl $0x40, %eax
movb %al, %dl
leaq 0x2430a(%rip), %rax     # 0x28610
movb %dl, (%rax,%rcx)
movq 0x242c0(%rip), %rax     # 0x285d0
movq -0x8(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rdx
movq 0x242a9(%rip), %rax     # 0x285d0
movq -0x8(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq 0x242aa(%rip), %rax     # 0x285f0
movq -0x18(%rbp), %rcx
movsbl (%rax,%rcx), %edx
orl $0x2, %edx
movb %dl, (%rax,%rcx)
jmp 0x43b6
movq 0x23e23(%rip), %rax     # 0x28180
movq -0x8(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rdx
movq 0x23e0c(%rip), %rax     # 0x28180
movq -0x8(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq 0x2426d(%rip), %rax     # 0x285f0
movq -0x8(%rbp), %rcx
movsbl (%rax,%rcx), %edx
orl $0x2, %edx
movb %dl, (%rax,%rcx)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq 0x24248(%rip), %rax     # 0x285f0
movq -0x18(%rbp), %rcx
movsbl (%rax,%rcx), %edx
orl $0x4, %edx
movb %dl, (%rax,%rcx)
jmp 0x43b8
jmp 0x43ba
jmp 0x3eb0
popq %rbp
retq
nopw %cs:(%rax,%rax)