// File: /workspace/github_c_makefile_star2_O0/MaoKo[P]FGFX/fgfp/src/lr.c
// Function: move_dot_next
static bitset_t*
move_dot_next(cfg_t const* cfg, lr1_state_t* state, int index) {
	lr1_item_t* item = (lr1_item_t*)AT_VECTOR(record_lr1_item, index);

	if (CORE(item)->is_final)
		{ return (NULL_BITSET); }
	else if (IS_TERMINAL(DOT(CORE(item))->symbol_rhs)
				&& IS_EOF(DOT(CORE(item))->symbol_rhs)) {
		state->accept = true;
		return (NULL_BITSET);
	}
	
	unsigned int input;
	symbol_t* target = DOT(CORE(item))->symbol_rhs;

	if (IS_TERMINAL(target)) {
		input = SHIFT(GET_INDEX(target));
		state->last_move = &(state->shift_lst);
	}
	else {
		input = GOTO(GET_INDEX(target));
		state->last_move  = &(state->goto_lst);
	}

	bool find = (cmp_input_trans_list(*(state->last_move), input) != -1);
	if (!find) {
		trans_list_t* action = new_trans_list(input, 0, *(state->last_move));
		*(state->last_move) = action;
	}
	else if (!state->merged)
		{ return (NULL_BITSET); }

	int back = IT_BACK(state->items);
	IT_RESET(state->items);

	bitset_t* lrg = goto_lr(cfg, state->items, DOT(CORE(item))->symbol_rhs);

	IT_SET(state->items, back);
	return (lrg);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movq 0x166b6(%rip), %rax     # 0x1fdb0
movq (%rax), %rax
movslq -0x1c(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x10(%rax)
je 0x9724
movq $0x0, -0x8(%rbp)
jmp 0x98bf
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
cmpl $0x2d, 0x8(%rax)
jne 0x9765
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x18(%rax)
je 0x9765
movq -0x18(%rbp), %rax
movb $0x1, 0x29(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x98bf
jmp 0x9767
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpl $0x2d, 0x8(%rax)
jne 0x97a7
movq -0x38(%rbp), %rax
movq (%rax), %rax
orq $0x1000, %rax           # imm = 0x1000
movl %eax, -0x2c(%rbp)
movq -0x18(%rbp), %rcx
addq $0x10, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x97c7
movq -0x38(%rbp), %rax
movq (%rax), %rax
orq $0x2000, %rax           # imm = 0x2000
movl %eax, -0x2c(%rbp)
movq -0x18(%rbp), %rcx
addq $0x18, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq (%rax), %rdi
movl -0x2c(%rbp), %esi
callq 0x3c80
cmpl $-0x1, %eax
setne %al
andb $0x1, %al
movb %al, -0x39(%rbp)
testb $0x1, -0x39(%rbp)
jne 0x9815
movl -0x2c(%rbp), %edi
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq (%rax), %rdx
xorl %esi, %esi
callq 0x39f0
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rcx
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq %rcx, (%rax)
jmp 0x982e
movq -0x18(%rbp), %rax
testb $0x1, 0x28(%rax)
jne 0x982c
movq $0x0, -0x8(%rbp)
jmp 0x98bf
jmp 0x982e
movq -0x18(%rbp), %rax
movq (%rax), %rax
movl 0x50(%rax), %eax
movl %eax, -0x4c(%rbp)
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x9847
jmp 0x9886
movq -0x18(%rbp), %rax
movq (%rax), %rax
testb $0x1, 0x54(%rax)
jne 0x9869
movq -0x18(%rbp), %rax
movq (%rax), %rax
movl $0x0, 0x50(%rax)
xorl %eax, %eax
movl %eax, -0x5c(%rbp)
jmp 0x9883
movq -0x18(%rbp), %rax
movq (%rax), %rax
movl 0x4(%rax), %eax
subl $0x1, %eax
movq -0x18(%rbp), %rcx
movq (%rcx), %rcx
movl %eax, 0x50(%rcx)
movl %eax, -0x5c(%rbp)
movl -0x5c(%rbp), %eax
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %rdx
callq 0x9160
movq %rax, -0x58(%rbp)
movl -0x4c(%rbp), %ecx
movq -0x18(%rbp), %rax
movq (%rax), %rax
movl %ecx, 0x50(%rax)
movq -0x58(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)