// File: /workspace/github_c_makefile_star2_O0/enzo1982[P]smooth/libraries/libwebp/src/dec/frame_dec.c
// Function: FinishRow
static int FinishRow(void* arg1, void* arg2) {
  VP8Decoder* const dec = (VP8Decoder*)arg1;
  VP8Io* const io = (VP8Io*)arg2;
  int ok = 1;
  const VP8ThreadContext* const ctx = &dec->thread_ctx_;
  const int cache_id = ctx->id_;
  const int extra_y_rows = kFilterExtraRows[dec->filter_type_];
  const int ysize = extra_y_rows * dec->cache_y_stride_;
  const int uvsize = (extra_y_rows / 2) * dec->cache_uv_stride_;
  const int y_offset = cache_id * 16 * dec->cache_y_stride_;
  const int uv_offset = cache_id * 8 * dec->cache_uv_stride_;
  uint8_t* const ydst = dec->cache_y_ - ysize + y_offset;
  uint8_t* const udst = dec->cache_u_ - uvsize + uv_offset;
  uint8_t* const vdst = dec->cache_v_ - uvsize + uv_offset;
  const int mb_y = ctx->mb_y_;
  const int is_first_row = (mb_y == 0);
  const int is_last_row = (mb_y >= dec->br_mb_y_ - 1);

  if (dec->mt_method_ == 2) {
    ReconstructRow(dec, ctx);
  }

  if (ctx->filter_row_) {
    FilterRow(dec);
  }

  if (dec->dither_) {
    DitherRow(dec);
  }

  if (io->put != NULL) {
    int y_start = MACROBLOCK_VPOS(mb_y);
    int y_end = MACROBLOCK_VPOS(mb_y + 1);
    if (!is_first_row) {
      y_start -= extra_y_rows;
      io->y = ydst;
      io->u = udst;
      io->v = vdst;
    } else {
      io->y = dec->cache_y_ + y_offset;
      io->u = dec->cache_u_ + uv_offset;
      io->v = dec->cache_v_ + uv_offset;
    }

    if (!is_last_row) {
      y_end -= extra_y_rows;
    }
    if (y_end > io->crop_bottom) {
      y_end = io->crop_bottom;    // make sure we don't overflow on last row.
    }
    // If dec->alpha_data_ is not NULL, we have some alpha plane present.
    io->a = NULL;
    if (dec->alpha_data_ != NULL && y_start < y_end) {
      io->a = VP8DecompressAlphaRows(dec, io, y_start, y_end - y_start);
      if (io->a == NULL) {
        return VP8SetError(dec, VP8_STATUS_BITSTREAM_ERROR,
                           "Could not decode alpha data.");
      }
    }
    if (y_start < io->crop_top) {
      const int delta_y = io->crop_top - y_start;
      y_start = io->crop_top;
      assert(!(delta_y & 1));
      io->y += dec->cache_y_stride_ * delta_y;
      io->u += dec->cache_uv_stride_ * (delta_y >> 1);
      io->v += dec->cache_uv_stride_ * (delta_y >> 1);
      if (io->a != NULL) {
        io->a += io->width * delta_y;
      }
    }
    if (y_start < y_end) {
      io->y += io->crop_left;
      io->u += io->crop_left >> 1;
      io->v += io->crop_left >> 1;
      if (io->a != NULL) {
        io->a += io->crop_left;
      }
      io->mb_y = y_start - io->crop_top;
      io->mb_w = io->crop_right - io->crop_left;
      io->mb_h = y_end - y_start;
      ok = io->put(io);
    }
  }
  // rotate top samples if needed
  if (cache_id + 1 == dec->num_caches_) {
    if (!is_last_row) {
      memcpy(dec->cache_y_ - ysize, ydst + 16 * dec->cache_y_stride_, ysize);
      memcpy(dec->cache_u_ - uvsize, udst + 8 * dec->cache_uv_stride_, uvsize);
      memcpy(dec->cache_v_ - uvsize, vdst + 8 * dec->cache_uv_stride_, uvsize);
    }
  }

  return ok;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x28(%rbp)
movl $0x1, -0x2c(%rbp)
movq -0x20(%rbp), %rax
addq $0xd8, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x3c(%rbp)
movq -0x20(%rbp), %rax
movslq 0xb68(%rax), %rcx
leaq 0x7e3d9(%rip), %rax     # 0x1bccdc
movzbl (%rax,%rcx), %eax
movl %eax, -0x40(%rbp)
movl -0x40(%rbp), %eax
movq -0x20(%rbp), %rcx
imull 0xb40(%rcx), %eax
movl %eax, -0x44(%rbp)
movl -0x40(%rbp), %eax
movl $0x2, %ecx
cltd
idivl %ecx
movq -0x20(%rbp), %rcx
imull 0xb44(%rcx), %eax
movl %eax, -0x48(%rbp)
movl -0x3c(%rbp), %eax
shll $0x4, %eax
movq -0x20(%rbp), %rcx
imull 0xb40(%rcx), %eax
movl %eax, -0x4c(%rbp)
movl -0x3c(%rbp), %eax
shll $0x3, %eax
movq -0x20(%rbp), %rcx
imull 0xb44(%rcx), %eax
movl %eax, -0x50(%rbp)
movq -0x20(%rbp), %rax
movq 0xb28(%rax), %rax
movslq -0x44(%rbp), %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movslq -0x4c(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x20(%rbp), %rax
movq 0xb30(%rax), %rax
movslq -0x48(%rbp), %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movslq -0x50(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq -0x20(%rbp), %rax
movq 0xb38(%rax), %rax
movslq -0x48(%rbp), %rdx
xorl %ecx, %ecx
subq %rdx, %rcx
addq %rcx, %rax
movslq -0x50(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
movq -0x38(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x6c(%rbp)
cmpl $0x0, -0x6c(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x70(%rbp)
movl -0x6c(%rbp), %eax
movq -0x20(%rbp), %rcx
movl 0x1ac(%rcx), %ecx
subl $0x1, %ecx
cmpl %ecx, %eax
setge %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x74(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x2, 0xc8(%rax)
jne 0x13ea12
movq -0x20(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x13e230
movq -0x38(%rbp), %rax
cmpl $0x0, 0x8(%rax)
je 0x13ea25
movq -0x20(%rbp), %rdi
callq 0x13fb80
movq -0x20(%rbp), %rax
cmpl $0x0, 0x338(%rax)
je 0x13ea3b
movq -0x20(%rbp), %rdi
callq 0x13fc10
movq -0x28(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0x13ed4e
movl -0x6c(%rbp), %eax
shll $0x4, %eax
movl %eax, -0x78(%rbp)
movl -0x6c(%rbp), %eax
addl $0x1, %eax
shll $0x4, %eax
movl %eax, -0x7c(%rbp)
cmpl $0x0, -0x70(%rbp)
jne 0x13ea96
movl -0x40(%rbp), %ecx
movl -0x78(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x78(%rbp)
movq -0x58(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x60(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x68(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x28(%rax)
jmp 0x13eae4
movq -0x20(%rbp), %rax
movq 0xb28(%rax), %rcx
movslq -0x4c(%rbp), %rax
addq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movq 0xb30(%rax), %rcx
movslq -0x50(%rbp), %rax
addq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x20(%rbp), %rax
movq 0xb38(%rax), %rcx
movslq -0x50(%rbp), %rax
addq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x28(%rax)
cmpl $0x0, -0x74(%rbp)
jne 0x13eaf5
movl -0x40(%rbp), %ecx
movl -0x7c(%rbp), %eax
subl %ecx, %eax
movl %eax, -0x7c(%rbp)
movl -0x7c(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x84(%rcx), %eax
jle 0x13eb11
movq -0x28(%rbp), %rax
movl 0x84(%rax), %eax
movl %eax, -0x7c(%rbp)
movq -0x28(%rbp), %rax
movq $0x0, 0x98(%rax)
movq -0x20(%rbp), %rax
cmpq $0x0, 0xb98(%rax)
je 0x13eb87
movl -0x78(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x13eb87
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
movl -0x78(%rbp), %edx
movl -0x7c(%rbp), %ecx
subl -0x78(%rbp), %ecx
callq 0x184800
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x98(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x98(%rax)
jne 0x13eb85
movq -0x20(%rbp), %rdi
movl $0x3, %esi
leaq 0x7df0b(%rip), %rdx     # 0x1bca83
callq 0x142580
movl %eax, -0x4(%rbp)
jmp 0x13ee18
jmp 0x13eb87
movl -0x78(%rbp), %eax
movq -0x28(%rbp), %rcx
cmpl 0x80(%rcx), %eax
jge 0x13ec7d
movq -0x28(%rbp), %rax
movl 0x80(%rax), %eax
subl -0x78(%rbp), %eax
movl %eax, -0x80(%rbp)
movq -0x28(%rbp), %rax
movl 0x80(%rax), %eax
movl %eax, -0x78(%rbp)
movl -0x80(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x13ebc4
jmp 0x13ebe3
leaq 0x7ded5(%rip), %rdi     # 0x1bcaa0
leaq 0x7dd6a(%rip), %rsi     # 0x1bc93c
movl $0x1d0, %edx            # imm = 0x1D0
leaq 0x7ded1(%rip), %rcx     # 0x1bcaaf
callq 0x598a0
movq -0x20(%rbp), %rax
movl 0xb40(%rax), %edx
imull -0x80(%rbp), %edx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x18(%rax)
movq -0x20(%rbp), %rax
movl 0xb44(%rax), %edx
movl -0x80(%rbp), %eax
sarl %eax
imull %eax, %edx
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x20(%rax)
movq -0x20(%rbp), %rax
movl 0xb44(%rax), %edx
movl -0x80(%rbp), %eax
sarl %eax
imull %eax, %edx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x98(%rax)
je 0x13ec7b
movq -0x28(%rbp), %rax
movl (%rax), %edx
imull -0x80(%rbp), %edx
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x98(%rax)
jmp 0x13ec7d
movl -0x78(%rbp), %eax
cmpl -0x7c(%rbp), %eax
jge 0x13ed4c
movq -0x28(%rbp), %rax
movl 0x78(%rax), %edx
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
movl 0x78(%rax), %edx
sarl %edx
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movl 0x78(%rax), %edx
sarl %edx
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x98(%rax)
je 0x13ed05
movq -0x28(%rbp), %rax
movl 0x78(%rax), %edx
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, 0x98(%rax)
movl -0x78(%rbp), %ecx
movq -0x28(%rbp), %rax
subl 0x80(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x28(%rbp), %rax
movl 0x7c(%rax), %ecx
movq -0x28(%rbp), %rax
subl 0x78(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0xc(%rax)
movl -0x7c(%rbp), %ecx
subl -0x78(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x40(%rax), %rax
movq -0x28(%rbp), %rdi
callq *%rax
movl %eax, -0x2c(%rbp)
jmp 0x13ed4e
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movq -0x20(%rbp), %rcx
cmpl 0xd0(%rcx), %eax
jne 0x13ee12
cmpl $0x0, -0x74(%rbp)
jne 0x13ee10
movq -0x20(%rbp), %rax
movq 0xb28(%rax), %rdi
movslq -0x44(%rbp), %rcx
xorl %eax, %eax
subq %rcx, %rax
addq %rax, %rdi
movq -0x58(%rbp), %rsi
movq -0x20(%rbp), %rax
movl 0xb40(%rax), %eax
shll $0x4, %eax
cltq
addq %rax, %rsi
movslq -0x44(%rbp), %rdx
callq 0x593a0
movq -0x20(%rbp), %rax
movq 0xb30(%rax), %rdi
movslq -0x48(%rbp), %rcx
xorl %eax, %eax
subq %rcx, %rax
addq %rax, %rdi
movq -0x60(%rbp), %rsi
movq -0x20(%rbp), %rax
movl 0xb44(%rax), %eax
shll $0x3, %eax
cltq
addq %rax, %rsi
movslq -0x48(%rbp), %rdx
callq 0x593a0
movq -0x20(%rbp), %rax
movq 0xb38(%rax), %rdi
movslq -0x48(%rbp), %rcx
xorl %eax, %eax
subq %rcx, %rax
addq %rax, %rdi
movq -0x68(%rbp), %rsi
movq -0x20(%rbp), %rax
movl 0xb44(%rax), %eax
shll $0x3, %eax
cltq
addq %rax, %rsi
movslq -0x48(%rbp), %rdx
callq 0x593a0
jmp 0x13ee12
movl -0x2c(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)