// File: /workspace/github_c_makefile_star2_O0/chriso[P]columnix/lib/predicate.c
// Function: cx_index_match_rows_custom
static bool cx_index_match_rows_custom(const struct cx_predicate *predicate,
                                       struct cx_row_group_cursor *cursor,
                                       enum cx_column_type type,
                                       uint64_t *matches, size_t *count)
{
    size_t column = predicate->column;
    const void *values = NULL;
    switch (type) {
        case CX_COLUMN_BIT:
            assert(predicate->column_type == CX_COLUMN_BIT);
            values = cx_row_group_cursor_batch_bit(cursor, column, count);
            break;
        case CX_COLUMN_I32:
            assert(predicate->column_type == CX_COLUMN_I32);
            values = cx_row_group_cursor_batch_i32(cursor, column, count);
            break;
        case CX_COLUMN_I64:
            assert(predicate->column_type == CX_COLUMN_I64);
            values = cx_row_group_cursor_batch_i64(cursor, column, count);
            break;
        case CX_COLUMN_FLT:
            assert(predicate->column_type == CX_COLUMN_FLT);
            values = cx_row_group_cursor_batch_flt(cursor, column, count);
            break;
        case CX_COLUMN_DBL:
            assert(predicate->column_type == CX_COLUMN_DBL);
            values = cx_row_group_cursor_batch_dbl(cursor, column, count);
            break;
        case CX_COLUMN_STR:
            assert(predicate->column_type == CX_COLUMN_STR);
            values = cx_row_group_cursor_batch_str(cursor, column, count);
            break;
    }
    if (!values)
        return false;
    if (!predicate->custom.match_rows)
        return true;
    return predicate->custom.match_rows(type, *count, values, matches,
                                        predicate->custom.data);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
movq $0x0, -0x40(%rbp)
movl -0x1c(%rbp), %eax
movq %rax, -0x48(%rbp)
subq $0x5, %rax
ja 0xac1a
movq -0x48(%rbp), %rax
leaq 0x5fa1(%rip), %rcx      # 0x10a1c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
cmpl $0x0, 0x4(%rax)
jne 0xaa90
jmp 0xaaaf
leaq 0x610c(%rip), %rdi      # 0x10ba3
leaq 0x603e(%rip), %rsi      # 0x10adc
movl $0x2c7, %edx            # imm = 0x2C7
leaq 0x6372(%rip), %rcx      # 0x10e1c
callq 0x53a0
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x5590
movq %rax, -0x40(%rbp)
jmp 0xac1a
movq -0x10(%rbp), %rax
cmpl $0x1, 0x4(%rax)
jne 0xaad5
jmp 0xaaf4
leaq 0x6172(%rip), %rdi      # 0x10c4e
leaq 0x5ff9(%rip), %rsi      # 0x10adc
movl $0x2cb, %edx            # imm = 0x2CB
leaq 0x632d(%rip), %rcx      # 0x10e1c
callq 0x53a0
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x58a0
movq %rax, -0x40(%rbp)
jmp 0xac1a
movq -0x10(%rbp), %rax
cmpl $0x2, 0x4(%rax)
jne 0xab1a
jmp 0xab39
leaq 0x6155(%rip), %rdi      # 0x10c76
leaq 0x5fb4(%rip), %rsi      # 0x10adc
movl $0x2cf, %edx            # imm = 0x2CF
leaq 0x62e8(%rip), %rcx      # 0x10e1c
callq 0x53a0
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x5950
movq %rax, -0x40(%rbp)
jmp 0xac1a
movq -0x10(%rbp), %rax
cmpl $0x3, 0x4(%rax)
jne 0xab5f
jmp 0xab7e
leaq 0x6138(%rip), %rdi      # 0x10c9e
leaq 0x5f6f(%rip), %rsi      # 0x10adc
movl $0x2d3, %edx            # imm = 0x2D3
leaq 0x62a3(%rip), %rcx      # 0x10e1c
callq 0x53a0
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x58b0
movq %rax, -0x40(%rbp)
jmp 0xac1a
movq -0x10(%rbp), %rax
cmpl $0x4, 0x4(%rax)
jne 0xaba4
jmp 0xabc3
leaq 0x611b(%rip), %rdi      # 0x10cc6
leaq 0x5f2a(%rip), %rsi      # 0x10adc
movl $0x2d7, %edx            # imm = 0x2D7
leaq 0x625e(%rip), %rcx      # 0x10e1c
callq 0x53a0
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x56a0
movq %rax, -0x40(%rbp)
jmp 0xac1a
movq -0x10(%rbp), %rax
cmpl $0x5, 0x4(%rax)
jne 0xabe6
jmp 0xac05
leaq 0x6101(%rip), %rdi      # 0x10cee
leaq 0x5ee8(%rip), %rsi      # 0x10adc
movl $0x2db, %edx            # imm = 0x2DB
leaq 0x621c(%rip), %rcx      # 0x10e1c
callq 0x53a0
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x5670
movq %rax, -0x40(%rbp)
cmpq $0x0, -0x40(%rbp)
jne 0xac27
movb $0x0, -0x1(%rbp)
jmp 0xac61
movq -0x10(%rbp), %rax
cmpq $0x0, 0x40(%rax)
jne 0xac38
movb $0x1, -0x1(%rbp)
jmp 0xac61
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movl -0x1c(%rbp), %edi
movq -0x30(%rbp), %rcx
movq (%rcx), %rsi
movq -0x40(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %r8
movq 0x58(%r8), %r8
callq *%rax
andb $0x1, %al
movb %al, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax)