// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_priority5
static subtilis_arm_exp_val_t *prv_priority5(subtilis_arm_ass_context_t *c,
					     subtilis_error_t *err)
{
	const char *tbuf;
	subtilis_arm_exp_val_t *e1 = NULL;
	subtilis_arm_exp_val_t *e2 = NULL;
	subtilis_ass_log_int_fn_t log_int_fn = NULL;
	subtilis_ass_log_real_fn_t log_real_fn = NULL;
	subtilis_ass_log_str_fn_t log_str_fn = NULL;
	subtilis_ass_int_fn_t int_fn = NULL;

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

	while (c->t->type == SUBTILIS_TOKEN_OPERATOR) {
		tbuf = subtilis_token_get_text(c->t);

		if (!strcmp(tbuf, "=")) {
			log_int_fn = prv_equal_int32_fn;
			log_real_fn = prv_equal_real_fn;
			log_str_fn = prv_equal_str_fn;
		} else if (!strcmp(tbuf, "<>")) {
			log_int_fn = prv_not_equal_int32_fn;
			log_real_fn = prv_not_equal_real_fn;
			log_str_fn = prv_not_equal_str_fn;
		} else if (!strcmp(tbuf, ">")) {
			log_int_fn = prv_gt_int32_fn;
			log_real_fn = prv_gt_real_fn;
			log_str_fn = prv_gt_str_fn;
		} else if (!strcmp(tbuf, "<=")) {
			log_int_fn = prv_lte_int32_fn;
			log_real_fn = prv_lte_real_fn;
			log_str_fn = prv_lte_str_fn;
		} else if (!strcmp(tbuf, "<")) {
			log_int_fn = prv_lt_int32_fn;
			log_real_fn = prv_lt_real_fn;
			log_str_fn = prv_lt_str_fn;
		} else if (!strcmp(tbuf, ">=")) {
			log_int_fn = prv_gte_int32_fn;
			log_real_fn = prv_gte_real_fn;
			log_str_fn = prv_gte_str_fn;
		} else if (!strcmp(tbuf, "<<")) {
			int_fn = prv_lsl_int32_fn;
		} else if (!strcmp(tbuf, ">>")) {
			int_fn = prv_lsr_int32_fn;
		} else if (!strcmp(tbuf, ">>>")) {
			int_fn = prv_asr_int32_fn;
		} else {
			break;
		}

		subtilis_lexer_get(c->l, c->t, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;
		e2 = prv_priority4(c, err);
		if (err->type != SUBTILIS_ERROR_OK)
			goto cleanup;

		if (int_fn) {
			e1 = prv_binary_int(c, e1, e2, int_fn, err);
		} else {
			if ((e1->type == SUBTILIS_ARM_EXP_TYPE_STRING) &&
			    (e1->type == e2->type) && log_str_fn)
				e1 =
				    prv_logical_str(c, e1, e2, log_str_fn, err);
			else
				e1 = prv_logical_numeric(c, e1, e2, log_int_fn,
							 log_real_fn, err);
		}

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

	return e1;

cleanup:

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

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x28(%rbp)
movq $0x0, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
movq $0x0, -0x40(%rbp)
movq $0x0, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9ba80
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9b67f
jmp 0x9b96b
jmp 0x9b681
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
cmpl $0x2, (%rax)
jne 0x9b961
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x12d70
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
leaq 0xef66(%rip), %rsi      # 0xaa614
callq 0x12140
cmpl $0x0, %eax
jne 0x9b6de
leaq 0x5e1(%rip), %rax       # 0x9bca0
movq %rax, -0x38(%rbp)
leaq 0x5f6(%rip), %rax       # 0x9bcc0
movq %rax, -0x40(%rbp)
leaq 0x62b(%rip), %rax       # 0x9bd00
movq %rax, -0x48(%rbp)
jmp 0x9b87d
movq -0x20(%rbp), %rdi
leaq 0xf21c(%rip), %rsi      # 0xaa905
callq 0x12140
cmpl $0x0, %eax
jne 0x9b719
leaq 0x646(%rip), %rax       # 0x9bd40
movq %rax, -0x38(%rbp)
leaq 0x65b(%rip), %rax       # 0x9bd60
movq %rax, -0x40(%rbp)
leaq 0x690(%rip), %rax       # 0x9bda0
movq %rax, -0x48(%rbp)
jmp 0x9b87b
movq -0x20(%rbp), %rdi
leaq 0xf1e2(%rip), %rsi      # 0xaa906
callq 0x12140
cmpl $0x0, %eax
jne 0x9b754
leaq 0x6ab(%rip), %rax       # 0x9bde0
movq %rax, -0x38(%rbp)
leaq 0x6c0(%rip), %rax       # 0x9be00
movq %rax, -0x40(%rbp)
leaq 0x6e5(%rip), %rax       # 0x9be30
movq %rax, -0x48(%rbp)
jmp 0x9b879
movq -0x20(%rbp), %rdi
leaq 0xf1a9(%rip), %rsi      # 0xaa908
callq 0x12140
cmpl $0x0, %eax
jne 0x9b78f
leaq 0x700(%rip), %rax       # 0x9be70
movq %rax, -0x38(%rbp)
leaq 0x715(%rip), %rax       # 0x9be90
movq %rax, -0x40(%rbp)
leaq 0x73a(%rip), %rax       # 0x9bec0
movq %rax, -0x48(%rbp)
jmp 0x9b877
movq -0x20(%rbp), %rdi
leaq 0xf175(%rip), %rsi      # 0xaa90f
callq 0x12140
cmpl $0x0, %eax
jne 0x9b7ca
leaq 0x755(%rip), %rax       # 0x9bf00
movq %rax, -0x38(%rbp)
leaq 0x76a(%rip), %rax       # 0x9bf20
movq %rax, -0x40(%rbp)
leaq 0x78f(%rip), %rax       # 0x9bf50
movq %rax, -0x48(%rbp)
jmp 0x9b875
movq -0x20(%rbp), %rdi
leaq 0xf136(%rip), %rsi      # 0xaa90b
callq 0x12140
cmpl $0x0, %eax
jne 0x9b802
leaq 0x7aa(%rip), %rax       # 0x9bf90
movq %rax, -0x38(%rbp)
leaq 0x7bf(%rip), %rax       # 0x9bfb0
movq %rax, -0x40(%rbp)
leaq 0x7e4(%rip), %rax       # 0x9bfe0
movq %rax, -0x48(%rbp)
jmp 0x9b873
movq -0x20(%rbp), %rdi
leaq 0xf101(%rip), %rsi      # 0xaa90e
callq 0x12140
cmpl $0x0, %eax
jne 0x9b824
leaq 0x802(%rip), %rax       # 0x9c020
movq %rax, -0x50(%rbp)
jmp 0x9b871
movq -0x20(%rbp), %rdi
leaq 0xf0e3(%rip), %rsi      # 0xaa912
callq 0x12140
cmpl $0x0, %eax
jne 0x9b846
leaq 0x800(%rip), %rax       # 0x9c040
movq %rax, -0x50(%rbp)
jmp 0x9b86f
movq -0x20(%rbp), %rdi
leaq 0xf0c0(%rip), %rsi      # 0xaa911
callq 0x12140
cmpl $0x0, %eax
jne 0x9b868
leaq 0x7fe(%rip), %rax       # 0x9c060
movq %rax, -0x50(%rbp)
jmp 0x9b86d
jmp 0x9b961
jmp 0x9b86f
jmp 0x9b871
jmp 0x9b873
jmp 0x9b875
jmp 0x9b877
jmp 0x9b879
jmp 0x9b87b
jmp 0x9b87d
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rdx
callq 0x133f0
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9b8a4
jmp 0x9b96b
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9ba80
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9b8c3
jmp 0x9b96b
cmpq $0x0, -0x50(%rbp)
je 0x9b8e9
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x50(%rbp), %rcx
movq -0x18(%rbp), %r8
callq 0x9b990
movq %rax, -0x28(%rbp)
jmp 0x9b949
movq -0x28(%rbp), %rax
cmpl $0x8, (%rax)
jne 0x9b926
movq -0x28(%rbp), %rax
movl (%rax), %eax
movq -0x30(%rbp), %rcx
cmpl (%rcx), %eax
jne 0x9b926
cmpq $0x0, -0x48(%rbp)
je 0x9b926
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x48(%rbp), %rcx
movq -0x18(%rbp), %r8
callq 0x9c080
movq %rax, -0x28(%rbp)
jmp 0x9b947
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
movq -0x38(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x18(%rbp), %r9
callq 0x9c100
movq %rax, -0x28(%rbp)
jmp 0x9b949
movq $0x0, -0x30(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9b95c
jmp 0x9b96b
jmp 0x9b681
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x9b985
movq -0x30(%rbp), %rdi
callq 0x9a4c0
movq -0x28(%rbp), %rdi
callq 0x9a4c0
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nop