// File: /workspace/github_c_makefile_star2_O1/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 0x957b
movl %edi, %r14d
leal -0x1(%r14), %ebx
movl %ebx, %edi
callq 0x926c
leaq 0xb04d(%rip), %r12      # 0x142e4
movl %r14d, %r13d
movl 0xd608(%rip), %eax      # 0x168a8
cmpl $0x2, %eax
jne 0x958e
movzbl (%r12), %eax
leaq 0x609f(%rip), %rdx      # 0xf354
movslq (%rdx,%r13,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
cmpl $0x25, %eax
je 0x9498
movl $0x8, %r14d
cmpl $0x2a, %eax
je 0x9514
cmpl $0x2f, %eax
jne 0x9592
movl $0x9, %r14d
jmp 0x9514
cmpl $0x3e, %eax
jle 0x9482
cmpl $0x3f, %eax
je 0x950e
movl $0xf, %r14d
cmpl $0x5e, %eax
je 0x9514
cmpl $0x7c, %eax
jne 0x9592
movq 0xd585(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
movl $0xd, %r14d
testq %rax, %rax
je 0x9514
cmpl $0x2, (%rax)
jne 0x9514
cmpl $0x7c, 0x4(%rax)
jne 0x9514
movq %rax, 0xd558(%rip)      # 0x168a0
movl $0x1a, %r14d
jmp 0x9514
cmpl $0x3c, %eax
je 0x9412
cmpl $0x3e, %eax
jne 0x9592
movq 0xd534(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
movl $0x10, %r14d
testq %rax, %rax
je 0x9514
cmpl $0x2, (%rax)
jne 0x94bf
cmpl $0x3d, 0x4(%rax)
jne 0x94bf
movq %rax, 0xd507(%rip)      # 0x168a0
movl $0x18, %r14d
jmp 0x9514
cmpl $0x21, %eax
je 0x9449
cmpl $0x3d, %eax
jne 0x9592
movq 0xd4e3(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
testq %rax, %rax
je 0x9592
cmpl $0x2, (%rax)
jne 0x9592
cmpl $0x3d, 0x4(%rax)
jne 0x9592
movq %rax, 0xd4bc(%rip)      # 0x168a0
movl $0x16, %r14d
jmp 0x9514
movl $0xb, %r14d
cmpl $0x2b, %eax
je 0x9514
cmpl $0x2d, %eax
jne 0x9592
movl $0xc, %r14d
jmp 0x9514
movq 0xd487(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
movl $0x11, %r14d
testq %rax, %rax
je 0x9514
cmpl $0x2, (%rax)
jne 0x94a0
cmpl $0x3d, 0x4(%rax)
jne 0x94a0
movq %rax, 0xd462(%rip)      # 0x168a0
movl $0x19, %r14d
jmp 0x9514
movq 0xd450(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
testq %rax, %rax
je 0x9592
cmpl $0x2, (%rax)
jne 0x9592
cmpl $0x3d, 0x4(%rax)
jne 0x9592
movq %rax, 0xd429(%rip)      # 0x168a0
movl $0x17, %r14d
jmp 0x9514
cmpl $0x26, %eax
je 0x94de
cmpl $0x3a, %eax
jne 0x9592
movl $0x1f, %r14d
jmp 0x9514
movl $0xa, %r14d
jmp 0x9514
testq %rax, %rax
je 0x9514
cmpl $0x2, (%rax)
jne 0x9514
cmpl $0x3c, 0x4(%rax)
jne 0x9514
movq %rax, 0xd3e9(%rip)      # 0x168a0
movl $0x1c, %r14d
jmp 0x9514
testq %rax, %rax
je 0x9514
cmpl $0x2, (%rax)
jne 0x9514
cmpl $0x3e, 0x4(%rax)
jne 0x9514
movq %rax, 0xd3ca(%rip)      # 0x168a0
movl $0x1d, %r14d
jmp 0x9514
movq 0xd3bb(%rip), %rax      # 0x168a0
movq 0x28(%rax), %rax
movl $0xe, %r14d
testq %rax, %rax
je 0x9514
cmpl $0x2, (%rax)
jne 0x9514
cmpl $0x26, 0x4(%rax)
jne 0x9514
movq %rax, 0xd39a(%rip)      # 0x168a0
movl $0x1b, %r14d
jmp 0x9514
movl $0x1e, %r14d
movl %r14d, 0xd38d(%rip)     # 0x168a8
movsbl (%r12), %r15d
movq 0xd379(%rip), %rcx      # 0x168a0
xorl %eax, %eax
testq %rcx, %rcx
je 0x955e
movq 0x28(%rcx), %rcx
testq %rcx, %rcx
je 0x955e
movq %rcx, 0xd362(%rip)      # 0x168a0
movl 0x4(%rcx), %eax
leaq 0xadb0(%rip), %rdx      # 0x142f8
movl %eax, (%rdx)
movb %al, (%r12)
movq 0x8(%rcx), %rax
leaq 0xad8f(%rip), %rdx      # 0x142e8
movq %rax, (%rdx)
movl (%rcx), %eax
movl %eax, 0xd344(%rip)      # 0x168a8
movl %ebx, %edi
callq 0x926c
movl %r14d, %edi
movl %r15d, %esi
callq 0x9c71
jmp 0x929a
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x9997
testl %eax, %eax
jne 0x95a1
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x5f66(%rip), %rdi      # 0xf50e
callq 0x965f