// File: /workspace/github_cpp_makefile_star2_O1/tomfunkhouser[P]gaps/pkgs/png/trees.c
// Function: compress_block
local void compress_block(s, ltree, dtree)
    deflate_state *s;
    ct_data *ltree; /* literal tree */
    ct_data *dtree; /* distance tree */
{
    unsigned dist;      /* distance of matched string */
    int lc;             /* match length or unmatched char (if dist == 0) */
    unsigned lx = 0;    /* running index in l_buf */
    unsigned code;      /* the code to send */
    int extra;          /* number of extra bits to send */

    if (s->last_lit != 0) do {
        dist = s->d_buf[lx];
        lc = s->l_buf[lx++];
        if (dist == 0) {
            send_code(s, lc, ltree); /* send a literal byte */
            Tracecv(isgraph(lc), (stderr," '%c' ", lc));
        } else {
            /* Here, lc is the match length - MIN_MATCH */
            code = _length_code[lc];
            send_code(s, code+LITERALS+1, ltree); /* send the length code */
            extra = extra_lbits[code];
            if (extra != 0) {
                lc -= base_length[code];
                send_bits(s, lc, extra);       /* send the extra length bits */
            }
            dist--; /* dist is now the match distance - 1 */
            code = d_code(dist);
            Assert (code < D_CODES, "bad d_code");

            send_code(s, code, dtree);       /* send the distance code */
            extra = extra_dbits[code];
            if (extra != 0) {
                dist -= base_dist[code];
                send_bits(s, dist, extra);   /* send the extra distance bits */
            }
        } /* literal or match pair ? */

        /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
        Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
               "pendingBuf overflow");

    } while (lx < s->last_lit);

    send_code(s, END_BLOCK, ltree);
    s->last_eob_len = ltree[END_BLOCK].Len;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
