// File: /workspace/github_c_makefile_star2_O0/markdryan[P]subtilis/arch/arm32/assembler.c
// Function: prv_parse_branch
static void prv_parse_branch(subtilis_arm_ass_context_t *c, const char *name,
			     subtilis_arm_instr_type_t itype,
			     subtilis_arm_ccode_type_t ccode,
			     subtilis_error_t *err)
{
	subtilis_arm_instr_t *instr;
	subtilis_arm_br_instr_t *br;
	size_t index;
	subtilis_arm_exp_val_t *val;
	size_t name_len = strlen(name);
	bool link = ((name_len == 2) || (name_len == 4)) &&
		    (name[1] == 'l' || name[1] == 'L');

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

	if (val->type != SUBTILIS_ARM_EXP_TYPE_ID) {
		subtilis_error_set_expected(err, "label", name,
					    c->l->stream->name, c->l->line);
		goto cleanup;
	}

	name = subtilis_buffer_get_string(&val->val.buf);
	if (!subtilis_string_pool_find(c->label_pool, name, &index)) {
		index = subtilis_string_pool_register(c->label_pool, name, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
		subtilis_bitset_set(&c->pending_labels, index, err);
		if (err->type != SUBTILIS_ERROR_OK)
			return;
	}

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

	br = &instr->operands.br;
	br->ccode = ccode;
	br->link = link;
	br->local = true;
	br->link_type = SUBTILIS_ARM_BR_LINK_VOID;
	br->target.label = index;

cleanup:

	subtilis_arm_exp_val_free(val);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl %ecx, -0x18(%rbp)
movq %r8, -0x20(%rbp)
movq -0x10(%rbp), %rdi
callq 0x120d0
movq %rax, -0x48(%rbp)
cmpq $0x2, -0x48(%rbp)
je 0x96aaa
xorl %eax, %eax
cmpq $0x4, -0x48(%rbp)
movb %al, -0x4a(%rbp)
jne 0x96ad3
movq -0x10(%rbp), %rax
movsbl 0x1(%rax), %ecx
movb $0x1, %al
cmpl $0x6c, %ecx
movb %al, -0x4b(%rbp)
je 0x96acd
movq -0x10(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x4c, %eax
sete %al
movb %al, -0x4b(%rbp)
movb -0x4b(%rbp), %al
movb %al, -0x4a(%rbp)
movb -0x4a(%rbp), %al
andb $0x1, %al
movb %al, -0x49(%rbp)
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
callq 0x9b4f0
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x96afa
jmp 0x96c2d
movq -0x40(%rbp), %rax
cmpl $0x9, (%rax)
je 0x96b4c
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x30(%rax), %r8
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x38(%rax), %r9d
movl $0x1d, %esi
leaq 0x176c2(%rip), %rdx     # 0xae1f1
leaq 0x175ea(%rip), %rax     # 0xae120
movq %rax, (%rsp)
movl $0x2d4, 0x8(%rsp)       # imm = 0x2D4
callq 0x156d0
jmp 0x96c24
movq -0x40(%rbp), %rdi
addq $0x8, %rdi
callq 0x16760
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x10(%rbp), %rsi
leaq -0x38(%rbp), %rdx
callq 0x3d5a0
testb $0x1, %al
jne 0x96bbf
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x10(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x3d630
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x96b9d
jmp 0x96c2d
movq -0x8(%rbp), %rdi
addq $0x38, %rdi
movq -0x38(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x88810
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x96bbd
jmp 0x96c2d
jmp 0x96bbf
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movq -0x20(%rbp), %rdx
movl $0x16, %esi
callq 0x70b50
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x0, (%rax)
je 0x96be3
jmp 0x96c24
movq -0x28(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x30(%rbp)
movl -0x18(%rbp), %ecx
movq -0x30(%rbp), %rax
movl %ecx, (%rax)
movb -0x49(%rbp), %cl
movq -0x30(%rbp), %rax
andb $0x1, %cl
movb %cl, 0x4(%rax)
movq -0x30(%rbp), %rax
movb $0x1, 0x5(%rax)
movq -0x30(%rbp), %rax
movl $0x0, 0x8(%rax)
movq -0x38(%rbp), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rdi
callq 0x9a4c0
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)