// File: /workspace/github_c_makefile_star2_O0/enzo1982[P]smooth/libraries/libwebp/src/dsp/filters_sse2.c
// Function: PredictLineTop_SSE2
void PredictLineTop_SSE2(const uint8_t* src, const uint8_t* pred,
                                uint8_t* dst, int length) {
  int i;
  const int max_pos = length & ~31;
  assert(length >= 0);
  for (i = 0; i < max_pos; i += 32) {
    const __m128i A0 = _mm_loadu_si128((const __m128i*)&src[i +  0]);
    const __m128i A1 = _mm_loadu_si128((const __m128i*)&src[i + 16]);
    const __m128i B0 = _mm_loadu_si128((const __m128i*)&pred[i +  0]);
    const __m128i B1 = _mm_loadu_si128((const __m128i*)&pred[i + 16]);
    const __m128i C0 = _mm_sub_epi8(A0, B0);
    const __m128i C1 = _mm_sub_epi8(A1, B1);
    _mm_storeu_si128((__m128i*)&dst[i +  0], C0);
    _mm_storeu_si128((__m128i*)&dst[i + 16], C1);
  }
  for (; i < length; ++i) dst[i] = src[i] - pred[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)
movl -0xbc(%rbp), %eax
andl $-0x20, %eax
movl %eax, -0xc4(%rbp)
cmpl $0x0, -0xbc(%rbp)
jl 0x164970
jmp 0x16498f
leaq 0x5bfb3(%rip), %rdi     # 0x1c092a
leaq 0x5bef6(%rip), %rsi     # 0x1c0874
movl $0x29, %edx
leaq 0x5c037(%rip), %rcx     # 0x1c09c1
callq 0x598a0
movl $0x0, -0xc0(%rbp)
movl -0xc0(%rbp), %eax
cmpl -0xc4(%rbp), %eax
jge 0x164b47
movq -0xa8(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0xe0(%rbp)
movq -0xa8(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x10, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0xf0(%rbp)
movq -0xb0(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x0, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0x100(%rbp)
movq -0xb0(%rbp), %rax
movl -0xc0(%rbp), %ecx
addl $0x10, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0x110(%rbp)
movdqa -0xe0(%rbp), %xmm1
movdqa -0x100(%rbp), %xmm0
movdqa %xmm1, -0x10(%rbp)
movdqa %xmm0, -0x20(%rbp)
movdqa -0x10(%rbp), %xmm0
movdqa -0x20(%rbp), %xmm1
psubb %xmm1, %xmm0
movdqa %xmm0, -0x120(%rbp)
movdqa -0xf0(%rbp), %xmm1
movdqa -0x110(%rbp), %xmm0
movdqa %xmm1, -0x30(%rbp)
movdqa %xmm0, -0x40(%rbp)
movdqa -0x30(%rbp), %xmm0
movdqa -0x40(%rbp), %xmm1
psubb %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, -0x48(%rbp)
movdqa %xmm0, -0x60(%rbp)
movdqa -0x60(%rbp), %xmm0
movq -0x48(%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, -0x68(%rbp)
movdqa %xmm0, -0x80(%rbp)
movdqa -0x80(%rbp), %xmm0
movq -0x68(%rbp), %rax
movdqu %xmm0, (%rax)
movl -0xc0(%rbp), %eax
addl $0x20, %eax
movl %eax, -0xc0(%rbp)
jmp 0x164999
jmp 0x164b49
movl -0xc0(%rbp), %eax
cmpl -0xbc(%rbp), %eax
jge 0x164ba1
movq -0xa8(%rbp), %rax
movslq -0xc0(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movq -0xb0(%rbp), %rcx
movslq -0xc0(%rbp), %rdx
movzbl (%rcx,%rdx), %ecx
subl %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 0x164b49
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
nopw (%rax,%rax)