// File: /workspace/github_c_makefile_star2_O0/justy989[P]ce/ce_vim.c
// Function: ce_vim_verb_motion
bool ce_vim_verb_motion(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(action->motion.function == ce_vim_motion_up || action->motion.function == ce_vim_motion_down){
          motion_range.end.x = buffer_data->motion_column;
     }
     *cursor = ce_buffer_clamp_point(view->buffer, motion_range.end, CE_CLAMP_X_INSIDE);
     if(ce_points_equal(motion_range.end, *cursor)) buffer_data->motion_column = cursor->x;
     CePoint_t before_follow = view->scroll;

     if(vim->mode == CE_VIM_MODE_VISUAL &&
        (action->motion.function == ce_vim_motion_inside ||
         action->motion.function == ce_vim_motion_around) &&
        ce_point_after(visual->point, motion_range.start)){
          visual->point = motion_range.start;
     }

     // if we are searching, and our cursor goes off the screen, center it
     if(!ce_points_equal(before_follow, view->scroll) &&
        (action->motion.function == ce_vim_motion_search_next ||
         action->motion.function == ce_vim_motion_search_prev)){
          ce_view_center(view);
     }

     return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq 0x30(%rbp), %rax
leaq 0x10(%rbp), %rax
movq %rax, -0x58(%rbp)
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
leaq 0x2e19(%rip), %rcx      # 0x37910
cmpq %rcx, 0x10(%rax)
je 0x34b0e
movq -0x10(%rbp), %rax
leaq 0x2ed8(%rip), %rcx      # 0x379e0
cmpq %rcx, 0x10(%rax)
jne 0x34b21
movq -0x58(%rbp), %rax
movq -0x30(%rbp), %rcx
movq 0x5f0(%rcx), %rcx
movq %rcx, 0x10(%rax)
movq -0x58(%rbp), %rax
movq -0x20(%rbp), %rcx
movq %rcx, -0x60(%rbp)
movq -0x18(%rbp), %rcx
movq 0x40(%rcx), %rdi
movq 0x10(%rax), %rsi
movq 0x18(%rax), %rdx
movl $0x2, %ecx
callq 0xfc90
movq -0x58(%rbp), %rcx
movq %rax, %rsi
movq -0x60(%rbp), %rax
movq %rsi, -0x40(%rbp)
movq %rdx, -0x38(%rbp)
movq -0x40(%rbp), %rdx
movq %rdx, (%rax)
movq -0x38(%rbp), %rdx
movq %rdx, 0x8(%rax)
movq -0x20(%rbp), %rax
movq 0x10(%rcx), %rdi
movq 0x18(%rcx), %rsi
movq (%rax), %rdx
movq 0x8(%rax), %rcx
callq 0xfec0
testb $0x1, %al
jne 0x34b87
jmp 0x34b99
movq -0x20(%rbp), %rax
movq (%rax), %rcx
movq -0x30(%rbp), %rax
movq %rcx, 0x5f0(%rax)
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rcx
movq %rcx, -0x50(%rbp)
movq 0x28(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rax
cmpl $0x2, (%rax)
jne 0x34c0f
movq -0x10(%rbp), %rax
leaq 0x34cf(%rip), %rcx      # 0x38090
cmpq %rcx, 0x10(%rax)
je 0x34bd8
movq -0x10(%rbp), %rax
leaq 0x350e(%rip), %rcx      # 0x380e0
cmpq %rcx, 0x10(%rax)
jne 0x34c0f
movq -0x58(%rbp), %rax
movq -0x28(%rbp), %rcx
movq (%rcx), %rdi
movq 0x8(%rcx), %rsi
movq (%rax), %rdx
movq 0x8(%rax), %rcx
callq 0xf690
testb $0x1, %al
jne 0x34bf9
jmp 0x34c0f
movq -0x58(%rbp), %rcx
movq -0x28(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rcx
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq -0x50(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq 0x20(%rax), %rdx
movq 0x28(%rax), %rcx
callq 0xfec0
testb $0x1, %al
jne 0x34c57
movq -0x10(%rbp), %rax
leaq 0x3c29(%rip), %rcx      # 0x38860
cmpq %rcx, 0x10(%rax)
je 0x34c4e
movq -0x10(%rbp), %rax
leaq 0x3f78(%rip), %rcx      # 0x38bc0
cmpq %rcx, 0x10(%rax)
jne 0x34c57
movq -0x18(%rbp), %rdi
callq 0x11970
movb $0x1, %al
andb $0x1, %al
addq $0x60, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)