LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O3/ShonFrazier[P]lib6502/run6502.c
// Function: htol
static unsigned long htol(char *hex)
{
  char *end;
  unsigned long l= strtol(hex, &end, 16);
  if (*end) fail("bad hex number: %s", hex);
  return l;
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq %rsp, %r14
movq %r14, %rsi
movl $0x10, %edx
callq 0x3130
movq (%r14), %rcx
cmpb $0x0, (%rcx)
jne 0x9250
addq $0x8, %rsp
popq %rbx
popq %r14
retq
leaq 0x4e3b(%rip), %rdi      # 0xe092
movq %rbx, %rsi
xorl %eax, %eax
callq 0x823c
// File: /workspace/github_c_makefile_star2_O3/ShonFrazier[P]lib6502/lib6502.c
// Function: M6502_irq
void M6502_irq(M6502 *mpu)
{
  if (!(mpu->registers->p & flagI))
    {
      mpu->memory[0x0100 + mpu->registers->s--] = (byte)(mpu->registers->pc >> 8);
      mpu->memory[0x0100 + mpu->registers->s--] = (byte)(mpu->registers->pc & 0xff);
      mpu->memory[0x0100 + mpu->registers->s--] = mpu->registers->p;
      mpu->registers->p &= ~flagB;
      mpu->registers->p |=  flagI;
      mpu->registers->pc = M6502_getVector(mpu, IRQ);
    }
}

// Assembly:
movq (%rdi), %rax
testb $0x4, 0x3(%rax)
jne 0x9383
movb 0x7(%rax), %cl
movq 0x8(%rdi), %rdx
movzbl 0x4(%rax), %esi
leal -0x1(%rsi), %r8d
movb %r8b, 0x4(%rax)
movb %cl, 0x100(%rdx,%rsi)
movq (%rdi), %rax
movq 0x8(%rdi), %rcx
movb 0x6(%rax), %dl
movzbl 0x4(%rax), %esi
leal -0x1(%rsi), %r8d
movb %r8b, 0x4(%rax)
movb %dl, 0x100(%rcx,%rsi)
movq (%rdi), %rax
movq 0x8(%rdi), %rcx
movb 0x3(%rax), %dl
movzbl 0x4(%rax), %esi
leal -0x1(%rsi), %r8d
movb %r8b, 0x4(%rax)
movb %dl, 0x100(%rcx,%rsi)
movq (%rdi), %rax
movb 0x3(%rax), %cl
andb $-0x15, %cl
orb $0x4, %cl
movb %cl, 0x3(%rax)
movq 0x8(%rdi), %rcx
movzwl 0xfffe(%rcx), %ecx
movw %cx, 0x6(%rax)
retq
// File: /workspace/github_c_makefile_star2_O3/ShonFrazier[P]lib6502/lib6502.c
// Function: M6502_dump
void M6502_dump(M6502 *mpu, char buffer[64])
{
  M6502_Registers *r= mpu->registers;
  uint8_t p= r->p;
# define P(N,C) (p & (1 << (N)) ? (C) : '-')
  sprintf(buffer, "PC=%04X SP=%04X A=%02X X=%02X Y=%02X P=%02X %c%c%c%c%c%c%c%c",
	  r->pc, 0x0100 + r->s,
	  r->a, r->x, r->y, r->p,
	  P(7,'N'), P(6,'V'), P(5,'?'), P(4,'B'), P(3,'D'), P(2,'I'), P(1,'Z'), P(0,'C'));
# undef P
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, %rax
movq (%rdi), %rsi
movzbl 0x3(%rsi), %r10d
movzwl 0x6(%rsi), %edx
movzbl 0x4(%rsi), %ecx
orl $0x100, %ecx            # imm = 0x100
movzbl (%rsi), %r8d
testb %r10b, %r10b
movl $0x2d, %edi
movl $0x4e, %r9d
cmovnsl %edi, %r9d
movq %r9, 0x10(%rsp)
testb $0x40, %r10b
movl $0x56, %ebx
cmovel %edi, %ebx
testb $0x20, %r10b
movl $0x3f, %r14d
cmovel %edi, %r14d
testb $0x10, %r10b
movl $0x42, %r15d
cmovel %edi, %r15d
testb $0x8, %r10b
movl $0x44, %r13d
cmovel %edi, %r13d
testb $0x4, %r10b
movl $0x49, %ebp
cmovel %edi, %ebp
testb $0x2, %r10b
movl $0x5a, %r12d
cmovel %edi, %r12d
testb $0x1, %r10b
movl $0x43, %r11d
cmovel %edi, %r11d
movzbl 0x1(%rsi), %r9d
movzbl 0x2(%rsi), %esi
movq %rsi, 0x8(%rsp)
leaq 0x197d(%rip), %rsi      # 0xeebc
movq %rax, %rdi
xorl %eax, %eax
pushq %r11
pushq %r12
pushq %rbp
pushq %r13
pushq %r15
pushq %r14
pushq %rbx
pushq 0x48(%rsp)
pushq %r10
pushq 0x50(%rsp)
callq 0x31a0
addq $0x68, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O3/ShonFrazier[P]lib6502/lib6502.c
// Function: M6502_new
M6502 *M6502_new(M6502_Registers *registers, M6502_Memory memory, M6502_Callbacks *callbacks)
{
  M6502 *mpu= calloc(1, sizeof(M6502));
  if (!mpu) outOfMemory();

  if (!registers)  { registers = (M6502_Registers *)calloc(1, sizeof(M6502_Registers));  mpu->flags |= M6502_RegistersAllocated; }
  if (!memory   )  { memory    = (uint8_t         *)calloc(1, sizeof(M6502_Memory   ));  mpu->flags |= M6502_MemoryAllocated;    }
  if (!callbacks)  { callbacks = (M6502_Callbacks *)calloc(1, sizeof(M6502_Callbacks));  mpu->flags |= M6502_CallbacksAllocated; }

  if (!registers || !memory || !callbacks) outOfMemory();

  mpu->registers = registers;
  mpu->memory    = memory;
  mpu->callbacks = callbacks;
  mpu->ticks     = 0;

  return mpu;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdx, %rbx
movq %rsi, %r15
movq %rdi, %r12
movl $0x1, %edi
movl $0x20, %esi
callq 0x3100
testq %rax, %rax
je 0xd622
movq %rax, %r14
xorl %ebp, %ebp
testq %r12, %r12
jne 0xd5c0
movl $0x1, %edi
movl $0x8, %esi
callq 0x3100
movq %rax, %r12
movl $0x1, 0x18(%r14)
movl $0x1, %ebp
testq %r15, %r15
jne 0xd5de
movl $0x1, %edi
movl $0x10000, %esi          # imm = 0x10000
callq 0x3100
movq %rax, %r15
orl $0x2, %ebp
movl %ebp, 0x18(%r14)
testq %rbx, %rbx
jne 0xd5fc
movl $0x1, %edi
movl $0x180000, %esi         # imm = 0x180000
callq 0x3100
movq %rax, %rbx
orl $0x4, %ebp
movl %ebp, 0x18(%r14)
testq %r12, %r12
je 0xd622
testq %r15, %r15
je 0xd622
testq %rbx, %rbx
je 0xd622
movq %r12, (%r14)
movq %r15, 0x8(%r14)
movq %rbx, 0x10(%r14)
movq %r14, %rax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
callq 0xd627
// File: /workspace/github_c_makefile_star2_O3/ShonFrazier[P]lib6502/lib6502.c
// Function: M6502_delete
void M6502_delete(M6502 *mpu)
{
  if (mpu->flags & M6502_CallbacksAllocated) free(mpu->callbacks);
  if (mpu->flags & M6502_MemoryAllocated   ) free(mpu->memory);
  if (mpu->flags & M6502_RegistersAllocated) free(mpu->registers);

  free(mpu);
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
movl 0x18(%rdi), %eax
testb $0x4, %al
je 0xd673
movq 0x10(%rbx), %rdi
callq 0x3030
movl 0x18(%rbx), %eax
testb $0x2, %al
je 0xd683
movq 0x8(%rbx), %rdi
callq 0x3030
movl 0x18(%rbx), %eax
testb $0x1, %al
je 0xd68f
movq (%rbx), %rdi
callq 0x3030
movq %rbx, %rdi
popq %rbx
jmp 0x3030
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/subtptd.c
// Function: prv_set_prog_size
static void prv_set_prog_size(uint8_t *code, size_t bytes_written,
			      subtilis_error_t *err)
{
	if (bytes_written < 8) {
		subtilis_error_set_assertion_failed(err);
		return;
	}
	((uint32_t *)code)[1] =
	    SUBTILIS_PTD_PROGRAM_START + (int32_t)bytes_written;
}

// Assembly:
cmpq $0x7, %rsi
ja 0x116ea
leaq 0x6094d(%rip), %rax     # 0x72022
movq %rdx, %rdi
movl $0xf, %esi
movq %rax, %rdx
movl $0x22, %ecx
jmp 0x135b4
addl $0xf000, %esi           # imm = 0xF000
movl %esi, 0x4(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_gen_movr
void subtilis_vfp_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 src;
	subtilis_arm_section_t *arm_s = user_data;
	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_copy(arm_s, SUBTILIS_ARM_CCODE_AL,
			      SUBTILIS_VFP_INSTR_FCPYD, 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 0x4e53b
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4e53b
movq %r14, %rdi
movl $0xe, %esi
movl $0x4b, %edx
movq %r15, %rcx
movq %rax, %r8
movq %rbx, %r9
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x5c6a0
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_gen_movir
void subtilis_vfp_gen_movir(subtilis_ir_section_t *s, size_t start,
			    void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t dest;
	double src;
	subtilis_arm_section_t *arm_s = user_data;
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;

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

	subtilis_vfp_add_copy_imm(arm_s, SUBTILIS_ARM_CCODE_AL, dest, src, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rcx, %rbx
movq %rdx, %r14
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r15
movq 0x10(%r15), %rdi
callq 0x4e53b
movsd 0x18(%r15), %xmm0
movq %r14, %rdi
movl $0xe, %esi
movq %rax, %rdx
movq %rbx, %rcx
popq %rbx
popq %r14
popq %r15
jmp 0x5c6d8
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_gen_movri32
void subtilis_vfp_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 src;
	subtilis_arm_reg_t tmp;
	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);
	src = subtilis_arm_ir_to_dreg(instr->operands[1].reg);
	tmp = subtilis_arm_ir_to_dreg(s->freg_counter++);

	subtilis_vfp_add_tran(arm_s, SUBTILIS_VFP_INSTR_FTOSIZD,
			      SUBTILIS_ARM_CCODE_AL, true, tmp, src, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_vfp_add_cptran(arm_s, SUBTILIS_VFP_INSTR_FMRS,
				SUBTILIS_ARM_CCODE_AL, true, dest, tmp, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rcx, %r14
movq %rdx, %rbx
movq %rdi, %r12
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r13
movq 0x10(%r13), %rdi
callq 0x4dfca
movq %rax, %r15
movq 0x18(%r13), %rdi
callq 0x4e53b
movq %rax, %r13
movq 0x20(%r12), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0x20(%r12)
callq 0x4e53b
movq %rax, %r12
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x58, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %rax, %r8
movq %r13, %r9
callq 0x5c943
cmpl $0x0, (%r14)
jne 0x6a7b5
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x5e, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %r15, %r8
movq %r12, %r9
callq 0x5c983
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/vfp_gen.c
// Function: subtilis_vfp_gen_movi32r
void subtilis_vfp_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 src;
	subtilis_arm_reg_t tmp;
	subtilis_arm_section_t *arm_s = user_data;
	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_arm_reg(instr->operands[1].reg);
	tmp = subtilis_arm_ir_to_dreg(s->freg_counter++);

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

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

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x10, %rsp
movq %rcx, %r14
movq %rdx, %rbx
movq %rdi, %r12
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r13
movq 0x10(%r13), %rdi
callq 0x4e53b
movq %rax, %r15
movq 0x18(%r13), %rdi
callq 0x4dfca
movq %rax, %r13
movq 0x20(%r12), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0x20(%r12)
callq 0x4e53b
movq %rax, %r12
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x5d, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %rax, %r8
movq %r13, %r9
callq 0x5c983
cmpl $0x0, (%r14)
jne 0x6a9ee
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x51, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %r15, %r8
movq %r12, %r9
callq 0x5c943
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/vfp_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_dreg(call->reg);
	op1 = 0;

	subtilis_vfp_add_copy(arm_s, SUBTILIS_ARM_CCODE_AL,
			      SUBTILIS_VFP_INSTR_FCPYD, dest, op1, err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %r8, %rbx
movl %ecx, %r8d
movq %rdx, %r14
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %r15
movl $0x2, %ecx
movq %rbx, %r9
callq 0x50a43
cmpl $0x0, (%rbx)
je 0x6aa31
popq %rbx
popq %r14
popq %r15
retq
movq 0x18(%r15), %rdi
callq 0x4e53b
movq %r14, %rdi
movl $0xe, %esi
movl $0x4b, %edx
movq %rax, %rcx
xorl %r8d, %r8d
movq %rbx, %r9
popq %rbx
popq %r14
popq %r15
jmp 0x5c6a0
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: prv_data_simple
static void prv_data_simple(subtilis_ir_section_t *s,
			    subtilis_arm_instr_type_t itype, size_t start,
			    void *user_data, subtilis_error_t *err)
{
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;
	subtilis_arm_reg_t dest =
	    subtilis_arm_ir_to_dreg(instr->operands[0].reg);
	subtilis_arm_reg_t op1 =
	    subtilis_arm_ir_to_dreg(instr->operands[1].reg);
	subtilis_arm_reg_t op2 =
	    subtilis_arm_ir_to_dreg(instr->operands[2].reg);
	subtilis_arm_section_t *arm_s = user_data;

	subtilis_vfp_add_data(arm_s, itype, SUBTILIS_ARM_CCODE_AL, dest, op1,
			      op2, err);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %rbx
movq %rcx, %r14
movl %esi, %ebp
movq (%rdi,%rdx,8), %r13
movq 0x10(%r13), %rdi
callq 0x4e53b
movq %rax, %r15
movq 0x18(%r13), %rdi
callq 0x4e53b
movq %rax, %r12
movq 0x20(%r13), %rdi
callq 0x4e53b
movq %rbx, (%rsp)
movq %r14, %rdi
movl %ebp, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %r12, %r8
movq %rax, %r9
callq 0x5c9c3
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/vfp_gen.c
// Function: prv_data_imm_reversed
static void prv_data_imm_reversed(subtilis_ir_section_t *s,
				  subtilis_arm_instr_type_t itype, size_t start,
				  void *user_data, subtilis_error_t *err)
{
	subtilis_arm_reg_t op2 = subtilis_arm_ir_to_dreg(s->freg_counter++);
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;
	subtilis_arm_reg_t dest =
	    subtilis_arm_ir_to_dreg(instr->operands[0].reg);
	subtilis_arm_reg_t op1 =
	    subtilis_arm_ir_to_dreg(instr->operands[1].reg);
	subtilis_arm_section_t *arm_s = user_data;

	subtilis_vfp_add_copy_imm(arm_s, SUBTILIS_ARM_CCODE_AL, op2,
				  instr->operands[2].real, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_vfp_add_data(arm_s, itype, SUBTILIS_ARM_CCODE_AL, dest, op2,
			      op1, err);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r8, %r14
movq %rcx, %rbx
movq %rdx, %r12
movl %esi, 0x14(%rsp)
movq %rdi, %r13
movq 0x20(%rdi), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0x20(%r13)
callq 0x4e53b
movq %rax, %r15
movq 0x48(%r13), %rax
movq (%rax,%r12,8), %rbp
movq 0x10(%rbp), %rdi
callq 0x4e53b
movq %rax, %r12
movq 0x18(%rbp), %rdi
callq 0x4e53b
movq %rax, %r13
movsd 0x20(%rbp), %xmm0
movq %rbx, %rdi
movl $0xe, %esi
movq %r15, %rdx
movq %r14, %rcx
callq 0x5c6d8
cmpl $0x0, (%r14)
jne 0x6ac50
movq %r14, (%rsp)
movq %rbx, %rdi
movl 0x14(%rsp), %esi
movl $0xe, %edx
movq %r12, %rcx
movq %r15, %r8
movq %r13, %r9
callq 0x5c9c3
addq $0x18, %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/vfp_gen.c
// Function: subtilis_vfp_gen_fma_right
void subtilis_vfp_gen_fma_right(subtilis_ir_section_t *s, size_t start,
				void *user_data, subtilis_error_t *err)
{
	subtilis_ir_inst_t *mul = &s->ops[start]->op.instr;
	subtilis_ir_inst_t *add = &s->ops[start + 1]->op.instr;
	subtilis_arm_reg_t dest = subtilis_arm_ir_to_dreg(add->operands[0].reg);
	subtilis_arm_reg_t op1 = subtilis_arm_ir_to_dreg(mul->operands[1].reg);
	subtilis_arm_reg_t op2 = subtilis_arm_ir_to_dreg(mul->operands[2].reg);
	subtilis_arm_reg_t op3 = subtilis_arm_ir_to_dreg(add->operands[1].reg);
	subtilis_arm_section_t *arm_s = user_data;

	subtilis_vfp_add_copy(arm_s, SUBTILIS_ARM_CCODE_AL,
			      SUBTILIS_VFP_INSTR_FCPYD, dest, op3, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_vfp_add_data(arm_s, SUBTILIS_VFP_INSTR_FMACD,
			      SUBTILIS_ARM_CCODE_AL, dest, op1, op2, 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), %r13
movq 0x8(%rax,%rsi,8), %rbp
movq 0x10(%rbp), %rdi
callq 0x4e53b
movq %rax, %r15
movq 0x18(%r13), %rdi
callq 0x4e53b
movq %rax, %r12
movq 0x20(%r13), %rdi
callq 0x4e53b
movq %rax, %r13
movq 0x18(%rbp), %rdi
callq 0x4e53b
movq %rbx, %rdi
movl $0xe, %esi
movl $0x4b, %edx
movq %r15, %rcx
movq %rax, %r8
movq %r14, %r9
callq 0x5c6a0
cmpl $0x0, (%r14)
jne 0x6acea
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x60, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %r12, %r8
movq %r13, %r9
callq 0x5c9c3
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/vfp_gen.c
// Function: subtilis_vfp_gen_nfma_right
void subtilis_vfp_gen_nfma_right(subtilis_ir_section_t *s, size_t start,
				 void *user_data, subtilis_error_t *err)
{
	subtilis_ir_inst_t *mul = &s->ops[start]->op.instr;
	subtilis_ir_inst_t *add = &s->ops[start + 1]->op.instr;
	subtilis_arm_reg_t dest = subtilis_arm_ir_to_dreg(add->operands[0].reg);
	subtilis_arm_reg_t op1 = subtilis_arm_ir_to_dreg(mul->operands[1].reg);
	subtilis_arm_reg_t op2 = subtilis_arm_ir_to_dreg(mul->operands[2].reg);
	subtilis_arm_reg_t op3 = subtilis_arm_ir_to_dreg(add->operands[1].reg);
	subtilis_arm_section_t *arm_s = user_data;

	subtilis_vfp_add_copy(arm_s, SUBTILIS_ARM_CCODE_AL,
			      SUBTILIS_VFP_INSTR_FCPYD, dest, op3, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	subtilis_vfp_add_data(arm_s, SUBTILIS_VFP_INSTR_FNMACD,
			      SUBTILIS_ARM_CCODE_AL, dest, op1, op2, 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), %r13
movq 0x8(%rax,%rsi,8), %rbp
movq 0x10(%rbp), %rdi
callq 0x4e53b
movq %rax, %r15
movq 0x18(%r13), %rdi
callq 0x4e53b
movq %rax, %r12
movq 0x20(%r13), %rdi
callq 0x4e53b
movq %rax, %r13
movq 0x18(%rbp), %rdi
callq 0x4e53b
movq %rbx, %rdi
movl $0xe, %esi
movl $0x4b, %edx
movq %r15, %rcx
movq %rax, %r8
movq %r14, %r9
callq 0x5c6a0
cmpl $0x0, (%r14)
jne 0x6ae1e
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x62, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %r12, %r8
movq %r13, %r9
callq 0x5c9c3
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/vfp_gen.c
// Function: subtilis_vfp_gen_divr
void subtilis_vfp_gen_divr(subtilis_ir_section_t *s, size_t start,
			   void *user_data, subtilis_error_t *err)
{
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;
	subtilis_arm_reg_t dest =
	    subtilis_arm_ir_to_dreg(instr->operands[0].reg);
	subtilis_arm_section_t *arm_s = user_data;

	prv_data_simple(s, SUBTILIS_VFP_INSTR_FDIVD, start, user_data, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	prv_check_divbyzero(arm_s, s, dest, SUBTILIS_ERROR_CODE_DIV_BY_ZERO,
			    err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %r15
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %rax
movq 0x10(%rax), %rdi
callq 0x4e53b
movq 0x48(%r15), %rdi
movl $0x70, %esi
movq %r12, %rdx
movq %r14, %rcx
movq %rbx, %r8
callq 0x6aa78
cmpl $0x0, (%rbx)
je 0x6aea4
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x6aeba
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/vfp_gen.c
// Function: subtilis_vfp_gen_rdivir
void subtilis_vfp_gen_rdivir(subtilis_ir_section_t *s, size_t start,
			     void *user_data, subtilis_error_t *err)
{
	subtilis_ir_inst_t *instr = &s->ops[start]->op.instr;
	subtilis_arm_reg_t dest =
	    subtilis_arm_ir_to_dreg(instr->operands[0].reg);
	subtilis_arm_section_t *arm_s = user_data;

	prv_data_imm_reversed(s, SUBTILIS_VFP_INSTR_FDIVD, start, user_data,
			      err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;
	prv_check_divbyzero(arm_s, s, dest, SUBTILIS_ERROR_CODE_DIV_BY_ZERO,
			    err);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r12
movq %rdi, %r15
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %rax
movq 0x10(%rax), %rdi
callq 0x4e53b
movq %r15, %rdi
movl $0x70, %esi
movq %r12, %rdx
movq %r14, %rcx
movq %rbx, %r8
callq 0x6abc2
cmpl $0x0, (%rbx)
je 0x6b074
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq %r14, %rdi
movq %r15, %rsi
movq %rbx, %rdx
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x6aeba
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/vfp_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_dreg(instr->operands[0].reg);
	base = subtilis_arm_ir_to_arm_reg(instr->operands[1].reg);

	subtilis_vfp_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 0x4e53b
movq %rax, %r12
movq 0x18(%r13), %rdi
callq 0x4dfca
movq %rbx, (%rsp)
movq %r14, %rdi
movl %ebp, %esi
movl $0xe, %edx
movq %r12, %rcx
movq %rax, %r8
movl %r15d, %r9d
callq 0x5c720
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/vfp_gen.c
// Function: subtilis_vfp_gen_retr
void subtilis_vfp_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_dreg(instr->operands[0].reg);

	subtilis_vfp_add_copy(arm_s, SUBTILIS_ARM_CCODE_AL,
			      SUBTILIS_VFP_INSTR_FCPYD, 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 0x4e53b
movq %r14, %rdi
movl $0xe, %esi
movl $0x4b, %edx
xorl %ecx, %ecx
movq %rax, %r8
movq %rbx, %r9
callq 0x5c6a0
cmpl $0x0, (%rbx)
je 0x6b160
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 0x51091
// File: /workspace/github_c_makefile_star2_O3/markdryan[P]subtilis/arch/arm32/vfp_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_reg_t op2;
	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_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;

	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 %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %r8, %r14
movl %ecx, 0x4(%rsp)
movq %rdx, %r15
movq %rdi, %r13
movq 0x48(%rdi), %rax
movq (%rax,%rsi,8), %rbx
movq 0x8(%rax,%rsi,8), %rbp
movq 0x18(%rbx), %rdi
callq 0x4e53b
movq %rax, %r12
movsd 0x20(%rbx), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x6b25b
jp 0x6b25b
movq %r15, %rdi
movl $0x76, %esi
movl $0xe, %edx
movq %r12, %rcx
movq %r14, %r8
callq 0x5ca38
cmpl $0x0, (%r14)
jne 0x6b28d
movl $0xf, %r8d
movq %r15, %rdi
movl $0x7c, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %r14, %r9
callq 0x5ca94
cmpl $0x0, (%r14)
jne 0x6b28d
movq %r15, %rdi
movl $0x16, %esi
movq %r14, %rdx
callq 0x4e6f2
cmpl $0x0, (%r14)
jne 0x6b28d
movl 0x4(%rsp), %ecx
movl %ecx, 0x8(%rax)
movb $0x0, 0xc(%rax)
movl $0x0, 0x10(%rax)
movq 0x20(%rbp), %rcx
movq %rcx, 0x18(%rax)
jmp 0x6b28d
movq 0x20(%r13), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0x20(%r13)
callq 0x4e53b
movq %rax, %r13
movsd 0x20(%rbx), %xmm0
movq %r15, %rdi
movl $0xe, %esi
movq %rax, %rdx
movq %r14, %rcx
callq 0x5c6d8
cmpl $0x0, (%r14)
je 0x6b29c
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %r15, %rdi
movl $0x72, %esi
movl $0xe, %edx
movq %r12, %rcx
movq %r13, %r8
movq %r14, %r9
callq 0x5ca02
jmp 0x6b1f9
// File: /workspace/github_c_makefile_star2_O3/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 0x4e53b
movq %rax, %r12
movsd 0x20(%rbp), %xmm0
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x6b4ab
jp 0x6b4ab
movq %r14, %rdi
movl $0x76, %esi
movl $0xe, %edx
movq %r12, %rcx
movq %rbx, %r8
callq 0x5ca38
cmpl $0x0, (%rbx)
jne 0x6b4dc
movl $0xf, %r8d
movq %r14, %rdi
movl $0x7c, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %rbx, %r9
callq 0x5ca94
cmpl $0x0, (%rbx)
jne 0x6b4dc
movq 0x10(%rbp), %rdi
callq 0x4dfca
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 0x4f140
addq $0x10, %rsp
cmpl $0x0, (%rbx)
jne 0x6b4dc
movq %r14, %rdi
movl $0xd, %esi
movl $0xf, %edx
movl 0x4(%rsp), %ecx
xorl %r8d, %r8d
movq %r12, %r9
pushq %rbx
pushq $0x0
callq 0x4f140
addq $0x18, %rsp
jmp 0x6b4e0
movq 0x20(%r13), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0x20(%r13)
callq 0x4e53b
movq %rax, %r13
movsd 0x20(%rbp), %xmm0
movq %r14, %rdi
movl $0xe, %esi
movq %rax, %rdx
movq %rbx, %rcx
callq 0x5c6d8
cmpl $0x0, (%rbx)
je 0x6b4eb
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 0x5ca02
jmp 0x6b421
// File: /workspace/github_c_makefile_star2_O3/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 0x4e53b
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4e53b
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 0x5ca5e
// File: /workspace/github_c_makefile_star2_O3/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 0x4dfca
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 0x4f140
addq $0x10, %rsp
cmpl $0x0, (%rbx)
je 0x6b85b
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 0x5ca94
// File: /workspace/github_c_makefile_star2_O3/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 0x4e53b
movq %rax, %r15
movq 0x18(%r12), %rdi
callq 0x4dfca
movq %rax, %rbp
movq (%rbx), %rdi
leaq 0x1(%rdi), %rax
movq %rax, (%rbx)
callq 0x4dfca
movq %rax, %r13
movq 0x8(%rbx), %rdi
leaq 0x1(%rdi), %rax
movq %rax, 0x8(%rbx)
callq 0x4e53b
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 0x4fe71
cmpl $0x0, (%r14)
jne 0x6b943
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x5d, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %r12, %r8
movq %r13, %r9
callq 0x5c983
cmpl $0x0, (%r14)
jne 0x6b943
movq %r14, (%rsp)
movq %rbx, %rdi
movl $0x51, %esi
movl $0xe, %edx
movl $0x1, %ecx
movq %r15, %r8
movq %r12, %r9
callq 0x5c943
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/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 0x4dfca
movq %rax, %r15
movq 0x18(%r13), %rdi
callq 0x4dfca
movq %rax, %r12
movq 0x20(%r13), %rdi
callq 0x4e53b
movq %r14, %rdi
movl $0x7e, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %r12, %r8
movq %rax, %r9
pushq %rbx
pushq $0x0
callq 0x5caca
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/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 0x6ba1f
movq %rdx, %rbx
movq %rdi, %r14
movslq %esi, %r12
movq %r14, %rdi
movl $0x48, %esi
movq %rbx, %rdx
callq 0x4e6f2
cmpl $0x0, (%rbx)
jne 0x6ba19
movl $0xf, 0x8(%rax)
movq %r12, 0x10(%rax)
movq $0xd, 0x18(%rax)
movl $0x1010102, 0x20(%rax)  # imm = 0x1010102
cmpq $0x7fffffff, %r15       # imm = 0x7FFFFFFF
jne 0x6ba0e
movq 0x28(%r14), %r15
incq %r12
cmpl $0x10, %r12d
jne 0x6b9d2
jmp 0x6ba1f
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_O3/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 0x6ba9d
movq %rdx, %rbx
movq %rdi, %r14
movslq %esi, %r12
movl $0x10, %r13d
movq %r14, %rdi
movl $0x49, %esi
movq %rbx, %rdx
callq 0x4e6f2
cmpl $0x0, (%rbx)
jne 0x6ba97
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 0x6ba90
movq 0x28(%r14), %r15
cmpq %r12, %r13
jg 0x6ba51
jmp 0x6ba9d
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_O3/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 0x6bb65
movq 0x38(%rdi), %rcx
movq (%rcx), %r9
imulq $0x68, 0x18(%rsi), %rcx
addq %r9, %rcx
cmpq $0x5, %rdx
movl $0x4, %r11d
cmovaeq %rdx, %r11
movq %rdx, %r10
subq %r11, %r10
addq $0x3, %r10
subl %r11d, %edx
addl $0x4, %edx
btq %rdx, %rax
jae 0x6bb0d
movl $0xe, 0x10(%rcx)
movq 0x38(%rdi), %r9
movq (%r9), %r9
imulq $0x68, 0x58(%rcx), %rcx
addq %r9, %rcx
incq %r10
incl %edx
cmpq $0xf, %r10
jb 0x6baf9
testq %r8, %r8
je 0x6bb65
imulq $0x68, 0x10(%rsi), %rdx
addq %r9, %rdx
movl $0xf, %ecx
xorl %esi, %esi
movl $0x1, %r10d
shll %cl, %r10d
movslq %r10d, %r10
testq %rax, %r10
je 0x6bb53
movl $0xe, 0x10(%rdx)
movq 0x38(%rdi), %r9
movq (%r9), %r9
imulq $0x68, 0x58(%rdx), %rdx
addq %r9, %rdx
decl %ecx
incq %rsi
cmpq %r8, %rsi
jb 0x6bb34
retq
// File: /workspace/github_c_makefile_star2_O3/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 0x4e6f2
cmpl $0x0, (%r12)
jne 0x6bbda
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_O3/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 -0x41e(%rip), %rax      # 0x6b80f
movq %rax, 0x20(%rdi)
leaq -0x282(%rip), %rax      # 0x6b9b6
movq %rax, 0x28(%rdi)
leaq -0x215(%rip), %rax      # 0x6ba2e
movq %rax, 0x30(%rdi)
leaq -0x1a4(%rip), %rax      # 0x6baaa
movq %rax, 0x38(%rdi)
leaq -0xf3(%rip), %rax       # 0x6bb66
movq %rax, 0x40(%rdi)
leaq -0xd1(%rip), %rax       # 0x6bb93
movq %rax, 0x48(%rdi)
leaq -0x89(%rip), %rax       # 0x6bbe6
movq %rax, 0x50(%rdi)
leaq -0xf481(%rip), %rax     # 0x5c7f9
movq %rax, 0x58(%rdi)
leaq -0xf3d7(%rip), %rax     # 0x5c8ae
movq %rax, 0x60(%rdi)
leaq -0x92(%rip), %rax       # 0x6bbfe
movq %rax, 0x68(%rdi)
leaq 0xdb1(%rip), %rax       # 0x6ca4c
movq %rax, 0x70(%rdi)
leaq 0x14b2(%rip), %rax      # 0x6d158
movq %rax, 0x78(%rdi)
leaq 0x8b(%rip), %rax        # 0x6bd3c
movq %rax, 0x80(%rdi)
retq
// File: /workspace/github_c_makefile_star2_O3/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 (%rdi,%rsi,8), %r12
movq 0x18(%r12), %rdi
callq 0x4e53b
movq %rax, %r15
movq 0x20(%r12), %rdi
callq 0x4e53b
movq %r14, %rdi
movl $0x72, %esi
movl $0xe, %edx
movq %r15, %rcx
movq %rax, %r8
movq %rbx, %r9
callq 0x5ca02
cmpl $0x0, (%rbx)
je 0x6bd0e
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 0x5ca94
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O3/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        # 0x6be39
movq %rax, 0x80(%rdi)
leaq 0x101(%rip), %rax       # 0x6be52
movq %rax, 0x88(%rdi)
leaq 0x10c(%rip), %rax       # 0x6be6b
movq %rax, 0x90(%rdi)
leaq 0x117(%rip), %rax       # 0x6be84
movq %rax, 0x98(%rdi)
leaq 0x122(%rip), %rax       # 0x6be9d
movq %rax, 0xa0(%rdi)
leaq 0x12d(%rip), %rax       # 0x6beb6
movq %rax, 0xa8(%rdi)
leaq 0x138(%rip), %rax       # 0x6becf
movq %rax, 0xb0(%rdi)
leaq 0x143(%rip), %rax       # 0x6bee8
movq %rax, 0xb8(%rdi)
leaq 0x2d5(%rip), %rax       # 0x6c088
movq %rax, 0xc0(%rdi)
leaq 0x3c7(%rip), %rax       # 0x6c188
movq %rax, 0xc8(%rdi)
leaq 0x3e1(%rip), %rax       # 0x6c1b0
movq %rax, 0xd0(%rdi)
leaq 0x4df(%rip), %rax       # 0x6c2bc
movq %rax, 0xd8(%rdi)
leaq 0x5c1(%rip), %rax       # 0x6c3ac
movq %rax, 0xe0(%rdi)
leaq 0x742(%rip), %rax       # 0x6c53b
movq %rax, 0xe8(%rdi)
leaq 0x938(%rip), %rax       # 0x6c73f
movq %rax, 0xf0(%rdi)
leaq 0xaad(%rip), %rax       # 0x6c8c2
movq %rax, 0xf8(%rdi)
leaq 0xb72(%rip), %rax       # 0x6c995
movq %rax, 0x100(%rdi)
leaq 0xc01(%rip), %rax       # 0x6ca32
movq %rax, 0x108(%rdi)
retq