// File: /workspace/github_c_makefile_star2_O1/icebert[P]pblat/htslib/cram/cram_io.c
// Function: cram_compress_by_method
static char *cram_compress_by_method(char *in, size_t in_size,
				     size_t *out_size,
				     enum cram_block_method method,
				     int level, int strat) {
    switch (method) {
    case GZIP:
	return zlib_mem_deflate(in, in_size, out_size, level, strat);

    case BZIP2: {
#ifdef HAVE_LIBBZ2
	unsigned int comp_size = in_size*1.01 + 600;
	char *comp = malloc(comp_size);
	if (!comp)
	    return NULL;

	if (BZ_OK != BZ2_bzBuffToBuffCompress(comp, &comp_size,
					      in, in_size,
					      level, 0, 30)) {
	    free(comp);
	    return NULL;
	}
	*out_size = comp_size;
	return comp;
#else
	return NULL;
#endif
    }

    case LZMA:
#ifdef HAVE_LIBLZMA
	return lzma_mem_deflate(in, in_size, out_size, level);
#else
	return NULL;
#endif

    case RANS0: {
	unsigned int out_size_i;
	unsigned char *cp;
	cp = rans_compress((unsigned char *)in, in_size, &out_size_i, 0);
	*out_size = out_size_i;
	return (char *)cp;
    }

    case RANS1: {
	unsigned int out_size_i;
	unsigned char *cp;
	
	cp = rans_compress((unsigned char *)in, in_size, &out_size_i, 1);
	*out_size = out_size_i;
	return (char *)cp;
    }

    case RAW:
	break;

    default:
	return NULL;
    }

    return NULL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x88, %rsp
movq %rdx, %rbp
movq %rsi, %r12
movq %rdi, %r13
cmpl $0xa, %ecx
je 0x57386
cmpl $0x4, %ecx
je 0x57374
cmpl $0x1, %ecx
jne 0x573c7
movl %r8d, %r15d
movl %r9d, 0xc(%rsp)
movq %r12, %xmm0
punpckldq 0x34dbf(%rip), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
subpd 0x34dc7(%rip), %xmm0    # 0x8c020
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
mulsd 0x3ba63(%rip), %xmm1    # 0x92cd0
addsd 0x36f6b(%rip), %xmm1    # 0x8e1e0
cvttsd2si %xmm1, %ebx
movslq %ebx, %rdi
callq 0x69d0
testq %rax, %rax
je 0x573c7
movq %rax, %r14
movq %rbp, 0x10(%rsp)
xorpd %xmm0, %xmm0
leaq 0x18(%rsp), %rdi
movupd %xmm0, 0x40(%rdi)
xorl %ebp, %ebp
movq %rbp, 0x50(%rdi)
movq %r13, (%rdi)
movl %r12d, 0x8(%rdi)
movq %rbp, 0x10(%rdi)
movq %rax, 0x18(%rdi)
movl %ebx, 0x20(%rdi)
movq %rbp, 0x28(%rdi)
movl $0x0, 0x58(%rdi)
leaq 0x4149e(%rip), %rax     # 0x98768
movl %r15d, %esi
movl $0x8, %edx
movl $0x1f, %ecx
movl $0x9, %r8d
movl 0xc(%rsp), %r9d
pushq $0x70
pushq %rax
callq 0x6090
addq $0x10, %rsp
testl %eax, %eax
jne 0x573aa
leaq 0x18(%rsp), %r15
cmpl $0x0, 0x20(%rsp)
je 0x5733a
movslq %ebp, %rax
leaq (%r14,%rax), %rcx
movq %rcx, 0x30(%rsp)
movl %ebx, %ecx
subl %eax, %ecx
movl %ecx, 0x38(%rsp)
jle 0x573c2
movq %r15, %rdi
xorl %esi, %esi
callq 0x6310
movl %ebx, %ebp
subl 0x38(%rsp), %ebp
testl %eax, %eax
je 0x572fb
leaq 0x18(%rsp), %rdi
callq 0x77f9
leaq 0x18(%rsp), %rdi
movl $0x4, %esi
callq 0x6310
cmpl $0x1, %eax
jne 0x573b6
leaq 0x18(%rsp), %rdi
movq 0x28(%rdi), %rax
movq 0x10(%rsp), %rcx
movq %rax, (%rcx)
callq 0x6420
testl %eax, %eax
je 0x573ca
leaq 0x18(%rsp), %rdi
callq 0x7865
jmp 0x573ca
leaq 0x18(%rsp), %r15
movq %r13, %rdi
movl %r12d, %esi
movq %r15, %rdx
xorl %ecx, %ecx
jmp 0x57399
leaq 0x18(%rsp), %r15
movq %r13, %rdi
movl %r12d, %esi
movq %r15, %rdx
movl $0x1, %ecx
callq 0x6131b
movq %rax, %r14
movl (%r15), %eax
movq %rax, (%rbp)
jmp 0x573ca
leaq 0x18(%rsp), %rdi
callq 0x77d4
jmp 0x573c7
leaq 0x18(%rsp), %rdi
callq 0x7840
jmp 0x5734e
callq 0x781e
xorl %r14d, %r14d
movq %r14, %rax
addq $0x88, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq