// File: /workspace/github_c_makefile_star2_O0/nimble-code[P]gh_cpp/Src/gh_cpp1.c
// Function: prelude
static TS *
prelude(TS *s, MD *m)	/* various types of checks */
{	char *str;
	int i, j, k = 0, covered;
	TS *sc;
	ML *ml;
	ARGS *a;
	ARL  *sa;

	if (strncmp(m->nm, "__", 2) == 0
	&& (str = is_predefined(m->nm)) != NULL)
		return pick_predefined(s, str);

	for (i = 0, a = m->arg; a; a = a->nxt)
	{	if (strcmp(a->nm, "...") == 0)
			k = 1; /* var length list */
		i++;
	}

	saa = (ARL *) 0;
	if (i > 0
	&&  s->nxt
	&&  s->nxt->tok == CHAR
	&&  s->nxt->val == '(')
		last = parse_args(s->nxt); /* sets saa with actual params */
	else
		last = s;

	covered = 1;	/* check if at least one token from call is non-covered */
	for (sc = s; ; sc = sc->nxt)
	{	for (ml = sc->ml; ml; ml = ml->nxt)
			if (ml->m == m)
				break;
		if (!ml)
		{	covered = 0;
			break;
		}

		if (sc == last)
			break;
	}

	if (covered)
	{	if (verbose)
		{	if (debugging)
			{	Enesting++;
				nested("");
				Enesting--;
			}
			printf("%s,%d: recursive use of macro %s\n",
				filename, lineno, m->nm);
		}
		return s;
	}

	for (j = 0, sa = saa; sa; sa = sa->nxt)
	{	j++;
		if (debugging) show_args(sa, j);
	}

	if (i != j && (k == 0 || j < i))
	{	if (!not_printing[level] && j > 0)
		{	fprintf(stderr, "%s,%d: error: macro '%s' requires %d args, saw %d\n",
				filename, lineno, m->nm, i, j);
			if (misra_rules && j < i)
			m_rule(19, 8, "macro call with insufficient arguments");
		} else if (misra_rules)
		{	m_rule(19, 16, "macro call with insufficient arguments");
		}
		return last;
	}

	return (TS *) 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl $0x0, -0x2c(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rdi
leaq 0x8bb0(%rip), %rsi      # 0x11105
movl $0x2, %edx
callq 0x4050
cmpl $0x0, %eax
jne 0x8590
movq -0x18(%rbp), %rax
movq (%rax), %rdi
callq 0x9150
movq %rax, -0x20(%rbp)
cmpq $0x0, %rax
je 0x8590
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9390
movq %rax, -0x8(%rbp)
jmp 0x882d
movl $0x0, -0x24(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
je 0x85e0
movq -0x48(%rbp), %rax
movq (%rax), %rdi
leaq 0x8584(%rip), %rsi      # 0x10b3c
callq 0x4100
cmpl $0x0, %eax
jne 0x85c9
movl $0x1, -0x2c(%rbp)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x85a3
movq $0x0, 0xee5d(%rip) # 0x17448
cmpl $0x0, -0x24(%rbp)
jle 0x862d
movq -0x10(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x862d
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
cmpl $0x2, (%rax)
jne 0x862d
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
cmpl $0x28, 0x4(%rax)
jne 0x862d
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rdi
callq 0x9450
movq %rax, 0xee25(%rip)      # 0x17450
jmp 0x8638
movq -0x10(%rbp), %rax
movq %rax, 0xee18(%rip)      # 0x17450
movl $0x1, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
je 0x8679
movq -0x40(%rbp), %rax
movq (%rax), %rax
cmpq -0x18(%rbp), %rax
jne 0x8669
jmp 0x8679
jmp 0x866b
movq -0x40(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0x8653
cmpq $0x0, -0x40(%rbp)
jne 0x8689
movl $0x0, -0x30(%rbp)
jmp 0x86a8
movq -0x38(%rbp), %rax
cmpq 0xedbc(%rip), %rax      # 0x17450
jne 0x8698
jmp 0x86a8
jmp 0x869a
movq -0x38(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x38(%rbp)
jmp 0x8647
cmpl $0x0, -0x30(%rbp)
je 0x8719
cmpl $0x0, 0xd8fb(%rip)      # 0x15fb0
je 0x870c
cmpl $0x0, 0xdd22(%rip)      # 0x163e0
je 0x86ea
movl 0xed7a(%rip), %eax      # 0x17440
addl $0x1, %eax
movl %eax, 0xed71(%rip)      # 0x17440
leaq 0x9145(%rip), %rdi      # 0x1181b
callq 0x8840
movl 0xed5f(%rip), %eax      # 0x17440
addl $-0x1, %eax
movl %eax, 0xed56(%rip)      # 0x17440
movq 0xb9ff(%rip), %rsi      # 0x140f0
movl 0xc899(%rip), %edx      # 0x14f90
movq -0x18(%rbp), %rax
movq (%rax), %rcx
leaq 0x8934(%rip), %rdi      # 0x11039
movb $0x0, %al
callq 0x40a0
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x882d
movl $0x0, -0x28(%rbp)
movq 0xed21(%rip), %rax      # 0x17448
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0x8760
movl -0x28(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x28(%rbp)
cmpl $0x0, 0xdc9e(%rip)      # 0x163e0
je 0x8750
movq -0x50(%rbp), %rdi
movl -0x28(%rbp), %esi
callq 0x96f0
jmp 0x8752
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x50(%rbp)
jmp 0x872b
movl -0x24(%rbp), %eax
cmpl -0x28(%rbp), %eax
je 0x8825
cmpl $0x0, -0x2c(%rbp)
je 0x877e
movl -0x28(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x8825
movslq 0xd82f(%rip), %rcx      # 0x15fb4
leaq 0xd834(%rip), %rax      # 0x15fc0
cmpl $0x0, (%rax,%rcx,4)
jne 0x87f7
cmpl $0x0, -0x28(%rbp)
jle 0x87f7
movq 0xb859(%rip), %rax      # 0x13ff8
movq (%rax), %rdi
movq 0xb947(%rip), %rdx      # 0x140f0
movl 0xc7e1(%rip), %ecx      # 0x14f90
movq -0x18(%rbp), %rax
movq (%rax), %r8
movl -0x24(%rbp), %r9d
movl -0x28(%rbp), %eax
leaq 0x8897(%rip), %rsi      # 0x1105b
movl %eax, (%rsp)
movb $0x0, %al
callq 0x4110
cmpl $0x0, 0xc7bf(%rip)      # 0x14f94
je 0x87f5
movl -0x28(%rbp), %eax
cmpl -0x24(%rbp), %eax
jge 0x87f5
movl $0x13, %edi
movl $0x8, %esi
leaq 0x889e(%rip), %rdx      # 0x1108e
callq 0xca50
jmp 0x8818
cmpl $0x0, 0xc796(%rip)      # 0x14f94
je 0x8816
movl $0x13, %edi
movl $0x10, %esi
leaq 0x887d(%rip), %rdx      # 0x1108e
callq 0xca50
jmp 0x8818
movq 0xec31(%rip), %rax      # 0x17450
movq %rax, -0x8(%rbp)
jmp 0x882d
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopw (%rax,%rax)