// File: /workspace/github_c_makefile_star2_O0/enzo1982[P]smooth/libraries/libwebp/src/dsp/filters_sse2.c
// Function: PredictLineLeft_SSE2
static void PredictLineLeft_SSE2(const uint8_t* src, 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 B0 = _mm_loadu_si128((const __m128i*)(src + i +  0 - 1));
    const __m128i A1 = _mm_loadu_si128((const __m128i*)(src + i + 16    ));
    const __m128i B1 = _mm_loadu_si128((const __m128i*)(src + i + 16 - 1));
    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] - src[i - 1];
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movq %rdi, -0xa8(%rbp)
movq %rsi, -0xb0(%rbp)
movl %edx, -0xb4(%rbp)
movl -0xb4(%rbp), %eax
andl $-0x20, %eax
movl %eax, -0xbc(%rbp)
cmpl $0x0, -0xb4(%rbp)
jl 0x1644e9
jmp 0x164508
leaq 0x5c43a(%rip), %rdi     # 0x1c092a
leaq 0x5c37d(%rip), %rsi     # 0x1c0874
movl $0x3b, %edx
leaq 0x5c433(%rip), %rcx     # 0x1c0936
callq 0x598a0
movl $0x0, -0xb8(%rbp)
movl -0xb8(%rbp), %eax
cmpl -0xbc(%rbp), %eax
jge 0x1646b6
movq -0xa8(%rbp), %rax
movslq -0xb8(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0xd0(%rbp)
movq -0xa8(%rbp), %rax
movslq -0xb8(%rbp), %rcx
addq %rcx, %rax
addq $-0x1, %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0xe0(%rbp)
movq -0xa8(%rbp), %rax
movslq -0xb8(%rbp), %rcx
addq %rcx, %rax
addq $0x10, %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0xf0(%rbp)
movq -0xa8(%rbp), %rax
movslq -0xb8(%rbp), %rcx
addq %rcx, %rax
addq $0x10, %rax
addq $-0x1, %rax
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
movdqu (%rax), %xmm0
movdqa %xmm0, -0x100(%rbp)
movdqa -0xd0(%rbp), %xmm1
movdqa -0xe0(%rbp), %xmm0
movdqa %xmm1, -0x10(%rbp)
movdqa %xmm0, -0x20(%rbp)
movdqa -0x10(%rbp), %xmm0
movdqa -0x20(%rbp), %xmm1
psubb %xmm1, %xmm0
movdqa %xmm0, -0x110(%rbp)
movdqa -0xf0(%rbp), %xmm1
movdqa -0x100(%rbp), %xmm0
movdqa %xmm1, -0x30(%rbp)
movdqa %xmm0, -0x40(%rbp)
movdqa -0x30(%rbp), %xmm0
movdqa -0x40(%rbp), %xmm1
psubb %xmm1, %xmm0
movdqa %xmm0, -0x120(%rbp)
movq -0xb0(%rbp), %rax
movslq -0xb8(%rbp), %rcx
addq %rcx, %rax
movdqa -0x110(%rbp), %xmm0
movq %rax, -0x48(%rbp)
movdqa %xmm0, -0x60(%rbp)
movdqa -0x60(%rbp), %xmm0
movq -0x48(%rbp), %rax
movdqu %xmm0, (%rax)
movq -0xb0(%rbp), %rax
movslq -0xb8(%rbp), %rcx
addq %rcx, %rax
addq $0x10, %rax
movdqa -0x120(%rbp), %xmm0
movq %rax, -0x68(%rbp)
movdqa %xmm0, -0x80(%rbp)
movdqa -0x80(%rbp), %xmm0
movq -0x68(%rbp), %rax
movdqu %xmm0, (%rax)
movl -0xb8(%rbp), %eax
addl $0x20, %eax
movl %eax, -0xb8(%rbp)
jmp 0x164512
jmp 0x1646b8
movl -0xb8(%rbp), %eax
cmpl -0xb4(%rbp), %eax
jge 0x164715
movq -0xa8(%rbp), %rax
movslq -0xb8(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movq -0xa8(%rbp), %rcx
movl -0xb8(%rbp), %edx
subl $0x1, %edx
movslq %edx, %rdx
movzbl (%rcx,%rdx), %ecx
subl %ecx, %eax
movb %al, %dl
movq -0xb0(%rbp), %rax
movslq -0xb8(%rbp), %rcx
movb %dl, (%rax,%rcx)
movl -0xb8(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xb8(%rbp)
jmp 0x1646b8
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
nop