LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: prv_cmp_imm
static void prv_cmp_imm(subtilis_ir_section_t *s, size_t start, void *user_data,
			subtilis_arm_ccode_type_t ok,
			subtilis_arm_ccode_type_t nok, subtilis_error_t *err)
{
	subtilis_arm_reg_t op1;
	subtilis_arm_reg_t op2;
	subtilis_arm_reg_t dest;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *cmp = &s->ops[start]->op.instr;

	op1 = subtilis_arm_ir_to_dreg(cmp->operands[1].reg);

	if (cmp->operands[2].real == 0.0) {
		subtilis_vfp_add_cmpz(arm_s, SUBTILIS_VFP_INSTR_FCMPZD,
				      SUBTILIS_ARM_CCODE_AL, op1, err);
	} else {
		op2 = subtilis_arm_ir_to_dreg(s->freg_counter++);
		subtilis_vfp_add_copy_imm(arm_s, SUBTILIS_ARM_CCODE_AL, op2,
					  cmp->operands[2].real, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
		subtilis_vfp_add_cmp(arm_s, SUBTILIS_VFP_INSTR_FCMPD,
				     SUBTILIS_ARM_CCODE_AL, op1, op2, err);
	}
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_vfp_add_sysreg(arm_s, SUBTILIS_VFP_INSTR_FMRX,
				SUBTILIS_ARM_CCODE_AL,
				SUBTILIS_VFP_SYSREG_FPSCR, 15, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	dest = subtilis_arm_ir_to_arm_reg(cmp->operands[0].reg);
	subtilis_arm_add_mov_imm(arm_s, ok, false, dest, -1, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	subtilis_arm_add_mov_imm(arm_s, nok, false, dest, 0, err);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r9, %rbx
movl %r8d, 0x4(%rsp)
movl %ecx, %r15d
movq %rdx, %r14
movq %rdi, %r13
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %rbp
movq 0x18(%rbp), %rdi
callq 0x4e592
movq %rax, %r12
movsd 0x20(%rbp), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x6b931
jp 0x6b931
movq %r14, %rdi
movl $0x76, %esi
movl $0xe, %edx
movq %r12, %rcx
movq %rbx, %r8
callq 0x5ca30
cmpl $0x0, (%rbx)
jne 0x6b962
movl $0xf, %r8d
movq %r14, %rdi
movl $0x7c, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %rbx, %r9
callq 0x5ca8c
cmpl $0x0, (%rbx)
jne 0x6b962
movq 0x10(%rbp), %rdi
callq 0x4e007
movq %rax, %r12
movq %r14, %rdi
movl $0xd, %esi
movl $0xf, %edx
movl %r15d, %ecx
xorl %r8d, %r8d
movq %rax, %r9
pushq %rbx
pushq $-0x1
callq 0x4f259
addq $0x10, %rsp
cmpl $0x0, (%rbx)
jne 0x6b962
movq %r14, %rdi
movl $0xd, %esi
movl $0xf, %edx
movl 0x4(%rsp), %ecx
xorl %r8d, %r8d
movq %r12, %r9
pushq %rbx
pushq $0x0
callq 0x4f259
addq $0x18, %rsp
jmp 0x6b966
movq 0x20(%r13), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0x20(%r13)
callq 0x4e592
movq %rax, %r13
movsd 0x20(%rbp), %xmm0
movq %r14, %rdi
movl $0xe, %esi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x5c6d0
cmpl $0x0, (%rbx)
je 0x6b971
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r14, %rdi
movl $0x72, %esi
movl $0xe, %edx
movq %r12, %rcx
movq %r13, %r8
movq %rbx, %r9
callq 0x5c9fa
jmp 0x6b8a7
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_gen_sqr
void subtilis_vfp_gen_sqr(subtilis_ir_section_t *s, size_t start,
			  void *user_data, subtilis_error_t *err)
{
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_arm_reg_t dest;
	subtilis_arm_reg_t src;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;

	dest = subtilis_arm_ir_to_dreg(instr->operands[0].reg);
	src = subtilis_arm_ir_to_dreg(instr->operands[1].reg);

	subtilis_vfp_add_sqrt(arm_s, SUBTILIS_VFP_INSTR_FSQRTD,
			      SUBTILIS_ARM_CCODE_AL, dest, src, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r12
movq 0x10(%r12), %rdi
callq 0x4e592
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4e592
movq %r14, %rdi
movl $0x79, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %rax, %r8
movq %rbx, %r9
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x5ca56
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_gen_absr
void subtilis_vfp_gen_absr(subtilis_ir_section_t *s, size_t start,
			   void *user_data, subtilis_error_t *err)
{
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_arm_reg_t dest;
	subtilis_arm_reg_t src;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;

	dest = subtilis_arm_ir_to_dreg(instr->operands[0].reg);
	src = subtilis_arm_ir_to_dreg(instr->operands[1].reg);

	subtilis_vfp_add_tran(arm_s, SUBTILIS_VFP_INSTR_FABSD,
			      SUBTILIS_ARM_CCODE_AL, true, dest, src, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r12
movq 0x10(%r12), %rdi
callq 0x4e592
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4e592
movq %rbx, (%rsp)
movq %r14, %rdi
movl $0x4f, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %r15, %r8
movq %rax, %r9
callq 0x5c93b
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_gen_preamble
void subtilis_vfp_gen_preamble(subtilis_arm_section_t *arm_s,
			       subtilis_error_t *err)
{
	subtilis_arm_reg_t status;

	status = subtilis_arm_ir_to_arm_reg(arm_s->reg_counter++);

	subtilis_arm_add_mov_imm(arm_s, SUBTILIS_ARM_CCODE_AL, false, status, 0,
				 err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_vfp_add_sysreg(arm_s, SUBTILIS_VFP_INSTR_FMXR,
				SUBTILIS_ARM_CCODE_AL,
				SUBTILIS_VFP_SYSREG_FPSCR, status, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq (%rdi), %rdi
leaq 0x1(%rdi), %rax
movq %rax, (%r14)
callq 0x4e007
movq %rax, %r15
movq %r14, %rdi
movl $0xd, %esi
movl $0xf, %edx
movl $0xe, %ecx
xorl %r8d, %r8d
movq %rax, %r9
pushq %rbx
pushq $0x0
callq 0x4f259
addq $0x10, %rsp
cmpl $0x0, (%rbx)
je 0x6bccd
popq %rbx
popq %r14
popq %r15
retq
movq %r14, %rdi
movl $0x7b, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %r15, %r8
movq %rbx, %r9
popq %rbx
popq %r14
popq %r15
jmp 0x5ca8c
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_gen_movi8tofp
void subtilis_vfp_gen_movi8tofp(subtilis_ir_section_t *s, size_t start,
				void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	subtilis_arm_reg_t src;
	subtilis_arm_reg_t tmp;
	subtilis_arm_reg_t tmp1;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *signx = &s->ops[start]->op.instr;

	dest = subtilis_arm_ir_to_dreg(signx->operands[0].reg);
	src = subtilis_arm_ir_to_arm_reg(signx->operands[1].reg);
	tmp = subtilis_arm_ir_to_arm_reg(arm_s->reg_counter++);
	tmp1 = subtilis_arm_ir_to_dreg(arm_s->freg_counter++);

	subtilis_arm_add_signx(arm_s, SUBTILIS_ARM_INSTR_SXTB,
			       SUBTILIS_ARM_CCODE_AL, tmp, src,
			       SUBTILIS_ARM_SIGNX_ROR_NONE, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_vfp_add_cptran(arm_s, SUBTILIS_VFP_INSTR_FMSR,
				SUBTILIS_ARM_CCODE_AL, true, tmp1, tmp, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_vfp_add_tran(arm_s, SUBTILIS_VFP_INSTR_FSITOD,
			      SUBTILIS_ARM_CCODE_AL, true, dest, tmp1, err);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %r14
movq %rdx, %rbx
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r12
movq 0x10(%r12), %rdi
callq 0x4e592
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4e007
movq %rax, %rbp
movq (%rbx), %rdi
leaq 0x1(%rdi), %rax
movq %rax, (%rbx)
callq 0x4e007
movq %rax, %r13
movq 0x8(%rbx), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0x8(%rbx)
callq 0x4e592
movq %rax, %r12
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0xa9, %esi
movl $0xe, %edx
movq %r13, %rcx
movq %rbp, %r8
xorl %r9d, %r9d
callq 0x50061
cmpl $0x0, (%r14)
jne 0x6bdb5
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x5d, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %r12, %r8
movq %r13, %r9
callq 0x5c97b
cmpl $0x0, (%r14)
jne 0x6bdb5
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x51, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %r15, %r8
movq %r12, %r9
callq 0x5c93b
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_gen_movfptoi32i32
void subtilis_vfp_gen_movfptoi32i32(subtilis_ir_section_t *s, size_t start,
				    void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest1;
	subtilis_arm_reg_t dest2;
	subtilis_arm_reg_t src;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *mov = &s->ops[start]->op.instr;

	dest1 = subtilis_arm_ir_to_arm_reg(mov->operands[0].reg);
	dest2 = subtilis_arm_ir_to_arm_reg(mov->operands[1].reg);
	src = subtilis_arm_ir_to_dreg(mov->operands[2].reg);

	subtilis_vfp_add_tran_dbl(arm_s, SUBTILIS_VFP_INSTR_FMRRD,
				  SUBTILIS_ARM_CCODE_AL, dest1, dest2, src, 0,
				  err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %rcx, %rbx
movq %rdx, %r14
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r13
movq 0x10(%r13), %rdi
callq 0x4e007
movq %rax, %r15
movq 0x18(%r13), %rdi
callq 0x4e007
movq %rax, %r12
movq 0x20(%r13), %rdi
callq 0x4e592
movq %r14, %rdi
movl $0x7e, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %r12, %r8
movq %rax, %r9
pushq %rbx
pushq $0x0
callq 0x5cac2
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_preserve_regs
size_t subtilis_vfp_preserve_regs(subtilis_arm_section_t *arm_s,
				  int save_real_start, subtilis_error_t *err)
{
	int i;
	subtilis_arm_instr_t *instr;
	subtilis_vfp_stran_instr_t *stran;
	size_t stf_site = INT_MAX;

	for (i = save_real_start; i < SUBTILIS_ARM_REG_MAX_VFP_DBL_REGS; i++) {
		instr = subtilis_arm_section_add_instr(
		    arm_s, SUBTILIS_VFP_INSTR_FSTD, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return INT_MAX;

		stran = &instr->operands.vfp_stran;
		stran->ccode = SUBTILIS_ARM_CCODE_NV;
		stran->dest = i;
		stran->base = 13;
		stran->offset = 2;
		stran->pre_indexed = true;
		stran->write_back = true;
		stran->subtract = true;
		if (stf_site == INT_MAX)
			stf_site = arm_s->last_op;
	}

	return stf_site;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movl $0x7fffffff, %r15d      # imm = 0x7FFFFFFF
cmpl $0xf, %esi
jg 0x6be91
movq %rdx, %rbx
movq %rdi, %r14
movslq %esi, %r12
movq %r14, %rdi
movl $0x48, %esi
movq %rbx, %rdx
callq 0x4e74a
cmpl $0x0, (%rbx)
jne 0x6be8b
movl $0xf, 0x8(%rax)
movq %r12, 0x10(%rax)
movq $0xd, 0x18(%rax)
movl $0x1010102, 0x20(%rax)  # imm = 0x1010102
cmpq $0x7fffffff, %r15       # imm = 0x7FFFFFFF
jne 0x6be80
movq 0x28(%r14), %r15
incq %r12
cmpl $0x10, %r12d
jne 0x6be44
jmp 0x6be91
movl $0x7fffffff, %r15d      # imm = 0x7FFFFFFF
movq %r15, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_restore_regs
size_t subtilis_vfp_restore_regs(subtilis_arm_section_t *arm_s,
				 int save_real_start, subtilis_error_t *err)
{
	int i;
	subtilis_arm_instr_t *instr;
	subtilis_vfp_stran_instr_t *stran;
	size_t ldf_site = INT_MAX;

	for (i = SUBTILIS_ARM_REG_MAX_VFP_DBL_REGS - 1; i >= save_real_start;
	     i--) {
		instr = subtilis_arm_section_add_instr(
		    arm_s, SUBTILIS_VFP_INSTR_FLDD, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return INT_MAX;
		stran = &instr->operands.vfp_stran;
		stran->ccode = SUBTILIS_ARM_CCODE_NV;
		stran->dest = i;
		stran->base = 13;
		stran->offset = 2;
		stran->pre_indexed = false;
		stran->write_back = true;
		stran->subtract = false;

		if (ldf_site == INT_MAX)
			ldf_site = arm_s->last_op;
	}

	return ldf_site;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movl $0x7fffffff, %r15d      # imm = 0x7FFFFFFF
cmpl $0xf, %esi
jg 0x6bf0f
movq %rdx, %rbx
movq %rdi, %r14
movslq %esi, %r12
movl $0x10, %r13d
movq %r14, %rdi
movl $0x49, %esi
movq %rbx, %rdx
callq 0x4e74a
cmpl $0x0, (%rbx)
jne 0x6bf09
decq %r13
movl $0xf, 0x8(%rax)
movq %r13, 0x10(%rax)
movq $0xd, 0x18(%rax)
movl $0x10002, 0x20(%rax)    # imm = 0x10002
cmpq $0x7fffffff, %r15       # imm = 0x7FFFFFFF
jne 0x6bf02
movq 0x28(%r14), %r15
cmpq %r12, %r13
jg 0x6bec3
jmp 0x6bf0f
movl $0x7fffffff, %r15d      # imm = 0x7FFFFFFF
movq %r15, %rax
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_preserve_update
void subtilis_vfp_preserve_update(subtilis_arm_section_t *arm_s,
				  subtilis_arm_call_site_t *call_site,
				  size_t real_regs_saved, size_t real_regs_used,
				  subtilis_error_t *err)
{
	subtilis_arm_op_t *op;
	size_t i;
	size_t vfp_reg_count;

	if (real_regs_saved > SUBTILIS_ARM_REG_MAX_ARGS)
		real_regs_saved = SUBTILIS_ARM_REG_MAX_VFP_DBL_REGS -
				  SUBTILIS_ARM_REG_MAX_ARGS;
	else
		real_regs_saved =
		    SUBTILIS_ARM_REG_MAX_VFP_DBL_REGS - real_regs_saved;

	vfp_reg_count = SUBTILIS_ARM_REG_MAX_VFP_DBL_REGS - real_regs_saved;
	op = &arm_s->op_pool->ops[call_site->stf_site];

	for (; vfp_reg_count < SUBTILIS_ARM_REG_MAX_VFP_DBL_REGS;
	     vfp_reg_count++) {
		if (real_regs_used & (1 << vfp_reg_count)) {
			op->op.instr.operands.vfp_stran.ccode =
			    SUBTILIS_ARM_CCODE_AL;
		}
		op = &arm_s->op_pool->ops[op->next];
	}

	vfp_reg_count = SUBTILIS_ARM_REG_MAX_VFP_DBL_REGS - 1;
	op = &arm_s->op_pool->ops[call_site->ldf_site];
	for (i = 0; i < real_regs_saved; i++) {
		if (real_regs_used & (1 << vfp_reg_count))
			op->op.instr.operands.vfp_stran.ccode =
			    SUBTILIS_ARM_CCODE_AL;
		op = &arm_s->op_pool->ops[op->next];
		vfp_reg_count--;
	}
}

// Assembly:
movq %rcx, %rax
movl $0x10, %ecx
subq %rdx, %rcx
cmpq $0x5, %rdx
movl $0xc, %r8d
cmovbq %rcx, %r8
testq %r8, %r8
je 0x6bfcd
imulq $0x68, 0x18(%rsi), %rcx
movq 0x38(%rdi), %r9
addq (%r9), %rcx
cmpq $0x5, %rdx
movl $0x4, %r10d
cmovaeq %rdx, %r10
movq %rdx, %r9
subq %r10, %r9
addq $0x3, %r9
subl %r10d, %edx
addl $0x4, %edx
btq %rdx, %rax
jae 0x6bf75
movl $0xe, 0x10(%rcx)
movq 0x38(%rdi), %r10
imulq $0x68, 0x58(%rcx), %rcx
addq (%r10), %rcx
incq %r9
incl %edx
cmpq $0xf, %r9
jb 0x6bf68
movq 0x38(%rdi), %rcx
imulq $0x68, 0x10(%rsi), %rdx
addq (%rcx), %rdx
movl $0xf, %ecx
xorl %esi, %esi
movl $0x1, %r9d
shll %cl, %r9d
movslq %r9d, %r9
testq %rax, %r9
je 0x6bfb7
movl $0xe, 0x10(%rdx)
movq 0x38(%rdi), %r9
imulq $0x68, 0x58(%rdx), %rdx
addq (%r9), %rdx
incq %rsi
decl %ecx
cmpq %r8, %rsi
jb 0x6bf9f
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_store_double
void subtilis_vfp_store_double(subtilis_arm_section_t *arm_s,
			       subtilis_arm_reg_t dest, subtilis_arm_reg_t base,
			       size_t offset, subtilis_error_t *err)
{
	subtilis_arm_instr_t *instr;
	subtilis_vfp_stran_instr_t *fstran;

	instr =
	    subtilis_arm_section_add_instr(arm_s, SUBTILIS_VFP_INSTR_FSTD, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	fstran = &instr->operands.vfp_stran;
	fstran->ccode = SUBTILIS_ARM_CCODE_AL;
	fstran->dest = dest;
	fstran->base = base;
	fstran->offset = offset / 4;
	fstran->pre_indexed = true;
	fstran->write_back = false;
	fstran->subtract = true;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r12
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r15
movl $0x48, %esi
movq %r8, %rdx
callq 0x4e74a
cmpl $0x0, (%r12)
jne 0x6c042
movl $0xe, 0x8(%rax)
movq %r15, 0x10(%rax)
movq %r14, 0x18(%rax)
shrl $0x2, %ebx
movb %bl, 0x20(%rax)
movw $0x1, 0x21(%rax)
movb $0x1, 0x23(%rax)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_arm_vfp_if_init
void subtilis_arm_vfp_if_init(subtilis_arm_fp_if_t *fp_if)
{
	fp_if->max_regs =
	    SUBTILIS_ARM_REG_MAX_VFP_DBL_REGS; /* TODO: needs constant */

	fp_if->max_offset = 1023;
	fp_if->store_type = SUBTILIS_VFP_INSTR_FSTD;
	fp_if->load_type = SUBTILIS_VFP_INSTR_FLDD;
	fp_if->reverse_fpa_consts = false;
	fp_if->preamble_fn = subtilis_vfp_gen_preamble;
	fp_if->preserve_regs_fn = subtilis_vfp_preserve_regs;
	fp_if->restore_regs_fn = subtilis_vfp_restore_regs;
	fp_if->update_regs_fn = subtilis_vfp_preserve_update;
	fp_if->update_offs_fn = subtilis_vfp_update_offsets;
	fp_if->store_dbl_fn = subtilis_vfp_store_double;
	fp_if->mov_reg_fn = subtilis_vfp_mov_reg;
	fp_if->spill_imm_fn = subtilis_vfp_insert_stran_spill_imm;
	fp_if->stran_imm_fn = subtilis_vfp_insert_stran_imm;
	fp_if->is_fixed_fn = subtilis_vfp_is_fixed;
	fp_if->init_dist_walker_fn = subtilis_init_vfp_dist_walker;
	fp_if->init_used_walker_fn = subtilis_init_vfp_used_walker;
	fp_if->init_real_alloc_fn = subtilis_vfp_alloc_init_walker;
}

// Assembly:
movq $0x10, (%rdi)
movl $0x3ff, 0x8(%rdi)       # imm = 0x3FF
movabsq $0x4900000048, %rax     # imm = 0x4900000048
movq %rax, 0x18(%rdi)
movb $0x0, 0xc(%rdi)
leaq -0x414(%rip), %rax      # 0x6bc81
movq %rax, 0x20(%rdi)
leaq -0x278(%rip), %rax      # 0x6be28
movq %rax, 0x28(%rdi)
leaq -0x20b(%rip), %rax      # 0x6bea0
movq %rax, 0x30(%rdi)
leaq -0x19a(%rip), %rax      # 0x6bf1c
movq %rax, 0x38(%rdi)
leaq -0xf3(%rip), %rax       # 0x6bfce
movq %rax, 0x40(%rdi)
leaq -0xd1(%rip), %rax       # 0x6bffb
movq %rax, 0x48(%rdi)
leaq -0x89(%rip), %rax       # 0x6c04e
movq %rax, 0x50(%rdi)
leaq -0xf8f1(%rip), %rax     # 0x5c7f1
movq %rax, 0x58(%rdi)
leaq -0xf847(%rip), %rax     # 0x5c8a6
movq %rax, 0x60(%rdi)
leaq -0x92(%rip), %rax       # 0x6c066
movq %rax, 0x68(%rdi)
leaq 0xdcd(%rip), %rax       # 0x6ced0
movq %rax, 0x70(%rdi)
leaq 0x14ce(%rip), %rax      # 0x6d5dc
movq %rax, 0x78(%rdi)
leaq 0x8f(%rip), %rax        # 0x6c1a8
movq %rax, 0x80(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: prv_cmp_simple
static void prv_cmp_simple(subtilis_ir_section_t *s, size_t start,
			   void *user_data, subtilis_arm_instr_type_t itype,
			   subtilis_arm_ccode_type_t ccode,
			   subtilis_error_t *err)
{
	subtilis_arm_reg_t op1;
	subtilis_arm_reg_t op2;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *ir_op = &s->ops[start]->op.instr;

	op1 = subtilis_arm_ir_to_dreg(ir_op->operands[1].reg);
	op2 = subtilis_arm_ir_to_dreg(ir_op->operands[2].reg);

	subtilis_vfp_add_cmp(arm_s, itype, SUBTILIS_ARM_CCODE_AL, op1, op2,
			     err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_vfp_add_sysreg(arm_s, SUBTILIS_VFP_INSTR_FMRX,
				SUBTILIS_ARM_CCODE_AL,
				SUBTILIS_VFP_SYSREG_FPSCR, 15, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r12
movq 0x18(%r12), %rdi
callq 0x4e592
movq %rax, %r15
movq 0x20(%r12), %rdi
callq 0x4e592
movq %r14, %rdi
movl $0x72, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %rax, %r8
movq %rbx, %r9
callq 0x5c9fa
cmpl $0x0, (%rbx)
je 0x6c17a
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movl $0xf, %r8d
movq %r14, %rdi
movl $0x7c, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %rbx, %r9
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x5ca8c
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_alloc.c
// Function: subtilis_vfp_alloc_init_walker
void subtilis_vfp_alloc_init_walker(subtlis_arm_walker_t *walker,
				    void *user_data)
{
	walker->fpa_data_monadic_fn = prv_alloc_fpa_data_monadic_instr;
	walker->fpa_data_dyadic_fn = prv_alloc_fpa_data_dyadic_instr;
	walker->fpa_stran_fn = prv_alloc_fpa_stran_instr;
	walker->fpa_tran_fn = prv_alloc_fpa_tran_instr;
	walker->fpa_cmp_fn = prv_alloc_fpa_cmp_instr;
	walker->fpa_ldrc_fn = prv_alloc_fpa_ldrc_instr;
	walker->fpa_cptran_fn = prv_alloc_fpa_cptran_instr;
	walker->vfp_stran_fn = prv_alloc_vfp_stran_instr;
	walker->vfp_copy_fn = prv_alloc_vfp_copy_instr;
	walker->vfp_ldrc_fn = prv_alloc_vfp_ldrc_instr;
	walker->vfp_tran_fn = prv_alloc_vfp_tran_instr;
	walker->vfp_tran_dbl_fn = prv_alloc_vfp_tran_dbl_instr;
	walker->vfp_cptran_fn = prv_alloc_vfp_cptran_instr;
	walker->vfp_data_fn = prv_alloc_vfp_data_instr;
	walker->vfp_cmp_fn = prv_alloc_vfp_cmp_instr;
	walker->vfp_sqrt_fn = prv_alloc_vfp_sqrt_instr;
	walker->vfp_sysreg_fn = prv_alloc_vfp_sysreg_instr;
	walker->vfp_cvt_fn = prv_alloc_vfp_cvt_instr;
}

// Assembly:
leaq 0xf6(%rip), %rax        # 0x6c2a5
movq %rax, 0x80(%rdi)
leaq 0x101(%rip), %rax       # 0x6c2be
movq %rax, 0x88(%rdi)
leaq 0x10c(%rip), %rax       # 0x6c2d7
movq %rax, 0x90(%rdi)
leaq 0x117(%rip), %rax       # 0x6c2f0
movq %rax, 0x98(%rdi)
leaq 0x122(%rip), %rax       # 0x6c309
movq %rax, 0xa0(%rdi)
leaq 0x12d(%rip), %rax       # 0x6c322
movq %rax, 0xa8(%rdi)
leaq 0x138(%rip), %rax       # 0x6c33b
movq %rax, 0xb0(%rdi)
leaq 0x143(%rip), %rax       # 0x6c354
movq %rax, 0xb8(%rdi)
leaq 0x2d1(%rip), %rax       # 0x6c4f0
movq %rax, 0xc0(%rdi)
leaq 0x3cb(%rip), %rax       # 0x6c5f8
movq %rax, 0xc8(%rdi)
leaq 0x3e5(%rip), %rax       # 0x6c620
movq %rax, 0xd0(%rdi)
leaq 0x4e3(%rip), %rax       # 0x6c72c
movq %rax, 0xd8(%rdi)
leaq 0x5c5(%rip), %rax       # 0x6c81c
movq %rax, 0xe0(%rdi)
leaq 0x746(%rip), %rax       # 0x6c9ab
movq %rax, 0xe8(%rdi)
leaq 0x946(%rip), %rax       # 0x6cbb9
movq %rax, 0xf0(%rdi)
leaq 0xac3(%rip), %rax       # 0x6cd44
movq %rax, 0xf8(%rdi)
leaq 0xb88(%rip), %rax       # 0x6ce17
movq %rax, 0x100(%rdi)
leaq 0xc17(%rip), %rax       # 0x6ceb4
movq %rax, 0x108(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_alloc.c
// Function: prv_alloc_vfp_copy_instr
static void prv_alloc_vfp_copy_instr(void *user_data, subtilis_arm_op_t *op,
				     subtilis_arm_instr_type_t type,
				     subtilis_vfp_copy_instr_t *instr,
				     subtilis_error_t *err)
{
	int dist_src;
	size_t vreg_src;

	subtilis_arm_reg_ud_t *ud = user_data;

	switch (type) {
	case SUBTILIS_VFP_INSTR_FCPYS:
	case SUBTILIS_VFP_INSTR_FNEGS:
	case SUBTILIS_VFP_INSTR_FABSS:
		subtilis_error_set_assertion_failed(err);
		return;
	default:
		break;
	}

	vreg_src = instr->src;
	(void)subtilis_arm_reg_alloc_ensure(ud, op, ud->int_regs, ud->real_regs,
					    &instr->src, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	dist_src = subtilis_arm_reg_alloc_calculate_dist(
	    ud, vreg_src, op, &ud->real_regs->dist_walker, ud->real_regs);
	if (dist_src == -1)
		ud->real_regs->phys_to_virt[instr->src] = INT_MAX;

	subtilis_arm_reg_alloc_alloc_fp_dest(ud, op, &instr->dest, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	/* Need to check for useless moves */

	if ((type != SUBTILIS_VFP_INSTR_FCPYD) || (instr->src != instr->dest))
		ud->real_regs->next[instr->src] = dist_src;

	ud->instr_count++;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r15
movq %rcx, %r14
movl %edx, %r12d
movq %rsi, %rbp
movq %rdi, %rbx
leal -0x4a(%r12), %eax
cmpl $0x4, %eax
ja 0x6c545
movl $0x15, %ecx
btl %eax, %ecx
jae 0x6c545
leaq 0xaaf1(%rip), %rdx      # 0x77016
movq %r15, %rdi
movl $0xf, %esi
movl $0xa3, %ecx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x13604
leaq 0x10(%r14), %r8
movq 0x10(%r14), %r13
movq 0x8(%rbx), %rdx
movq 0x10(%rbx), %rcx
movq %rbx, %rdi
movq %rbp, %rsi
movq %r8, (%rsp)
movq %r15, %r9
callq 0x5216a
cmpl $0x0, (%r15)
jne 0x6c5e9
movq 0x10(%rbx), %r8
leaq 0x90(%r8), %rcx
movq %rbx, %rdi
movq %r13, %rsi
movq %rbp, %rdx
callq 0x51f18
movl %eax, %r13d
cmpl $-0x1, %eax
jne 0x6c5a5
movq 0x10(%rbx), %rax
movq 0x8(%rax), %rax
movq (%rsp), %rcx
movq (%rcx), %rcx
movq $0x7fffffff, (%rax,%rcx,8) # imm = 0x7FFFFFFF
addq $0x8, %r14
movq %rbx, %rdi
movq %rbp, %rsi
movq %r14, %rdx
movq %r15, %rcx
callq 0x52427
cmpl $0x0, (%r15)
jne 0x6c5e9
cmpl $0x4b, %r12d
jne 0x6c5d2
movq (%rsp), %rax
movq (%rax), %rax
cmpq (%r14), %rax
je 0x6c5e5
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq (%rsp), %rcx
movq (%rcx), %rcx
movl %r13d, (%rax,%rcx,4)
incq 0x20(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_alloc.c
// Function: prv_alloc_vfp_tran_instr
static void prv_alloc_vfp_tran_instr(void *user_data, subtilis_arm_op_t *op,
				     subtilis_arm_instr_type_t type,
				     subtilis_vfp_tran_instr_t *instr,
				     subtilis_error_t *err)
{
	size_t vreg_src;
	int dist_src;
	subtilis_arm_reg_ud_t *ud = user_data;

	switch (type) {
	case SUBTILIS_VFP_INSTR_FTOSIS:
	case SUBTILIS_VFP_INSTR_FTOUIS:
	case SUBTILIS_VFP_INSTR_FTOUIZS:
	case SUBTILIS_VFP_INSTR_FTOSIZS:
	case SUBTILIS_VFP_INSTR_FSITOS:
	case SUBTILIS_VFP_INSTR_FUITOS:
		subtilis_error_set_assertion_failed(err);
		break;
	default:
		break;
	}

	if (!instr->use_dregs) {
		subtilis_error_set_assertion_failed(err);
		return;
	}

	vreg_src = instr->src;
	(void)subtilis_arm_reg_alloc_ensure(ud, op, ud->int_regs, ud->real_regs,
					    &instr->src, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	dist_src = subtilis_arm_reg_alloc_calculate_dist(
	    ud, vreg_src, op, &ud->real_regs->dist_walker, ud->real_regs);
	if (dist_src == -1)
		ud->real_regs->phys_to_virt[instr->src] = INT_MAX;

	subtilis_arm_reg_alloc_alloc_fp_dest(ud, op, &instr->dest, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	ud->real_regs->next[instr->src] = dist_src;

	ud->instr_count++;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r14
movq %rcx, %r15
movq %rsi, %r12
movq %rdi, %rbx
addl $-0x52, %edx
cmpl $0xa, %edx
ja 0x6c662
movl $0x4ab, %eax            # imm = 0x4AB
btl %edx, %eax
jae 0x6c662
leaq 0xa9c6(%rip), %rdx      # 0x77016
movq %r14, %rdi
movl $0xf, %esi
movl $0xdd, %ecx
callq 0x13604
cmpb $0x0, 0x4(%r15)
je 0x6c705
leaq 0x10(%r15), %r13
movq 0x10(%r15), %rbp
movq 0x8(%rbx), %rdx
movq 0x10(%rbx), %rcx
movq %rbx, %rdi
movq %r12, %rsi
movq %r13, %r8
movq %r14, %r9
callq 0x5216a
cmpl $0x0, (%r14)
jne 0x6c6f6
movq 0x10(%rbx), %r8
leaq 0x90(%r8), %rcx
movq %rbx, %rdi
movq %rbp, %rsi
movq %r12, %rdx
callq 0x51f18
movl %eax, %ebp
cmpl $-0x1, %eax
jne 0x6c6c8
movq 0x10(%rbx), %rax
movq 0x8(%rax), %rax
movq (%r13), %rcx
movq $0x7fffffff, (%rax,%rcx,8) # imm = 0x7FFFFFFF
addq $0x8, %r15
movq %rbx, %rdi
movq %r12, %rsi
movq %r15, %rdx
movq %r14, %rcx
callq 0x52427
cmpl $0x0, (%r14)
jne 0x6c6f6
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq (%r13), %rcx
movl %ebp, (%rax,%rcx,4)
incq 0x20(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xa90a(%rip), %rdx      # 0x77016
movq %r14, %rdi
movl $0xf, %esi
movl $0xe4, %ecx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x13604
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_alloc.c
// Function: prv_alloc_vfp_tran_dbl_instr
static void prv_alloc_vfp_tran_dbl_instr(void *user_data, subtilis_arm_op_t *op,
					 subtilis_arm_instr_type_t type,
					 subtilis_vfp_tran_dbl_instr_t *instr,
					 subtilis_error_t *err)
{
	size_t vreg_src;
	int dist_src;
	subtilis_arm_reg_ud_t *ud = user_data;

	if (type != SUBTILIS_VFP_INSTR_FMRRD) {
		subtilis_error_set_assertion_failed(err);
		return;
	}

	vreg_src = instr->src1;
	(void)subtilis_arm_reg_alloc_ensure(ud, op, ud->int_regs, ud->real_regs,
					    &instr->src1, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	dist_src = subtilis_arm_reg_alloc_calculate_dist(
	    ud, vreg_src, op, &ud->real_regs->dist_walker, ud->real_regs);
	if (dist_src == -1)
		ud->real_regs->phys_to_virt[instr->src1] = INT_MAX;

	subtilis_arm_reg_alloc_alloc_dest(ud, op, &instr->dest1, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_arm_reg_alloc_alloc_dest(ud, op, &instr->dest2, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	ud->real_regs->next[instr->src1] = dist_src;

	ud->instr_count++;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r14
cmpl $0x7e, %edx
jne 0x6c7f5
movq %rcx, %r12
movq %rsi, %r13
movq %rdi, %rbx
leaq 0x18(%rcx), %r15
movq 0x18(%rcx), %rbp
movq 0x8(%rdi), %rdx
movq 0x10(%rdi), %rcx
movq %r15, %r8
movq %r14, %r9
callq 0x5216a
cmpl $0x0, (%r14)
jne 0x6c7e6
movq 0x10(%rbx), %r8
leaq 0x90(%r8), %rcx
movq %rbx, %rdi
movq %rbp, %rsi
movq %r13, %rdx
callq 0x51f18
movl %eax, %ebp
cmpl $-0x1, %eax
jne 0x6c7a0
movq 0x10(%rbx), %rax
movq 0x8(%rax), %rax
movq (%r15), %rcx
movq $0x7fffffff, (%rax,%rcx,8) # imm = 0x7FFFFFFF
leaq 0x8(%r12), %rdx
movq %rbx, %rdi
movq %r13, %rsi
movq %r14, %rcx
callq 0x5237c
cmpl $0x0, (%r14)
jne 0x6c7e6
addq $0x10, %r12
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x5237c
cmpl $0x0, (%r14)
jne 0x6c7e6
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq (%r15), %rcx
movl %ebp, (%rax,%rcx,4)
incq 0x20(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0xa81a(%rip), %rdx      # 0x77016
movq %r14, %rdi
movl $0xf, %esi
movl $0x105, %ecx            # imm = 0x105
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x13604
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_alloc.c
// Function: prv_alloc_vfp_sqrt_instr
static void prv_alloc_vfp_sqrt_instr(void *user_data, subtilis_arm_op_t *op,
				     subtilis_arm_instr_type_t type,
				     subtilis_vfp_sqrt_instr_t *instr,
				     subtilis_error_t *err)
{
	size_t vreg_op1;
	int dist_op1;
	subtilis_arm_reg_ud_t *ud = user_data;

	if (type == SUBTILIS_VFP_INSTR_FSQRTS) {
		subtilis_error_set_assertion_failed(err);
		return;
	}

	vreg_op1 = instr->op1;
	(void)subtilis_arm_reg_alloc_ensure(ud, op, ud->int_regs, ud->real_regs,
					    &instr->op1, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	dist_op1 = subtilis_arm_reg_alloc_calculate_dist(
	    ud, vreg_op1, op, &ud->real_regs->dist_walker, ud->real_regs);
	if (dist_op1 == -1)
		ud->real_regs->phys_to_virt[instr->op1] = INT_MAX;

	subtilis_arm_reg_alloc_alloc_fp_dest(ud, op, &instr->dest, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	ud->real_regs->next[instr->op1] = dist_op1;

	ud->instr_count++;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r14
cmpl $0x7a, %edx
jne 0x6cd7e
leaq 0xa2b8(%rip), %rdx      # 0x77016
movq %r14, %rdi
movl $0xf, %esi
movl $0x1ed, %ecx            # imm = 0x1ED
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x13604
movq %rcx, %r12
movq %rsi, %r13
movq %rdi, %rbx
leaq 0x10(%rcx), %r15
movq 0x10(%rcx), %rbp
movq 0x8(%rdi), %rdx
movq 0x10(%rdi), %rcx
movq %r15, %r8
movq %r14, %r9
callq 0x5216a
cmpl $0x0, (%r14)
jne 0x6ce08
movq 0x10(%rbx), %r8
leaq 0x90(%r8), %rcx
movq %rbx, %rdi
movq %rbp, %rsi
movq %r13, %rdx
callq 0x51f18
movl %eax, %ebp
cmpl $-0x1, %eax
jne 0x6cddb
movq 0x10(%rbx), %rax
movq 0x8(%rax), %rax
movq (%r15), %rcx
movq $0x7fffffff, (%rax,%rcx,8) # imm = 0x7FFFFFFF
addq $0x8, %r12
movq %rbx, %rdi
movq %r13, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x52427
cmpl $0x0, (%r14)
jne 0x6ce08
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq (%r15), %rcx
movl %ebp, (%rax,%rcx,4)
incq 0x20(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/vfp_alloc.c
// Function: prv_alloc_vfp_sysreg_instr
static void prv_alloc_vfp_sysreg_instr(void *user_data, subtilis_arm_op_t *op,
				       subtilis_arm_instr_type_t type,
				       subtilis_vfp_sysreg_instr_t *instr,
				       subtilis_error_t *err)
{
	size_t vreg_op1;
	int dist_op1;
	bool fixed_op1 = true;
	subtilis_arm_reg_ud_t *ud = user_data;

	if (type == SUBTILIS_VFP_INSTR_FMRX) {
		subtilis_arm_reg_alloc_alloc_dest(ud, op, &instr->arm_reg, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	} else {
		vreg_op1 = instr->arm_reg;
		fixed_op1 = subtilis_arm_reg_alloc_ensure(
		    ud, op, ud->int_regs, ud->int_regs, &instr->arm_reg, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
		if (!fixed_op1) {
			dist_op1 = subtilis_arm_reg_alloc_calculate_dist(
			    ud, vreg_op1, op, &ud->int_regs->dist_walker,
			    ud->int_regs);
			if (dist_op1 == -1)
				ud->int_regs->phys_to_virt[instr->arm_reg] =
				    INT_MAX;
		}
	}

	ud->instr_count++;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %r8, %r12
movq %rcx, %r14
movq %rsi, %r15
movq %rdi, %rbx
addq $0x8, %r14
cmpl $0x7c, %edx
jne 0x6ce4f
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
movq %r12, %rcx
callq 0x5237c
cmpl $0x0, (%r12)
jne 0x6ceaa
jmp 0x6cea6
movq (%r14), %r13
movq 0x8(%rbx), %rcx
movq %rbx, %rdi
movq %r15, %rsi
movq %rcx, %rdx
movq %r14, %r8
movq %r12, %r9
callq 0x5216a
cmpl $0x0, (%r12)
jne 0x6ceaa
testb %al, %al
jne 0x6cea6
movq 0x8(%rbx), %r8
leaq 0x90(%r8), %rcx
movq %rbx, %rdi
movq %r13, %rsi
movq %r15, %rdx
callq 0x51f18
cmpl $-0x1, %eax
jne 0x6cea6
movq 0x8(%rbx), %rax
movq 0x8(%rax), %rax
movq (%r14), %rcx
movq $0x7fffffff, (%rax,%rcx,8) # imm = 0x7FFFFFFF
incq 0x20(%rbx)
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/arm_vfp_dist.c
// Function: prv_dist_vfp_stran_instr
static void prv_dist_vfp_stran_instr(void *user_data, subtilis_arm_op_t *op,
				     subtilis_arm_instr_type_t type,
				     subtilis_vfp_stran_instr_t *instr,
				     subtilis_error_t *err)
{
	subtilis_dist_data_t *ud = user_data;

	if (type == SUBTILIS_VFP_INSTR_FSTS ||
	    type == SUBTILIS_VFP_INSTR_FLDS) {
		subtilis_error_set_assertion_failed(err);
	}

	/*
	 * The function calling code can generate LDFNV and STFNV when
	 * preserving fpa registers.  These instructions should be
	 * ignored for the purposes of register allocation.
	 */

	if (instr->ccode != SUBTILIS_ARM_CCODE_NV) {
		if (type == SUBTILIS_VFP_INSTR_FSTD) {
			if (instr->dest == ud->reg_num) {
				subtilis_error_set_walker_failed(err);
				return;
			}
		} else {
			if (instr->dest == ud->reg_num) {
				ud->last_used = -1;
				subtilis_error_set_walker_failed(err);
				return;
			}
		}
	}

	ud->last_used++;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %r8, %rbx
movq %rcx, %r15
movl %edx, %ebp
movq %rdi, %r14
movl %edx, %eax
andl $-0x2, %eax
cmpl $0x46, %eax
jne 0x6d1d6
leaq 0x9e69(%rip), %rdx      # 0x7702d
movq %rbx, %rdi
movl $0xf, %esi
movl $0xed, %ecx
callq 0x13604
cmpl $0xf, (%r15)
jne 0x6d1eb
incl 0x8(%r14)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq 0x8(%r15), %rax
movq (%r14), %rcx
cmpl $0x48, %ebp
jne 0x6d212
cmpq %rcx, %rax
jne 0x6d1dc
leaq 0x9e2a(%rip), %rdx      # 0x7702d
movq %rbx, %rdi
movl $0x1f, %esi
movl $0xf9, %ecx
jmp 0x6d233
cmpq %rcx, %rax
jne 0x6d1dc
movl $0xffffffff, 0x8(%r14)  # imm = 0xFFFFFFFF
leaq 0x9e07(%rip), %rdx      # 0x7702d
movq %rbx, %rdi
movl $0x1f, %esi
movl $0xff, %ecx
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x13604
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/arm_vfp_dist.c
// Function: prv_dist_vfp_copy_instr
static void prv_dist_vfp_copy_instr(void *user_data, subtilis_arm_op_t *op,
				    subtilis_arm_instr_type_t type,
				    subtilis_vfp_copy_instr_t *instr,
				    subtilis_error_t *err)
{
	subtilis_dist_data_t *ud = user_data;

	switch (type) {
	case SUBTILIS_VFP_INSTR_FCPYS:
	case SUBTILIS_VFP_INSTR_FNEGS:
	case SUBTILIS_VFP_INSTR_FABSS:
		subtilis_error_set_assertion_failed(err);
		return;
	default:
		break;
	}

	if (instr->src == 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:
addl $-0x4a, %edx
cmpl $0x4, %edx
ja 0x6d26d
movl $0x15, %eax
btl %edx, %eax
jae 0x6d26d
leaq 0x9dd2(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0xf, %esi
movl $0x113, %ecx            # imm = 0x113
jmp 0x13604
movq (%rdi), %rax
cmpq %rax, 0x10(%rcx)
jne 0x6d28f
leaq 0x9db0(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0x1f, %esi
movl $0x11a, %ecx            # imm = 0x11A
jmp 0x13604
cmpq %rax, 0x8(%rcx)
jne 0x6d2b5
movl $0xffffffff, 0x8(%rdi)  # imm = 0xFFFFFFFF
leaq 0x9d8a(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0x1f, %esi
movl $0x120, %ecx            # imm = 0x120
jmp 0x13604
incl 0x8(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/arm_vfp_dist.c
// Function: prv_dist_vfp_cptran_instr
static void prv_dist_vfp_cptran_instr(void *user_data, subtilis_arm_op_t *op,
				      subtilis_arm_instr_type_t type,
				      subtilis_vfp_cptran_instr_t *instr,
				      subtilis_error_t *err)
{
	subtilis_dist_data_t *ud = user_data;

	if (!instr->use_dregs) {
		subtilis_error_set_assertion_failed(err);
		return;
	}

	if (type != SUBTILIS_VFP_INSTR_FMSR) {
		if (instr->src == ud->reg_num) {
			subtilis_error_set_walker_failed(err);
			return;
		}
	} else {
		if (instr->dest == ud->reg_num) {
			ud->last_used = -1;
			subtilis_error_set_walker_failed(err);
			return;
		}
	}

	ud->last_used++;
}

// Assembly:
cmpb $0x0, 0x4(%rcx)
je 0x6d3f4
movq (%rdi), %rax
cmpl $0x5d, %edx
jne 0x6d40d
cmpq %rax, 0x8(%rcx)
jne 0x6d42c
movl $0xffffffff, 0x8(%rdi)  # imm = 0xFFFFFFFF
leaq 0x9c4b(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0x1f, %esi
movl $0x186, %ecx            # imm = 0x186
jmp 0x13604
leaq 0x9c32(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0xf, %esi
movl $0x17a, %ecx            # imm = 0x17A
jmp 0x13604
cmpq %rax, 0x10(%rcx)
jne 0x6d42c
leaq 0x9c13(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0x1f, %esi
movl $0x180, %ecx            # imm = 0x180
jmp 0x13604
incl 0x8(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/arm_vfp_dist.c
// Function: prv_dist_vfp_cmp_instr
static void prv_dist_vfp_cmp_instr(void *user_data, subtilis_arm_op_t *op,
				   subtilis_arm_instr_type_t type,
				   subtilis_vfp_cmp_instr_t *instr,
				   subtilis_error_t *err)
{
	subtilis_dist_data_t *ud = user_data;

	switch (type) {
	case SUBTILIS_VFP_INSTR_FCMPS:
	case SUBTILIS_VFP_INSTR_FCMPES:
	case SUBTILIS_VFP_INSTR_FCMPZS:
	case SUBTILIS_VFP_INSTR_FCMPEZS:
		subtilis_error_set_assertion_failed(err);
		return;
	default:
		break;
	}

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

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

	ud->last_used++;
}

// Assembly:
addl $-0x71, %edx
cmpl $0x6, %edx
ja 0x6d549
movl $0x55, %eax
btl %edx, %eax
jae 0x6d51d
leaq 0x9b22(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0xf, %esi
movl $0x1d1, %ecx            # imm = 0x1D1
jmp 0x13604
movl $0xa, %eax
btl %edx, %eax
jae 0x6d549
movq 0x10(%rcx), %rax
cmpq (%rdi), %rax
jne 0x6d549
leaq 0x9af6(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0x1f, %esi
movl $0x1da, %ecx            # imm = 0x1DA
jmp 0x13604
movq 0x8(%rcx), %rax
cmpq (%rdi), %rax
jne 0x6d56b
leaq 0x9ad4(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0x1f, %esi
movl $0x1e0, %ecx            # imm = 0x1E0
jmp 0x13604
incl 0x8(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/arch/arm32/arm_vfp_dist.c
// Function: prv_used_vfp_cptran_instr
static void prv_used_vfp_cptran_instr(void *user_data, subtilis_arm_op_t *op,
				      subtilis_arm_instr_type_t type,
				      subtilis_vfp_cptran_instr_t *instr,
				      subtilis_error_t *err)
{
	subtilis_dist_data_t *ud = user_data;

	if (!instr->use_dregs) {
		subtilis_error_set_assertion_failed(err);
		return;
	}

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

	ud->last_used++;
}

// Assembly:
cmpb $0x0, 0x4(%rcx)
je 0x6d941
cmpl $0x5d, %edx
jne 0x6d95a
movq 0x8(%rcx), %rax
cmpq (%rdi), %rax
jne 0x6d95a
movl $0xffffffff, 0x8(%rdi)  # imm = 0xFFFFFFFF
leaq 0x96fe(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0x1f, %esi
movl $0x2ba, %ecx            # imm = 0x2BA
jmp 0x13604
leaq 0x96e5(%rip), %rdx      # 0x7702d
movq %r8, %rdi
movl $0xf, %esi
movl $0x2b4, %ecx            # imm = 0x2B4
jmp 0x13604
incl 0x8(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/backends/ptd/ptd.c
// Function: subtilis_ptd_syscall
void subtilis_ptd_syscall(subtilis_ir_section_t *s, size_t start,
			  void *user_data, subtilis_error_t *err)
{
	size_t flags_reg;
	subtilis_arm_instr_t *instr;
	subtilis_arm_data_instr_t *datai;
	subtilis_ir_sys_call_t *sys_call = &s->ops[start]->op.sys_call;
	subtilis_arm_section_t *arm_s = user_data;

	subtilis_riscos_arm_syscall(s, start, user_data, subtilis_ptd_swi_list,
				    subtilis_ptd_known_swis, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	if (sys_call->flags_reg != SIZE_MAX) {
		if (sys_call->flags_local)
			flags_reg =
			    subtilis_arm_ir_to_arm_reg(sys_call->flags_reg);
		else
			flags_reg =
			    subtilis_arm_ir_to_arm_reg(arm_s->reg_counter++);

		subtilis_arm_add_flags(
		    arm_s, SUBTILIS_ARM_INSTR_MRS, SUBTILIS_ARM_CCODE_AL,
		    SUBTILIS_ARM_FLAGS_CPSR, 0, flags_reg, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;

		instr = subtilis_arm_section_add_instr(
		    arm_s, SUBTILIS_ARM_INSTR_MOV, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
		datai = &instr->operands.data;
		datai->ccode = SUBTILIS_ARM_CCODE_AL;
		datai->status = false;
		datai->dest = flags_reg;
		datai->op2.type = SUBTILIS_ARM_OP2_SHIFTED;
		datai->op2.op.shift.reg = flags_reg;
		datai->op2.op.shift.shift_reg = false;
		datai->op2.op.shift.shift.integer = 28;
		datai->op2.op.shift.type = SUBTILIS_ARM_SHIFT_LSR;

		if (!sys_call->flags_local)
			subtilis_arm_add_stran_imm(
			    arm_s, SUBTILIS_ARM_INSTR_STR,
			    SUBTILIS_ARM_CCODE_AL, flags_reg,
			    subtilis_arm_ir_to_arm_reg(sys_call->flags_reg), 0,
			    false, err);
	}
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r12
leaq 0x9a58(%rip), %rax      # 0x774a0
movq (%rax), %r8
leaq 0x3605e(%rip), %rcx     # 0xa3ab0
movq %rbx, %r9
callq 0x706db
cmpl $0x0, (%rbx)
je 0x6da6b
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq 0x18(%r12), %rdi
cmpq $-0x1, %rdi
je 0x6da5f
cmpb $0x0, 0x20(%r12)
jne 0x6da88
movq (%r14), %rdi
leaq 0x1(%rdi), %rax
movq %rax, (%r14)
callq 0x4e007
movq %rax, %r15
subq $0x8, %rsp
movq %r14, %rdi
movl $0x1d, %esi
movl $0xe, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
movq %rax, %r9
pushq %rbx
callq 0x4fea2
addq $0x10, %rsp
cmpl $0x0, (%rbx)
jne 0x6da5f
movq %r14, %rdi
movl $0xd, %esi
movq %rbx, %rdx
callq 0x4e74a
cmpl $0x0, (%rbx)
jne 0x6da5f
movl $0xe, 0x8(%rax)
xorl %ecx, %ecx
movb %cl, 0xc(%rax)
movq %r15, 0x10(%rax)
movl $0x2, %edx
movl %edx, 0x20(%rax)
movq %r15, 0x28(%rax)
movb %cl, 0x40(%rax)
movl $0x1c, 0x38(%rax)
movl %edx, 0x30(%rax)
cmpb %cl, 0x20(%r12)
jne 0x6da5f
movq 0x18(%r12), %rdi
callq 0x4e007
movq %r14, %rdi
movl $0x13, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %rax, %r8
xorl %r9d, %r9d
pushq %rbx
pushq $0x0
callq 0x4f68b
addq $0x18, %rsp
jmp 0x6da63
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/backends/ptd/ptd.c
// Function: subtilis_ptd_signx8to32
void subtilis_ptd_signx8to32(subtilis_ir_section_t *s, size_t start,
			     void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	subtilis_arm_reg_t src;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *signx = &s->ops[start]->op.instr;

	dest = subtilis_arm_ir_to_arm_reg(signx->operands[0].reg);
	src = subtilis_arm_ir_to_arm_reg(signx->operands[1].reg);

	subtilis_arm_add_signx(arm_s, SUBTILIS_ARM_INSTR_SXTB,
			       SUBTILIS_ARM_CCODE_AL, dest, src,
			       SUBTILIS_ARM_SIGNX_ROR_NONE, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r12
movq 0x10(%r12), %rdi
callq 0x4e007
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4e007
movq %rbx, (%rsp)
movq %r14, %rdi
movl $0xa9, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %rax, %r8
xorl %r9d, %r9d
callq 0x50061
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/backends/ptd/ptd.c
// Function: subtilis_ptd_sys_trans
size_t subtilis_ptd_sys_trans(const char *call_name)
{
	size_t *found;
	size_t error_bit = 0;

	if (call_name[0] == 'X') {
		call_name++;
		error_bit = 0x20000;
	}

	found = bsearch(call_name, &subtilis_ptd_swi_index[0],
			subtilis_ptd_known_swis, sizeof(*found),
			prv_sys_string_lookup);

	if (!found)
		return SIZE_MAX;

	return subtilis_ptd_swi_list[*found].num | error_bit;
}

// Assembly:
pushq %rbx
movb (%rdi), %bl
xorl %eax, %eax
cmpb $0x58, %bl
sete %al
addq %rax, %rdi
leaq 0x9743(%rip), %rax      # 0x774a0
movq (%rax), %rdx
leaq 0x9749(%rip), %rsi      # 0x774b0
leaq 0x39(%rip), %r8         # 0x6dda7
movl $0x8, %ecx
callq 0x112a0
testq %rax, %rax
je 0x6dd9e
xorl %ecx, %ecx
cmpb $0x58, %bl
sete %cl
shll $0x11, %ecx
movq (%rax), %rax
leaq (%rax,%rax,2), %rax
leaq 0x35d1a(%rip), %rdx     # 0xa3ab0
movl (%rdx,%rax,8), %eax
orq %rcx, %rax
jmp 0x6dda5
movq $-0x1, %rax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/markdryan[P]subtilis/backends/ptd/ptd.c
// Function: prv_cursor_on_off
static void prv_cursor_on_off(subtilis_ir_section_t *s, void *user_data,
			      uint32_t swtch, subtilis_error_t *err)
{
	size_t i;
	subtilis_arm_section_t *arm_s = user_data;
	uint32_t ar[] = {23, 1, 0, 0, 0, 0, 0, 0, 0, 0};

	ar[2] = swtch;

	for (i = 0; i < sizeof(ar) / sizeof(ar[0]); i++) {
		/* read_mask = 0 */
		/* write_mask = 0 */
		subtilis_arm_add_swi(arm_s, SUBTILIS_ARM_CCODE_AL,
				     256 + ar[i] + 0x20000, 0, 0, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

	subtilis_riscos_handle_graphics_error(arm_s, s, err);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x30, %rsp
movq %rcx, %rbx
movq %rsi, %r15
movq %rdi, %r14
xorps %xmm0, %xmm0
movaps %xmm0, (%rsp)
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
movabsq $0x100000017, %rax      # imm = 0x100000017
movq %rax, (%rsp)
movl %edx, 0x8(%rsp)
xorl %r12d, %r12d
movl $0x20100, %ebp          # imm = 0x20100
movl (%rsp,%r12,4), %edx
addl %ebp, %edx
movq %r15, %rdi
movl $0xe, %esi
xorl %ecx, %ecx
xorl %r8d, %r8d
movq %rbx, %r9
callq 0x4f5c2
cmpl $0x0, (%rbx)
jne 0x6de78
incq %r12
cmpq $0xa, %r12
jne 0x6de35
movq %r15, %rdi
movq %r14, %rsi
movq %rbx, %rdx
addq $0x30, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x6e9e1
addq $0x30, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O1/liuhaotian[P]xmppsh/libstrophe/examples/active.c
// Function: handle_reply
int handle_reply(xmpp_conn_t * const conn,
		 xmpp_stanza_t * const stanza,
		 void * const userdata)
{
    xmpp_stanza_t *query, *item;
    char *type;

    type = xmpp_stanza_get_type(stanza);
    if (strcmp(type, "error") == 0)
	fprintf(stderr, "ERROR: query failed\n");
    else {
	query = xmpp_stanza_get_child_by_name(stanza, "query");
	printf("Active Sessions:\n");
	for (item = xmpp_stanza_get_children(query); item; 
	     item = xmpp_stanza_get_next(item))
	    printf("\t %s\n", xmpp_stanza_get_attribute(item, "jid"));
	printf("END OF LIST\n");
    }

    /* disconnect */
    xmpp_disconnect(conn);

    return 0;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0xb579
leaq 0xa4c7(%rip), %rsi      # 0xcab0
movq %rax, %rdi
callq 0x2270
testl %eax, %eax
je 0x267f
leaq 0x9a19(%rip), %rsi      # 0xc019
movq %r14, %rdi
callq 0xb597
movq %rax, %r14
leaq 0x9ab0(%rip), %rdi      # 0xc0c2
callq 0x22e0
movq %r14, %rdi
callq 0xb632
testq %rax, %rax
je 0x265d
movq %rax, %r14
leaq 0x99f7(%rip), %r15      # 0xc025
leaq 0x99ea(%rip), %r12      # 0xc01f
movq %r14, %rdi
movq %r15, %rsi
callq 0xb729
movq %r12, %rdi
movq %rax, %rsi
xorl %eax, %eax
callq 0x2030
movq %r14, %rdi
callq 0xb637
movq %rax, %r14
testq %rax, %rax
jne 0x2635
leaq 0x9a6f(%rip), %rdi      # 0xc0d3
callq 0x22e0
movq %rbx, %rdi
callq 0x473c
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
callq 0x2380
jmp 0x2669