// File: /workspace/github_c_makefile_star2_O1/nh13[P]ksw/src/parasail/src/memory.c
// Function: parasail_result_free
void parasail_result_free(parasail_result_t *result)
{
    /* validate inputs */
    if (!result) {
        fprintf(stderr, "%s: attempted free of NULL result pointer\n", __func__);
        return;
    }
    
    if (result->flag & PARASAIL_FLAG_STATS) {
        if (result->flag & PARASAIL_FLAG_TABLE) {
            free(result->stats->tables->score_table);
            free(result->stats->tables->matches_table);
            free(result->stats->tables->similar_table);
            free(result->stats->tables->length_table);
            free(result->stats->tables);
        }
        if (result->flag & PARASAIL_FLAG_ROWCOL) {
            free(result->stats->rowcols->score_row);
            free(result->stats->rowcols->matches_row);
            free(result->stats->rowcols->similar_row);
            free(result->stats->rowcols->length_row);
            free(result->stats->rowcols->score_col);
            free(result->stats->rowcols->matches_col);
            free(result->stats->rowcols->similar_col);
            free(result->stats->rowcols->length_col);
            free(result->stats->rowcols);
        }
        free(result->stats);
    }
    else {
        if (result->flag & PARASAIL_FLAG_TABLE) {
            free(result->tables->score_table);
            free(result->tables);
        }
        if (result->flag & PARASAIL_FLAG_ROWCOL) {
            free(result->rowcols->score_row);
            free(result->rowcols->score_col);
            free(result->rowcols);
        }
    }
    if (result->flag & PARASAIL_FLAG_TRACE) {
        parasail_free(result->trace->trace_table);
        if (NULL != result->trace->trace_ins_table)
            parasail_free(result->trace->trace_ins_table);
        if (NULL != result->trace->trace_del_table)
            parasail_free(result->trace->trace_del_table);
        free(result->trace);
    }

    free(result);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
testq %rdi, %rdi
je 0x209b47
movq %rdi, %rbx
movl 0xc(%rdi), %eax
btl $0x10, %eax
jb 0x2099f9
btl $0x11, %eax
jae 0x2099cd
movq 0x10(%rbx), %rax
movq (%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rdi
callq 0x19e120
testb $0x4, 0xe(%rbx)
je 0x209af9
leaq 0x10(%rbx), %r14
movq 0x10(%rbx), %rax
movq (%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x8(%rax), %rdi
callq 0x19e120
jmp 0x209af1
btl $0x11, %eax
jae 0x209a4f
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq (%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x18(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rdi
callq 0x19e120
testb $0x4, 0xe(%rbx)
je 0x209aed
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq (%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x8(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x10(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x18(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x20(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x28(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x30(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rax
movq 0x38(%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rdi
callq 0x19e120
leaq 0x10(%rbx), %r14
movq (%r14), %rdi
callq 0x19e120
testb $0x8, 0xe(%rbx)
je 0x209b38
movq 0x10(%rbx), %rax
movq (%rax), %rdi
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x8(%rax), %rdi
testq %rdi, %rdi
je 0x209b1d
callq 0x19e120
movq 0x10(%rbx), %rax
movq 0x10(%rax), %rdi
testq %rdi, %rdi
je 0x209b2f
callq 0x19e120
movq 0x10(%rbx), %rdi
callq 0x19e120
movq %rbx, %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
jmp 0x19e120
callq 0x19eb09
addq $0x8, %rsp
popq %rbx
popq %r14
retq