// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_priority1
static subtilis_arm_exp_val_t *prv_priority1(subtilis_arm_ass_context_t *c,
					     subtilis_error_t *err)
{
	const char *tbuf;
	subtilis_arm_exp_val_t *e = NULL;

	tbuf = subtilis_token_get_text(c->t);
	switch (c->t->type) {
	case SUBTILIS_TOKEN_STRING:
		e = subtilis_arm_exp_new_str(&c->t->buf, err);
		if (!e)
			goto cleanup;
		break;
	case SUBTILIS_TOKEN_INTEGER:
		e = subtilis_arm_exp_new_int32(c->t->tok.integer, err);
		if (!e)
			goto cleanup;
		break;
	case SUBTILIS_TOKEN_REAL:
		e = subtilis_arm_exp_new_real(c->t->tok.real, err);
		if (!e)
			goto cleanup;
		break;
	case SUBTILIS_TOKEN_OPERATOR:
		if (!strcmp(tbuf, "(")) {
			e = prv_process_bktd_exp(c, err);
			if (err->type != SUBTILIS_ERROR_OK)
				goto cleanup;
		} else {
			if (!strcmp(tbuf, "-")) {
				e = prv_unary_minus_exp(c, err);
				if (err->type != SUBTILIS_ERROR_OK)
					goto cleanup;

				/* we don't want to read another token here.It's
				 * already been read by the recursive call to
				 * prv_priority1.
				 */

				return e;
			}
			subtilis_error_set_exp_expected(
			    err, "( or - ", c->l->stream->name, c->l->line);
			goto cleanup;
		}
		break;
	case SUBTILIS_TOKEN_IDENTIFIER:
		e = subtilis_arm_exp_process_id(c, tbuf, err);
		break;

	case SUBTILIS_TOKEN_KEYWORD:
		switch (c->t->tok.keyword.type) {
		case SUBTILIS_ARM_KEYWORD_TRUE:
			e = subtilis_arm_exp_new_int32(-1, err);
			break;
		case SUBTILIS_ARM_KEYWORD_FALSE:
			e = subtilis_arm_exp_new_int32(0, err);
			break;
		case SUBTILIS_ARM_KEYWORD_NOT:
			e = prv_not(c, err);
			return e;
		case SUBTILIS_ARM_KEYWORD_INT:
			return prv_int(c, err);
		case SUBTILIS_ARM_KEYWORD_SIN:
			return prv_dbl_unary(c, sin, err);
		case SUBTILIS_ARM_KEYWORD_COS:
			return prv_dbl_unary(c, cos, err);
		case SUBTILIS_ARM_KEYWORD_TAN:
			return prv_dbl_unary(c, tan, err);
		case SUBTILIS_ARM_KEYWORD_ACS:
			return prv_dbl_unary(c, acos, err);
		case SUBTILIS_ARM_KEYWORD_ASN:
			return prv_dbl_unary(c, asin, err);
		case SUBTILIS_ARM_KEYWORD_ATN:
			return prv_dbl_unary(c, atan, err);
		case SUBTILIS_ARM_KEYWORD_SQR:
			return prv_dbl_unary(c, sqrt, err);
		case SUBTILIS_ARM_KEYWORD_EXP:
			return prv_dbl_unary(c, exp, err);
		case SUBTILIS_ARM_KEYWORD_LOG:
			return prv_dbl_unary(c, log10, err);
		case SUBTILIS_ARM_KEYWORD_LN:
			return prv_dbl_unary(c, log, err);
		case SUBTILIS_ARM_KEYWORD_RAD:
			return prv_rad(c, err);
		case SUBTILIS_ARM_KEYWORD_ABS:
			return prv_abs(c, err);
		case SUBTILIS_ARM_KEYWORD_SGN:
			return prv_sgn(c, err);
		case SUBTILIS_ARM_KEYWORD_PI:
			e = subtilis_arm_exp_new_real(22 / 7.0, err);
			break;
		case SUBTILIS_ARM_KEYWORD_CHR_STR:
			return prv_chr_str(c, err);
		case SUBTILIS_ARM_KEYWORD_ASC:
			return prv_asc(c, err);
		case SUBTILIS_ARM_KEYWORD_LEN:
			return prv_len(c, err);
		case SUBTILIS_ARM_KEYWORD_LEFT_STR:
			return prv_left_str(c, err);
		case SUBTILIS_ARM_KEYWORD_RIGHT_STR:
			return prv_right_str(c, err);
		case SUBTILIS_ARM_KEYWORD_MID_STR:
			return prv_mid_str(c, err);
		case SUBTILIS_ARM_KEYWORD_STRING_STR:
			return prv_string_str(c, err);
		case SUBTILIS_ARM_KEYWORD_STR_STR:
			return prv_str_str(c, err);
		default:
			subtilis_error_set_exp_expected(
			    err, "Unexpected keyword in expression",
			    c->l->stream->name, c->l->line);
			goto cleanup;
		}
		break;
	default:
		subtilis_error_set_exp_expected(err, tbuf, c->l->stream->name,
						c->l->line);
		goto cleanup;
	}

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

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

	return e;

cleanup:

	subtilis_arm_exp_val_free(e);
	return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x12d70
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movl (%rax), %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x30(%rbp)
subl $0x5, %eax
ja 0x9ce1a
movq -0x30(%rbp), %rax
leaq 0x119bd(%rip), %rcx     # 0xae35c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
addq $0x158, %rdi            # imm = 0x158
movq -0x18(%rbp), %rsi
callq 0x9a510
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x9c9d0
jmp 0x9ce99
jmp 0x9ce60
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movl 0x8(%rax), %edi
movq -0x18(%rbp), %rsi
callq 0x9a300
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x9c9f9
jmp 0x9ce99
jmp 0x9ce60
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movsd 0x8(%rax), %xmm0
movq -0x18(%rbp), %rdi
callq 0x9a370
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x9ca24
jmp 0x9ce99
jmp 0x9ce60
movq -0x20(%rbp), %rdi
leaq 0xe868(%rip), %rsi      # 0xab29c
callq 0x12140
cmpl $0x0, %eax
jne 0x9ca62
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9cf80
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9ca5d
jmp 0x9ce99
jmp 0x9caef
movq -0x20(%rbp), %rdi
leaq 0xda6f(%rip), %rsi      # 0xaa4dc
callq 0x12140
cmpl $0x0, %eax
jne 0x9caa3
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d060
movq %rax, -0x28(%rbp)
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9ca96
jmp 0x9ce99
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x30(%rax), %r8
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x38(%rax), %r9d
movl $0x15, %esi
leaq 0x11986(%rip), %rdx     # 0xae451
leaq 0xe7a4(%rip), %rcx      # 0xab276
leaq 0x11927(%rip), %rax     # 0xae400
movq %rax, (%rsp)
movl $0x5b7, 0x8(%rsp)       # imm = 0x5B7
callq 0x156d0
jmp 0x9ce99
jmp 0x9ce60
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x9b050
movq %rax, -0x28(%rbp)
jmp 0x9ce60
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movl 0x8(%rax), %eax
addl $-0x4, %eax
movl %eax, %ecx
movq %rcx, -0x38(%rbp)
subl $0x22, %eax
ja 0x9cdcc
movq -0x38(%rbp), %rax
leaq 0x1183e(%rip), %rcx     # 0xae374
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x18(%rbp), %rsi
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x9a300
movq %rax, -0x28(%rbp)
jmp 0x9ce18
movq -0x18(%rbp), %rsi
xorl %edi, %edi
callq 0x9a300
movq %rax, -0x28(%rbp)
jmp 0x9ce18
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d160
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d220
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x37413(%rip), %rsi     # 0xd3fc0
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x373ce(%rip), %rsi     # 0xd3f98
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x373d1(%rip), %rsi     # 0xd3fb8
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x3739c(%rip), %rsi     # 0xd3fa0
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x373a7(%rip), %rsi     # 0xd3fc8
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x3734a(%rip), %rsi     # 0xd3f88
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x3737d(%rip), %rsi     # 0xd3fd8
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x37370(%rip), %rsi     # 0xd3fe8
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x37313(%rip), %rsi     # 0xd3fa8
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq 0x372de(%rip), %rsi     # 0xd3f90
callq 0x9d310
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d380
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d3f0
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d4f0
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x18(%rbp), %rdi
movsd 0xdcca(%rip), %xmm0     # 0xaa9d8
callq 0x9a370
movq %rax, -0x28(%rbp)
jmp 0x9ce18
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d630
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d6a0
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d780
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d840
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d900
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9d9e0
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9dea0
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9e230
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x18(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x30(%rax), %r8
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x38(%rax), %r9d
movl $0x15, %esi
leaq 0xdb27(%rip), %rdx      # 0xaa91b
leaq 0xe47b(%rip), %rcx      # 0xab276
leaq 0x115fe(%rip), %rax     # 0xae400
movq %rax, (%rsp)
movl $0x5fc, 0x8(%rsp)       # imm = 0x5FC
callq 0x156d0
jmp 0x9ce99
jmp 0x9ce60
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rdx
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x30(%rax), %r8
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x38(%rax), %r9d
movl $0x15, %esi
leaq 0xe430(%rip), %rcx      # 0xab276
leaq 0x115b3(%rip), %rax     # 0xae400
movq %rax, (%rsp)
movl $0x602, 0x8(%rsp)       # imm = 0x602
callq 0x156d0
jmp 0x9ce99
movq -0x18(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9ce6b
jmp 0x9ce99
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 0x9ce8f
jmp 0x9ce99
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x9ceaa
movq -0x28(%rbp), %rdi
callq 0x9a4c0
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)