// File: /workspace/github_c_makefile_star2_O0/nimble-code[P]Uno/Src/uno_generic.c
// Function: dfs_generic
void
dfs_generic(State *s)
{	GenStack *g;
	Trans *t;
	SymRef *r;
	treenode *exp = ZT;
	int any_added = 0;

	if (!s || !s->n) return;

	depth++;

	if (debug)
	{	printf("%3d: dfs %s:%d: <%s>\t",
			depth,
			s->n->hdr.fnm,
			s->n->hdr.line,
			x_stmnt(s->n));
		if (s->n->hdr.type == TN_IF)
			dump_defuse(((if_node *)s->n)->cond->hdr.defuse, stdout);
		else
			dump_defuse(s->n->hdr.defuse, stdout);
		printf("\n");
		if (gen_stack)
		for (r = gen_stack->symrefs; r; r = r->nxt)
			printf("\tGenStack %s %d\n", r->sm->nme->str, r->status);

	}

	if (s->iscond && s->n)
	exp = (s->n->hdr.type == TN_IF) ? ((if_node *)s->n)->cond : s->n;

	any_added = gen_push(s);	/* checks symrefs to state snapshot -- updates snapshot*/
	g = gen_stack;
	g->e = exp?exp:s->n;

	path_ends = !(s->succ && s->succ->branch);

	user_val = 0;
	user_name = "";
	exec_prop(uno_prop, g->e);	/* can modify uno_state/symrefs */

	if (g->uno_state >= (int) sizeof(unsigned long)*8)
	{	fprintf(stderr, "uno: too many states in property (max %d)\n",
			(int) sizeof(unsigned long)*8 - 1);
		exit(1);
	}

	if (debug)
		printf("\t%s = %d (stack) %lu (state-bits)\n",
			statename,
			g->uno_state,
			s->uno_state);

	if (any_added == 0 && (s->uno_state & (1 << g->uno_state)))
	{	if (s->visited)
		{	if (debug) printf("\told\n");
			goto pop;
		} else
		{	if (debug) printf("\tnew\n");
		}
	} else
	{	if (debug)
			printf("\t%s\n", s->visited?"revisit":"new");
	}
	s->uno_state |= (1<<g->uno_state);	/* updates uno_state snapshot */
	s->visited = 1;

	for (t = s->succ; t && t->branch; t = t->nxt)
		if (!infeasible(exp, t->cond))	/* e.g. 0 == _true_ */
		{	g->c = t->cond;
			dfs_generic(t->branch);
		}

pop:	gen_pop(g);

	if (debug)
	{	printf("%3d: dfs up\n", depth);
		if (gen_stack)
		for (r = gen_stack->symrefs; r; r = r->nxt)
			printf("\tGenStack %s %d\n", r->sm->nme->str, r->status);
	}
	
	depth--;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq $0x0, -0x28(%rbp)
movl $0x0, -0x2c(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x3004c
movq -0x8(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x30051
jmp 0x30482
leaq 0x55f40(%rip), %rax     # 0x85f98
movl (%rax), %ecx
addl $0x1, %ecx
leaq 0x55f34(%rip), %rax     # 0x85f98
movl %ecx, (%rax)
cmpl $0x0, 0x66b7b(%rip)     # 0x96be8
je 0x3016c
leaq 0x55f1e(%rip), %rax     # 0x85f98
movl (%rax), %eax
movl %eax, -0x3c(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movl 0x10(%rax), %eax
movl %eax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rdi
callq 0x4ec0
movl -0x3c(%rbp), %esi
movq -0x38(%rbp), %rdx
movl -0x30(%rbp), %ecx
movq %rax, %r8
leaq 0x16e2b(%rip), %rdi     # 0x46ee6
movb $0x0, %al
callq 0x30f0
movq -0x8(%rbp), %rax
movq (%rax), %rax
cmpl $0x1b, 0x1c(%rax)
jne 0x300ef
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x40(%rax), %rax
movq 0x28(%rax), %rdi
movq 0x1deeb(%rip), %rax     # 0x4dfd0
movq (%rax), %rsi
callq 0x1a7b0
jmp 0x30109
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x28(%rax), %rdi
movq 0x1decf(%rip), %rax     # 0x4dfd0
movq (%rax), %rsi
callq 0x1a7b0
leaq 0x1462f(%rip), %rdi     # 0x4473f
movb $0x0, %al
callq 0x30f0
cmpq $0x0, 0x66ab9(%rip)     # 0x96bd8
je 0x3016a
movq 0x66ab0(%rip), %rax     # 0x96bd8
movq (%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x30168
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rsi
movq -0x20(%rbp), %rax
movl 0x10(%rax), %edx
leaq 0x16da9(%rip), %rdi     # 0x46efc
movb $0x0, %al
callq 0x30f0
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x3012f
jmp 0x3016a
jmp 0x3016c
movq -0x8(%rbp), %rax
movswl 0x48(%rax), %eax
cmpl $0x0, %eax
je 0x301b4
movq -0x8(%rbp), %rax
cmpq $0x0, (%rax)
je 0x301b4
movq -0x8(%rbp), %rax
movq (%rax), %rax
cmpl $0x1b, 0x1c(%rax)
jne 0x301a1
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq 0x40(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x301ac
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rdi
callq 0x30490
movl %eax, -0x2c(%rbp)
movq 0x66a11(%rip), %rax     # 0x96bd8
movq %rax, -0x10(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x301dc
movq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
jmp 0x301e7
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x50(%rcx)
movb %al, -0x51(%rbp)
je 0x30216
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
cmpq $0x0, 0x10(%rax)
setne %al
movb %al, -0x51(%rbp)
movb -0x51(%rbp), %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, 0x669be(%rip)     # 0x96be4
movl $0x0, 0x669bc(%rip)     # 0x96bec
leaq 0x4b7e(%rip), %rax      # 0x34db5
movq %rax, 0x669b2(%rip)     # 0x96bf0
leaq 0x55dbb(%rip), %rax     # 0x86000
movq (%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x305c0
movq -0x10(%rbp), %rax
cmpl $0x40, 0x8(%rax)
jl 0x30286
movq 0x1dd92(%rip), %rax     # 0x4dff8
movq (%rax), %rdi
leaq 0x16c9d(%rip), %rsi     # 0x46f0d
movl $0x3f, %edx
movb $0x0, %al
callq 0x3170
movl $0x1, %edi
callq 0x3230
cmpl $0x0, 0x6695b(%rip)     # 0x96be8
je 0x302b3
movq 0x1df52(%rip), %rsi     # 0x4e1e8
movq -0x10(%rbp), %rax
movl 0x8(%rax), %edx
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rcx
leaq 0x16c8c(%rip), %rdi     # 0x46f38
movb $0x0, %al
callq 0x30f0
cmpl $0x0, -0x2c(%rbp)
jne 0x3031f
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x10(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl $0x1, %edx
shll %cl, %edx
movl %edx, %ecx
movslq %ecx, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
je 0x3031f
movq -0x8(%rbp), %rax
cmpw $0x0, 0x4a(%rax)
je 0x30304
cmpl $0x0, 0x668f9(%rip)     # 0x96be8
je 0x302ff
leaq 0x151e4(%rip), %rdi     # 0x454dc
movb $0x0, %al
callq 0x30f0
jmp 0x303ef
cmpl $0x0, 0x668dd(%rip)     # 0x96be8
je 0x3031b
leaq 0x151d8(%rip), %rdi     # 0x454ec
movb $0x0, %al
callq 0x30f0
jmp 0x3031d
jmp 0x30355
cmpl $0x0, 0x668c2(%rip)     # 0x96be8
je 0x30353
movq -0x8(%rbp), %rax
movswl 0x4a(%rax), %ecx
leaq 0x16c2c(%rip), %rsi     # 0x46f63
leaq 0x16c1d(%rip), %rax     # 0x46f5b
cmpl $0x0, %ecx
cmovneq %rax, %rsi
leaq 0x16acf(%rip), %rdi     # 0x46e1b
movb $0x0, %al
callq 0x30f0
jmp 0x30355
movq -0x10(%rbp), %rax
movl 0x8(%rax), %ecx
movl $0x1, %eax
shll %cl, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
orq 0x40(%rax), %rcx
movq %rcx, 0x40(%rax)
movq -0x8(%rbp), %rax
movw $0x1, 0x4a(%rax)
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq %rax, -0x18(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x18(%rbp)
movb %al, -0x52(%rbp)
je 0x303a3
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
setne %al
movb %al, -0x52(%rbp)
movb -0x52(%rbp), %al
testb $0x1, %al
jne 0x303ac
jmp 0x303ed
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
callq 0x206d0
cmpl $0x0, %eax
jne 0x303dd
movq -0x18(%rbp), %rax
movq (%rax), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x30020
jmp 0x303df
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x30388
jmp 0x303ef
movq -0x10(%rbp), %rdi
callq 0x30700
cmpl $0x0, 0x667e9(%rip)     # 0x96be8
je 0x3046d
leaq 0x55b90(%rip), %rax     # 0x85f98
movl (%rax), %esi
leaq 0x16b56(%rip), %rdi     # 0x46f67
movb $0x0, %al
callq 0x30f0
cmpq $0x0, 0x667b8(%rip)     # 0x96bd8
je 0x3046b
movq 0x667af(%rip), %rax     # 0x96bd8
movq (%rax), %rax
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x30469
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rsi
movq -0x20(%rbp), %rax
movl 0x10(%rax), %edx
leaq 0x16aa8(%rip), %rdi     # 0x46efc
movb $0x0, %al
callq 0x30f0
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x20(%rbp)
jmp 0x30430
jmp 0x3046b
jmp 0x3046d
leaq 0x55b24(%rip), %rax     # 0x85f98
movl (%rax), %ecx
addl $-0x1, %ecx
leaq 0x55b18(%rip), %rax     # 0x85f98
movl %ecx, (%rax)
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax,%rax)