// File: chhylp123[P]hifiasm/Correct.cpp
// Function: iter_hpc(unsigned char*, long, long*, long, long*, long*, long)
int64_t iter_hpc(uint8_t *m, int64_t mn, int64_t *mo, int64_t rev, int64_t *so, int64_t *ho, int64_t sc)
{
    if(sc == 0) return 0;
    if(sc <= (*so)) return (*ho)-1;
    if(!rev) {
        while((*mo) < mn) {
            for (; (*mo) < mn && m[(*mo)] == 255; (*mo)++) {
                (*so) += m[(*mo)];
            }
            (*so) += m[(*mo)]; (*mo)++; (*ho)++;
            if(sc <= (*so)) return (*ho)-1;
        }        
    } else {
        while((*mo) < mn) {
            (*so) += m[mn-(*mo)-1]; (*mo)++; (*ho)++;
            for (; (*mo) < mn && m[mn-(*mo)-1] == 255; (*mo)++) {
                (*so) += m[mn-(*mo)-1];
            }
            if(sc <= (*so)) return (*ho)-1;
        }
    }

    return -1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
cmpq $0x0, 0x10(%rbp)
jne 0x4d504
movq $0x0, -0x8(%rbp)
jmp 0x4d6f6
movq 0x10(%rbp), %rax
movq -0x30(%rbp), %rcx
cmpq (%rcx), %rax
jg 0x4d525
movq -0x38(%rbp), %rax
movq (%rax), %rax
subq $0x1, %rax
movq %rax, -0x8(%rbp)
jmp 0x4d6f6
cmpq $0x0, -0x28(%rbp)
jne 0x4d607
jmp 0x4d532
movq -0x20(%rbp), %rax
movq (%rax), %rax
cmpq -0x18(%rbp), %rax
jge 0x4d602
jmp 0x4d545
movq -0x20(%rbp), %rax
movq (%rax), %rcx
xorl %eax, %eax
cmpq -0x18(%rbp), %rcx
movb %al, -0x39(%rbp)
jge 0x4d571
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movq (%rcx), %rcx
movzbl (%rax,%rcx), %eax
cmpl $0xff, %eax
sete %al
movb %al, -0x39(%rbp)
movb -0x39(%rbp), %al
testb $0x1, %al
jne 0x4d57a
jmp 0x4d5a5
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movq (%rcx), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
movq -0x30(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4d545
movq -0x10(%rbp), %rax
movq -0x20(%rbp), %rcx
movq (%rcx), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
movq -0x30(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x38(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq 0x10(%rbp), %rax
movq -0x30(%rbp), %rcx
cmpq (%rcx), %rax
jg 0x4d5fd
movq -0x38(%rbp), %rax
movq (%rax), %rax
subq $0x1, %rax
movq %rax, -0x8(%rbp)
jmp 0x4d6f6
jmp 0x4d532
jmp 0x4d6ee
jmp 0x4d609
movq -0x20(%rbp), %rax
movq (%rax), %rax
cmpq -0x18(%rbp), %rax
jge 0x4d6ec
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rdx
subq (%rdx), %rcx
subq $0x1, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
movq -0x30(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x38(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rcx
xorl %eax, %eax
cmpq -0x18(%rbp), %rcx
movb %al, -0x3a(%rbp)
jge 0x4d68d
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rdx
subq (%rdx), %rcx
subq $0x1, %rcx
movzbl (%rax,%rcx), %eax
cmpl $0xff, %eax
sete %al
movb %al, -0x3a(%rbp)
movb -0x3a(%rbp), %al
testb $0x1, %al
jne 0x4d696
jmp 0x4d6c9
movq -0x10(%rbp), %rax
movq -0x18(%rbp), %rcx
movq -0x20(%rbp), %rdx
subq (%rdx), %rcx
subq $0x1, %rcx
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
movq -0x30(%rbp), %rax
addq (%rax), %rcx
movq %rcx, (%rax)
movq -0x20(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq %rcx, (%rax)
jmp 0x4d659
movq 0x10(%rbp), %rax
movq -0x30(%rbp), %rcx
cmpq (%rcx), %rax
jg 0x4d6e7
movq -0x38(%rbp), %rax
movq (%rax), %rax
subq $0x1, %rax
movq %rax, -0x8(%rbp)
jmp 0x4d6f6
jmp 0x4d609
jmp 0x4d6ee
movq $-0x1, -0x8(%rbp)
movq -0x8(%rbp), %rax
popq %rbp
retq
nopl (%rax)