// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/arch/arm32/arm_reg_alloc.c
// Function: prv_init_arm_reg_ud
static void prv_init_arm_reg_ud(subtilis_arm_reg_ud_t *ud,
				subtilis_arm_section_t *arm_s,
				subtilis_error_t *err)
{
	size_t max_int_regs;
	size_t max_real_regs;

	subtilis_arm_section_max_regs(arm_s, &max_int_regs, &max_real_regs);

	if (!arm_s->fp_if) {
		subtilis_error_set_assertion_failed(err);
		return;
	}

	ud->int_regs = prv_new_regs(
	    max_int_regs, SUBTILIS_ARM_REG_MAX_INT_REGS,
	    SUBTILIS_ARM_INT_VIRT_REG_START, sizeof(int32_t),
	    arm_s->stype->int_regs, 4095, subtilis_arm_insert_stran_spill_imm,
	    subtilis_arm_insert_stran_imm, SUBTILIS_ARM_INSTR_STR,
	    SUBTILIS_ARM_INSTR_LDR, subtilis_arm_is_fixed, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	ud->real_regs = prv_new_regs(
	    max_real_regs, arm_s->fp_if->max_regs, arm_s->fp_if->max_regs,
	    sizeof(double), arm_s->stype->fp_regs, arm_s->fp_if->max_offset,
	    arm_s->fp_if->spill_imm_fn, arm_s->fp_if->stran_imm_fn,
	    arm_s->fp_if->store_type, arm_s->fp_if->load_type,
	    arm_s->fp_if->is_fixed_fn, err);
	if (err->type != SUBTILIS_ERROR_OK) {
		prv_free_regs(ud->int_regs);
		return;
	}

	ud->instr_count = 0;
	ud->arm_s = arm_s;
	ud->ss_terminators = NULL;
	ud->current_ss = 0;
	ud->max_ss = 0;

	subtilis_init_int_dist_walker(&ud->int_regs->dist_walker,
				      &ud->dist_data);
	arm_s->fp_if->init_dist_walker_fn(&ud->real_regs->dist_walker,
					  &ud->dist_data);
	subtilis_init_int_used_walker(&ud->int_regs->used_walker,
				      &ud->dist_data);
	arm_s->fp_if->init_used_walker_fn(&ud->real_regs->used_walker,
					  &ud->dist_data);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x58, %rsp
movq %rdi, -0x20(%rbp)
movq %rsi, -0x28(%rbp)
movq %rdx, -0x30(%rbp)
movq -0x28(%rbp), %rdi
leaq -0x38(%rbp), %rsi
leaq -0x40(%rbp), %rdx
callq 0x700a0
movq -0x28(%rbp), %rax
cmpq $0x0, 0xc0(%rax)
jne 0x77dd7
movq -0x30(%rbp), %rdi
movl $0xf, %esi
leaq 0x34dcb(%rip), %rdx     # 0xacb93
movl $0x1ea, %ecx            # imm = 0x1EA
callq 0x158e0
jmp 0x77ffb
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq 0x158(%rax), %r8
movq -0x30(%rbp), %rax
movl $0xb, %esi
movl $0x10, %edx
movl $0x4, %ecx
movl $0xfff, %r9d            # imm = 0xFFF
leaq -0x59ed(%rip), %rbx     # 0x72420
leaq -0x5904(%rip), %r11     # 0x72510
leaq -0x820b(%rip), %r10     # 0x6fc10
movq %rbx, (%rsp)
movq %r11, 0x8(%rsp)
movl $0x13, 0x10(%rsp)
movl $0x12, 0x18(%rsp)
movq %r10, 0x20(%rsp)
movq %rax, 0x28(%rsp)
callq 0x7a5d0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x30(%rbp), %rax
cmpl $0x0, (%rax)
je 0x77e5c
jmp 0x77ffb
movq -0x40(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq (%rax), %rdx
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq 0x160(%rax), %r8
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movl 0x8(%rax), %r9d
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x58(%rax), %r15
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x60(%rax), %r14
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movl 0x18(%rax), %ebx
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movl 0x1c(%rax), %r11d
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x68(%rax), %r10
movq -0x30(%rbp), %rax
movl $0x8, %ecx
movq %r15, (%rsp)
movq %r14, 0x8(%rsp)
movl %ebx, 0x10(%rsp)
movl %r11d, 0x18(%rsp)
movq %r10, 0x20(%rsp)
movq %rax, 0x28(%rsp)
callq 0x7a5d0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x30(%rbp), %rax
cmpl $0x0, (%rax)
je 0x77f37
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x7aa10
jmp 0x77ffb
movq -0x20(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0x28(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x38(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x40(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x48(%rax)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x90, %rdi
movq -0x20(%rbp), %rsi
addq $0x28, %rsi
callq 0x7bca0
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x70(%rax), %rax
movq -0x20(%rbp), %rcx
movq 0x10(%rcx), %rdi
addq $0x90, %rdi
movq -0x20(%rbp), %rsi
addq $0x28, %rsi
callq *%rax
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x1b8, %rdi            # imm = 0x1B8
movq -0x20(%rbp), %rsi
addq $0x28, %rsi
callq 0x7ce80
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x78(%rax), %rax
movq -0x20(%rbp), %rcx
movq 0x10(%rcx), %rdi
addq $0x1b8, %rdi            # imm = 0x1B8
movq -0x20(%rbp), %rsi
addq $0x28, %rsi
callq *%rax
addq $0x58, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nopw %cs:(%rax,%rax)