// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/arch/arm32/arm_reg_alloc.c
// Function: prv_compute_regs_used
static void prv_compute_regs_used(subtilis_arm_section_t *arm_s,
				  subtilis_arm_call_site_t *call_site,
				  subtilis_regs_used_t regs_used_before,
				  subtilis_regs_used_t regs_used_after,
				  size_t *int_regs_used, size_t *real_regs_used,
				  subtilis_error_t *err)
{
	subtilis_arm_mtran_instr_t *mtran;
	subtilis_arm_op_t *op;
	size_t real_regs_saved;
	subtilis_arm_br_instr_t *br;

	op = &arm_s->op_pool->ops[call_site->call_site];
	br = &op->op.instr.operands.br;

	op = &arm_s->op_pool->ops[call_site->stm_site];
	mtran = &op->op.instr.operands.mtran;

	*int_regs_used = regs_used_before.int_regs & regs_used_after.int_regs;
	*int_regs_used |= mtran->reg_list;

	if (br->link_type == SUBTILIS_ARM_BR_LINK_INT)
		*int_regs_used &= ~((size_t)1);

	mtran->reg_list = *int_regs_used;
	op = &arm_s->op_pool->ops[call_site->ldm_site];
	mtran = &op->op.instr.operands.mtran;
	mtran->reg_list |= *int_regs_used;

	*real_regs_used = 0;
	if (call_site->ldf_site == INT_MAX)
		return;

	*real_regs_used =
	    regs_used_before.real_regs & regs_used_after.real_regs;

	if (br->link_type == SUBTILIS_ARM_BR_LINK_REAL)
		*real_regs_used &= ~((size_t)1);

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

	real_regs_saved = call_site->real_args;
	arm_s->fp_if->update_regs_fn(arm_s, call_site, real_regs_saved,
				     *real_regs_used, err);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdx, -0x10(%rbp)
movq %rcx, -0x8(%rbp)
movq %r8, -0x20(%rbp)
movq %r9, -0x18(%rbp)
movq %rdi, -0x28(%rbp)
movq %rsi, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rax
movq (%rax), %rax
movq -0x30(%rbp), %rcx
imulq $0x68, 0x30(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
addq $0x8, %rax
addq $0x8, %rax
movq %rax, -0x50(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rax
movq (%rax), %rax
movq -0x30(%rbp), %rcx
imulq $0x68, 0x8(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
addq $0x8, %rax
addq $0x8, %rax
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rcx
andq -0x20(%rbp), %rcx
movq 0x10(%rbp), %rax
movq %rcx, (%rax)
movq -0x38(%rbp), %rax
movq 0x10(%rax), %rcx
movq 0x10(%rbp), %rax
orq (%rax), %rcx
movq %rcx, (%rax)
movq -0x50(%rbp), %rax
cmpl $0x1, 0x8(%rax)
jne 0x7a25b
movq 0x10(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq 0x10(%rbp), %rax
movq (%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rax
movq (%rax), %rax
movq -0x30(%rbp), %rcx
imulq $0x68, (%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
addq $0x8, %rax
addq $0x8, %rax
movq %rax, -0x38(%rbp)
movq 0x10(%rbp), %rax
movq (%rax), %rcx
movq -0x38(%rbp), %rax
orq 0x10(%rax), %rcx
movq %rcx, 0x10(%rax)
movq 0x18(%rbp), %rax
movq $0x0, (%rax)
movq -0x30(%rbp), %rax
cmpq $0x7fffffff, 0x10(%rax) # imm = 0x7FFFFFFF
jne 0x7a2c5
jmp 0x7a34a
movq -0x8(%rbp), %rcx
andq -0x18(%rbp), %rcx
movq 0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x50(%rbp), %rax
cmpl $0x2, 0x8(%rax)
jne 0x7a2ec
movq 0x18(%rbp), %rax
movq (%rax), %rcx
andq $-0x2, %rcx
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0xc0(%rax)
jne 0x7a316
movq 0x20(%rbp), %rdi
movl $0xf, %esi
leaq 0x32889(%rip), %rdx     # 0xacb93
movl $0x8ff, %ecx            # imm = 0x8FF
callq 0x158e0
jmp 0x7a34a
movq -0x30(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x38(%rax), %rax
movq -0x28(%rbp), %rdi
movq -0x30(%rbp), %rsi
movq -0x48(%rbp), %rdx
movq 0x18(%rbp), %rcx
movq (%rcx), %rcx
movq 0x20(%rbp), %r8
callq *%rax
addq $0x50, %rsp
popq %rbp
retq