// File: cjlin1[P]liblinear/blas/dscal.c
// Function: dscal_
int dscal_(int *n, double *sa, double *sx, int *incx)
{
  long int i, m, nincx, nn, iincx;
  double ssa;

  /* scales a vector by a constant.
     uses unrolled loops for increment equal to 1.
     jack dongarra, linpack, 3/11/78.
     modified 3/93 to return if incx .le. 0.
     modified 12/3/93, array(1) declarations changed to array(*) */

  /* Dereference inputs */
  nn = *n;
  iincx = *incx;
  ssa = *sa;

  if (nn > 0 && iincx > 0)
  {
    if (iincx == 1) /* code for increment equal to 1 */
    {
      m = nn-4;
      for (i = 0; i < m; i += 5)
      {
        sx[i] = ssa * sx[i];
        sx[i+1] = ssa * sx[i+1];
        sx[i+2] = ssa * sx[i+2];
        sx[i+3] = ssa * sx[i+3];
        sx[i+4] = ssa * sx[i+4];
      }
      for ( ; i < nn; ++i) /* clean-up loop */
        sx[i] = ssa * sx[i];
    }
    else /* code for increment not equal to 1 */
    {
      nincx = nn * iincx;
      for (i = 0; i < nincx; i += iincx)
        sx[i] = ssa * sx[i];
    }
  }

  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
movslq (%rax), %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movslq (%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x10(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x50(%rbp)
cmpq $0x0, -0x40(%rbp)
jle 0x11fb9
cmpq $0x0, -0x48(%rbp)
jle 0x11fb9
cmpq $0x1, -0x48(%rbp)
jne 0x11f69
movq -0x40(%rbp), %rax
subq $0x4, %rax
movq %rax, -0x30(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x30(%rbp), %rax
jge 0x11f2e
movsd -0x50(%rbp), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movsd -0x50(%rbp), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
mulsd 0x8(%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, 0x8(%rax,%rcx,8)
movsd -0x50(%rbp), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
mulsd 0x10(%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, 0x10(%rax,%rcx,8)
movsd -0x50(%rbp), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
mulsd 0x18(%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, 0x18(%rax,%rcx,8)
movsd -0x50(%rbp), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
mulsd 0x20(%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, 0x20(%rax,%rcx,8)
movq -0x28(%rbp), %rax
addq $0x5, %rax
movq %rax, -0x28(%rbp)
jmp 0x11e6c
jmp 0x11f30
movq -0x28(%rbp), %rax
cmpq -0x40(%rbp), %rax
jge 0x11f67
movsd -0x50(%rbp), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x11f30
jmp 0x11fb7
movq -0x40(%rbp), %rax
imulq -0x48(%rbp), %rax
movq %rax, -0x38(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x38(%rbp), %rax
jge 0x11fb5
movsd -0x50(%rbp), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movq -0x18(%rbp), %rax
movq -0x28(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x48(%rbp), %rax
addq -0x28(%rbp), %rax
movq %rax, -0x28(%rbp)
jmp 0x11f7e
jmp 0x11fb7
jmp 0x11fb9
xorl %eax, %eax
popq %rbp
retq