// File: /workspace/github_c_makefile_star2_O0/enzo1982[P]smooth/libraries/libwebp/src/dsp/filters_sse2.c
// Function: VerticalUnfilter_SSE2
static void VerticalUnfilter_SSE2(const uint8_t* prev, const uint8_t* in,
                                  uint8_t* out, int width) {
  if (prev == NULL) {
    HorizontalUnfilter_SSE2(NULL, in, out, width);
  } else {
    int i;
    const int max_pos = width & ~31;
    assert(width >= 0);
    for (i = 0; i < max_pos; i += 32) {
      const __m128i A0 = _mm_loadu_si128((const __m128i*)&in[i +  0]);
      const __m128i A1 = _mm_loadu_si128((const __m128i*)&in[i + 16]);
      const __m128i B0 = _mm_loadu_si128((const __m128i*)&prev[i +  0]);
      const __m128i B1 = _mm_loadu_si128((const __m128i*)&prev[i + 16]);
      const __m128i C0 = _mm_add_epi8(A0, B0);
      const __m128i C1 = _mm_add_epi8(A1, B1);
      _mm_storeu_si128((__m128i*)&out[i +  0], C0);
      _mm_storeu_si128((__m128i*)&out[i + 16], C1);
    }
    for (; i < width; ++i) out[i] = (uint8_t)(in[i] + prev[i]);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0xa8(%rbp)
movq %rsi, -0xb0(%rbp)
movq %rdx, -0xb8(%rbp)
movl %ecx, -0xbc(%rbp)
cmpq $0x0, -0xa8(%rbp)
jne 0x163972
movq -0xb0(%rbp), %rsi
movq -0xb8(%rbp), %rdx
movl -0xbc(%rbp), %ecx
xorl %eax, %eax
movl %eax, %edi
callq 0x163610
jmp 0x163bb3
movl -0xbc(%rbp), %eax
andl $-0x20, %eax
movl %eax, -0xc4(%rbp)
cmpl $0x0, -0xbc(%rbp)
jl 0x16398c
jmp 0x1639ab
leaq 0x5ced6(%rip), %rdi     # 0x1c0869
leaq 0x5ceda(%rip), %rsi     # 0x1c0874
movl $0xfe, %edx
leaq 0x5cee5(%rip), %rcx     # 0x1c088b
callq 0x598a0
movl $0x0, -0xc0(%rbp)
movl -0xc0(%rbp), %eax
cmpl -0xc4(%rbp), %eax
jge 0x163b57
movq -0xb0(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0xe0(%rbp)
movq -0xb0(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x10, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0xf0(%rbp)
movq -0xa8(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0x100(%rbp)
movq -0xa8(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x10, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0x110(%rbp)
movdqa -0xe0(%rbp), %xmm1
movdqa -0x100(%rbp), %xmm0
movdqa %xmm1, -0x70(%rbp)
movdqa %xmm0, -0x80(%rbp)
movdqa -0x70(%rbp), %xmm0
movdqa -0x80(%rbp), %xmm1
paddb %xmm1, %xmm0
movdqa %xmm0, -0x120(%rbp)
movdqa -0xf0(%rbp), %xmm1
movdqa -0x110(%rbp), %xmm0
movdqa %xmm1, -0x90(%rbp)
movdqa %xmm0, -0xa0(%rbp)
movdqa -0x90(%rbp), %xmm0
movdqa -0xa0(%rbp), %xmm1
paddb %xmm1, %xmm0
movdqa %xmm0, -0x130(%rbp)
movq -0xb8(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movdqa -0x120(%rbp), %xmm0
movq %rax, -0x8(%rbp)
movdqa %xmm0, -0x20(%rbp)
movdqa -0x20(%rbp), %xmm0
movq -0x8(%rbp), %rax
movdqu %xmm0, (%rax)
movq -0xb8(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x10, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movdqa -0x130(%rbp), %xmm0
movq %rax, -0x28(%rbp)
movdqa %xmm0, -0x40(%rbp)
movdqa -0x40(%rbp), %xmm0
movq -0x28(%rbp), %rax
movdqu %xmm0, (%rax)
movl -0xc0(%rbp), %eax
addl $0x20, %eax
movl %eax, -0xc0(%rbp)
jmp 0x1639b5
jmp 0x163b59
movl -0xc0(%rbp), %eax
cmpl -0xbc(%rbp), %eax
jge 0x163bb1
movq -0xb0(%rbp), %rax
movslq -0xc0(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movq -0xa8(%rbp), %rcx
movslq -0xc0(%rbp), %rdx
movzbl (%rcx,%rdx), %ecx
addl %ecx, %eax
movb %al, %dl
movq -0xb8(%rbp), %rax
movslq -0xc0(%rbp), %rcx
movb %dl, (%rax,%rcx)
movl -0xc0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc0(%rbp)
jmp 0x163b59
jmp 0x163bb3
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
nopl (%rax)