// File: /workspace/github_c_makefile_star2_O3/nimble-code[P]gh_cpp/Src/gh_cpp3.c
// Function: push_expr
static void
push_expr(int prec)	/* precedence level prec -- push expr onto evaluation stack */
{	Tokvals t;
	int v;

	if (prec < 0) {	push_term(); return; }

	push_expr(prec-1);
again:
	if (lat == CHAR)
		switch (prec) {
		case 0:
			switch (mychar) {
			case '*': lat = TIMES; goto yes;
			case '/': lat = DIVIDE; goto yes;
			case '%': lat = MOD; goto yes;
			}
			break;
		case 1:
			switch (mychar) {
			case '+': lat = PLUS; goto yes;
			case '-': lat = MINUS; goto yes;
			}
			break;
		case 2:
			switch (mychar) {
			case '>': IfNext('=', GE); IfNext('>', RS); lat = GT; goto yes;
			case '<': IfNext('=', LE); IfNext('<', LS); lat = LT; goto yes;
			}
			break;
		case 3:
			switch (mychar) {
			case '=': IfNext('=', EQ); break;
			case '!': IfNext('=', NE); break;
			}
			break;
		case 4:
			switch (mychar) {
			case '|': IfNext('|',  LOR); lat = BOR; goto yes;
			case '&': IfNext('&', LAND); lat = BAND; goto yes;
			case '^': lat = XOR; goto yes;
			case '?': lat = QUEST; goto yes;
			case ':': lat = COLON; goto yes;
			}
			break;
		default:
			syntax_error("push_expr1");
		}
	else if (lat != DONE)
		syntax_error("push_expr2");
	return;
yes:
	assert(lat != VAL);
	t = lat;
	v = (int) mychar;

	lat = nxt_token(); /* can change lat and mychar */
	push_expr(prec-1);
	emit(t, v);
	goto again;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
testl %edi, %edi
js 0x9569
movl %edi, %r14d
leal -0x1(%r14), %ebx
movl %ebx, %edi
callq 0x9235
movl %r14d, %r13d
leaq 0x60ed(%rip), %r12      # 0xf350
movl 0xd63f(%rip), %eax      # 0x168a8
cmpl $0x2, %eax
jne 0x957c
leaq 0xb06b(%rip), %rax      # 0x142e4
movzbl (%rax), %r14d
movslq (%r12,%r13,4), %rax
addq %r12, %rax
jmpq *%rax
cmpl $0x25, %r14d
je 0x949c
movl $0x8, %r15d
cmpl $0x2a, %r14d
je 0x94ec
cmpl $0x2f, %r14d
jne 0x9580
movl $0x2f, %r14d
movl $0x9, %r15d
jmp 0x94ec
cmpl $0x3e, %r14d
jle 0x947e
cmpl $0x3f, %r14d
je 0x94e0
cmpl $0x5e, %r14d
je 0x94aa
cmpl $0x7c, %r14d
jne 0x9580
movq 0xd5b6(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
movl $0x7c, %r14d
movl $0xd, %r15d
testq %rax, %rax
je 0x94ec
cmpl $0x2, (%rax)
jne 0x94ec
movl $0x1a, %ecx
cmpl $0x7c, 0x4(%rax)
je 0x9469
jmp 0x94ec
cmpl $0x3c, %r14d
je 0x93f2
cmpl $0x3e, %r14d
jne 0x9580
movq 0xd565(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
movl $0x3e, %r14d
movl $0x10, %r15d
testq %rax, %rax
je 0x94ec
cmpl $0x2, (%rax)
jne 0x94ec
movl 0x4(%rax), %ecx
cmpl $0x3d, %ecx
je 0x955f
cmpl $0x3e, %ecx
jne 0x94ec
movl $0x1d, %ecx
jmp 0x9469
cmpl $0x21, %r14d
je 0x9437
cmpl $0x3d, %r14d
jne 0x9580
movq 0xd509(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
testq %rax, %rax
je 0x9580
cmpl $0x2, (%rax)
jne 0x9580
cmpl $0x3d, 0x4(%rax)
jne 0x9580
movl $0x3d, %r14d
movl $0x16, %ecx
jmp 0x9469
movl $0xb, %r15d
cmpl $0x2b, %r14d
je 0x94ec
cmpl $0x2d, %r14d
jne 0x9580
movl $0x2d, %r14d
movl $0xc, %r15d
jmp 0x94ec
movq 0xd4a7(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
movl $0x3c, %r14d
movl $0x11, %r15d
testq %rax, %rax
je 0x94ec
cmpl $0x2, (%rax)
jne 0x94ec
movl 0x4(%rax), %ecx
cmpl $0x3d, %ecx
je 0x9555
cmpl $0x3c, %ecx
jne 0x94ec
movl $0x1c, %ecx
jmp 0x9469
movq 0xd462(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
testq %rax, %rax
je 0x9580
cmpl $0x2, (%rax)
jne 0x9580
cmpl $0x3d, 0x4(%rax)
jne 0x9580
movl $0x21, %r14d
movl $0x17, %ecx
movq %rax, 0xd430(%rip)      # 0x168a0
movl %ecx, 0xd432(%rip)      # 0x168a8
movl %ecx, %r15d
jmp 0x94ff
cmpl $0x26, %r14d
je 0x94b2
cmpl $0x3a, %r14d
jne 0x9580
movl $0x3a, %r14d
movl $0x1f, %r15d
jmp 0x94ec
movl $0x25, %r14d
movl $0xa, %r15d
jmp 0x94ec
movl $0xf, %r15d
jmp 0x94ec
movq 0xd3e7(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
movl $0x26, %r14d
movl $0xe, %r15d
testq %rax, %rax
je 0x94ec
cmpl $0x2, (%rax)
jne 0x94ec
movl $0x1b, %ecx
cmpl $0x26, 0x4(%rax)
je 0x9469
jmp 0x94ec
movl $0x3f, %r14d
movl $0x1e, %r15d
movl %r15d, 0xd3b5(%rip)     # 0x168a8
movq 0xd3a6(%rip), %rax      # 0x168a0
testq %rax, %rax
je 0x9536
movq 0x28(%rax), %rax
testq %rax, %rax
je 0x9536
movq %rax, 0xd391(%rip)      # 0x168a0
movl 0x4(%rax), %ecx
leaq 0xaddf(%rip), %rdx      # 0x142f8
movl %ecx, (%rdx)
leaq 0xadc2(%rip), %rdx      # 0x142e4
movb %cl, (%rdx)
movq 0x8(%rax), %rcx
leaq 0xadb9(%rip), %rdx      # 0x142e8
movq %rcx, (%rdx)
movl (%rax), %eax
jmp 0x9538
xorl %eax, %eax
movl %eax, 0xd36a(%rip)      # 0x168a8
movl %ebx, %edi
callq 0x9235
movl %r15d, %edi
movl %r14d, %esi
callq 0x9d01
jmp 0x9263
movl $0x19, %ecx
jmp 0x9469
movl $0x18, %ecx
jmp 0x9469
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x9985
testl %eax, %eax
jne 0x958f
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x5f74(%rip), %rdi      # 0xf50a
callq 0x964d