// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: subtilis_arm_exp_process_id
subtilis_arm_exp_val_t *subtilis_arm_exp_process_id(
	subtilis_arm_ass_context_t *c, const char *id, subtilis_error_t *err)
/* clang-format on */

{
	subtilis_arm_reg_t reg;
	subtilis_arm_exp_val_t *val;

	reg = subtilis_arm_exp_parse_reg(c, id, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	if (reg != SIZE_MAX)
		return subtilis_arm_exp_new_reg(reg, err);

	reg = subtilis_arm_exp_parse_freg(c, id, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	if (reg != SIZE_MAX)
		return subtilis_arm_exp_new_freg(reg, err);

	reg = subtilis_arm_exp_parse_sreg(c, id, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	if (reg != SIZE_MAX)
		return subtilis_arm_exp_new_sreg(reg, err);

	reg = subtilis_arm_exp_parse_dreg(c, id, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	if (reg != SIZE_MAX)
		return subtilis_arm_exp_new_dreg(reg, err);

	reg = subtilis_arm_exp_parse_sysreg(c, id);
	if (reg != SIZE_MAX)
		return subtilis_arm_exp_new_sysreg(reg, err);

	reg = subtilis_arm_exp_parse_flagsreg(c, id);
	if (reg != SIZE_MAX)
		return subtilis_arm_exp_new_flagsreg(reg, err);

	val = subtilis_arm_asm_find_def(c, id);
	if (val)
		return subtilis_arm_exp_dup(val, err);

	return subtilis_arm_exp_new_id(id, err);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x9a9d0
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9b08f
movq $0x0, -0x8(%rbp)
jmp 0x9b216
cmpq $-0x1, -0x28(%rbp)
je 0x9b0ac
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9a6c0
movq %rax, -0x8(%rbp)
jmp 0x9b216
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x9ab70
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9b0d7
movq $0x0, -0x8(%rbp)
jmp 0x9b216
cmpq $-0x1, -0x28(%rbp)
je 0x9b0f4
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9a770
movq %rax, -0x8(%rbp)
jmp 0x9b216
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x9ad10
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9b11f
movq $0x0, -0x8(%rbp)
jmp 0x9b216
cmpq $-0x1, -0x28(%rbp)
je 0x9b13c
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9a7d0
movq %rax, -0x8(%rbp)
jmp 0x9b216
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x9ac60
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x9b167
movq $0x0, -0x8(%rbp)
jmp 0x9b216
cmpq $-0x1, -0x28(%rbp)
je 0x9b184
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9a7a0
movq %rax, -0x8(%rbp)
jmp 0x9b216
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9adf0
movq %rax, -0x28(%rbp)
cmpq $-0x1, -0x28(%rbp)
je 0x9b1af
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9a800
movq %rax, -0x8(%rbp)
jmp 0x9b216
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x9aec0
movq %rax, -0x28(%rbp)
cmpq $-0x1, -0x28(%rbp)
je 0x9b1da
movq -0x28(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9a830
movq %rax, -0x8(%rbp)
jmp 0x9b216
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0x91550
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x9b205
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9a860
movq %rax, -0x8(%rbp)
jmp 0x9b216
movq -0x18(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9a5d0
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq