// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/arch/arm32/assembler.c
// Function: prv_parse_instruction
static void prv_parse_instruction(subtilis_arm_ass_context_t *c,
				  const char *name,
				  subtilis_arm_instr_type_t itype,
				  subtilis_arm_ccode_type_t ccode,
				  const subtilis_arm_ass_modifiers_t *modifiers,
				  subtilis_arm_mtran_type_t mtran_type,
				  subtilis_error_t *err)
{
	switch (itype) {
	case SUBTILIS_ARM_INSTR_B:
		prv_parse_branch(c, name, itype, ccode, err);
		break;
	case SUBTILIS_ARM_INSTR_MOV:
	case SUBTILIS_ARM_INSTR_MVN:
		prv_parse_arm_2_arg(c, itype, ccode, modifiers->status, err);
		break;
	case SUBTILIS_ARM_INSTR_AND:
	case SUBTILIS_ARM_INSTR_EOR:
	case SUBTILIS_ARM_INSTR_SUB:
	case SUBTILIS_ARM_INSTR_RSB:
	case SUBTILIS_ARM_INSTR_ADD:
	case SUBTILIS_ARM_INSTR_ADC:
	case SUBTILIS_ARM_INSTR_SBC:
	case SUBTILIS_ARM_INSTR_RSC:
	case SUBTILIS_ARM_INSTR_ORR:
	case SUBTILIS_ARM_INSTR_BIC:
		prv_parse_arm_data(c, itype, ccode, modifiers->status, err);
		break;
	case SUBTILIS_ARM_INSTR_MUL:
	case SUBTILIS_ARM_INSTR_MLA:
		prv_parse_arm_mul(c, itype, ccode, modifiers->status, err);
		break;
	case SUBTILIS_ARM_INSTR_TST:
	case SUBTILIS_ARM_INSTR_TEQ:
	case SUBTILIS_ARM_INSTR_CMP:
	case SUBTILIS_ARM_INSTR_CMN:
		prv_parse_cmp(c, itype, ccode, true, modifiers->teqp, err);
		break;
	case SUBTILIS_ARM_INSTR_SWI:
		prv_parse_swi(c, ccode, err);
		break;
	case SUBTILIS_ARM_INSTR_LDR:
	case SUBTILIS_ARM_INSTR_STR:
		if (modifiers->status || modifiers->dword || modifiers->hword) {
			if (itype == SUBTILIS_ARM_INSTR_LDR)
				itype = SUBTILIS_ARM_STRAN_MISC_LDR;
			else
				itype = SUBTILIS_ARM_STRAN_MISC_STR;
		}
		prv_parse_stran(c, itype, ccode, modifiers, err);
		break;
	case SUBTILIS_ARM_INSTR_LDM:
	case SUBTILIS_ARM_INSTR_STM:
		prv_parse_mtran(c, itype, ccode, mtran_type, err);
		break;
	case SUBTILIS_ARM_INSTR_ADR:
		prv_parse_adr(c, ccode, err);
		break;
	case SUBTILIS_ARM_INSTR_MRS:
		prv_parse_mrs(c, ccode, err);
		break;
	case SUBTILIS_ARM_INSTR_MSR:
		prv_parse_msr(c, ccode, err);
		break;
	case SUBTILIS_ARM_SIMD_QADD16:
	case SUBTILIS_ARM_SIMD_QADD8:
	case SUBTILIS_ARM_SIMD_QADDSUBX:
	case SUBTILIS_ARM_SIMD_QSUB16:
	case SUBTILIS_ARM_SIMD_QSUB8:
	case SUBTILIS_ARM_SIMD_QSUBADDX:
	case SUBTILIS_ARM_SIMD_SADD16:
	case SUBTILIS_ARM_SIMD_SADD8:
	case SUBTILIS_ARM_SIMD_SADDSUBX:
	case SUBTILIS_ARM_SIMD_SSUB16:
	case SUBTILIS_ARM_SIMD_SSUB8:
	case SUBTILIS_ARM_SIMD_SSUBADDX:
	case SUBTILIS_ARM_SIMD_SHADD16:
	case SUBTILIS_ARM_SIMD_SHADD8:
	case SUBTILIS_ARM_SIMD_SHADDSUBX:
	case SUBTILIS_ARM_SIMD_SHSUB16:
	case SUBTILIS_ARM_SIMD_SHSUB8:
	case SUBTILIS_ARM_SIMD_SHSUBADDX:
	case SUBTILIS_ARM_SIMD_UADD16:
	case SUBTILIS_ARM_SIMD_UADD8:
	case SUBTILIS_ARM_SIMD_UADDSUBX:
	case SUBTILIS_ARM_SIMD_USUB16:
	case SUBTILIS_ARM_SIMD_USUB8:
	case SUBTILIS_ARM_SIMD_USUBADDX:
	case SUBTILIS_ARM_SIMD_UHADD16:
	case SUBTILIS_ARM_SIMD_UHADD8:
	case SUBTILIS_ARM_SIMD_UHADDSUBX:
	case SUBTILIS_ARM_SIMD_UHSUB16:
	case SUBTILIS_ARM_SIMD_UHSUB8:
	case SUBTILIS_ARM_SIMD_UHSUBADDX:
	case SUBTILIS_ARM_SIMD_UQADD16:
	case SUBTILIS_ARM_SIMD_UQADD8:
	case SUBTILIS_ARM_SIMD_UQADDSUBX:
	case SUBTILIS_ARM_SIMD_UQSUB16:
	case SUBTILIS_ARM_SIMD_UQSUB8:
	case SUBTILIS_ARM_SIMD_UQSUBADDX:
		prv_parse_reg_only(c, itype, ccode, err);
		break;
	case SUBTILIS_ARM_INSTR_SXTB:
	case SUBTILIS_ARM_INSTR_SXTB16:
	case SUBTILIS_ARM_INSTR_SXTH:
		prv_parse_signx(c, itype, ccode, err);
		break;
	default:
		subtilis_error_set_not_supported(err, name, c->l->stream->name,
						 c->l->line);
		break;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl %ecx, -0x18(%rbp)
movq %r8, -0x20(%rbp)
movl %r9d, -0x24(%rbp)
movl -0x14(%rbp), %eax
movq %rax, -0x30(%rbp)
subq $0xab, %rax
ja 0x939cf
movq -0x30(%rbp), %rax
leaq 0x1a3f0(%rip), %rcx     # 0xadc20
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x14(%rbp), %edx
movl -0x18(%rbp), %ecx
movq 0x10(%rbp), %r8
callq 0x96a70
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movq -0x20(%rbp), %rax
movb (%rax), %al
movq 0x10(%rbp), %r8
andb $0x1, %al
movzbl %al, %ecx
callq 0x96c40
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movq -0x20(%rbp), %rax
movb (%rax), %al
movq 0x10(%rbp), %r8
andb $0x1, %al
movzbl %al, %ecx
callq 0x96da0
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movq -0x20(%rbp), %rax
movb (%rax), %al
movq 0x10(%rbp), %r8
andb $0x1, %al
movzbl %al, %ecx
callq 0x96f90
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movq -0x20(%rbp), %rax
movb 0x2(%rax), %al
movq 0x10(%rbp), %r9
movl $0x1, %ecx
andb $0x1, %al
movzbl %al, %r8d
callq 0x97300
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
movq 0x10(%rbp), %rdx
callq 0x97470
jmp 0x93a13
movq -0x20(%rbp), %rax
testb $0x1, (%rax)
jne 0x9391a
movq -0x20(%rbp), %rax
testb $0x1, 0x4(%rax)
jne 0x9391a
movq -0x20(%rbp), %rax
testb $0x1, 0x3(%rax)
je 0x93932
cmpl $0x12, -0x14(%rbp)
jne 0x93929
movl $0x83, -0x14(%rbp)
jmp 0x93930
movl $0x84, -0x14(%rbp)
jmp 0x93932
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movq -0x20(%rbp), %rcx
movq 0x10(%rbp), %r8
callq 0x975c0
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movl -0x24(%rbp), %ecx
movq 0x10(%rbp), %r8
callq 0x97890
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
movq 0x10(%rbp), %rdx
callq 0x97d70
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
movq 0x10(%rbp), %rdx
callq 0x98020
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x18(%rbp), %esi
movq 0x10(%rbp), %rdx
callq 0x98120
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movq 0x10(%rbp), %rcx
callq 0x98310
jmp 0x93a13
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %esi
movl -0x18(%rbp), %edx
movq 0x10(%rbp), %rcx
callq 0x984b0
jmp 0x93a13
movq 0x10(%rbp), %rdi
movq -0x10(%rbp), %rdx
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x30(%rax), %r8
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x38(%rax), %r9d
movl $0x13, %esi
leaq 0x1787b(%rip), %rcx     # 0xab276
leaq 0x1a71e(%rip), %rax     # 0xae120
movq %rax, (%rsp)
movl $0x830, 0x8(%rsp)       # imm = 0x830
callq 0x156d0
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)