// File: /workspace/github_c_makefile_star2_O0/samtools[P]htslib/cram/cram_io.c
// Function: safe_itf8_get
static int64_t safe_itf8_get(char **cp, const char *endp, int *err) {
    const unsigned char *up = (unsigned char *)*cp;

    if (endp && endp - *cp < 5 &&
        (*cp >= endp || endp - *cp < itf8_bytes[up[0]>>4])) {
        if (err) *err = 1;
        return 0;
    }

    if (up[0] < 0x80) {
        (*cp)++;
        return up[0];
    } else if (up[0] < 0xc0) {
        (*cp)+=2;
        return ((up[0] <<8) |  up[1])                           & 0x3fff;
    } else if (up[0] < 0xe0) {
        (*cp)+=3;
        return ((up[0]<<16) | (up[1]<< 8) |  up[2])             & 0x1fffff;
    } else if (up[0] < 0xf0) {
        (*cp)+=4;
        uint32_t uv = (((uint32_t)up[0]<<24) | (up[1]<<16) | (up[2]<<8) | up[3]) & 0x0fffffff;
        return (int32_t)uv;
    } else {
        (*cp)+=5;
        uint32_t uv = (((uint32_t)up[0] & 0x0f)<<28) | (up[1]<<20) | (up[2]<<12) | (up[3]<<4) | (up[4] & 0x0f);
        return (int32_t)uv;
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x7d42c
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
subq %rcx, %rax
cmpq $0x5, %rax
jge 0x7d42c
movq -0x10(%rbp), %rax
movq (%rax), %rax
cmpq -0x18(%rbp), %rax
jae 0x7d40e
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
subq %rcx, %rax
movq -0x28(%rbp), %rcx
movzbl (%rcx), %ecx
sarl $0x4, %ecx
movslq %ecx, %rdx
leaq 0x77b1b(%rip), %rcx     # 0xf4f20
movslq (%rcx,%rdx,4), %rcx
cmpq %rcx, %rax
jge 0x7d42c
cmpq $0x0, -0x20(%rbp)
je 0x7d41f
movq -0x20(%rbp), %rax
movl $0x1, (%rax)
movq $0x0, -0x8(%rbp)
jmp 0x7d59b
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x80, %eax
jge 0x7d458
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
movq %rax, -0x8(%rbp)
jmp 0x7d59b
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
cmpl $0xc0, %eax
jge 0x7d498
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x2, %rcx
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
shll $0x8, %eax
movq -0x28(%rbp), %rcx
movzbl 0x1(%rcx), %ecx
orl %ecx, %eax
andl $0x3fff, %eax           # imm = 0x3FFF
cltq
movq %rax, -0x8(%rbp)
jmp 0x7d59b
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
cmpl $0xe0, %eax
jge 0x7d4e5
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x3, %rcx
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
shll $0x10, %eax
movq -0x28(%rbp), %rcx
movzbl 0x1(%rcx), %ecx
shll $0x8, %ecx
orl %ecx, %eax
movq -0x28(%rbp), %rcx
movzbl 0x2(%rcx), %ecx
orl %ecx, %eax
andl $0x1fffff, %eax         # imm = 0x1FFFFF
cltq
movq %rax, -0x8(%rbp)
jmp 0x7d59b
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
cmpl $0xf0, %eax
jge 0x7d541
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x4, %rcx
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
shll $0x18, %eax
movq -0x28(%rbp), %rcx
movzbl 0x1(%rcx), %ecx
shll $0x10, %ecx
orl %ecx, %eax
movq -0x28(%rbp), %rcx
movzbl 0x2(%rcx), %ecx
shll $0x8, %ecx
orl %ecx, %eax
movq -0x28(%rbp), %rcx
movzbl 0x3(%rcx), %ecx
orl %ecx, %eax
andl $0xfffffff, %eax        # imm = 0xFFFFFFF
movl %eax, -0x2c(%rbp)
movslq -0x2c(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x7d59b
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x5, %rcx
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
andl $0xf, %eax
shll $0x1c, %eax
movq -0x28(%rbp), %rcx
movzbl 0x1(%rcx), %ecx
shll $0x14, %ecx
orl %ecx, %eax
movq -0x28(%rbp), %rcx
movzbl 0x2(%rcx), %ecx
shll $0xc, %ecx
orl %ecx, %eax
movq -0x28(%rbp), %rcx
movzbl 0x3(%rcx), %ecx
shll $0x4, %ecx
orl %ecx, %eax
movq -0x28(%rbp), %rcx
movzbl 0x4(%rcx), %ecx
andl $0xf, %ecx
orl %ecx, %eax
movl %eax, -0x30(%rbp)
movslq -0x30(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
popq %rbp
retq
nopw %cs:(%rax,%rax)