// File: /workspace/github_cpp_makefile_star2_O3/sisong[P]ApkDiffPatch/zlib1.3.1/trees.c
// Function: compress_block
local void compress_block(deflate_state *s, const ct_data *ltree,
                          const ct_data *dtree) {
    unsigned dist;      /* distance of matched string */
    int lc;             /* match length or unmatched char (if dist == 0) */
    unsigned sx = 0;    /* running index in symbol buffers */
    unsigned code;      /* the code to send */
    int extra;          /* number of extra bits to send */

    if (s->sym_next != 0) do {
#ifdef LIT_MEM
        dist = s->d_buf[sx];
        lc = s->l_buf[sx++];
#else
        dist = s->sym_buf[sx++] & 0xff;
        dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8;
        lc = s->sym_buf[sx++];
#endif
        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 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 -= (unsigned)base_dist[code];
                send_bits(s, dist, extra);   /* send the extra distance bits */
            }
        } /* literal or match pair ? */

        /* Check for no overlay of pending_buf on needed symbols */
#ifdef LIT_MEM
        Assert(s->pending < 2 * (s->lit_bufsize + sx), "pendingBuf overflow");
#else
        Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow");
#endif

    } while (sx < s->sym_next);

    send_code(s, END_BLOCK, ltree);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
cmpl $0x0, 0x170c(%rdi)
je 0x527b7
xorl %eax, %eax
leaq 0x13e90(%rip), %r8      # 0x662e0
leaq 0x13c89(%rip), %r10     # 0x660e0
movq 0x1700(%rdi), %rcx
leal 0x1(%rax), %r9d
movl %eax, %r11d
movzbl (%rcx,%r11), %r11d
leal 0x2(%rax), %r12d
movzbl (%rcx,%r9), %r15d
shll $0x8, %r15d
orl %r11d, %r15d
movzbl (%rcx,%r12), %r12d
je 0x52517
movzbl (%r12,%r8), %r13d
movzwl 0x406(%rsi,%r13,4), %r9d
movl 0x1734(%rdi), %ecx
movl $0x10, %ebx
subl %r9d, %ebx
movzwl 0x404(%rsi,%r13,4), %r11d
movl %r11d, %ebp
shll %cl, %ebp
orw 0x1730(%rdi), %bp
movw %bp, 0x1730(%rdi)
cmpl %ebx, %ecx
jle 0x5259f
movq 0x10(%rdi), %rcx
movq 0x28(%rdi), %rbx
leaq 0x1(%rbx), %r14
movq %r14, 0x28(%rdi)
movb %bpl, (%rcx,%rbx)
movb 0x1731(%rdi), %cl
movq 0x10(%rdi), %rbx
movq 0x28(%rdi), %r14
leaq 0x1(%r14), %rbp
movq %rbp, 0x28(%rdi)
movb %cl, (%rbx,%r14)
movl 0x1734(%rdi), %ebx
movb $0x10, %cl
subb %bl, %cl
shrl %cl, %r11d
movw %r11w, 0x1730(%rdi)
leal (%r9,%rbx), %ecx
addl $-0x10, %ecx
movl %r11d, %ebp
jmp 0x525a2
movzwl 0x2(%rsi,%r12,4), %r9d
movl 0x1734(%rdi), %ecx
movl $0x10, %r15d
subl %r9d, %r15d
movzwl (%rsi,%r12,4), %r11d
movl %r11d, %ebp
shll %cl, %ebp
orw 0x1730(%rdi), %bp
movw %bp, 0x1730(%rdi)
cmpl %r15d, %ecx
jle 0x5263c
movq 0x10(%rdi), %rcx
movq 0x28(%rdi), %r15
leaq 0x1(%r15), %r12
movq %r12, 0x28(%rdi)
movb %bpl, (%rcx,%r15)
movb 0x1731(%rdi), %cl
movq 0x10(%rdi), %r15
movq 0x28(%rdi), %r12
leaq 0x1(%r12), %r13
movq %r13, 0x28(%rdi)
movb %cl, (%r15,%r12)
movl 0x1734(%rdi), %r15d
movb $0x10, %cl
subb %r15b, %cl
shrl %cl, %r11d
movw %r11w, 0x1730(%rdi)
leal (%r9,%r15), %ecx
addl $-0x10, %ecx
jmp 0x527a0
addl %r9d, %ecx
movl %ecx, 0x1734(%rdi)
leaq -0x1c(%r13), %r9
cmpq $-0x14, %r9
jb 0x5265d
leaq 0x14493(%rip), %r9      # 0x66a50
subl (%r9,%r13,4), %r12d
leaq 0x14318(%rip), %r9      # 0x668e0
movl (%r9,%r13,4), %r13d
movl $0x10, %r9d
subl %r13d, %r9d
cmpl %r9d, %ecx
jle 0x52644
movzwl %r12w, %r9d
shll %cl, %r12d
orl %r12d, %ebp
movw %bp, 0x1730(%rdi)
movq 0x10(%rdi), %rcx
movq 0x28(%rdi), %r11
leaq 0x1(%r11), %rbx
movq %rbx, 0x28(%rdi)
movb %bpl, (%rcx,%r11)
movb 0x1731(%rdi), %cl
movq 0x10(%rdi), %r11
movq 0x28(%rdi), %rbx
leaq 0x1(%rbx), %r14
movq %r14, 0x28(%rdi)
movb %cl, (%r11,%rbx)
movl 0x1734(%rdi), %r11d
movb $0x10, %cl
subb %r11b, %cl
shrl %cl, %r9d
movw %r9w, 0x1730(%rdi)
leal (%r11,%r13), %ecx
addl $-0x10, %ecx
movl %r9d, %ebp
jmp 0x52657
addl %r9d, %ecx
jmp 0x527a0
shll %cl, %r12d
orl %r12d, %ebp
movw %bp, 0x1730(%rdi)
addl %ecx, %r13d
movl %r13d, %ecx
movl %ecx, 0x1734(%rdi)
leal -0x1(%r15), %r12d
movl %r12d, %r9d
shrl $0x7, %r9d
addl $0x100, %r9d            # imm = 0x100
cmpl $0x101, %r15d           # imm = 0x101
cmovbl %r12d, %r9d
movzbl (%r9,%r10), %r15d
movzwl 0x2(%rdx,%r15,4), %r13d
movl $0x10, %r11d
movzwl (%rdx,%r15,4), %r9d
movl %r9d, %ebx
shll %cl, %ebx
subl %r13d, %r11d
orl %ebx, %ebp
movw %bp, 0x1730(%rdi)
cmpl %r11d, %ecx
jle 0x526f7
movq 0x10(%rdi), %rcx
movq 0x28(%rdi), %r11
leaq 0x1(%r11), %rbx
movq %rbx, 0x28(%rdi)
movb %bpl, (%rcx,%r11)
movb 0x1731(%rdi), %cl
movq 0x10(%rdi), %r11
movq 0x28(%rdi), %rbx
leaq 0x1(%rbx), %r14
movq %r14, 0x28(%rdi)
movb %cl, (%r11,%rbx)
movl 0x1734(%rdi), %r11d
movb $0x10, %cl
subb %r11b, %cl
shrl %cl, %r9d
movw %r9w, 0x1730(%rdi)
leal (%r11,%r13), %ecx
addl $-0x10, %ecx
movl %r9d, %ebp
jmp 0x526fa
addl %r13d, %ecx
movl %ecx, 0x1734(%rdi)
cmpb $0x4, %r15b
jb 0x527a6
leaq 0x143bf(%rip), %r9      # 0x66ad0
subl (%r9,%r15,4), %r12d
leaq 0x14244(%rip), %r9      # 0x66960
movl (%r9,%r15,4), %r15d
movl $0x10, %r9d
subl %r15d, %r9d
cmpl %r9d, %ecx
jle 0x5278d
movzwl %r12w, %r9d
shll %cl, %r12d
orl %r12d, %ebp
movw %bp, 0x1730(%rdi)
movq 0x10(%rdi), %rcx
movq 0x28(%rdi), %r11
leaq 0x1(%r11), %rbx
movq %rbx, 0x28(%rdi)
movb %bpl, (%rcx,%r11)
movb 0x1731(%rdi), %cl
movq 0x10(%rdi), %r11
movq 0x28(%rdi), %rbx
leaq 0x1(%rbx), %r14
movq %r14, 0x28(%rdi)
movb %cl, (%r11,%rbx)
movl 0x1734(%rdi), %r11d
movb $0x10, %cl
subb %r11b, %cl
shrl %cl, %r9d
movw %r9w, 0x1730(%rdi)
leal (%r15,%r11), %ecx
addl $-0x10, %ecx
jmp 0x527a0
shll %cl, %r12d
orl %r12d, %ebp
movw %bp, 0x1730(%rdi)
addl %ecx, %r15d
movl %r15d, %ecx
movl %ecx, 0x1734(%rdi)
addl $0x3, %eax
cmpl 0x170c(%rdi), %eax
jb 0x52457
jmp 0x527bd
movl 0x1734(%rdi), %ecx
movzwl 0x402(%rsi), %eax
movl $0x10, %r8d
subl %eax, %r8d
movzwl 0x400(%rsi), %edx
movl %edx, %esi
shll %cl, %esi
orw 0x1730(%rdi), %si
movw %si, 0x1730(%rdi)
cmpl %r8d, %ecx
jle 0x52835
movq 0x10(%rdi), %rcx
movq 0x28(%rdi), %r8
leaq 0x1(%r8), %r9
movq %r9, 0x28(%rdi)
movb %sil, (%rcx,%r8)
movb 0x1731(%rdi), %cl
movq 0x10(%rdi), %rsi
movq 0x28(%rdi), %r8
leaq 0x1(%r8), %r9
movq %r9, 0x28(%rdi)
movb %cl, (%rsi,%r8)
movl 0x1734(%rdi), %esi
movb $0x10, %cl
subb %sil, %cl
shrl %cl, %edx
movw %dx, 0x1730(%rdi)
leal (%rax,%rsi), %ecx
addl $-0x10, %ecx
jmp 0x52837
addl %eax, %ecx
movl %ecx, 0x1734(%rdi)
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq