// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/frontend/parser_exp.c
// Function: prv_priority5
static subtilis_exp_t *prv_priority5(subtilis_parser_t *p, subtilis_token_t *t,
				     subtilis_error_t *err)
{
	const char *tbuf;
	subtilis_exp_t *e1 = NULL;
	subtilis_exp_t *e2 = NULL;
	subtilis_exp_fn_t exp_fn;

	e1 = prv_priority4(p, t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	while (t->type == SUBTILIS_TOKEN_OPERATOR) {
		tbuf = subtilis_token_get_text(t);
		if (!strcmp(tbuf, "="))
			exp_fn = subtilis_type_if_eq;
		else if (!strcmp(tbuf, "<>"))
			exp_fn = subtilis_type_if_neq;
		else if (!strcmp(tbuf, ">"))
			exp_fn = subtilis_exp_gt;
		else if (!strcmp(tbuf, "<="))
			exp_fn = subtilis_exp_lte;
		else if (!strcmp(tbuf, "<"))
			exp_fn = subtilis_exp_lt;
		else if (!strcmp(tbuf, ">="))
			exp_fn = subtilis_exp_gte;
		else if (!strcmp(tbuf, "<<"))
			exp_fn = subtilis_type_if_lsl;
		else if (!strcmp(tbuf, ">>"))
			exp_fn = subtilis_type_if_lsr;
		else if (!strcmp(tbuf, ">>>"))
			exp_fn = subtilis_type_if_asr;
		else
			break;
		subtilis_lexer_get(p->l, t, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
		e2 = prv_priority4(p, t, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;

		e1 = exp_fn(p, e1, e2, err);
		e2 = NULL;
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
	}

	return e1;

cleanup:

	subtilis_exp_delete(e2);
	subtilis_exp_delete(e1);
	return NULL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
callq 0x1fbbd
movq %rax, %rbx
cmpl $0x0, (%r14)
je 0x1fa92
xorl %eax, %eax
movq %rax, %rdi
callq 0x2b166
movq %rbx, %rdi
callq 0x2b166
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1790b(%rip), %r13     # 0x373a4
cmpl $0x2, (%r15)
jne 0x1fa80
movq %r15, %rdi
callq 0x12ad0
movzbl (%rax), %ecx
cmpl $0x3c, %ecx
je 0x1fb0c
cmpl $0x3e, %ecx
je 0x1fad3
cmpl $0x3d, %ecx
jne 0x1fb52
cmpb $0x0, 0x1(%rax)
leaq 0x1728c(%rip), %rbp     # 0x36d54
jne 0x1fb52
jmp 0x1fb6c
cmpb $0x0, 0x1(%rax)
leaq 0xbf5e(%rip), %rbp      # 0x2ba3c
je 0x1fb6c
cmpb $0x3d, 0x1(%rax)
jne 0x1faf7
cmpb $0x0, 0x2(%rax)
leaq 0xbf56(%rip), %rbp      # 0x2ba4b
je 0x1fb6c
cmpb $0x3e, 0x1(%rax)
jne 0x1fb52
cmpb $0x0, 0x2(%rax)
leaq 0x177d5(%rip), %rbp     # 0x372dd
jne 0x1fb52
jmp 0x1fb6c
cmpb $0x3e, 0x1(%rax)
jne 0x1fb1f
cmpb $0x0, 0x2(%rax)
leaq 0x1727f(%rip), %rbp     # 0x36d9c
je 0x1fb6c
cmpb $0x3d, 0x1(%rax)
jne 0x1fb32
cmpb $0x0, 0x2(%rax)
leaq 0xbf11(%rip), %rbp      # 0x2ba41
je 0x1fb6c
cmpb $0x0, 0x1(%rax)
leaq 0xbf09(%rip), %rbp      # 0x2ba46
je 0x1fb6c
cmpb $0x3c, 0x1(%rax)
jne 0x1fb52
cmpb $0x0, 0x2(%rax)
leaq 0x176a8(%rip), %rbp     # 0x371f8
je 0x1fb6c
movq %rax, %rdi
leaq 0x53d9d(%rip), %rsi     # 0x738f9
callq 0x12160
movq %r13, %rbp
testl %eax, %eax
jne 0x1fa80
movq (%r12), %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x12edc
cmpl $0x0, (%r14)
jne 0x1fa6c
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x1fbbd
cmpl $0x0, (%r14)
jne 0x1fa6e
movq %r12, %rdi
movq %rbx, %rsi
movq %rax, %rdx
movq %r14, %rcx
callq *%rbp
movq %rax, %rbx
cmpl $0x0, (%r14)
je 0x1fa99
jmp 0x1fa6c