LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_div_int32_fn
static int32_t prv_div_int32_fn(subtilis_arm_ass_context_t *c, int32_t a,
				int32_t b, subtilis_error_t *err)
{
	if (b == 0) {
		subtilis_error_set_divide_by_zero(err, c->l->stream->name,
						  c->l->line);
		return 0;
	}

	return a / b;
}

// Assembly:
testl %edx, %edx
je 0x69ff8
movl %edx, %r8d
movl %esi, %eax
cltd
idivl %r8d
retq
pushq %rax
movq 0x8(%rdi), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %eax
leaq 0xcfe9(%rip), %r8       # 0x76ff4
movq %rcx, %rdi
movl $0x1a, %esi
movl %eax, %ecx
movl $0x679, %r9d            # imm = 0x679
callq 0x145c8
xorl %eax, %eax
addq $0x8, %rsp
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_binary_real
static subtilis_arm_exp_val_t *prv_binary_real(subtilis_arm_ass_context_t *c,
					       subtilis_arm_exp_val_t *e1,
					       subtilis_arm_exp_val_t *e2,
					       subtilis_ass_real_fn_t fn,
					       subtilis_error_t *err)
{
	double val1;
	double val2;

	val1 = prv_exp_to_real(c, e1, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	val2 = prv_exp_to_real(c, e2, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	e1->type = SUBTILIS_ARM_EXP_TYPE_REAL;
	e1->val.real = fn(c, val1, val2, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	subtilis_arm_exp_val_free(e2);
	return e1;

cleanup:

	subtilis_arm_exp_val_free(e2);
	subtilis_arm_exp_val_free(e1);

	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %r8, %r15
movq %rcx, %r12
movq %rdx, %r14
movq %rsi, %rbx
movq %rdi, %r13
movq %r8, %rdx
callq 0x6b62e
cmpl $0x0, (%r15)
jne 0x6a0d8
movq %r13, %rdi
movq %r14, %rsi
movq %r15, %rdx
movsd %xmm0, 0x8(%rsp)
callq 0x6b62e
movaps %xmm0, %xmm1
movsd 0x8(%rsp), %xmm0
cmpl $0x0, (%r15)
jne 0x6a0d8
movl $0x7, (%rbx)
movq %r13, %rdi
movq %r15, %rsi
callq *%r12
movsd %xmm0, 0x8(%rbx)
cmpl $0x0, (%r15)
je 0x6a0e5
movq %r14, %rdi
callq 0x68d41
movq %rbx, %r14
xorl %ebx, %ebx
movq %r14, %rdi
callq 0x68d41
movq %rbx, %rax
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_div_real_fn
static double prv_div_real_fn(subtilis_arm_ass_context_t *c, double a, double b,
			      subtilis_error_t *err)
{
	if (b == 0.0) {
		subtilis_error_set_divide_by_zero(err, c->l->stream->name,
						  c->l->line);
		return 0;
	}

	return a / b;
}

// Assembly:
xorpd %xmm2, %xmm2
ucomisd %xmm2, %xmm1
jne 0x6a138
jp 0x6a138
pushq %rax
movq 0x8(%rdi), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0xced7(%rip), %r8       # 0x76ff4
movq %rsi, %rdi
movl $0x1a, %esi
movl $0x667, %r9d            # imm = 0x667
callq 0x145c8
xorps %xmm0, %xmm0
addq $0x8, %rsp
retq
divsd %xmm1, %xmm0
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_pow_int32_fn
static int32_t prv_pow_int32_fn(subtilis_arm_ass_context_t *c, int32_t a,
				int32_t b, subtilis_error_t *err)
{
	int32_t accum;
	size_t i;

	if (b == 0)
		return 1;

	accum = a;
	for (i = 1; i < b; i++)
		accum *= a;

	return accum;
}

// Assembly:
testl %edx, %edx
je 0x6a710
movl %esi, %eax
cmpl $0x1, %edx
je 0x6a70f
movslq %edx, %rdx
leaq 0x2(%rdx), %rcx
andq $-0x4, %rcx
addq $-0x2, %rdx
movd %eax, %xmm1
movaps 0xaeb0(%rip), %xmm0     # 0x754e0
movss %xmm1, %xmm0            # xmm0 = xmm1[0],xmm0[1,2,3]
movq %rdx, %xmm1
pshufd $0x44, %xmm1, %xmm2     # xmm2 = xmm1[0,1,0,1]
movd %eax, %xmm1
pshufd $0x0, %xmm1, %xmm3      # xmm3 = xmm1[0,0,0,0]
movl $0x4, %eax
pshufd $0xf5, %xmm3, %xmm4     # xmm4 = xmm3[1,1,3,3]
movaps %xmm0, %xmm1
pmuludq %xmm3, %xmm0
pshufd $0xe8, %xmm0, %xmm0     # xmm0 = xmm0[0,2,2,3]
pshufd $0xf5, %xmm1, %xmm5     # xmm5 = xmm1[1,1,3,3]
pmuludq %xmm4, %xmm5
pshufd $0xe8, %xmm5, %xmm5     # xmm5 = xmm5[0,2,2,3]
punpckldq %xmm5, %xmm0    # xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1]
leaq (%rcx,%rax), %rdx
addq $-0x4, %rdx
addq $-0x4, %rax
cmpq $0x4, %rdx
jne 0x6a651
negq %rax
movq %rax, %xmm3
pshufd $0x44, %xmm3, %xmm3     # xmm3 = xmm3[0,1,0,1]
movdqa 0x8f8a(%rip), %xmm4     # 0x73620
por %xmm3, %xmm4
por 0x8f6e(%rip), %xmm3     # 0x73610
movdqa 0x8f86(%rip), %xmm5     # 0x73630
pxor %xmm5, %xmm2
pxor %xmm5, %xmm3
movdqa %xmm3, %xmm6
pcmpgtd %xmm2, %xmm6
pxor %xmm5, %xmm4
movdqa %xmm4, %xmm5
pcmpgtd %xmm2, %xmm5
movdqa %xmm5, %xmm7
shufps $0x88, %xmm6, %xmm7     # xmm7 = xmm7[0,2],xmm6[0,2]
pcmpeqd %xmm2, %xmm3
pcmpeqd %xmm2, %xmm4
shufps $0xdd, %xmm3, %xmm4     # xmm4 = xmm4[1,3],xmm3[1,3]
andps %xmm7, %xmm4
shufps $0xdd, %xmm6, %xmm5     # xmm5 = xmm5[1,3],xmm6[1,3]
orps %xmm4, %xmm5
pand %xmm5, %xmm1
pandn %xmm0, %xmm5
por %xmm1, %xmm5
pshufd $0xee, %xmm5, %xmm0     # xmm0 = xmm5[2,3,2,3]
pshufd $0xff, %xmm5, %xmm1     # xmm1 = xmm5[3,3,3,3]
pshufd $0xf5, %xmm5, %xmm2     # xmm2 = xmm5[1,1,3,3]
pmuludq %xmm1, %xmm2
pmuludq %xmm5, %xmm0
pmuludq %xmm2, %xmm0
movd %xmm0, %eax
retq
movl $0x1, %eax
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_process_bktd_exp
static subtilis_arm_exp_val_t *
prv_process_bktd_exp(subtilis_arm_ass_context_t *c, subtilis_error_t *err)
{
	const char *tbuf;
	subtilis_arm_exp_val_t *e;

	e = subtilis_arm_exp_val_get(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;
	tbuf = subtilis_token_get_text(c->t);
	if ((c->t->type != SUBTILIS_TOKEN_OPERATOR) || strcmp(tbuf, ")")) {
		subtilis_arm_exp_val_free(e);
		subtilis_error_set_right_bkt_expected(
		    err, tbuf, c->l->stream->name, c->l->line);
		return NULL;
	}

	return e;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r15
callq 0x69632
cmpl $0x0, (%rbx)
jne 0x6a7ab
movq %rax, %r14
movq 0x10(%r15), %rdi
callq 0x12ad0
movq %rax, %r12
movq 0x10(%r15), %rax
cmpl $0x2, (%rax)
jne 0x6a76f
cmpb $0x29, (%r12)
jne 0x6a76f
cmpb $0x0, 0x1(%r12)
je 0x6a7ae
movq %r14, %rdi
callq 0x68d41
movq 0x8(%r15), %rax
movq 0x30(%rax), %r8
movl 0x38(%rax), %r9d
leaq 0xc86a(%rip), %rax      # 0x76ff4
leaq 0x9684(%rip), %rcx      # 0x73e15
movq %rbx, %rdi
movl $0x16, %esi
movq %r12, %rdx
pushq $0x2ae                  # imm = 0x2AE
pushq %rax
callq 0x143da
addq $0x10, %rsp
xorl %r14d, %r14d
movq %r14, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_not
static subtilis_arm_exp_val_t *prv_not(subtilis_arm_ass_context_t *c,
				       subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *e;

	subtilis_lexer_get(c->l, c->t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	e = prv_priority1(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	e->type = SUBTILIS_ARM_EXP_TYPE_INT;
	e->val.integer = ~prv_exp_to_int(c, e, err);
	if (err->type != SUBTILIS_ERROR_OK) {
		subtilis_arm_exp_val_free(e);
		return NULL;
	}

	return e;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x8(%rdi), %rdi
movq 0x10(%r15), %rsi
movq %r14, %rdx
callq 0x12edc
cmpl $0x0, (%r14)
jne 0x6a819
movq %r15, %rdi
movq %r14, %rsi
callq 0x6a13d
cmpl $0x0, (%r14)
jne 0x6a819
movq %rax, %rbx
movl $0x6, (%rax)
movq %r15, %rdi
movq %rax, %rsi
movq %r14, %rdx
callq 0x6b2c1
notl %eax
movl %eax, 0x8(%rbx)
cmpl $0x0, (%r14)
je 0x6a81b
movq %rbx, %rdi
callq 0x68d41
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_int
static subtilis_arm_exp_val_t *prv_int(subtilis_arm_ass_context_t *c,
				       subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *val;

	val = prv_bracketed_exp(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	switch (val->type) {
	case SUBTILIS_ARM_EXP_TYPE_INT:
		break;
	case SUBTILIS_ARM_EXP_TYPE_REAL:
		val->type = SUBTILIS_ARM_EXP_TYPE_INT;
		val->val.integer = (int32_t)val->val.real;
		break;
	case SUBTILIS_ARM_EXP_TYPE_FREG:
	case SUBTILIS_ARM_EXP_TYPE_REG:
		val->type = SUBTILIS_ARM_EXP_TYPE_INT;
		val->val.integer = (int32_t)val->val.reg;
		break;
	default:
		subtilis_error_set_numeric_exp_expected(err, c->l->stream->name,
							c->l->line);
		goto cleanup;
	}

	return val;

cleanup:

	subtilis_arm_exp_val_free(val);

	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %r15
callq 0x6b307
cmpl $0x0, (%r14)
je 0x6a845
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
movl (%rax), %eax
cmpl $0x2, %eax
jb 0x6a869
cmpl $0x6, %eax
je 0x6a83c
cmpl $0x7, %eax
jne 0x6a871
movl $0x6, (%rbx)
cvttsd2si 0x8(%rbx), %eax
movl %eax, 0x8(%rbx)
jmp 0x6a83c
movl $0x6, (%rbx)
jmp 0x6a83c
movq 0x8(%r15), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0xc771(%rip), %r8       # 0x76ff4
movq %r14, %rdi
movl $0x44, %esi
movl $0x35b, %r9d            # imm = 0x35B
callq 0x145c8
movq %rbx, %rdi
callq 0x68d41
jmp 0x6a83a
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_abs
static subtilis_arm_exp_val_t *prv_abs(subtilis_arm_ass_context_t *c,
				       subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *val;

	val = prv_bracketed_exp(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	switch (val->type) {
	case SUBTILIS_ARM_EXP_TYPE_INT:
		if (val->val.integer < 0)
			val->val.integer = -val->val.integer;
		break;
	case SUBTILIS_ARM_EXP_TYPE_REAL:
		if (val->val.real < 0)
			val->val.real = -val->val.real;
		break;
	default:
		subtilis_error_set_numeric_exp_expected(err, c->l->stream->name,
							c->l->line);
		goto cleanup;
	}

	return val;

cleanup:

	subtilis_arm_exp_val_free(val);

	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %r15
callq 0x6b307
cmpl $0x0, (%r14)
je 0x6a8c1
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
movl (%rax), %eax
cmpl $0x7, %eax
je 0x6a8de
cmpl $0x6, %eax
jne 0x6a8fc
movl 0x8(%rbx), %eax
testl %eax, %eax
jns 0x6a8b8
negl %eax
movl %eax, 0x8(%rbx)
jmp 0x6a8b8
movsd 0x8(%rbx), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
jbe 0x6a8b8
xorpd 0xab1b(%rip), %xmm0     # 0x75410
movlpd %xmm0, 0x8(%rbx)
jmp 0x6a8b8
movq 0x8(%r15), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0xc6e6(%rip), %r8       # 0x76ff4
movq %r14, %rdi
movl $0x44, %esi
movl $0x398, %r9d            # imm = 0x398
callq 0x145c8
movq %rbx, %rdi
callq 0x68d41
jmp 0x6a8b6
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_sgn
static subtilis_arm_exp_val_t *prv_sgn(subtilis_arm_ass_context_t *c,
				       subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *val;

	val = prv_bracketed_exp(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	switch (val->type) {
	case SUBTILIS_ARM_EXP_TYPE_INT:
		if (val->val.integer < 0)
			val->val.integer = -1;
		else if (val->val.integer > 0)
			val->val.integer = 1;
		else
			val->val.integer = 0;
		break;
	case SUBTILIS_ARM_EXP_TYPE_REAL:
		val->type = SUBTILIS_ARM_EXP_TYPE_INT;
		if (val->val.real < 0)
			val->val.integer = -1;
		else if (val->val.real > 0)
			val->val.integer = 1;
		else
			val->val.integer = 0;
		break;
	default:
		subtilis_error_set_numeric_exp_expected(err, c->l->stream->name,
							c->l->line);
		goto cleanup;
	}

	return val;

cleanup:

	subtilis_arm_exp_val_free(val);

	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %r15
callq 0x6b307
cmpl $0x0, (%r14)
je 0x6a94c
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
movl (%rax), %eax
cmpl $0x7, %eax
je 0x6a965
cmpl $0x6, %eax
jne 0x6a983
cmpl $0x0, 0x8(%rbx)
js 0x6a97a
jne 0x6a9b8
jmp 0x6a943
movl $0x6, (%rbx)
movsd 0x8(%rbx), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
jbe 0x6a9b2
movl $0xffffffff, 0x8(%rbx)  # imm = 0xFFFFFFFF
jmp 0x6a943
movq 0x8(%r15), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0xc65f(%rip), %r8       # 0x76ff4
movq %r14, %rdi
movl $0x44, %esi
movl $0x412, %r9d            # imm = 0x412
callq 0x145c8
movq %rbx, %rdi
callq 0x68d41
jmp 0x6a941
ucomisd %xmm1, %xmm0
jbe 0x6a9c1
movl $0x1, 0x8(%rbx)
jmp 0x6a943
movl $0x0, 0x8(%rbx)
jmp 0x6a943
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_chr_str
static subtilis_arm_exp_val_t *prv_chr_str(subtilis_arm_ass_context_t *c,
					   subtilis_error_t *err)
{
	char c_str[2];
	subtilis_arm_exp_val_t *val;
	subtilis_arm_exp_val_t *val2 = NULL;

	val = prv_int_bkt_exp(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	c_str[0] = val->val.integer & 255;
	c_str[1] = 0;

	val2 = subtilis_arm_exp_new_str_str(c_str, err);

cleanup:

	subtilis_arm_exp_val_free(val);

	return val2;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %r14
movq %rdi, %r15
callq 0x6b307
cmpl $0x0, (%r14)
je 0x6a9ee
xorl %ebx, %ebx
xorl %r14d, %r14d
jmp 0x6aa5b
movq %rax, %rbx
movl (%rax), %eax
cmpl $0x6, %eax
je 0x6aa42
cmpl $0x7, %eax
jne 0x6aa0d
movl $0x6, (%rbx)
cvttsd2si 0x8(%rbx), %eax
movl %eax, 0x8(%rbx)
jmp 0x6aa3c
movq 0x8(%r15), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0xc5d5(%rip), %r8       # 0x76ff4
movq %r14, %rdi
movl $0x44, %esi
movl $0x337, %r9d            # imm = 0x337
callq 0x145c8
movq %rbx, %rdi
callq 0x68d41
xorl %ebx, %ebx
cmpl $0x0, (%r14)
jne 0x6a9e9
movb 0x8(%rbx), %al
leaq 0xe(%rsp), %rdi
movb %al, (%rdi)
movb $0x0, 0x1(%rdi)
movq %r14, %rsi
callq 0x68cab
movq %rax, %r14
movq %rbx, %rdi
callq 0x68d41
movq %r14, %rax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_asc
static subtilis_arm_exp_val_t *prv_asc(subtilis_arm_ass_context_t *c,
				       subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *val;
	subtilis_arm_exp_val_t *val2 = NULL;
	int32_t v;

	val = prv_bracketed_exp(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	if (val->type != SUBTILIS_ARM_EXP_TYPE_STRING) {
		subtilis_error_set_const_string_expected(
		    err, c->l->stream->name, c->l->line);
		goto cleanup;
	}

	if (subtilis_buffer_get_size(&val->val.buf) <= 1)
		v = -1;
	else
		v = subtilis_buffer_get_string(&val->val.buf)[0];

	val2 = subtilis_arm_exp_new_int32(v, err);

cleanup:

	subtilis_arm_exp_val_free(val);

	return val2;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %r15
callq 0x6b307
cmpl $0x0, (%r14)
je 0x6aa8b
xorl %r14d, %r14d
jmp 0x6aaf5
movq %rax, %rbx
cmpl $0x8, (%rax)
jne 0x6aac5
movq %rbx, %r15
addq $0x8, %r15
movq %r15, %rdi
callq 0x14b57
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
cmpq $0x2, %rax
jb 0x6aab8
movq %r15, %rdi
callq 0x14db1
movsbl (%rax), %edi
movq %r14, %rsi
callq 0x68c10
movq %rax, %r14
jmp 0x6aaed
movq 0x8(%r15), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0xc51d(%rip), %r8       # 0x76ff4
movq %r14, %rdi
movl $0x4a, %esi
movl $0x3c9, %r9d            # imm = 0x3C9
callq 0x145c8
xorl %r14d, %r14d
movq %rbx, %rdi
callq 0x68d41
movq %r14, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_len
static subtilis_arm_exp_val_t *prv_len(subtilis_arm_ass_context_t *c,
				       subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *val;
	subtilis_arm_exp_val_t *val2 = NULL;

	val = prv_bracketed_exp(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	if (val->type != SUBTILIS_ARM_EXP_TYPE_STRING) {
		subtilis_error_set_const_string_expected(
		    err, c->l->stream->name, c->l->line);
		goto cleanup;
	}

	val2 = subtilis_arm_exp_new_int32(
	    subtilis_buffer_get_size(&val->val.buf) - 1, err);

cleanup:

	subtilis_arm_exp_val_free(val);

	return val2;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %r15
callq 0x6b307
cmpl $0x0, (%r14)
je 0x6ab19
xorl %r14d, %r14d
jmp 0x6ab6d
movq %rax, %rbx
cmpl $0x8, (%rax)
jne 0x6ab3d
movq %rbx, %rdi
addq $0x8, %rdi
callq 0x14b57
leal -0x1(%rax), %edi
movq %r14, %rsi
callq 0x68c10
movq %rax, %r14
jmp 0x6ab65
movq 0x8(%r15), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0xc4a5(%rip), %r8       # 0x76ff4
movq %r14, %rdi
movl $0x4a, %esi
movl $0x3e7, %r9d            # imm = 0x3E7
callq 0x145c8
xorl %r14d, %r14d
movq %rbx, %rdi
callq 0x68d41
movq %r14, %rax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_left_str
static subtilis_arm_exp_val_t *prv_left_str(subtilis_arm_ass_context_t *c,
					    subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *val;
	int32_t start;
	int32_t len;

	val = prv_left_right(c, &start, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	len = subtilis_buffer_get_size(&val->val.buf) - 1;
	if (len == 0 || start < 0 || start >= len)
		return val;

	subtilis_buffer_delete(&val->val.buf, start, len - start, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	return val;

cleanup:

	subtilis_arm_exp_val_free(val);

	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %r14
leaq 0xc(%rsp), %rsi
movq %r14, %rdx
callq 0x6b41f
cmpl $0x0, (%r14)
je 0x6aba4
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
movq %rax, %r15
addq $0x8, %r15
movq %r15, %rdi
callq 0x14b57
decl %eax
je 0x6ab97
movl 0xc(%rsp), %esi
testl %esi, %esi
js 0x6ab97
cmpl %esi, %eax
jle 0x6ab97
subl %esi, %eax
movslq %eax, %rdx
movq %r15, %rdi
movq %r14, %rcx
callq 0x14c71
cmpl $0x0, (%r14)
je 0x6ab97
movq %rbx, %rdi
callq 0x68d41
jmp 0x6ab95
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_right_str
static subtilis_arm_exp_val_t *prv_right_str(subtilis_arm_ass_context_t *c,
					     subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *val;
	int32_t start;
	int32_t len;

	val = prv_left_right(c, &start, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	len = subtilis_buffer_get_size(&val->val.buf) - 1;
	if (len == 0 || start < 0 || start >= len)
		return val;

	subtilis_buffer_delete(&val->val.buf, 0, len - start, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;
	subtilis_buffer_zero_terminate(&val->val.buf, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	return val;

cleanup:

	subtilis_arm_exp_val_free(val);

	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rsi, %r14
leaq 0xc(%rsp), %rsi
movq %r14, %rdx
callq 0x6b41f
cmpl $0x0, (%r14)
jne 0x6ac56
movq %rax, %rbx
movq %rax, %r15
addq $0x8, %r15
movq %r15, %rdi
callq 0x14b57
decl %eax
je 0x6ac58
movl 0xc(%rsp), %ecx
testl %ecx, %ecx
js 0x6ac58
subl %ecx, %eax
jle 0x6ac58
movslq %eax, %rdx
movq %r15, %rdi
xorl %esi, %esi
movq %r14, %rcx
callq 0x14c71
cmpl $0x0, (%r14)
jne 0x6ac4e
movq %r15, %rdi
movq %r14, %rsi
callq 0x14d01
cmpl $0x0, (%r14)
je 0x6ac58
movq %rbx, %rdi
callq 0x68d41
xorl %ebx, %ebx
movq %rbx, %rax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_str_str
static subtilis_arm_exp_val_t *prv_str_str(subtilis_arm_ass_context_t *c,
					   subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *val;
	char buf[64];
	subtilis_arm_exp_val_t *val2 = NULL;

	val = prv_bracketed_exp(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	switch (val->type) {
	case SUBTILIS_ARM_EXP_TYPE_INT:
		sprintf(buf, "%" PRIi32, val->val.integer);
		break;
	case SUBTILIS_ARM_EXP_TYPE_REAL:
		sprintf(buf, "%f", val->val.real);
		break;
	default:
		subtilis_error_set_numeric_exp_expected(err, c->l->stream->name,
							c->l->line);
		goto cleanup;
	}

	val2 = subtilis_arm_exp_new_str_str(buf, err);

cleanup:

	subtilis_arm_exp_val_free(val);

	return val2;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x40, %rsp
movq %rsi, %r14
movq %rdi, %r15
callq 0x6b307
cmpl $0x0, (%r14)
je 0x6b239
xorl %r14d, %r14d
jmp 0x6b2b4
movq %rax, %rbx
movl (%rax), %eax
cmpl $0x7, %eax
je 0x6b25e
cmpl $0x6, %eax
jne 0x6b284
movl 0x8(%rbx), %edx
leaq 0x8c2a(%rip), %rsi      # 0x73e7c
movq %rsp, %rdi
xorl %eax, %eax
callq 0x12280
jmp 0x6b274
movsd 0x8(%rbx), %xmm0
leaq 0xb4dc(%rip), %rsi      # 0x76746
movq %rsp, %rdi
movb $0x1, %al
callq 0x12280
movq %rsp, %rdi
movq %r14, %rsi
callq 0x68cab
movq %rax, %r14
jmp 0x6b2ac
movq 0x8(%r15), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0xbd5e(%rip), %r8       # 0x76ff4
movq %r14, %rdi
movl $0x44, %esi
movl $0x580, %r9d            # imm = 0x580
callq 0x145c8
xorl %r14d, %r14d
movq %rbx, %rdi
callq 0x68d41
movq %r14, %rax
addq $0x40, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_exp_to_int
static int32_t prv_exp_to_int(subtilis_arm_ass_context_t *c,
			      subtilis_arm_exp_val_t *e1, subtilis_error_t *err)
{
	switch (e1->type) {
	case SUBTILIS_ARM_EXP_TYPE_INT:
		return e1->val.integer;
	case SUBTILIS_ARM_EXP_TYPE_REAL:
		return (int32_t)e1->val.real;
	default:
		subtilis_error_set_numeric_exp_expected(err, c->l->stream->name,
							c->l->line);
		return 0;
	}
}

// Assembly:
movl (%rsi), %eax
cmpl $0x7, %eax
je 0x6b2d1
cmpl $0x6, %eax
jne 0x6b2d7
movl 0x8(%rsi), %eax
retq
cvttsd2si 0x8(%rsi), %eax
retq
pushq %rax
movq 0x8(%rdi), %rcx
movq 0x30(%rcx), %rax
movl 0x38(%rcx), %ecx
leaq 0xbd0a(%rip), %r8       # 0x76ff4
movq %rdx, %rdi
movl $0x44, %esi
movq %rax, %rdx
movl $0xf9, %r9d
callq 0x145c8
xorl %eax, %eax
addq $0x8, %rsp
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_bracketed_exp
static subtilis_arm_exp_val_t *prv_bracketed_exp(subtilis_arm_ass_context_t *c,
						 subtilis_error_t *err)
{
	const char *tbuf;
	subtilis_arm_exp_val_t *e = NULL;

	subtilis_lexer_get(c->l, c->t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	tbuf = subtilis_token_get_text(c->t);
	if (strcmp(tbuf, "(")) {
		subtilis_error_set_expected(err, "( ", tbuf, c->l->stream->name,
					    c->l->line);
		return NULL;
	}

	e = prv_process_bktd_exp(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	subtilis_lexer_get(c->l, c->t, err);
	if (err->type != SUBTILIS_ERROR_OK)
		goto cleanup;

	return e;

cleanup:

	subtilis_arm_exp_val_free(e);

	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %rbx
movq %rdi, %r14
movq 0x8(%rdi), %rdi
movq 0x10(%r14), %rsi
movq %rbx, %rdx
callq 0x12edc
cmpl $0x0, (%rbx)
jne 0x6b370
movq 0x10(%r14), %rdi
callq 0x12ad0
cmpb $0x28, (%rax)
jne 0x6b33b
cmpb $0x0, 0x1(%rax)
je 0x6b37c
movq 0x8(%r14), %rcx
movq 0x30(%rcx), %r8
movl 0x38(%rcx), %r9d
leaq 0xbca6(%rip), %r10      # 0x76ff4
leaq 0x85a1(%rip), %rdx      # 0x738f6
movq %rbx, %rdi
movl $0x1d, %esi
movq %rax, %rcx
pushq $0x2f1                  # imm = 0x2F1
pushq %r10
callq 0x143da
addq $0x10, %rsp
xorl %r15d, %r15d
movq %r15, %rax
popq %rbx
popq %r14
popq %r15
retq
movq %r14, %rdi
movq %rbx, %rsi
callq 0x6a730
cmpl $0x0, (%rbx)
jne 0x6b370
movq %rax, %r15
movq 0x8(%r14), %rdi
movq 0x10(%r14), %rsi
movq %rbx, %rdx
callq 0x12edc
cmpl $0x0, (%rbx)
je 0x6b373
movq %r15, %rdi
callq 0x68d41
jmp 0x6b370
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_real_bkt_exp
static subtilis_arm_exp_val_t *prv_real_bkt_exp(subtilis_arm_ass_context_t *c,
						subtilis_error_t *err)
{
	subtilis_arm_exp_val_t *val;

	val = prv_bracketed_exp(c, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return NULL;

	switch (val->type) {
	case SUBTILIS_ARM_EXP_TYPE_INT:
		val->type = SUBTILIS_ARM_EXP_TYPE_REAL;
		val->val.real = (double)val->val.integer;
		break;
	case SUBTILIS_ARM_EXP_TYPE_REAL:
		break;
	default:
		subtilis_error_set_numeric_exp_expected(err, c->l->stream->name,
							c->l->line);
		goto cleanup;
	}

	return val;

cleanup:

	subtilis_arm_exp_val_free(val);

	return NULL;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %r15
callq 0x6b307
cmpl $0x0, (%r14)
je 0x6b3cf
xorl %ebx, %ebx
movq %rbx, %rax
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %rbx
movl (%rax), %eax
cmpl $0x7, %eax
je 0x6b3c6
cmpl $0x6, %eax
jne 0x6b3f0
movl $0x7, (%rbx)
cvtsi2sdl 0x8(%rbx), %xmm0
movsd %xmm0, 0x8(%rbx)
jmp 0x6b3c6
movq 0x8(%r15), %rax
movq 0x30(%rax), %rdx
movl 0x38(%rax), %ecx
leaq 0xbbf2(%rip), %r8       # 0x76ff4
movq %r14, %rdi
movl $0x44, %esi
movl $0x318, %r9d            # imm = 0x318
callq 0x145c8
movq %rbx, %rdi
callq 0x68d41
jmp 0x6b3c4
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/arm_expression.c
// Function: prv_exp_to_real
static double prv_exp_to_real(subtilis_arm_ass_context_t *c,
			      subtilis_arm_exp_val_t *e1, subtilis_error_t *err)
{
	switch (e1->type) {
	case SUBTILIS_ARM_EXP_TYPE_INT:
		return (double)e1->val.integer;
	case SUBTILIS_ARM_EXP_TYPE_REAL:
		return e1->val.real;
	default:
		subtilis_error_set_numeric_exp_expected(err, c->l->stream->name,
							c->l->line);
		return 0;
	}
}

// Assembly:
movl (%rsi), %eax
cmpl $0x7, %eax
je 0x6b640
cmpl $0x6, %eax
jne 0x6b646
cvtsi2sdl 0x8(%rsi), %xmm0
retq
movsd 0x8(%rsi), %xmm0
retq
pushq %rax
movq 0x8(%rdi), %rcx
movq 0x30(%rcx), %rax
movl 0x38(%rcx), %ecx
leaq 0xb99b(%rip), %r8       # 0x76ff4
movq %rdx, %rdi
movl $0x44, %esi
movq %rax, %rdx
movl $0x108, %r9d            # imm = 0x108
callq 0x145c8
xorps %xmm0, %xmm0
addq $0x8, %rsp
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: subtilis_fpa_gen_movr
void subtilis_fpa_gen_movr(subtilis_ir_section_t *s, size_t start,
			   void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	subtilis_arm_reg_t op2;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;

	dest = subtilis_arm_ir_to_freg(instr->operands[0].reg);
	op2 = subtilis_arm_ir_to_freg(instr->operands[1].reg);

	subtilis_fpa_add_mov(arm_s, SUBTILIS_ARM_CCODE_AL,
			     SUBTILIS_FPA_ROUNDING_NEAREST, dest, op2, 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 0x4f526
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4f526
movq %rbx, (%rsp)
movq %r14, %rdi
movl $0xe, %esi
movl $0x21, %edx
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
callq 0x5d036
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: subtilis_fpa_gen_movri32
void subtilis_fpa_gen_movri32(subtilis_ir_section_t *s, size_t start,
			      void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	subtilis_arm_reg_t op2;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;

	dest = subtilis_arm_ir_to_arm_reg(instr->operands[0].reg);
	op2 = subtilis_arm_ir_to_freg(instr->operands[1].reg);

	subtilis_fpa_add_tran(arm_s, SUBTILIS_FPA_INSTR_FIX,
			      SUBTILIS_ARM_CCODE_AL, SUBTILIS_FPA_ROUNDING_ZERO,
			      dest, op2, 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 0x4efba
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4f526
movq %rbx, (%rsp)
movq %r14, %rdi
movl $0x3f, %esi
movl $0xe, %edx
movl $0x3, %ecx
movq %r15, %r8
movq %rax, %r9
callq 0x5d2cb
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: subtilis_fpa_gen_movi32r
void subtilis_fpa_gen_movi32r(subtilis_ir_section_t *s, size_t start,
			      void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	subtilis_arm_reg_t op2;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;

	dest = subtilis_arm_ir_to_freg(instr->operands[0].reg);
	op2 = subtilis_arm_ir_to_arm_reg(instr->operands[1].reg);

	subtilis_fpa_add_tran(arm_s, SUBTILIS_FPA_INSTR_FLT,
			      SUBTILIS_ARM_CCODE_AL,
			      SUBTILIS_FPA_ROUNDING_NEAREST, dest, op2, 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 0x4f526
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4efba
movq %rbx, (%rsp)
movq %r14, %rdi
movl $0x3e, %esi
movl $0xe, %edx
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
callq 0x5d2cb
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: prv_gen_callr
static void prv_gen_callr(subtilis_ir_section_t *s, size_t start,
			  void *user_data, bool indirect, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	subtilis_arm_reg_t op1;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_call_t *call = &s->ops[start]->op.call;

	subtilis_arm_gen_call_gen(s, start, user_data,
				  SUBTILIS_ARM_BR_LINK_REAL, indirect, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	dest = subtilis_arm_ir_to_freg(call->reg);
	op1 = 0;

	subtilis_fpa_add_mov(arm_s, SUBTILIS_ARM_CCODE_AL,
			     SUBTILIS_FPA_ROUNDING_NEAREST, dest, op1, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %r8, %r14
movl %ecx, %r8d
movq %rdx, %rbx
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r15
movl $0x2, %ecx
movq %r14, %r9
callq 0x51a33
cmpl $0x0, (%r14)
jne 0x6b899
movq 0x18(%r15), %rdi
callq 0x4f526
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0xe, %esi
movl $0x21, %edx
xorl %ecx, %ecx
movq %rax, %r8
xorl %r9d, %r9d
callq 0x5d036
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: prv_data_simple
static void prv_data_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_instr_t *instr;
	subtilis_fpa_data_instr_t *datai;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *ir_op = &s->ops[start]->op.instr;

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

	datai = &instr->operands.fpa_data;
	datai->ccode = ccode;
	datai->size = 8;
	datai->rounding = SUBTILIS_FPA_ROUNDING_NEAREST;
	datai->dest = subtilis_arm_ir_to_freg(ir_op->operands[0].reg);
	datai->op1 = subtilis_arm_ir_to_freg(ir_op->operands[1].reg);
	datai->immediate = false;
	datai->op2.reg = subtilis_arm_ir_to_freg(ir_op->operands[2].reg);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %r8, %r14
movq (%rdi,%rsi,8), %r15
movq %rdx, %rdi
movl %ecx, %esi
movq %r8, %rdx
callq 0x4f6e2
cmpl $0x0, (%r14)
jne 0x6b918
movq %rax, %rbx
movq $0xe, 0x8(%rax)
movq $0x8, 0x10(%rax)
movq 0x10(%r15), %rdi
callq 0x4f526
movq %rax, 0x18(%rbx)
movq 0x18(%r15), %rdi
callq 0x4f526
movq %rax, 0x20(%rbx)
movb $0x0, 0x28(%rbx)
movq 0x20(%r15), %rdi
callq 0x4f526
movq %rax, 0x30(%rbx)
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: prv_data_simple_imm
static void prv_data_simple_imm(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 dest;
	subtilis_arm_reg_t op1;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;
	double op2 = instr->operands[2].real;

	dest = subtilis_arm_ir_to_freg(instr->operands[0].reg);
	op1 = subtilis_arm_ir_to_freg(instr->operands[1].reg);

	subtilis_fpa_add_data_imm(arm_s, itype, ccode,
				  SUBTILIS_FPA_ROUNDING_NEAREST, dest, op1, op2,
				  err);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %r8, %rbx
movl %ecx, %ebp
movq %rdx, %r14
movq (%rdi,%rsi,8), %r12
movsd 0x20(%r12), %xmm0
movsd %xmm0, 0x8(%rsp)
movq 0x10(%r12), %rdi
callq 0x4f526
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4f526
movq %rbx, (%rsp)
movq %r14, %rdi
movl %ebp, %esi
movl $0xe, %edx
xorl %ecx, %ecx
movq %r15, %r8
movq %rax, %r9
movsd 0x8(%rsp), %xmm0
callq 0x5d083
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: prv_stran_instr
static void prv_stran_instr(subtilis_arm_instr_type_t itype,
			    subtilis_ir_section_t *s, size_t start,
			    void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	subtilis_arm_reg_t base;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;
	int32_t offset = instr->operands[2].integer;

	dest = subtilis_arm_ir_to_freg(instr->operands[0].reg);
	base = subtilis_arm_ir_to_arm_reg(instr->operands[1].reg);

	subtilis_fpa_add_stran(arm_s, itype, SUBTILIS_ARM_CCODE_AL, dest, base,
			       offset, err);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %rbx
movq %rcx, %r14
movl %edi, %ebp
movq (%rsi,%rdx,8), %r13
movl 0x20(%r13), %r15d
movq 0x10(%r13), %rdi
callq 0x4f526
movq %rax, %r12
movq 0x18(%r13), %rdi
callq 0x4efba
movq %rbx, (%rsp)
movq %r14, %rdi
movl %ebp, %esi
movl $0xe, %edx
movq %r12, %rcx
movq %rax, %r8
movl %r15d, %r9d
callq 0x5d1ea
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: subtilis_fpa_gen_retr
void subtilis_fpa_gen_retr(subtilis_ir_section_t *s, size_t start,
			   void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;
	subtilis_arm_reg_t op2;

	dest = 0;
	op2 = subtilis_arm_ir_to_freg(instr->operands[0].reg);

	subtilis_fpa_add_mov(arm_s, SUBTILIS_ARM_CCODE_AL,
			     SUBTILIS_FPA_ROUNDING_NEAREST, dest, op2, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	subtilis_arm_gen_ret(s, start, user_data, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %rax
movq 0x10(%rax), %rdi
callq 0x4f526
movq %rbx, (%rsp)
movq %r14, %rdi
movl $0xe, %esi
movl $0x21, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
movq %rax, %r9
callq 0x5d036
cmpl $0x0, (%rbx)
je 0x6bcae
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rdx
movq %rbx, %rcx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x52081
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: subtilis_fpa_gen_retir
void subtilis_fpa_gen_retir(subtilis_ir_section_t *s, size_t start,
			    void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;
	double op2 = instr->operands[0].real;

	dest = 0;

	subtilis_fpa_add_mov_imm(arm_s, SUBTILIS_ARM_CCODE_AL,
				 SUBTILIS_FPA_ROUNDING_NEAREST, dest, op2, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	subtilis_arm_gen_ret(s, start, user_data, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %r12
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %rax
movsd 0x10(%rax), %xmm0
movq %rcx, (%rsp)
movq %rdx, %rdi
movl $0xe, %esi
movl $0x21, %edx
movl $0x22, %ecx
xorl %r8d, %r8d
xorl %r9d, %r9d
callq 0x5cf67
cmpl $0x0, (%rbx)
je 0x6bd1d
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %r12, %rdi
movq %r15, %rsi
movq %r14, %rdx
movq %rbx, %rcx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x52081
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: prv_cmp_jmp_imm
static void prv_cmp_jmp_imm(subtilis_ir_section_t *s, size_t start,
			    void *user_data, subtilis_arm_ccode_type_t ccode,
			    subtilis_error_t *err)
{
	subtilis_arm_instr_t *instr;
	subtilis_arm_br_instr_t *br;
	subtilis_arm_reg_t op1;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *cmp = &s->ops[start]->op.instr;
	subtilis_ir_inst_t *jmp = &s->ops[start + 1]->op.instr;

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

	subtilis_fpa_add_cmf_imm(arm_s, SUBTILIS_ARM_CCODE_AL, op1,
				 cmp->operands[2].real, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

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

	br = &instr->operands.br;
	br->ccode = ccode;
	br->link = false;
	br->link_type = SUBTILIS_ARM_BR_LINK_VOID;
	br->target.label = jmp->operands[2].label;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
movq %r8, %r14
movl %ecx, %ebx
movq %rdx, %r15
movq (%rdi,%rsi,8), %r13
movq 0x8(%rdi,%rsi,8), %r12
movq 0x18(%r13), %rdi
callq 0x4f526
movsd 0x20(%r13), %xmm0
movq %r15, %rdi
movl $0x40, %esi
movl $0x41, %edx
movl $0xe, %ecx
movq %rax, %r8
movq %r14, %r9
callq 0x5d316
cmpl $0x0, (%r14)
jne 0x6bdc0
movq %r15, %rdi
movl $0x16, %esi
movq %r14, %rdx
callq 0x4f6e2
cmpl $0x0, (%r14)
jne 0x6bdc0
movl %ebx, 0x8(%rax)
movb $0x0, 0xc(%rax)
movl $0x0, 0x10(%rax)
movq 0x20(%r12), %rcx
movq %rcx, 0x18(%rax)
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: prv_cmp_jmp
static void prv_cmp_jmp(subtilis_ir_section_t *s, size_t start, void *user_data,
			subtilis_arm_ccode_type_t ccode, subtilis_error_t *err)
{
	subtilis_arm_instr_t *instr;
	subtilis_arm_br_instr_t *br;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *jmp = &s->ops[start + 1]->op.instr;

	prv_cmp_simple(s, start, user_data, SUBTILIS_FPA_INSTR_CMF,
		       SUBTILIS_ARM_CCODE_AL, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

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

	br = &instr->operands.br;
	br->ccode = ccode;
	br->link = false;
	br->link_type = SUBTILIS_ARM_BR_LINK_VOID;
	br->target.label = jmp->operands[2].label;
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r14
movl %ecx, %ebx
movq %rdx, %r15
movq 0x8(%rdi,%rsi,8), %r12
movq %r8, %rcx
callq 0x6c7b1
cmpl $0x0, (%r14)
jne 0x6be7a
movq %r15, %rdi
movl $0x16, %esi
movq %r14, %rdx
callq 0x4f6e2
cmpl $0x0, (%r14)
jne 0x6be7a
movl %ebx, 0x8(%rax)
movb $0x0, 0xc(%rax)
movl $0x0, 0x10(%rax)
movq 0x20(%r12), %rcx
movq %rcx, 0x18(%rax)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_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 dest;
	subtilis_arm_reg_t op1;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *cmp = &s->ops[start]->op.instr;

	op1 = subtilis_arm_ir_to_freg(cmp->operands[1].reg);
	subtilis_fpa_add_cmf_imm(arm_s, SUBTILIS_ARM_CCODE_AL, op1,
				 cmp->operands[2].real, 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 %r12
pushq %rbx
movq %r9, %rbx
movl %r8d, %ebp
movl %ecx, %r15d
movq %rdx, %r14
movq (%rdi,%rsi,8), %r12
movq 0x18(%r12), %rdi
callq 0x4f526
movsd 0x20(%r12), %xmm0
movq %r14, %rdi
movl $0x40, %esi
movl $0x41, %edx
movl $0xe, %ecx
movq %rax, %r8
movq %rbx, %r9
callq 0x5d316
cmpl $0x0, (%rbx)
jne 0x6bf86
movq 0x10(%r12), %rdi
callq 0x4efba
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 0x50130
addq $0x10, %rsp
cmpl $0x0, (%rbx)
jne 0x6bf86
movq %r14, %rdi
movl $0xd, %esi
movl $0xf, %edx
movl %ebp, %ecx
xorl %r8d, %r8d
movq %r12, %r9
pushq %rbx
pushq $0x0
callq 0x50130
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: prv_data_monadic_simple
static void prv_data_monadic_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_instr_t *instr;
	subtilis_fpa_data_instr_t *datai;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *ir_op = &s->ops[start]->op.instr;

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

	datai = &instr->operands.fpa_data;
	datai->ccode = ccode;
	datai->size = 8;
	datai->rounding = SUBTILIS_FPA_ROUNDING_NEAREST;
	datai->dest = subtilis_arm_ir_to_freg(ir_op->operands[0].reg);
	datai->op1 = 0;
	datai->immediate = false;
	datai->op2.reg = subtilis_arm_ir_to_freg(ir_op->operands[1].reg);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %r8, %r14
movq (%rdi,%rsi,8), %r15
movq %rdx, %rdi
movl %ecx, %esi
movq %r8, %rdx
callq 0x4f6e2
cmpl $0x0, (%r14)
jne 0x6c166
movq %rax, %rbx
movq $0xe, 0x8(%rax)
movq $0x8, 0x10(%rax)
movq 0x10(%r15), %rdi
callq 0x4f526
movq %rax, 0x18(%rbx)
movq $0x0, 0x20(%rbx)
movb $0x0, 0x28(%rbx)
movq 0x18(%r15), %rdi
callq 0x4f526
movq %rax, 0x30(%rbx)
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: subtilis_fpa_gen_preamble
void subtilis_fpa_gen_preamble(subtilis_arm_section_t *arm_s,
			       subtilis_error_t *err)
{
	subtilis_arm_reg_t mask;
	subtilis_arm_reg_t status;
	subtilis_arm_instr_t *instr;
	subtilis_arm_data_instr_t *datai;

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

	subtilis_arm_add_mov_imm(arm_s, SUBTILIS_ARM_CCODE_AL, false, mask,
				 31 << 16, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_arm_add_mvn_reg(arm_s, SUBTILIS_ARM_CCODE_AL, false, mask,
				 mask, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_fpa_add_cptran(arm_s, SUBTILIS_FPA_INSTR_RFS,
				SUBTILIS_ARM_CCODE_AL, status, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

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

	datai = &instr->operands.data;
	datai->ccode = SUBTILIS_ARM_CCODE_AL;
	datai->dest = status;
	datai->op1 = status;
	datai->op2.type = SUBTILIS_ARM_OP2_REG;
	datai->op2.op.reg = mask;

	subtilis_fpa_add_cptran(arm_s, SUBTILIS_FPA_INSTR_WFS,
				SUBTILIS_ARM_CCODE_AL, status, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
movq (%rdi), %rdi
leaq 0x1(%rdi), %rax
movq %rax, (%r14)
callq 0x4efba
movq %rax, %r15
movq (%r14), %rdi
leaq 0x1(%rdi), %rax
movq %rax, (%r14)
callq 0x4efba
movq %rax, %r12
movq %r14, %rdi
movl $0xd, %esi
movl $0xf, %edx
movl $0xe, %ecx
xorl %r8d, %r8d
movq %r15, %r9
pushq %rbx
pushq $0x1f0000               # imm = 0x1F0000
callq 0x50130
addq $0x10, %rsp
cmpl $0x0, (%rbx)
jne 0x6c342
subq $0x8, %rsp
movq %r14, %rdi
movl $0xf, %esi
movl $0xe, %edx
xorl %ecx, %ecx
movq %r15, %r8
movq %r15, %r9
pushq %rbx
callq 0x504b3
addq $0x10, %rsp
cmpl $0x0, (%rbx)
jne 0x6c342
movq %r14, %rdi
movl $0x45, %esi
movl $0xe, %edx
movq %r12, %rcx
movq %rbx, %r8
callq 0x5d44c
cmpl $0x0, (%rbx)
jne 0x6c342
movq %r14, %rdi
xorl %esi, %esi
movq %rbx, %rdx
callq 0x4f6e2
cmpl $0x0, (%rbx)
je 0x6c34e
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movl $0xe, 0x8(%rax)
movq %r12, 0x10(%rax)
movq %r12, 0x18(%rax)
movl $0x0, 0x20(%rax)
movq %r15, 0x28(%rax)
movq %r14, %rdi
movl $0x44, %esi
movl $0xe, %edx
movq %r12, %rcx
movq %rbx, %r8
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x5d44c
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: subtilis_fpa_gen_movi8tofp
void subtilis_fpa_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_section_t *arm_s = user_data;
	subtilis_ir_inst_t *signx = &s->ops[start]->op.instr;

	dest = subtilis_arm_ir_to_freg(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++);

	subtilis_arm_gen_signx8to32_helper(arm_s, tmp, src, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_fpa_add_tran(arm_s, SUBTILIS_FPA_INSTR_FLT,
			      SUBTILIS_ARM_CCODE_AL,
			      SUBTILIS_FPA_ROUNDING_NEAREST, dest, tmp, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rcx, %r14
movq %rdx, %rbx
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r12
movq 0x10(%r12), %rdi
callq 0x4f526
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4efba
movq %rax, %r13
movq (%rbx), %rdi
leaq 0x1(%rdi), %rax
movq %rax, (%rbx)
callq 0x4efba
movq %rax, %r12
movq %rbx, %rdi
movq %rax, %rsi
movq %r13, %rdx
movq %r14, %rcx
callq 0x52615
cmpl $0x0, (%r14)
jne 0x6c407
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x3e, %esi
movl $0xe, %edx
xorl %ecx, %ecx
movq %r15, %r8
movq %r12, %r9
callq 0x5d2cb
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/fpa_gen.c
// Function: subtilis_fpa_gen_movfptoi32i32
void subtilis_fpa_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_freg(mov->operands[2].reg);

	/*
	 * TOOD: Need to check for stack overflow.
	 */

	subtilis_fpa_add_stran(arm_s, SUBTILIS_FPA_INSTR_STF,
			       SUBTILIS_ARM_CCODE_AL, src, 13, -8, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_arm_add_stran_imm(arm_s, SUBTILIS_ARM_INSTR_LDR,
				   SUBTILIS_ARM_CCODE_AL, dest2, 13, -4, false,
				   err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_arm_add_stran_imm(arm_s, SUBTILIS_ARM_INSTR_LDR,
				   SUBTILIS_ARM_CCODE_AL, dest1, 13, -8, false,
				   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 0x4efba
movq %rax, %r15
movq 0x18(%r13), %rdi
callq 0x4efba
movq %rax, %r12
movq 0x20(%r13), %rdi
callq 0x4f526
subq $0x8, %rsp
movl $0xd, %r8d
movq %r14, %rdi
movl $0x1f, %esi
movl $0xe, %edx
movq %rax, %rcx
movl $0xfffffff8, %r9d       # imm = 0xFFFFFFF8
pushq %rbx
callq 0x5d1ea
addq $0x10, %rsp
cmpl $0x0, (%rbx)
jne 0x6c4d1
movl $0xd, %r8d
movq %r14, %rdi
movl $0x12, %esi
movl $0xe, %edx
movq %r12, %rcx
movl $0xfffffffc, %r9d       # imm = 0xFFFFFFFC
pushq %rbx
pushq $0x0
callq 0x50516
addq $0x10, %rsp
cmpl $0x0, (%rbx)
jne 0x6c4d1
movl $0xd, %r8d
movq %r14, %rdi
movl $0x12, %esi
movl $0xe, %edx
movq %r15, %rcx
movl $0xfffffff8, %r9d       # imm = 0xFFFFFFF8
pushq %rbx
pushq $0x0
callq 0x50516
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq