// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/arch/arm32/arm_encode.c
// Function: prv_flush_constants
static void prv_flush_constants(subtilis_arm_encode_ud_t *ud,
				subtilis_error_t *err)
{
	size_t i;
	size_t j;
	subtilis_arm_encode_const_t *cnst;
	uint32_t *real_ptr;
	int32_t constant_index;
	subtilis_arm_section_t *arm_s = ud->arm_s;

	for (i = 0; i < ud->const_count; i++) {
		cnst = &ud->constants[i];
		ud->label_offsets[cnst->label] = ud->bytes_written;
		switch (cnst->type) {
		case SUBTILIS_ARM_ENCODE_BP_LDR:
			for (j = 0; j < arm_s->constants.ui32_count; j++)
				if (arm_s->constants.ui32[j].label ==
				    cnst->label)
					break;
			if (j == arm_s->constants.ui32_count) {
				subtilis_error_set_assertion_failed(err);
				return;
			}

			prv_ensure_code(ud, err);
			if (err->type != SUBTILIS_ERROR_OK)
				return;
			if (arm_s->constants.ui32[j].link_time) {
				constant_index =
				    arm_s->constants.ui32[j].integer;
				subtilis_arm_link_constant_add(
				    ud->link, cnst->code_index,
				    ud->bytes_written, constant_index, err);
				prv_add_word(ud, 0xffff, err);
			} else {
				prv_add_word(
				    ud, arm_s->constants.ui32[j].integer, err);
			}
			if (err->type != SUBTILIS_ERROR_OK)
				return;
			break;
		case SUBTILIS_ARM_ENCODE_BP_LDRP:
			prv_ensure_code(ud, err);
			if (err->type != SUBTILIS_ERROR_OK)
				return;
			subtilis_arm_link_extref_add(ud->link, cnst->code_index,
						     ud->bytes_written,
						     cnst->section_label, err);
			if (err->type != SUBTILIS_ERROR_OK)
				return;
			prv_add_word(ud, 0, err);
			if (err->type != SUBTILIS_ERROR_OK)
				return;
			break;
		case SUBTILIS_ARM_ENCODE_BP_LDRF:
			for (j = 0; j < arm_s->constants.real_count; j++)
				if (arm_s->constants.real[j].label ==
				    cnst->label)
					break;
			if (j == arm_s->constants.real_count) {
				subtilis_error_set_assertion_failed(err);
				return;
			}
			real_ptr =
			    (uint32_t *)(void *)&arm_s->constants.real[j].real;
			prv_ensure_code(ud, err);
			if (err->type != SUBTILIS_ERROR_OK)
				return;
			if (ud->reverse_fpa_consts) {
				prv_add_word(ud, real_ptr[1], err);
				if (err->type != SUBTILIS_ERROR_OK)
					return;
				prv_ensure_code(ud, err);
				if (err->type != SUBTILIS_ERROR_OK)
					return;
				prv_add_word(ud, real_ptr[0], err);
				if (err->type != SUBTILIS_ERROR_OK)
					return;
			} else {
				prv_add_word(ud, real_ptr[0], err);
				if (err->type != SUBTILIS_ERROR_OK)
					return;
				prv_ensure_code(ud, err);
				if (err->type != SUBTILIS_ERROR_OK)
					return;
				prv_add_word(ud, real_ptr[1], err);
				if (err->type != SUBTILIS_ERROR_OK)
					return;
			}
			break;
		}
	}

	prv_apply_constants(ud, err);
	if (err->type != SUBTILIS_ERROR_OK)
		return;

	prv_reset_pool_state(ud);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movq $0x0, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0x48(%rcx), %rax
jae 0x817bc
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x18(%rbp), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rcx
movq 0x10(%rcx), %rax
movq 0x30(%rcx), %rdx
movq -0x28(%rbp), %rcx
movq (%rcx), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x28(%rbp), %rax
movl 0x18(%rax), %eax
movl %eax, -0x44(%rbp)
testl %eax, %eax
je 0x814a2
jmp 0x81483
movl -0x44(%rbp), %eax
subl $0x1, %eax
je 0x815c8
jmp 0x81491
movl -0x44(%rbp), %eax
subl $0x2, %eax
je 0x8163f
jmp 0x817a9
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x40(%rbp), %rcx
cmpq 0x60(%rcx), %rax
jae 0x814e7
movq -0x40(%rbp), %rax
movq 0x58(%rax), %rax
imulq $0x18, -0x20(%rbp), %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jne 0x814d7
jmp 0x814e7
jmp 0x814d9
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x814aa
movq -0x20(%rbp), %rax
movq -0x40(%rbp), %rcx
cmpq 0x60(%rcx), %rax
jne 0x81514
movq -0x10(%rbp), %rdi
movl $0xf, %esi
leaq 0x2b92b(%rip), %rdx     # 0xace30
movl $0x13e, %ecx            # imm = 0x13E
callq 0x158e0
jmp 0x817dd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x81b90
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x8152f
jmp 0x817dd
movq -0x40(%rbp), %rax
movq 0x58(%rax), %rax
imulq $0x18, -0x20(%rbp), %rcx
addq %rcx, %rax
testb $0x1, 0x10(%rax)
je 0x81596
movq -0x40(%rbp), %rax
movq 0x58(%rax), %rax
imulq $0x18, -0x20(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdx
movslq -0x34(%rbp), %rcx
movq -0x10(%rbp), %r8
callq 0x828f0
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rdx
movl $0xffff, %esi           # imm = 0xFFFF
callq 0x81bc0
jmp 0x815b5
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rax
movq 0x58(%rax), %rax
imulq $0x18, -0x20(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %esi
movq -0x10(%rbp), %rdx
callq 0x81bc0
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x815c3
jmp 0x817dd
jmp 0x817a9
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x81b90
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x815e3
jmp 0x817dd
movq -0x8(%rbp), %rax
movq 0x80(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdx
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x10(%rbp), %r8
callq 0x82a30
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x8161d
jmp 0x817dd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rdx
xorl %esi, %esi
callq 0x81bc0
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x8163a
jmp 0x817dd
jmp 0x817a9
movq $0x0, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x40(%rbp), %rcx
cmpq 0x78(%rcx), %rax
jae 0x81687
movq -0x40(%rbp), %rax
movq 0x70(%rax), %rax
movq -0x20(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq 0x8(%rax), %rax
movq -0x28(%rbp), %rcx
cmpq (%rcx), %rax
jne 0x81677
jmp 0x81687
jmp 0x81679
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x81647
movq -0x20(%rbp), %rax
movq -0x40(%rbp), %rcx
cmpq 0x78(%rcx), %rax
jne 0x816b4
movq -0x10(%rbp), %rdi
movl $0xf, %esi
leaq 0x2b78b(%rip), %rdx     # 0xace30
movl $0x166, %ecx            # imm = 0x166
callq 0x158e0
jmp 0x817dd
movq -0x40(%rbp), %rax
movq 0x70(%rax), %rax
movq -0x20(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x81b90
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x816e6
jmp 0x817dd
movq -0x8(%rbp), %rax
testb $0x1, 0x8(%rax)
je 0x81750
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rax
movl 0x4(%rax), %esi
movq -0x10(%rbp), %rdx
callq 0x81bc0
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x81712
jmp 0x817dd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x81b90
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x8172d
jmp 0x817dd
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rax
movl (%rax), %esi
movq -0x10(%rbp), %rdx
callq 0x81bc0
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x8174e
jmp 0x817dd
jmp 0x817a7
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rax
movl (%rax), %esi
movq -0x10(%rbp), %rdx
callq 0x81bc0
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x8176e
jmp 0x817dd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x81b90
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x81786
jmp 0x817dd
movq -0x8(%rbp), %rdi
movq -0x30(%rbp), %rax
movl 0x4(%rax), %esi
movq -0x10(%rbp), %rdx
callq 0x81bc0
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x817a5
jmp 0x817dd
jmp 0x817a7
jmp 0x817a9
jmp 0x817ab
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x81433
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x82500
movq -0x10(%rbp), %rax
cmpl $0x0, (%rax)
je 0x817d4
jmp 0x817dd
movq -0x8(%rbp), %rdi
callq 0x7e390
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)