// File: redpony[P]libpopt/./lbfgs.h
// Function: double scitbx::lbfgs::detail::ddot<double, unsigned long>(unsigned long, double const*, unsigned long, unsigned long, double const*, unsigned long, unsigned long)
FloatType ddot(
      SizeType n,
      const FloatType* dx,
      SizeType ix0,
      SizeType incx,
      const FloatType* dy,
      SizeType iy0,
      SizeType incy)
    {
      SizeType i, ix, iy, m;
      FloatType dtemp(0);
      if (n == 0) return FloatType(0);
      if (!(incx == 1 && incy == 1)) {
        ix = 0;
        iy = 0;
        for (i = 0; i < n; i++) {
          dtemp += dx[ix0+ix] * dy[iy0+iy];
          ix += incx;
          iy += incy;
        }
        return dtemp;
      }
      m = n % 5;
      for (i = 0; i < m; i++) {
        dtemp += dx[ix0+i] * dy[iy0+i];
      }
      for (; i < n;) {
        dtemp += dx[ix0+i] * dy[iy0+i]; i++;
        dtemp += dx[ix0+i] * dy[iy0+i]; i++;
        dtemp += dx[ix0+i] * dy[iy0+i]; i++;
        dtemp += dx[ix0+i] * dy[iy0+i]; i++;
        dtemp += dx[ix0+i] * dy[iy0+i]; i++;
      }
      return dtemp;
    }

// Assembly:
movq 0x8(%rsp), %rax
movq %rdi, -0x10(%rsp)
movq %rsi, -0x18(%rsp)
movq %rdx, -0x20(%rsp)
movq %rcx, -0x28(%rsp)
movq %r8, -0x30(%rsp)
movq %r9, -0x38(%rsp)
xorps %xmm0, %xmm0
movsd %xmm0, -0x60(%rsp)
cmpq $0x0, -0x10(%rsp)
jne 0x5d32
xorps %xmm0, %xmm0
movsd %xmm0, -0x8(%rsp)
jmp 0x5ff2
cmpq $0x1, -0x28(%rsp)
jne 0x5d46
cmpq $0x1, 0x8(%rsp)
je 0x5de8
movq $0x0, -0x48(%rsp)
movq $0x0, -0x50(%rsp)
movq $0x0, -0x40(%rsp)
movq -0x40(%rsp), %rax
cmpq -0x10(%rsp), %rax
jae 0x5dd7
movq -0x18(%rsp), %rax
movq -0x20(%rsp), %rcx
addq -0x48(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rsp), %rax
movq -0x38(%rsp), %rcx
addq -0x50(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x60(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rsp)
movq -0x28(%rsp), %rax
addq -0x48(%rsp), %rax
movq %rax, -0x48(%rsp)
movq 0x8(%rsp), %rax
addq -0x50(%rsp), %rax
movq %rax, -0x50(%rsp)
movq -0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rsp)
jmp 0x5d61
movsd -0x60(%rsp), %xmm0
movsd %xmm0, -0x8(%rsp)
jmp 0x5ff2
movq -0x10(%rsp), %rax
movl $0x5, %ecx
xorl %edx, %edx
divq %rcx
movq %rdx, -0x58(%rsp)
movq $0x0, -0x40(%rsp)
movq -0x40(%rsp), %rax
cmpq -0x58(%rsp), %rax
jae 0x5e5d
movq -0x18(%rsp), %rax
movq -0x20(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rsp), %rax
movq -0x38(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x60(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rsp)
movq -0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rsp)
jmp 0x5e05
jmp 0x5e5f
movq -0x40(%rsp), %rax
cmpq -0x10(%rsp), %rax
jae 0x5fe6
movq -0x18(%rsp), %rax
movq -0x20(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rsp), %rax
movq -0x38(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x60(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rsp)
movq -0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rsp)
movq -0x18(%rsp), %rax
movq -0x20(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rsp), %rax
movq -0x38(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x60(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rsp)
movq -0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rsp)
movq -0x18(%rsp), %rax
movq -0x20(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rsp), %rax
movq -0x38(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x60(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rsp)
movq -0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rsp)
movq -0x18(%rsp), %rax
movq -0x20(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rsp), %rax
movq -0x38(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x60(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rsp)
movq -0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rsp)
movq -0x18(%rsp), %rax
movq -0x20(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm0
movq -0x30(%rsp), %rax
movq -0x38(%rsp), %rcx
addq -0x40(%rsp), %rcx
movsd (%rax,%rcx,8), %xmm2
movsd -0x60(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, -0x60(%rsp)
movq -0x40(%rsp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rsp)
jmp 0x5e5f
movsd -0x60(%rsp), %xmm0
movsd %xmm0, -0x8(%rsp)
movsd -0x8(%rsp), %xmm0
retq
nopl (%rax)