cmpl $0x0, 0x16fc(%rdi)
je 0x99aa5
xorl %eax, %eax
leaq 0x18749(%rip), %r8      # 0xb1e80
leaq 0x18542(%rip), %r10     # 0xb1c80
movq 0x16f0(%rdi), %rcx
movq 0x1700(%rdi), %r9
movzwl (%r9,%rax,2), %r15d
movzbl (%rcx,%rax), %r12d
testl %r15d, %r15d
je 0x997f0
movzbl (%r12,%r8), %r13d
movzwl 0x406(%rsi,%r13,4), %ebp
movl 0x1724(%rdi), %ecx
movl $0x10, %ebx
subl %ebp, %ebx
movzwl 0x404(%rsi,%r13,4), %r11d
movl %r11d, %r9d
shll %cl, %r9d
cmpl %ebx, %ecx
jle 0x99878
orw 0x1720(%rdi), %r9w
movw %r9w, 0x1720(%rdi)
movq 0x10(%rdi), %rcx
movl 0x28(%rdi), %ebx
leal 0x1(%rbx), %r14d
movl %r14d, 0x28(%rdi)
movb %r9b, (%rcx,%rbx)
movb 0x1721(%rdi), %cl
movq 0x10(%rdi), %r9
movl 0x28(%rdi), %ebx
leal 0x1(%rbx), %r14d
movl %r14d, 0x28(%rdi)
movb %cl, (%r9,%rbx)
movl 0x1724(%rdi), %r9d
movb $0x10, %cl
subb %r9b, %cl
shrl %cl, %r11d
movw %r11w, 0x1720(%rdi)
leal (%r9,%rbp), %ecx
addl $-0x10, %ecx
jmp 0x99882
movzwl 0x2(%rsi,%r12,4), %r15d
movl 0x1724(%rdi), %ecx
movl $0x10, %ebp
subl %r15d, %ebp
movzwl (%rsi,%r12,4), %r9d
movl %r9d, %r11d
shll %cl, %r11d
cmpl %ebp, %ecx
jle 0x9991b
orw 0x1720(%rdi), %r11w
movw %r11w, 0x1720(%rdi)
movq 0x10(%rdi), %rcx
movl 0x28(%rdi), %r12d
leal 0x1(%r12), %ebp
movl %ebp, 0x28(%rdi)
movb %r11b, (%rcx,%r12)
movb 0x1721(%rdi), %cl
movq 0x10(%rdi), %r11
movl 0x28(%rdi), %r12d
leal 0x1(%r12), %ebp
movl %ebp, 0x28(%rdi)
movb %cl, (%r11,%r12)
movl 0x1724(%rdi), %r11d
movb $0x10, %cl
subb %r11b, %cl
shrl %cl, %r9d
movw %r9w, 0x1720(%rdi)
leal (%r15,%r11), %ecx
addl $-0x10, %ecx
jmp 0x99926
orw %r9w, 0x1720(%rdi)
addl %ebp, %ecx
movl %ecx, 0x1724(%rdi)
leaq -0x1c(%r13), %r9
cmpq $-0x14, %r9
jb 0x99946
leaq 0x18d53(%rip), %r9      # 0xb25f0
subl (%r9,%r13,4), %r12d
leaq 0x18bd8(%rip), %r9      # 0xb2480
movl (%r9,%r13,4), %r13d
movl $0x10, %r9d
subl %r13d, %r9d
cmpl %r9d, %ecx
jle 0x99931
movzwl %r12w, %r9d
shll %cl, %r12d
orw 0x1720(%rdi), %r12w
movw %r12w, 0x1720(%rdi)
movq 0x10(%rdi), %rcx
movl 0x28(%rdi), %r11d
leal 0x1(%r11), %ebx
movl %ebx, 0x28(%rdi)
movb %r12b, (%rcx,%r11)
movb 0x1721(%rdi), %cl
movq 0x10(%rdi), %r11
movl 0x28(%rdi), %ebx
leal 0x1(%rbx), %ebp
movl %ebp, 0x28(%rdi)
movb %cl, (%r11,%rbx)
movl 0x1724(%rdi), %r11d
movb $0x10, %cl
subb %r11b, %cl
shrl %cl, %r9d
movw %r9w, 0x1720(%rdi)
addl %r11d, %r13d
addl $-0x10, %r13d
jmp 0x9993f
orw %r11w, 0x1720(%rdi)
addl %r15d, %ecx
movl %ecx, 0x1724(%rdi)
jmp 0x99a93
shll %cl, %r12d
orw %r12w, 0x1720(%rdi)
addl %ecx, %r13d
movl %r13d, 0x1724(%rdi)
leal -0x1(%r15), %ebp
movl %ebp, %ecx
shrl $0x7, %ecx
addl $0x100, %ecx            # imm = 0x100
cmpl $0x101, %r15d           # imm = 0x101
cmovbl %ebp, %ecx
movzbl (%rcx,%r10), %r15d
movzwl 0x2(%rdx,%r15,4), %r12d
movl 0x1724(%rdi), %ecx
movl $0x10, %ebx
subl %r12d, %ebx
movzwl (%rdx,%r15,4), %r9d
movl %r9d, %r11d
shll %cl, %r11d
cmpl %ebx, %ecx
jle 0x999e3
orw 0x1720(%rdi), %r11w
movw %r11w, 0x1720(%rdi)
movq 0x10(%rdi), %rcx
movl 0x28(%rdi), %ebx
leal 0x1(%rbx), %r14d
movl %r14d, 0x28(%rdi)
movb %r11b, (%rcx,%rbx)
movb 0x1721(%rdi), %cl
movq 0x10(%rdi), %r11
movl 0x28(%rdi), %ebx
leal 0x1(%rbx), %r14d
movl %r14d, 0x28(%rdi)
movb %cl, (%r11,%rbx)
movl 0x1724(%rdi), %r11d
movb $0x10, %cl
subb %r11b, %cl
shrl %cl, %r9d
movw %r9w, 0x1720(%rdi)
leal (%r12,%r11), %ecx
addl $-0x10, %ecx
jmp 0x999ee
orw %r11w, 0x1720(%rdi)
addl %r12d, %ecx
movl %ecx, 0x1724(%rdi)
cmpb $0x4, %r15b
jb 0x99a93
leaq 0x18c6b(%rip), %r9      # 0xb2670
subl (%r9,%r15,4), %ebp
leaq 0x18af0(%rip), %r9      # 0xb2500
movl (%r9,%r15,4), %r15d
movl $0x10, %r9d
subl %r15d, %r9d
cmpl %r9d, %ecx
jle 0x99a80
movzwl %bp, %r9d
shll %cl, %ebp
orw 0x1720(%rdi), %bp
movw %bp, 0x1720(%rdi)
movq 0x10(%rdi), %rcx
movl 0x28(%rdi), %r11d
leal 0x1(%r11), %ebx
movl %ebx, 0x28(%rdi)
movb %bpl, (%rcx,%r11)
movb 0x1721(%rdi), %cl
movq 0x10(%rdi), %r11
movl 0x28(%rdi), %ebx
leal 0x1(%rbx), %ebp
movl %ebp, 0x28(%rdi)
movb %cl, (%r11,%rbx)
movl 0x1724(%rdi), %r11d
movb $0x10, %cl
subb %r11b, %cl
shrl %cl, %r9d
movw %r9w, 0x1720(%rdi)
addl %r11d, %r15d
addl $-0x10, %r15d
jmp 0x99a8c
shll %cl, %ebp
orw %bp, 0x1720(%rdi)
addl %ecx, %r15d
movl %r15d, 0x1724(%rdi)
incq %rax
movl 0x16fc(%rdi), %ecx
cmpq %rcx, %rax
jb 0x9973e
movzwl 0x402(%rsi), %eax
movl 0x1724(%rdi), %ecx
movl $0x10, %r9d
subl %eax, %r9d
movzwl 0x400(%rsi), %edx
movl %edx, %r8d
shll %cl, %r8d
orw 0x1720(%rdi), %r8w
movw %r8w, 0x1720(%rdi)
cmpl %r9d, %ecx
jle 0x99b29
movq 0x10(%rdi), %rcx
movl 0x28(%rdi), %r9d
leal 0x1(%r9), %r10d
movl %r10d, 0x28(%rdi)
movb %r8b, (%rcx,%r9)
movb 0x1721(%rdi), %cl
movq 0x10(%rdi), %r8
movl 0x28(%rdi), %r9d
leal 0x1(%r9), %r10d
movl %r10d, 0x28(%rdi)
movb %cl, (%r8,%r9)
movl 0x1724(%rdi), %r8d
movb $0x10, %cl
subb %r8b, %cl
shrl %cl, %edx
movw %dx, 0x1720(%rdi)
leal (%rax,%r8), %ecx
addl $-0x10, %ecx
jmp 0x99b2b
addl %eax, %ecx
movl %ecx, 0x1724(%rdi)
movzwl 0x402(%rsi), %eax
movl %eax, 0x171c(%rdi)
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq