// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/arch/arm32/arm_vfp_dist.c
// Function: prv_dist_vfp_data_instr
static void prv_dist_vfp_data_instr(void *user_data, subtilis_arm_op_t *op,
				    subtilis_arm_instr_type_t type,
				    subtilis_vfp_data_instr_t *instr,
				    subtilis_error_t *err)
{
	subtilis_dist_data_t *ud = user_data;

	switch (type) {
	case SUBTILIS_VFP_INSTR_FMACS:
	case SUBTILIS_VFP_INSTR_FNMACS:
	case SUBTILIS_VFP_INSTR_FMSCS:
	case SUBTILIS_VFP_INSTR_FNMSCS:
	case SUBTILIS_VFP_INSTR_FMULS:
	case SUBTILIS_VFP_INSTR_FNMULS:
	case SUBTILIS_VFP_INSTR_FADDS:
	case SUBTILIS_VFP_INSTR_FSUBS:
	case SUBTILIS_VFP_INSTR_FDIVS:
		subtilis_error_set_assertion_failed(err);
		return;
	case SUBTILIS_VFP_INSTR_FMACD:
	case SUBTILIS_VFP_INSTR_FNMACD:
	case SUBTILIS_VFP_INSTR_FMSCD:
	case SUBTILIS_VFP_INSTR_FNMSCD:
		/*
		 * Special case, in which the destination register is also the
		 * source register.
		 */

		if (instr->dest == ud->reg_num) {
			subtilis_error_set_walker_failed(err);
			return;
		}
	default:
		break;
	}

	if (instr->op1 == ud->reg_num) {
		subtilis_error_set_walker_failed(err);
		return;
	}

	if (instr->op2 == ud->reg_num) {
		subtilis_error_set_walker_failed(err);
		return;
	}

	if (instr->dest == ud->reg_num) {
		ud->last_used = -1;
		subtilis_error_set_walker_failed(err);
		return;
	}

	ud->last_used++;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
movl -0x14(%rbp), %eax
movl %eax, -0x34(%rbp)
subl $0x5f, %eax
je 0xa261c
jmp 0xa25a0
movl -0x34(%rbp), %eax
subl $0x60, %eax
je 0xa263b
jmp 0xa25ae
movl -0x34(%rbp), %eax
subl $0x61, %eax
je 0xa261c
jmp 0xa25b8
movl -0x34(%rbp), %eax
subl $0x62, %eax
je 0xa263b
jmp 0xa25c2
movl -0x34(%rbp), %eax
subl $0x63, %eax
je 0xa261c
jmp 0xa25cc
movl -0x34(%rbp), %eax
subl $0x64, %eax
je 0xa263b
jmp 0xa25d6
movl -0x34(%rbp), %eax
subl $0x65, %eax
je 0xa261c
jmp 0xa25e0
movl -0x34(%rbp), %eax
subl $0x66, %eax
je 0xa263b
jmp 0xa25ea
movl -0x34(%rbp), %eax
subl $0x67, %eax
je 0xa261c
jmp 0xa25f4
movl -0x34(%rbp), %eax
subl $0x69, %eax
je 0xa261c
jmp 0xa25fe
movl -0x34(%rbp), %eax
subl $0x6b, %eax
je 0xa261c
jmp 0xa2608
movl -0x34(%rbp), %eax
subl $0x6d, %eax
je 0xa261c
jmp 0xa2612
movl -0x34(%rbp), %eax
subl $0x6f, %eax
jne 0xa266d
jmp 0xa261c
movq -0x28(%rbp), %rdi
movl $0xf, %esi
leaq 0xbe71(%rip), %rdx      # 0xae49d
movl $0x19f, %ecx            # imm = 0x19F
callq 0x148f0
jmp 0xa270e
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x30(%rbp), %rcx
cmpq (%rcx), %rax
jne 0xa266b
movq -0x28(%rbp), %rdi
movl $0x1f, %esi
leaq 0xbe41(%rip), %rdx      # 0xae49d
movl $0x1ab, %ecx            # imm = 0x1AB
callq 0x148f0
jmp 0xa270e
jmp 0xa266d
jmp 0xa266f
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x30(%rbp), %rcx
cmpq (%rcx), %rax
jne 0xa269c
movq -0x28(%rbp), %rdi
movl $0x1f, %esi
leaq 0xbe0d(%rip), %rdx      # 0xae49d
movl $0x1b3, %ecx            # imm = 0x1B3
callq 0x148f0
jmp 0xa270e
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x30(%rbp), %rcx
cmpq (%rcx), %rax
jne 0xa26c9
movq -0x28(%rbp), %rdi
movl $0x1f, %esi
leaq 0xbde0(%rip), %rdx      # 0xae49d
movl $0x1b8, %ecx            # imm = 0x1B8
callq 0x148f0
jmp 0xa270e
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x30(%rbp), %rcx
cmpq (%rcx), %rax
jne 0xa2701
movq -0x30(%rbp), %rax
movl $0xffffffff, 0x8(%rax)  # imm = 0xFFFFFFFF
movq -0x28(%rbp), %rdi
movl $0x1f, %esi
leaq 0xbda8(%rip), %rdx      # 0xae49d
movl $0x1be, %ecx            # imm = 0x1BE
callq 0x148f0
jmp 0xa270e
movq -0x30(%rbp), %rax
movl 0x8(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x8(%rax)
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)