// File: /workspace/github_c_makefile_star2_O0/samtools[P]htslib/test/test_bgzf.c
// Function: test_index_useek_getc
static int test_index_useek_getc(Files *f, const char *mode,
                                 int cache_size, int nthreads) {
    BGZF* bgz = NULL;
    ssize_t bg_put;
    size_t i, j, k, iskip = f->ltext / 10;
    int is_uncompressed = strchr(mode, 'u') != NULL;
    size_t offsets[3] = { 0, 100, 50 };

    bgz = try_bgzf_open(f->tmp_bgzf, mode, __func__);
    if (!bgz) goto fail;

    if (try_bgzf_index_build_init(bgz, f->tmp_bgzf, __func__) != 0) goto fail;

    if (nthreads > 0 && try_bgzf_mt(bgz, nthreads, __func__) != 0) goto fail;

    bg_put = try_bgzf_write(bgz, f->text, f->ltext, f->tmp_bgzf, __func__);
    if (bg_put < 0) goto fail;

    if (!is_uncompressed) {
        if (try_bgzf_index_dump(bgz, f->tmp_idx, NULL, __func__) != 0) {
            goto fail;
        }
    }

    if (try_bgzf_close(&bgz, f->tmp_bgzf, __func__, 0) != 0) goto fail;

    bgz = try_bgzf_open(f->tmp_bgzf, "r", __func__);
    if (!bgz) goto fail;

    if (nthreads > 0 && try_bgzf_mt(bgz, nthreads, __func__) != 0) goto fail;

    if (!is_uncompressed) {
        if (try_bgzf_index_load(bgz, f->tmp_bgzf, idx_suffix, __func__) != 0) {
            goto fail;
        }
    }

    for (i = 0; i < f->ltext; i += iskip) {
        for (k = 0; k < sizeof(offsets) / sizeof(offsets[0]); k++) {
            size_t o = offsets[k];
            if (try_bgzf_useek(bgz, i + o, SEEK_SET, f->tmp_bgzf, __func__) != 0) {
                goto fail;
            }

            for (j = 0; j < 16 && i + o + j < f->ltext; j++) {
                if (try_bgzf_getc(bgz, i + o + j, f->text[i + o + j],
                                  f->tmp_bgzf, __func__) < 0) goto fail;
            }
        }
    }

    if (try_bgzf_useek(bgz, 0, SEEK_SET, f->tmp_bgzf, __func__) != 0) {
        goto fail;
    }
    for (j = 0; j < 70000 && j < f->ltext; j++) { // Should force a block load
        if (try_bgzf_getc(bgz, j, f->text[j],
                          f->tmp_bgzf, __func__) < 0) goto fail;
    }

    if (cache_size > 0) {
        size_t mid = f->ltext / 2;
        bgzf_set_cache_size(bgz, cache_size);

        for (i = 0; i < 10; i++) {
            if (try_bgzf_useek(bgz, 0, SEEK_SET, f->tmp_bgzf, __func__) != 0) {
                goto fail;
            }
            for (j = 0; j < 64 && j < f->ltext; j++) {
                if (try_bgzf_getc(bgz, j, f->text[j],
                                  f->tmp_bgzf, __func__) < 0) goto fail;
            }

            if (try_bgzf_useek(bgz, mid, SEEK_SET,
                               f->tmp_bgzf, __func__) != 0) {
                goto fail;
            }
            for (j = 0; j < 64 && j + mid < f->ltext; j++) {
                if (try_bgzf_getc(bgz, j + mid, f->text[j + mid],
                                  f->tmp_bgzf, __func__) < 0) goto fail;
            }
        }
    }

    if (try_bgzf_close(&bgz, f->tmp_bgzf, __func__, 0) != 0) goto fail;

    return 0;

 fail:
    if (bgz) bgzf_close(bgz);
    return -1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movl %edx, -0x1c(%rbp)
movl %ecx, -0x20(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
movl $0xa, %ecx
xorl %edx, %edx
divq %rcx
movq %rax, -0x50(%rbp)
movq -0x18(%rbp), %rdi
movl $0x75, %esi
callq 0x4160
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x54(%rbp)
movq 0xe3625(%rip), %rax     # 0xea6d0
movq %rax, -0x70(%rbp)
movq 0xe3622(%rip), %rax     # 0xea6d8
movq %rax, -0x68(%rbp)
movq 0xe361f(%rip), %rax     # 0xea6e0
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x18(%rbp), %rsi
leaq 0xe3331(%rip), %rdx     # 0xea409
callq 0x8b70
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x70ed
jmp 0x75d5
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
leaq 0xe3309(%rip), %rdx     # 0xea409
callq 0x9760
cmpl $0x0, %eax
je 0x710f
jmp 0x75d5
cmpl $0x0, -0x20(%rbp)
jle 0x7132
movq -0x28(%rbp), %rdi
movl -0x20(%rbp), %esi
leaq 0xe32e6(%rip), %rdx     # 0xea409
callq 0x92f0
cmpl $0x0, %eax
je 0x7132
jmp 0x75d5
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rsi
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rdx
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
leaq 0xe32b4(%rip), %r8      # 0xea409
callq 0x9370
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jge 0x716a
jmp 0x75d5
cmpl $0x0, -0x54(%rbp)
jne 0x7198
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rsi
xorl %eax, %eax
movl %eax, %edx
leaq 0xe3282(%rip), %rcx     # 0xea409
callq 0x9600
cmpl $0x0, %eax
je 0x7196
jmp 0x75d5
jmp 0x7198
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x28(%rbp), %rdi
leaq 0xe325e(%rip), %rdx     # 0xea409
xorl %ecx, %ecx
callq 0x8c10
cmpl $0x0, %eax
je 0x71bc
jmp 0x75d5
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
leaq 0xe73b6(%rip), %rsi     # 0xee581
leaq 0xe3237(%rip), %rdx     # 0xea409
callq 0x8b70
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0x71e7
jmp 0x75d5
cmpl $0x0, -0x20(%rbp)
jle 0x720a
movq -0x28(%rbp), %rdi
movl -0x20(%rbp), %esi
leaq 0xe320e(%rip), %rdx     # 0xea409
callq 0x92f0
cmpl $0x0, %eax
je 0x720a
jmp 0x75d5
cmpl $0x0, -0x54(%rbp)
jne 0x723b
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
movq 0x1012d5(%rip), %rdx    # 0x1084f8
leaq 0xe31df(%rip), %rcx     # 0xea409
callq 0x9540
cmpl $0x0, %eax
je 0x7239
jmp 0x75d5
jmp 0x723b
movq $0x0, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x48(%rcx), %rax
jae 0x7360
movq $0x0, -0x48(%rbp)
cmpq $0x3, -0x48(%rbp)
jae 0x734d
movq -0x48(%rbp), %rax
movq -0x70(%rbp,%rax,8), %rax
movq %rax, -0x78(%rbp)
movq -0x28(%rbp), %rdi
movq -0x38(%rbp), %rsi
addq -0x78(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
xorl %edx, %edx
leaq 0xe3177(%rip), %r8      # 0xea409
callq 0x97f0
cmpl $0x0, %eax
je 0x72a1
jmp 0x75d5
movq $0x0, -0x40(%rbp)
xorl %eax, %eax
cmpq $0x10, -0x40(%rbp)
movb %al, -0x81(%rbp)
jae 0x72d5
movq -0x38(%rbp), %rax
addq -0x78(%rbp), %rax
addq -0x40(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x48(%rcx), %rax
setb %al
movb %al, -0x81(%rbp)
movb -0x81(%rbp), %al
testb $0x1, %al
jne 0x72e1
jmp 0x733a
movq -0x28(%rbp), %rdi
movq -0x38(%rbp), %rsi
addq -0x78(%rbp), %rsi
addq -0x40(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x38(%rbp), %rcx
addq -0x78(%rbp), %rcx
addq -0x40(%rbp), %rcx
movzbl (%rax,%rcx), %edx
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
leaq 0xe30f1(%rip), %r8      # 0xea409
callq 0x98a0
cmpl $0x0, %eax
jge 0x7327
jmp 0x75d5
jmp 0x7329
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x72a9
jmp 0x733c
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x725d
jmp 0x734f
movq -0x50(%rbp), %rax
addq -0x38(%rbp), %rax
movq %rax, -0x38(%rbp)
jmp 0x7243
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
leaq 0xe3090(%rip), %r8      # 0xea409
callq 0x97f0
cmpl $0x0, %eax
je 0x7388
jmp 0x75d5
movq $0x0, -0x40(%rbp)
xorl %eax, %eax
cmpq $0x11170, -0x40(%rbp)   # imm = 0x11170
movb %al, -0x82(%rbp)
jae 0x73b7
movq -0x40(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x48(%rcx), %rax
setb %al
movb %al, -0x82(%rbp)
movb -0x82(%rbp), %al
testb $0x1, %al
jne 0x73c3
jmp 0x7409
movq -0x28(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x40(%rbp), %rcx
movzbl (%rax,%rcx), %edx
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
leaq 0xe301f(%rip), %r8      # 0xea409
callq 0x98a0
cmpl $0x0, %eax
jge 0x73f9
jmp 0x75d5
jmp 0x73fb
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x7390
cmpl $0x0, -0x1c(%rbp)
jle 0x75ab
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
shrq %rax
movq %rax, -0x80(%rbp)
movq -0x28(%rbp), %rdi
movl -0x1c(%rbp), %esi
callq 0xe4b0
movq $0x0, -0x38(%rbp)
cmpq $0xa, -0x38(%rbp)
jae 0x75a9
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
xorl %eax, %eax
movl %eax, %esi
xorl %edx, %edx
leaq 0xe2faf(%rip), %r8      # 0xea409
callq 0x97f0
cmpl $0x0, %eax
je 0x7469
jmp 0x75d5
movq $0x0, -0x40(%rbp)
xorl %eax, %eax
cmpq $0x40, -0x40(%rbp)
movb %al, -0x83(%rbp)
jae 0x7495
movq -0x40(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x48(%rcx), %rax
setb %al
movb %al, -0x83(%rbp)
movb -0x83(%rbp), %al
testb $0x1, %al
jne 0x74a1
jmp 0x74e7
movq -0x28(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x40(%rbp), %rcx
movzbl (%rax,%rcx), %edx
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
leaq 0xe2f41(%rip), %r8      # 0xea409
callq 0x98a0
cmpl $0x0, %eax
jge 0x74d7
jmp 0x75d5
jmp 0x74d9
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x7471
movq -0x28(%rbp), %rdi
movq -0x80(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
xorl %edx, %edx
leaq 0xe2f09(%rip), %r8      # 0xea409
callq 0x97f0
cmpl $0x0, %eax
je 0x750f
jmp 0x75d5
movq $0x0, -0x40(%rbp)
xorl %eax, %eax
cmpq $0x40, -0x40(%rbp)
movb %al, -0x84(%rbp)
jae 0x753f
movq -0x40(%rbp), %rax
addq -0x80(%rbp), %rax
movq -0x10(%rbp), %rcx
cmpq 0x48(%rcx), %rax
setb %al
movb %al, -0x84(%rbp)
movb -0x84(%rbp), %al
testb $0x1, %al
jne 0x754b
jmp 0x7596
movq -0x28(%rbp), %rdi
movq -0x40(%rbp), %rsi
addq -0x80(%rbp), %rsi
movq -0x10(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x40(%rbp), %rcx
addq -0x80(%rbp), %rcx
movzbl (%rax,%rcx), %edx
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rcx
leaq 0xe2e8f(%rip), %r8      # 0xea409
callq 0x98a0
cmpl $0x0, %eax
jge 0x7586
jmp 0x75d5
jmp 0x7588
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x7517
jmp 0x7598
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x7436
jmp 0x75ab
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rsi
leaq -0x28(%rbp), %rdi
leaq 0xe2e4b(%rip), %rdx     # 0xea409
xorl %ecx, %ecx
callq 0x8c10
cmpl $0x0, %eax
je 0x75cc
jmp 0x75d5
movl $0x0, -0x4(%rbp)
jmp 0x75ec
cmpq $0x0, -0x28(%rbp)
je 0x75e5
movq -0x28(%rbp), %rdi
callq 0xe0e0
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
movl -0x4(%rbp), %eax
addq $0x90, %rsp
popq %rbp
retq
nopl (%rax,%rax)