LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_soft_begin_line
CeVimMotionResult_t ce_vim_motion_soft_begin_line(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                  CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                  CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     int64_t result = ce_vim_soft_begin_line(view->buffer, motion_range->end.y);
     if(result < 0) return CE_VIM_MOTION_RESULT_FAIL;
     motion_range->end.x = result;
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x35210
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
jge 0x37e51
movl $0x0, -0x4(%rbp)
jmp 0x37e64
movq -0x40(%rbp), %rcx
movq 0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x40, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: vim_parse_motion_find
static CeVimParseResult_t vim_parse_motion_find(CeVimAction_t* action, CeRune_t key, CeVimMotionFunc_t* func){
     if(action->verb.function == NULL) action->verb.function = &ce_vim_verb_motion;

     if(action->motion.function == NULL){
          action->motion.function = func;
          return CE_VIM_PARSE_CONSUME_ADDITIONAL_KEY;
     }else if(action->motion.function == func){
          action->motion.integer = key;
          return CE_VIM_PARSE_COMPLETE;
     }

     return CE_VIM_PARSE_INVALID;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x28(%rax)
jne 0x38159
movq -0x10(%rbp), %rax
leaq -0x3695(%rip), %rcx     # 0x34ac0
movq %rcx, 0x28(%rax)
movq -0x10(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x38179
movq -0x20(%rbp), %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x10(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x381a3
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
cmpq -0x20(%rbp), %rax
jne 0x3819a
movl -0x14(%rbp), %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x18(%rax)
movl $0x5, -0x4(%rbp)
jmp 0x381a3
jmp 0x3819c
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_find_forward
CeVimMotionResult_t ce_vim_motion_find_forward(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                               CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                               CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     CePoint_t new_position = ce_vim_move_find_rune_forward(view->buffer, motion_range->end, action->motion.integer, false);
     if(new_position.x < 0) return CE_VIM_MOTION_RESULT_FAIL;
     motion_range->end = new_position;
     vim->find_char.rune = action->motion.integer;
     vim->find_char.state = CE_VIM_FIND_CHAR_STATE_FIND_FORWARD;
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x18(%rcx), %ecx
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
xorl %r8d, %r8d
callq 0x364a0
movq %rax, -0x48(%rbp)
movq %rdx, -0x40(%rbp)
cmpq $0x0, -0x48(%rbp)
jge 0x38213
movl $0x0, -0x4(%rbp)
jmp 0x3824d
movq 0x18(%rbp), %rax
movq -0x48(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movl 0x18(%rax), %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x19e0(%rax)
movq -0x10(%rbp), %rax
movl $0x0, 0x19e4(%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_find_backward
CeVimMotionResult_t ce_vim_motion_find_backward(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     CePoint_t new_position = ce_vim_move_find_rune_backward(view->buffer, motion_range->end, action->motion.integer, false);
     if(new_position.x < 0) return CE_VIM_MOTION_RESULT_FAIL;
     motion_range->end = new_position;
     vim->find_char.rune = action->motion.integer;
     vim->find_char.state = CE_VIM_FIND_CHAR_STATE_FIND_BACKWARD;
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x18(%rcx), %ecx
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
xorl %r8d, %r8d
callq 0x365f0
movq %rax, -0x48(%rbp)
movq %rdx, -0x40(%rbp)
cmpq $0x0, -0x48(%rbp)
jge 0x382c3
movl $0x0, -0x4(%rbp)
jmp 0x382fd
movq 0x18(%rbp), %rax
movq -0x48(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movl 0x18(%rax), %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x19e0(%rax)
movq -0x10(%rbp), %rax
movl $0x1, 0x19e4(%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_until_forward
CeVimMotionResult_t ce_vim_motion_until_forward(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     CePoint_t new_position = ce_vim_move_find_rune_forward(view->buffer, motion_range->end, action->motion.integer, true);
     if(new_position.x < 0) return CE_VIM_MOTION_RESULT_FAIL;
     motion_range->end = new_position;
     vim->find_char.rune = action->motion.integer;
     vim->find_char.state = CE_VIM_FIND_CHAR_STATE_UNTIL_FORWARD;
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x18(%rcx), %ecx
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
movl $0x1, %r8d
callq 0x364a0
movq %rax, -0x48(%rbp)
movq %rdx, -0x40(%rbp)
cmpq $0x0, -0x48(%rbp)
jge 0x38376
movl $0x0, -0x4(%rbp)
jmp 0x383b0
movq 0x18(%rbp), %rax
movq -0x48(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movl 0x18(%rax), %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x19e0(%rax)
movq -0x10(%rbp), %rax
movl $0x2, 0x19e4(%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_until_backward
CeVimMotionResult_t ce_vim_motion_until_backward(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                 CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                 CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     CePoint_t new_position = ce_vim_move_find_rune_backward(view->buffer, motion_range->end, action->motion.integer, true);
     if(new_position.x < 0) return CE_VIM_MOTION_RESULT_FAIL;
     motion_range->end = new_position;
     vim->find_char.rune = action->motion.integer;
     vim->find_char.state = CE_VIM_FIND_CHAR_STATE_UNTIL_BACKWARD;
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq -0x18(%rbp), %rcx
movl 0x18(%rcx), %ecx
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
movl $0x1, %r8d
callq 0x365f0
movq %rax, -0x48(%rbp)
movq %rdx, -0x40(%rbp)
cmpq $0x0, -0x48(%rbp)
jge 0x38426
movl $0x0, -0x4(%rbp)
jmp 0x38460
movq 0x18(%rbp), %rax
movq -0x48(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rax
movl 0x18(%rax), %ecx
movq -0x10(%rbp), %rax
movl %ecx, 0x19e0(%rax)
movq -0x10(%rbp), %rax
movl $0x3, 0x19e4(%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_match_pair
CeVimMotionResult_t ce_vim_motion_match_pair(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                             CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                             CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     CeRune_t rune = ce_buffer_get_rune(view->buffer, *cursor);
     CeRange_t result = ce_vim_find_pair(view->buffer, *cursor, rune, false, 0);
     if(result.start.x < 0) return CE_VIM_MOTION_RESULT_FAIL;
     if(ce_points_equal(motion_range->end, result.start)){
          motion_range->end = result.end;
          return CE_VIM_MOTION_RESULT_SUCCESS;
     }else if(ce_points_equal(motion_range->end, result.end)){
          motion_range->end = result.start;
          return CE_VIM_MOTION_RESULT_SUCCESS;
     }

     return CE_VIM_MOTION_RESULT_FAIL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x28(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
callq 0xec20
movl %eax, -0x3c(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rsi
movq -0x28(%rbp), %rax
movl -0x3c(%rbp), %r8d
movq (%rax), %rdx
movq 0x8(%rax), %rcx
leaq -0x60(%rbp), %rdi
xorl %r9d, %r9d
movl $0x0, (%rsp)
callq 0x36ca0
cmpq $0x0, -0x60(%rbp)
jge 0x38f90
movl $0x0, -0x4(%rbp)
jmp 0x39011
movq 0x18(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x18(%rax), %rsi
movq -0x60(%rbp), %rdx
movq -0x58(%rbp), %rcx
callq 0xfec0
testb $0x1, %al
jne 0x38faf
jmp 0x38fcc
movq 0x18(%rbp), %rax
movq -0x50(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rcx
movq %rcx, 0x18(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x39011
movq 0x18(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x18(%rax), %rsi
movq -0x50(%rbp), %rdx
movq -0x48(%rbp), %rcx
callq 0xfec0
testb $0x1, %al
jne 0x38feb
jmp 0x39008
movq 0x18(%rbp), %rax
movq -0x60(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x18(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x39011
jmp 0x3900a
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_mark
CeVimMotionResult_t ce_vim_motion_mark(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                       CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                       CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     CePoint_t* destination = buffer_data->marks + ce_vim_register_index(action->motion.integer);
     // TODO: come up with better method of determining if a destination is set or not
     if(destination->x != 0 || destination->y != 0){
          motion_range->end = *destination;
          motion_range->end = ce_buffer_clamp_point(view->buffer, motion_range->end, CE_CLAMP_X_INSIDE);
          return CE_VIM_MOTION_RESULT_SUCCESS;
     }

     return CE_VIM_MOTION_RESULT_FAIL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq 0x10(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x18(%rbp), %rax
movl 0x18(%rax), %edi
callq 0x33a80
movq %rax, %rcx
movq -0x58(%rbp), %rax
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x39193
movq -0x40(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x391f8
movq 0x18(%rbp), %rax
movq -0x40(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
movl $0x2, %ecx
callq 0xfc90
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, -0x50(%rbp)
movq %rdx, -0x48(%rbp)
movq -0x50(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rcx
movq %rcx, 0x18(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x391ff
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_mark_soft_begin_line
CeVimMotionResult_t ce_vim_motion_mark_soft_begin_line(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                       CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                       CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     CePoint_t* destination = buffer_data->marks + ce_vim_register_index(action->motion.integer);
     // TODO: come up with better method of determining if a destination is set or not
     if(destination->x != 0 || destination->y != 0){
          motion_range->end = *destination;
          motion_range->end = ce_buffer_clamp_point(view->buffer, motion_range->end, CE_CLAMP_X_INSIDE);
          motion_range->end.x = ce_vim_soft_begin_line(view->buffer, motion_range->end.y);
          return CE_VIM_MOTION_RESULT_SUCCESS;
     }

     return CE_VIM_MOTION_RESULT_FAIL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq 0x10(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x18(%rbp), %rax
movl 0x18(%rax), %edi
callq 0x33a80
movq %rax, %rcx
movq -0x58(%rbp), %rax
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x39277
movq -0x40(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x392fc
movq 0x18(%rbp), %rax
movq -0x40(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
movl $0x2, %ecx
callq 0xfc90
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, -0x50(%rbp)
movq %rdx, -0x48(%rbp)
movq -0x50(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x35210
movq %rax, %rcx
movq 0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x39303
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_middle_of_view
CeVimMotionResult_t ce_vim_motion_middle_of_view(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                 CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                 CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     int64_t view_height = view->rect.bottom - view->rect.top;
     motion_range->end = (CePoint_t){motion_range->start.x, view->scroll.y + (view_height / 2)};
     motion_range->end = ce_buffer_clamp_point(view->buffer, motion_range->end, CE_CLAMP_X_INSIDE);
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x18(%rbp), %rcx
subq 0x10(%rcx), %rax
movq %rax, -0x38(%rbp)
movq 0x18(%rbp), %rax
movq %rax, -0x68(%rbp)
movq 0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rcx
movq -0x38(%rbp), %rax
movl $0x2, %esi
cqto
idivq %rsi
movq %rax, %rdx
movq -0x68(%rbp), %rax
addq %rdx, %rcx
movq %rcx, -0x40(%rbp)
movq -0x48(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq 0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
movl $0x2, %ecx
callq 0xfc90
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, -0x58(%rbp)
movq %rdx, -0x50(%rbp)
movq -0x58(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x18(%rax)
movl $0x1, %eax
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_bottom_of_view
CeVimMotionResult_t ce_vim_motion_bottom_of_view(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                 CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                 CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     int64_t view_height = view->rect.bottom - view->rect.top;
     motion_range->end = (CePoint_t){motion_range->start.x, view->scroll.y + (view_height - config_options->vertical_scroll_off)};
     motion_range->end = ce_buffer_clamp_point(view->buffer, motion_range->end, CE_CLAMP_X_INSIDE);
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x18(%rbp), %rcx
subq 0x10(%rcx), %rax
movq %rax, -0x38(%rbp)
movq 0x18(%rbp), %rax
movq 0x18(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, -0x48(%rbp)
movq -0x18(%rbp), %rcx
movq 0x28(%rcx), %rcx
movq -0x38(%rbp), %rdx
movq -0x30(%rbp), %rsi
subq 0x18(%rsi), %rdx
addq %rdx, %rcx
movq %rcx, -0x40(%rbp)
movq -0x48(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq 0x18(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rdi
movq 0x18(%rbp), %rax
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
movl $0x2, %ecx
callq 0xfc90
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, -0x58(%rbp)
movq %rdx, -0x50(%rbp)
movq -0x58(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x18(%rax)
movl $0x1, %eax
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_next_blank_line
CeVimMotionResult_t ce_vim_motion_next_blank_line(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                  CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                  CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     bool start_blank = string_is_blank(view->buffer->lines[motion_range->end.y]);
     for(int64_t y = motion_range->end.y + 1; y < view->buffer->line_count; y++){
          bool current_blank = string_is_blank(view->buffer->lines[y]);
          if(current_blank){
               if(!start_blank){
                    motion_range->end = (CePoint_t){0, y};
                    break;
               }
          }else{
               start_blank = false;
          }
     }
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq (%rax), %rax
movq 0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3b680
andb $0x1, %al
movb %al, -0x31(%rbp)
movq 0x18(%rbp), %rax
movq 0x18(%rax), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq -0x18(%rbp), %rcx
movq 0x40(%rcx), %rcx
cmpq 0x8(%rcx), %rax
jge 0x39640
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq (%rax), %rax
movq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3b680
andb $0x1, %al
movb %al, -0x41(%rbp)
testb $0x1, -0x41(%rbp)
je 0x3962c
testb $0x1, -0x31(%rbp)
jne 0x3962a
movq 0x18(%rbp), %rax
movq $0x0, -0x58(%rbp)
movq -0x40(%rbp), %rcx
movq %rcx, -0x50(%rbp)
movq -0x58(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x18(%rax)
jmp 0x39640
jmp 0x39630
movb $0x0, -0x31(%rbp)
jmp 0x39632
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x395c9
movl $0x1, %eax
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_previous_blank_line
CeVimMotionResult_t ce_vim_motion_previous_blank_line(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                      CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                      CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     bool start_blank = string_is_blank(view->buffer->lines[motion_range->end.y]);
     for(int64_t y = motion_range->end.y - 1; y >= 0; y--){
          bool current_blank = string_is_blank(view->buffer->lines[y]);
          if(current_blank){
               if(!start_blank){
                    motion_range->end = (CePoint_t){0, y};
                    break;
               }
          }else{
               start_blank = false;
          }
     }
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq (%rax), %rax
movq 0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3b680
andb $0x1, %al
movb %al, -0x31(%rbp)
movq 0x18(%rbp), %rax
movq 0x18(%rax), %rax
subq $0x1, %rax
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
jl 0x39715
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq (%rax), %rax
movq -0x40(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
callq 0x3b680
andb $0x1, %al
movb %al, -0x41(%rbp)
testb $0x1, -0x41(%rbp)
je 0x39701
testb $0x1, -0x31(%rbp)
jne 0x396ff
movq 0x18(%rbp), %rax
movq $0x0, -0x58(%rbp)
movq -0x40(%rbp), %rcx
movq %rcx, -0x50(%rbp)
movq -0x58(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x18(%rax)
jmp 0x39715
jmp 0x39705
movb $0x0, -0x31(%rbp)
jmp 0x39707
movq -0x40(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x396a9
movl $0x1, %eax
addq $0x60, %rsp
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_entire_line
CeVimMotionResult_t ce_vim_motion_entire_line(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                              CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                              CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     int64_t line_length = ce_utf8_strlen(view->buffer->lines[motion_range->end.y]);
     motion_range->start = (CePoint_t){0, motion_range->end.y};
     motion_range->end = (CePoint_t){line_length, motion_range->end.y};
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq (%rax), %rax
movq 0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq (%rax,%rcx,8), %rdi
callq 0xea70
movq %rax, -0x38(%rbp)
movq 0x18(%rbp), %rax
movq $0x0, -0x48(%rbp)
movq 0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq %rcx, -0x40(%rbp)
movq -0x48(%rbp), %rcx
movq %rcx, (%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq 0x18(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq 0x18(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq %rcx, -0x50(%rbp)
movq -0x58(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x18(%rax)
movl $0x1, %eax
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_substitute_soft_begin_line
bool ce_vim_verb_substitute_soft_begin_line(CeVim_t* vim, const CeVimAction_t* action, CeRange_t motion_range, CeView_t* view,
                                            CePoint_t* cursor, CeVimVisualData_t* visual, CeVimBufferData_t* buffer_data,
                                            const CeConfigOptions_t* config_options){
     int64_t soft_begin_index = ce_vim_soft_begin_line(view->buffer, cursor->y);
     if(soft_begin_index < 0) return false;

     cursor->x = soft_begin_index;
     motion_range.start = *cursor;
     motion_range.end.x = ce_utf8_last_index(view->buffer->lines[motion_range.end.y]);

     // if the line is empty, just enter insert mode
     if(motion_range.end.x == 0){
          ce_vim_insert_mode(vim);
          return true;
     }

     bool success = ce_vim_verb_change(vim, action, motion_range, view, cursor, visual, buffer_data, config_options);
     if(success){
          vim->chain_undo = true;
          ce_vim_insert_mode(vim);
     }
     return success;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq 0x30(%rbp), %rax
leaq 0x10(%rbp), %rax
movq %rax, -0x50(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x35210
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
jge 0x39b88
movb $0x0, -0x1(%rbp)
jmp 0x39c55
movq -0x50(%rbp), %rcx
movq -0x40(%rbp), %rdx
movq -0x28(%rbp), %rax
movq %rdx, (%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rdx
movq %rdx, (%rcx)
movq 0x8(%rax), %rax
movq %rax, 0x8(%rcx)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movq (%rax), %rax
movq 0x18(%rcx), %rcx
movq (%rax,%rcx,8), %rdi
callq 0xf1f0
movq %rax, %rcx
movq -0x50(%rbp), %rax
movq %rcx, 0x10(%rax)
cmpq $0x0, 0x10(%rax)
jne 0x39be2
movq -0x10(%rbp), %rdi
callq 0x2fdd0
movb $0x1, -0x1(%rbp)
jmp 0x39c55
movq -0x50(%rbp), %r10
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
movq -0x38(%rbp), %r9
movq 0x30(%rbp), %rax
movq (%r10), %r11
movq %r11, (%rsp)
movq 0x8(%r10), %r11
movq %r11, 0x8(%rsp)
movq 0x10(%r10), %r11
movq %r11, 0x10(%rsp)
movq 0x18(%r10), %r10
movq %r10, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x35170
andb $0x1, %al
movb %al, -0x41(%rbp)
testb $0x1, -0x41(%rbp)
je 0x39c4d
movq -0x10(%rbp), %rax
movb $0x1, 0x19d8(%rax)
movq -0x10(%rbp), %rdi
callq 0x2fdd0
movb -0x41(%rbp), %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_delete_character
bool ce_vim_verb_delete_character(CeVim_t* vim, const CeVimAction_t* action, CeRange_t motion_range, CeView_t* view,
                                  CePoint_t* cursor, CeVimVisualData_t* visual, CeVimBufferData_t* buffer_data,
                                  const CeConfigOptions_t* config_options){
     ce_range_sort(&motion_range);

     while(!ce_point_after(motion_range.start, motion_range.end)){
          ce_buffer_remove_string_change(view->buffer, *cursor, 1, cursor, *cursor, false);

          CePoint_t new_start = ce_buffer_advance_point(view->buffer, motion_range.start, 1);
          if(ce_points_equal(new_start, motion_range.start)) return false;
          motion_range.start = new_start;
     }

     *cursor = ce_buffer_clamp_point(view->buffer, motion_range.end, action->clamp_x);
     return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, %rax
movq 0x30(%rbp), %rdi
leaq 0x10(%rbp), %rdi
movq %rdi, -0x60(%rbp)
movq %rax, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
callq 0x12840
movq -0x60(%rbp), %rax
movq (%rax), %rdi
movq 0x8(%rax), %rsi
movq 0x10(%rax), %rdx
movq 0x18(%rax), %rcx
callq 0xf690
xorb $-0x1, %al
testb $0x1, %al
jne 0x39e7a
jmp 0x39f16
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x28(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x28(%rbp), %rax
movq (%rcx), %rsi
movq 0x8(%rcx), %rdx
movl $0x1, %ecx
xorl %r9d, %r9d
movq (%rax), %r10
movq %r10, (%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x8(%rsp)
callq 0x110a0
movq -0x60(%rbp), %rax
movq -0x20(%rbp), %rcx
movq 0x40(%rcx), %rdi
movq (%rax), %rsi
movq 0x8(%rax), %rdx
movl $0x1, %ecx
callq 0xfaf0
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, -0x48(%rbp)
movq %rdx, -0x40(%rbp)
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq (%rax), %rdx
movq 0x8(%rax), %rcx
callq 0xfec0
testb $0x1, %al
jne 0x39ef8
jmp 0x39efe
movb $0x0, -0x1(%rbp)
jmp 0x39f60
movq -0x60(%rbp), %rax
movq -0x48(%rbp), %rcx
movq %rcx, (%rax)
movq -0x40(%rbp), %rcx
movq %rcx, 0x8(%rax)
jmp 0x39e57
movq -0x60(%rbp), %rax
movq -0x28(%rbp), %rcx
movq %rcx, -0x68(%rbp)
movq -0x20(%rbp), %rcx
movq 0x40(%rcx), %rdi
movq -0x18(%rbp), %rcx
movl 0x40(%rcx), %ecx
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
callq 0xfc90
movq %rax, %rcx
movq -0x68(%rbp), %rax
movq %rcx, -0x58(%rbp)
movq %rdx, -0x50(%rbp)
movq -0x58(%rbp), %rcx
movq %rcx, (%rax)
movq -0x50(%rbp), %rcx
movq %rcx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x80, %rsp
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_substitute_character
bool ce_vim_verb_substitute_character(CeVim_t* vim, const CeVimAction_t* action, CeRange_t motion_range, CeView_t* view,
                                      CePoint_t* cursor, CeVimVisualData_t* visual, CeVimBufferData_t* buffer_data,
                                      const CeConfigOptions_t* config_options){
     bool success = ce_vim_verb_delete_character(vim, action, motion_range, view, cursor, visual, buffer_data, config_options);
     if(success){
          vim->chain_undo = true;
          ce_vim_insert_mode(vim);
     }
     return success;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x30(%rbp), %rax
leaq 0x10(%rbp), %r10
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
movq 0x30(%rbp), %rax
movq (%r10), %r11
movq %r11, (%rsp)
movq 0x8(%r10), %r11
movq %r11, 0x8(%rsp)
movq 0x10(%r10), %r11
movq %r11, 0x10(%rsp)
movq 0x18(%r10), %r10
movq %r10, 0x18(%rsp)
movq %rax, 0x20(%rsp)
callq 0x39e20
andb $0x1, %al
movb %al, -0x31(%rbp)
testb $0x1, -0x31(%rbp)
je 0x39fff
movq -0x8(%rbp), %rax
movb $0x1, 0x19d8(%rax)
movq -0x8(%rbp), %rdi
callq 0x2fdd0
movb -0x31(%rbp), %al
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nopw (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_paste_before
bool ce_vim_verb_paste_before(CeVim_t* vim, const CeVimAction_t* action, CeRange_t motion_range, CeView_t* view,
                              CePoint_t* cursor, CeVimVisualData_t* visual, CeVimBufferData_t* buffer_data,
                              const CeConfigOptions_t* config_options){
     if(paste_text(vim, action, motion_range, view, cursor, config_options, false)){
          buffer_data->motion_column = cursor->x;
          return true;
     }

     return false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x30(%rbp), %rax
leaq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq 0x30(%rbp), %r8
xorl %r9d, %r9d
movq (%rax), %r10
movq %r10, (%rsp)
movq 0x8(%rax), %r10
movq %r10, 0x8(%rsp)
movq 0x10(%rax), %r10
movq %r10, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x3b7d0
testb $0x1, %al
jne 0x3a07c
jmp 0x3a094
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x5f0(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x3a098
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_paste_after
bool ce_vim_verb_paste_after(CeVim_t* vim, const CeVimAction_t* action, CeRange_t motion_range, CeView_t* view,
                             CePoint_t* cursor, CeVimVisualData_t* visual, CeVimBufferData_t* buffer_data,
                             const CeConfigOptions_t* config_options){
     if(paste_text(vim, action, motion_range, view, cursor, config_options, true)){
          buffer_data->motion_column = cursor->x;
          return true;
     }

     return false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x30(%rbp), %rax
leaq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq 0x30(%rbp), %r8
movl $0x1, %r9d
movq (%rax), %r10
movq %r10, (%rsp)
movq 0x8(%rax), %r10
movq %r10, 0x8(%rsp)
movq 0x10(%rax), %r10
movq %r10, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x3b7d0
testb $0x1, %al
jne 0x3a11f
jmp 0x3a137
movq -0x28(%rbp), %rax
movq (%rax), %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x5f0(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x3a13b
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_motion_other_end_of_selection
CeVimMotionResult_t ce_vim_motion_other_end_of_selection(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CePoint_t* cursor,
                                                         CeVimVisualData_t* visual, const CeConfigOptions_t* config_options,
                                                         CeVimBufferData_t* buffer_data, CeRange_t* motion_range){
     switch(vim->mode){
     default:
          return CE_VIM_MOTION_RESULT_FAIL;
     case CE_VIM_MODE_VISUAL:
     {
          motion_range->end = visual->point;
          visual->point = *cursor;
     } break;
     case CE_VIM_MODE_VISUAL_LINE:
          break;
     case CE_VIM_MODE_VISUAL_BLOCK:
          break;
     }

     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x3c(%rbp)
subl $0x2, %eax
je 0x3a1a1
jmp 0x3a184
movl -0x3c(%rbp), %eax
subl $0x3, %eax
je 0x3a1d0
jmp 0x3a18e
movl -0x3c(%rbp), %eax
subl $0x4, %eax
je 0x3a1d2
jmp 0x3a198
movl $0x0, -0x4(%rbp)
jmp 0x3a1db
movq 0x18(%rbp), %rax
movq -0x30(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, 0x10(%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq -0x30(%rbp), %rax
movq -0x28(%rbp), %rcx
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
jmp 0x3a1d4
jmp 0x3a1d4
jmp 0x3a1d4
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_last_action
bool ce_vim_verb_last_action(CeVim_t* vim, const CeVimAction_t* action, CeRange_t motion_range, CeView_t* view,
                             CePoint_t* cursor, CeVimVisualData_t* visual, CeVimBufferData_t* buffer_data,
                             const CeConfigOptions_t* config_options){
     CeBufferChangeNode_t* change_node = view->buffer->change_node;

     vim->verb_last_action = true;
     assert(vim->last_action.verb.function != ce_vim_verb_last_action);
     if(!ce_vim_apply_action(vim, &vim->last_action, view, cursor, visual, buffer_data, config_options)){
          vim->verb_last_action = false;
          return false;
     }

     if(vim->last_insert_rune_head){
          CeRune_t* rune_string = ce_rune_node_string(vim->last_insert_rune_head);
          CeRune_t* itr = rune_string;

          while(*itr){
               ce_vim_handle_key(vim, view, cursor, visual, *itr, buffer_data, config_options);
               itr++;
          }

          free(rune_string);
     }

     if(change_node && change_node->next) change_node->next->change.chain = false;

     vim->verb_last_action = false;
     return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x30(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x40(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rax
movb $0x1, 0x19d9(%rax)
movq -0x10(%rbp), %rax
leaq -0x4a(%rip), %rcx       # 0x3a760
cmpq %rcx, 0x1960(%rax)
je 0x3a7b5
jmp 0x3a7d4
leaq 0xae0d(%rip), %rdi      # 0x455c9
leaq 0xac3c(%rip), %rsi      # 0x453ff
movl $0xcf8, %edx            # imm = 0xCF8
leaq 0xae34(%rip), %rcx      # 0x45603
callq 0xd270
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rsi
addq $0x1938, %rsi           # imm = 0x1938
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
movq -0x38(%rbp), %r9
movq 0x30(%rbp), %rax
movq %rax, (%rsp)
callq 0x34110
testb $0x1, %al
jne 0x3a818
movq -0x10(%rbp), %rax
movb $0x0, 0x19d9(%rax)
movb $0x0, -0x1(%rbp)
jmp 0x3a8b6
movq -0x10(%rbp), %rax
cmpq $0x0, 0x19d0(%rax)
je 0x3a88a
movq -0x10(%rbp), %rax
movq 0x19d0(%rax), %rdi
callq 0x11e50
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
cmpl $0x0, (%rax)
je 0x3a881
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
movq -0x50(%rbp), %rax
movl (%rax), %r8d
movq -0x38(%rbp), %r9
movq 0x30(%rbp), %rax
movq %rax, (%rsp)
callq 0x33ab0
movq -0x50(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x50(%rbp)
jmp 0x3a842
movq -0x48(%rbp), %rdi
callq 0xd090
cmpq $0x0, -0x40(%rbp)
je 0x3a8a7
movq -0x40(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0x3a8a7
movq -0x40(%rbp), %rax
movq 0x40(%rax), %rax
movb $0x0, (%rax)
movq -0x10(%rbp), %rax
movb $0x0, 0x19d9(%rax)
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_z_command
bool ce_vim_verb_z_command(CeVim_t* vim, const CeVimAction_t* action, CeRange_t motion_range, CeView_t* view,
                           CePoint_t* cursor, CeVimVisualData_t* visual, CeVimBufferData_t* buffer_data,
                           const CeConfigOptions_t* config_options){
     switch(action->verb.integer){
     default:
          break;
     case 'z':
     {
          ce_view_center(view);
     } break;
     case 'b':
     {
          ce_view_scroll_to(view, (CePoint_t){0, cursor->y - view->rect.bottom + config_options->vertical_scroll_off});
     } break;
     case 't':
     {
          ce_view_scroll_to(view, (CePoint_t){0, cursor->y - config_options->vertical_scroll_off});
     } break;
     }

     return false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x30(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x10(%rbp), %rax
movl 0x30(%rax), %eax
movl %eax, -0x54(%rbp)
subl $0x62, %eax
je 0x3a926
jmp 0x3a905
movl -0x54(%rbp), %eax
subl $0x74, %eax
je 0x3a95d
jmp 0x3a90f
movl -0x54(%rbp), %eax
subl $0x7a, %eax
je 0x3a91b
jmp 0x3a919
jmp 0x3a98a
movq -0x18(%rbp), %rdi
callq 0x11970
jmp 0x3a98a
movq -0x18(%rbp), %rdi
movq $0x0, -0x40(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x18(%rbp), %rcx
subq 0x18(%rcx), %rax
movq 0x30(%rbp), %rcx
addq 0x18(%rcx), %rax
movq %rax, -0x38(%rbp)
movq -0x40(%rbp), %rsi
movq -0x38(%rbp), %rdx
callq 0x11910
jmp 0x3a98a
movq -0x18(%rbp), %rdi
movq $0x0, -0x50(%rbp)
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq 0x30(%rbp), %rcx
subq 0x18(%rcx), %rax
movq %rax, -0x48(%rbp)
movq -0x50(%rbp), %rsi
movq -0x48(%rbp), %rdx
callq 0x11910
xorl %eax, %eax
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_set_paste_clipboard_to_highlighted
bool ce_vim_verb_set_paste_clipboard_to_highlighted(CeVim_t* vim, const CeVimAction_t* action, CeRange_t motion_range, CeView_t* view,
                                                    CePoint_t* cursor, CeVimVisualData_t* visual, CeVimBufferData_t* buffer_data,
                                                    const CeConfigOptions_t* config_options){
     CePoint_t highlight_start = {};
     CePoint_t highlight_end = {};
     if(!ce_vim_get_selection_range(vim->mode, visual, view, &highlight_start, &highlight_end)){
          return false;
     }
     return ce_set_clipboard_from_buffer(view->buffer, highlight_start, highlight_end);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x30(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
leaq -0x48(%rbp), %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0xd290
leaq -0x58(%rbp), %rdi
xorl %esi, %esi
movl $0x10, %edx
callq 0xd290
movq -0x10(%rbp), %rax
movl (%rax), %edi
movq -0x30(%rbp), %rsi
movq -0x20(%rbp), %rdx
leaq -0x48(%rbp), %rcx
leaq -0x58(%rbp), %r8
callq 0x3c300
testb $0x1, %al
jne 0x3b339
movb $0x0, -0x1(%rbp)
jmp 0x3b35b
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x48(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq -0x58(%rbp), %rcx
movq -0x50(%rbp), %r8
callq 0x19c10
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: motion_direction
static CeVimMotionResult_t motion_direction(const CeView_t* view, CePoint_t delta, const CeConfigOptions_t* config_options,
                                            CeRange_t* motion_range){
     CePoint_t destination = ce_buffer_move_point(view->buffer, motion_range->end, delta, config_options->tab_width, CE_CLAMP_X_INSIDE);
     if(destination.x < 0) return CE_VIM_MOTION_RESULT_FAIL;
     motion_range->end = destination;
     return CE_VIM_MOTION_RESULT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rsi, -0x18(%rbp)
movq %rdx, -0x10(%rbp)
movq %rdi, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x30(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x8(%rcx), %r9
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
movq -0x18(%rbp), %rcx
movq -0x10(%rbp), %r8
movl $0x2, (%rsp)
callq 0xf740
movq %rax, -0x40(%rbp)
movq %rdx, -0x38(%rbp)
cmpq $0x0, -0x40(%rbp)
jge 0x3b3d4
movl $0x0, -0x4(%rbp)
jmp 0x3b3ef
movq -0x30(%rbp), %rax
movq -0x40(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x38(%rbp), %rcx
movq %rcx, 0x18(%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax,%rax)
// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: vim_motion_find
static CeVimMotionResult_t vim_motion_find(CeVim_t* vim, CeVimAction_t* action, const CeView_t* view, const CeConfigOptions_t* config_options,
                                           CeRange_t* motion_range, bool inside){
     CePoint_t start = motion_range->start;
     int multiplier = (action->multiplier * action->motion.multiplier) - 1;
     CeRange_t new_range = ce_vim_find_pair(view->buffer, motion_range->end, action->motion.integer, inside, multiplier);
     if(new_range.start.x < 0) return CE_VIM_MOTION_RESULT_FAIL;
     if(ce_points_equal(start, new_range.end)){
          action->exclude_end = true;
     }
     *motion_range = new_range;
     return CE_VIM_MOTION_RESULT_SUCCESS_NO_MULTIPLY;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movb %r9b, %al
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
andb $0x1, %al
movb %al, -0x31(%rbp)
movq -0x30(%rbp), %rax
movq (%rax), %rcx
movq %rcx, -0x48(%rbp)
movq 0x8(%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
imulq 0x8(%rcx), %rax
subq $0x1, %rax
movl %eax, -0x4c(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rsi
movq -0x30(%rbp), %rcx
movq -0x18(%rbp), %rax
movl 0x18(%rax), %r8d
movb -0x31(%rbp), %r9b
movl -0x4c(%rbp), %eax
movq 0x10(%rcx), %rdx
movq 0x18(%rcx), %rcx
leaq -0x70(%rbp), %rdi
andb $0x1, %r9b
movzbl %r9b, %r9d
movl %eax, (%rsp)
callq 0x36ca0
cmpq $0x0, -0x70(%rbp)
jge 0x3b498
movl $0x0, -0x4(%rbp)
jmp 0x3b4e5
movq -0x48(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x60(%rbp), %rdx
movq -0x58(%rbp), %rcx
callq 0xfec0
testb $0x1, %al
jne 0x3b4b3
jmp 0x3b4bb
movq -0x18(%rbp), %rax
movb $0x1, 0x3e(%rax)
movq -0x30(%rbp), %rax
movq -0x70(%rbp), %rcx
movq %rcx, (%rax)
movq -0x68(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x58(%rbp), %rcx
movq %rcx, 0x18(%rax)
movl $0x2, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)