// File: /workspace/github_c_makefile_star2_O0/madler[P]pigz/zopfli/src/zopfli/lz77.c
// Function: ZopfliStoreLitLenDist
void ZopfliStoreLitLenDist(unsigned short length, unsigned short dist,
                           size_t pos, ZopfliLZ77Store* store) {
  size_t i;
  /* Needed for using ZOPFLI_APPEND_DATA multiple times. */
  size_t origsize = store->size;
  size_t llstart = ZOPFLI_NUM_LL * (origsize / ZOPFLI_NUM_LL);
  size_t dstart = ZOPFLI_NUM_D * (origsize / ZOPFLI_NUM_D);

  /* Everytime the index wraps around, a new cumulative histogram is made: we're
  keeping one histogram value per LZ77 symbol rather than a full histogram for
  each to save memory. */
  if (origsize % ZOPFLI_NUM_LL == 0) {
    size_t llsize = origsize;
    for (i = 0; i < ZOPFLI_NUM_LL; i++) {
      ZOPFLI_APPEND_DATA(
          origsize == 0 ? 0 : store->ll_counts[origsize - ZOPFLI_NUM_LL + i],
          &store->ll_counts, &llsize);
    }
  }
  if (origsize % ZOPFLI_NUM_D == 0) {
    size_t dsize = origsize;
    for (i = 0; i < ZOPFLI_NUM_D; i++) {
      ZOPFLI_APPEND_DATA(
          origsize == 0 ? 0 : store->d_counts[origsize - ZOPFLI_NUM_D + i],
          &store->d_counts, &dsize);
    }
  }

  ZOPFLI_APPEND_DATA(length, &store->litlens, &store->size);
  store->size = origsize;
  ZOPFLI_APPEND_DATA(dist, &store->dists, &store->size);
  store->size = origsize;
  ZOPFLI_APPEND_DATA(pos, &store->pos, &store->size);
  assert(length < 259);

  if (dist == 0) {
    store->size = origsize;
    ZOPFLI_APPEND_DATA(length, &store->ll_symbol, &store->size);
    store->size = origsize;
    ZOPFLI_APPEND_DATA(0, &store->d_symbol, &store->size);
    store->ll_counts[llstart + length]++;
  } else {
    store->size = origsize;
    ZOPFLI_APPEND_DATA(ZopfliGetLengthSymbol(length),
                       &store->ll_symbol, &store->size);
    store->size = origsize;
    ZOPFLI_APPEND_DATA(ZopfliGetDistSymbol(dist),
                       &store->d_symbol, &store->size);
    store->ll_counts[llstart + ZopfliGetLengthSymbol(length)]++;
    store->d_counts[dstart + ZopfliGetDistSymbol(dist)]++;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xc0, %rsp
movw %si, %ax
movw %di, %si
movw %si, -0x2(%rbp)
movw %ax, -0x4(%rbp)
movq %rdx, -0x10(%rbp)
movq %rcx, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movl $0x120, %ecx            # imm = 0x120
xorl %edx, %edx
divq %rcx
imulq $0x120, %rax, %rax      # imm = 0x120
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
shrq $0x5, %rax
shlq $0x5, %rax
movq %rax, -0x38(%rbp)
movq -0x28(%rbp), %rax
movl $0x120, %ecx            # imm = 0x120
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
jne 0x17091
movq -0x28(%rbp), %rax
movq %rax, -0x40(%rbp)
movq $0x0, -0x20(%rbp)
cmpq $0x120, -0x20(%rbp)     # imm = 0x120
jae 0x1708f
movq -0x40(%rbp), %rax
movq -0x40(%rbp), %rcx
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x17030
cmpq $0x0, -0x40(%rbp)
jne 0x17008
movl $0x8, %edi
callq 0x33d0
movq %rax, -0x50(%rbp)
jmp 0x17024
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x40(%rbp), %rsi
shlq %rsi
shlq $0x3, %rsi
callq 0x3430
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x38(%rax)
cmpq $0x0, -0x28(%rbp)
jne 0x1703f
xorl %eax, %eax
movq %rax, -0x58(%rbp)
jmp 0x1705e
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x28(%rbp), %rcx
subq $0x120, %rcx            # imm = 0x120
addq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rdx
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x40(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x16fce
jmp 0x17091
movq -0x28(%rbp), %rax
andq $0x1f, %rax
cmpq $0x0, %rax
jne 0x17170
movq -0x28(%rbp), %rax
movq %rax, -0x48(%rbp)
movq $0x0, -0x20(%rbp)
cmpq $0x20, -0x20(%rbp)
jae 0x1716e
movq -0x48(%rbp), %rax
movq -0x48(%rbp), %rcx
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x17112
cmpq $0x0, -0x48(%rbp)
jne 0x170ea
movl $0x8, %edi
callq 0x33d0
movq %rax, -0x60(%rbp)
jmp 0x17106
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x48(%rbp), %rsi
shlq %rsi
shlq $0x3, %rsi
callq 0x3430
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x40(%rax)
cmpq $0x0, -0x28(%rbp)
jne 0x17121
xorl %eax, %eax
movq %rax, -0x68(%rbp)
jmp 0x1713d
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x28(%rbp), %rcx
subq $0x20, %rcx
addq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rdx
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x48(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x170b3
jmp 0x17170
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x171d1
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x171a8
movl $0x2, %edi
callq 0x33d0
movq %rax, -0x70(%rbp)
jmp 0x171c6
movq -0x18(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
shlq %rsi
shlq %rsi
callq 0x3430
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movw -0x2(%rbp), %dx
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movw %dx, (%rax,%rcx,2)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x17267
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x1723c
movl $0x2, %edi
callq 0x33d0
movq %rax, -0x78(%rbp)
jmp 0x1725b
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
shlq %rsi
shlq %rsi
callq 0x3430
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movw -0x4(%rbp), %dx
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movw %dx, (%rax,%rcx,2)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x172ff
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x172d3
movl $0x8, %edi
callq 0x33d0
movq %rax, -0x80(%rbp)
jmp 0x172f3
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
shlq %rsi
shlq $0x3, %rsi
callq 0x3430
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq %rdx, (%rax,%rcx,8)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movzwl -0x2(%rbp), %eax
cmpl $0x103, %eax            # imm = 0x103
jge 0x17334
jmp 0x17353
leaq 0x7115(%rip), %rdi      # 0x1e450
leaq 0x711b(%rip), %rsi      # 0x1e45d
movl $0x83, %edx
leaq 0x7128(%rip), %rcx      # 0x1e476
callq 0x3220
movzwl -0x4(%rbp), %eax
cmpl $0x0, %eax
jne 0x174c2
movq -0x28(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x173d8
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x173a7
movl $0x2, %edi
callq 0x33d0
movq %rax, -0x88(%rbp)
jmp 0x173c9
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
shlq %rsi
shlq %rsi
callq 0x3430
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movw -0x2(%rbp), %dx
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movw %dx, (%rax,%rcx,2)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x17478
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x17447
movl $0x2, %edi
callq 0x33d0
movq %rax, -0x90(%rbp)
jmp 0x17469
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
shlq %rsi
shlq %rsi
callq 0x3430
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movw $0x0, (%rax,%rcx,2)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x30(%rbp), %rcx
movzwl -0x2(%rbp), %edx
addq %rdx, %rcx
movq (%rax,%rcx,8), %rdx
addq $0x1, %rdx
movq %rdx, (%rax,%rcx,8)
jmp 0x1769c
movq -0x28(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x1753a
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x17509
movl $0x2, %edi
callq 0x33d0
movq %rax, -0x98(%rbp)
jmp 0x1752b
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
shlq %rsi
shlq %rsi
callq 0x3430
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x28(%rax)
movzwl -0x2(%rbp), %edi
callq 0x1bb70
movw %ax, %dx
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movw %dx, (%rax,%rcx,2)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
subq $0x1, %rcx
andq %rcx, %rax
cmpq $0x0, %rax
jne 0x175e2
movq -0x18(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x175b1
movl $0x2, %edi
callq 0x33d0
movq %rax, -0xa0(%rbp)
jmp 0x175d3
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
shlq %rsi
shlq %rsi
callq 0x3430
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x30(%rax)
movzwl -0x4(%rbp), %edi
callq 0x1bae0
movw %ax, %dx
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
movw %dx, (%rax,%rcx,2)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x38(%rax), %rax
movq %rax, -0xb8(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0xc0(%rbp)
movzwl -0x2(%rbp), %edi
callq 0x1bb70
movq -0xc0(%rbp), %rcx
movl %eax, %edx
movq -0xb8(%rbp), %rax
movslq %edx, %rdx
addq %rdx, %rcx
movq (%rax,%rcx,8), %rdx
addq $0x1, %rdx
movq %rdx, (%rax,%rcx,8)
movq -0x18(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0xa8(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0xb0(%rbp)
movzwl -0x4(%rbp), %edi
callq 0x1bae0
movq -0xb0(%rbp), %rcx
movl %eax, %edx
movq -0xa8(%rbp), %rax
movslq %edx, %rdx
addq %rdx, %rcx
movq (%rax,%rcx,8), %rdx
addq $0x1, %rdx
movq %rdx, (%rax,%rcx,8)
addq $0xc0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)