// File: redpony[P]libpopt/./lbfgs.h
// Function: scitbx::lbfgs::minimizer<double, unsigned long>::minimizer(unsigned long, unsigned long, unsigned long, double, double, double, double)
explicit
      minimizer(
        SizeType n,
        SizeType m = 5,
        SizeType maxfev = 20,
        FloatType gtol = FloatType(0.9),
        FloatType xtol = FloatType(1.e-16),
        FloatType stpmin = FloatType(1.e-20),
        FloatType stpmax = FloatType(1.e20))
        : n_(n), m_(m), maxfev_(maxfev),
          gtol_(gtol), xtol_(xtol),
          stpmin_(stpmin), stpmax_(stpmax),
          iflag_(0), requests_f_and_g_(false), requests_diag_(false),
          iter_(0), nfun_(0), stp_(0),
          stp1(0), ftol(0.0001), ys(0), point(0), npt(0),
          ispt(n+2*m), iypt((n+2*m)+n*m),
          info(0), bound(0), nfev(0)
      {
        if (n_ == 0) {
          throw error_improper_input_parameter("n = 0.");
        }
        if (m_ == 0) {
          throw error_improper_input_parameter("m = 0.");
        }
        if (maxfev_ == 0) {
         throw error_improper_input_parameter("maxfev = 0.");
        }
        if (gtol_ <= FloatType(1.e-4)) {
          throw error_improper_input_parameter("gtol <= 1.e-4.");
        }
        if (xtol_ < FloatType(0)) {
          throw error_improper_input_parameter("xtol < 0.");
        }
        if (stpmin_ < FloatType(0)) {
          throw error_improper_input_parameter("stpmin < 0.");
        }
        if (stpmax_ < stpmin) {
          throw error_improper_input_parameter("stpmax < stpmin");
        }
        w_.resize(n_*(2*m_+1)+2*m_);
        scratch_array_.resize(n_);
      }

// Assembly:
subq $0x1f8, %rsp            # imm = 0x1F8
movq %rdi, 0x1f0(%rsp)
movq %rsi, 0x1e8(%rsp)
movq %rdx, 0x1e0(%rsp)
movq %rcx, 0x1d8(%rsp)
movsd %xmm0, 0x1d0(%rsp)
movsd %xmm1, 0x1c8(%rsp)
movsd %xmm2, 0x1c0(%rsp)
movsd %xmm3, 0x1b8(%rsp)
movq 0x1f0(%rsp), %rdi
movq %rdi, 0x88(%rsp)
movq 0x1e8(%rsp), %rax
movq %rax, 0x78(%rdi)
movq 0x1e0(%rsp), %rax
movq %rax, 0x80(%rdi)
movq 0x1d8(%rsp), %rax
movq %rax, 0x88(%rdi)
movsd 0x1d0(%rsp), %xmm0
movsd %xmm0, 0x90(%rdi)
movsd 0x1c8(%rsp), %xmm0
movsd %xmm0, 0x98(%rdi)
movsd 0x1c0(%rsp), %xmm0
movsd %xmm0, 0xa0(%rdi)
movsd 0x1b8(%rsp), %xmm0
movsd %xmm0, 0xa8(%rdi)
movl $0x0, 0xb0(%rdi)
movb $0x0, 0xb4(%rdi)
movb $0x0, 0xb5(%rdi)
movq $0x0, 0xb8(%rdi)
movq $0x0, 0xc0(%rdi)
xorps %xmm0, %xmm0
movsd %xmm0, 0xc8(%rdi)
xorps %xmm0, %xmm0
movsd %xmm0, 0xd0(%rdi)
movsd 0x65db(%rip), %xmm0     # 0xe3c0
movsd %xmm0, 0xd8(%rdi)
xorps %xmm0, %xmm0
movsd %xmm0, 0xe0(%rdi)
movq $0x0, 0xe8(%rdi)
movq $0x0, 0xf0(%rdi)
movq 0x1e8(%rsp), %rax
movq 0x1e0(%rsp), %rcx
shlq %rcx
addq %rcx, %rax
movq %rax, 0xf8(%rdi)
movq 0x1e8(%rsp), %rax
movq 0x1e0(%rsp), %rcx
shlq %rcx
addq %rcx, %rax
movq 0x1e8(%rsp), %rcx
imulq 0x1e0(%rsp), %rcx
addq %rcx, %rax
movq %rax, 0x100(%rdi)
movl $0x0, 0x108(%rdi)
movq $0x0, 0x110(%rdi)
movq $0x0, 0x118(%rdi)
addq $0x120, %rdi            # imm = 0x120
movq %rdi, 0x78(%rsp)
callq 0x8d50
movq 0x88(%rsp), %rdi
addq $0x138, %rdi            # imm = 0x138
movq %rdi, 0x80(%rsp)
callq 0x8d50
movq 0x88(%rsp), %rax
cmpq $0x0, 0x78(%rax)
jne 0x7f96
movb $0x1, 0x183(%rsp)
movl $0x28, %edi
callq 0x3100
movq %rax, 0x68(%rsp)
leaq 0x197(%rsp), %rdi
movq %rdi, 0x70(%rsp)
callq 0x33c0
movq 0x70(%rsp), %rdx
leaq 0x628a(%rip), %rsi      # 0xe17b
leaq 0x198(%rsp), %rdi
callq 0x55c0
jmp 0x7f00
movq 0x68(%rsp), %rdi
leaq 0x198(%rsp), %rsi
callq 0x5680
movq 0x68(%rsp), %rdi
movb $0x0, 0x183(%rsp)
leaq 0x9b82(%rip), %rsi      # 0x11aa8
leaq -0x283d(%rip), %rdx     # 0x56f0
callq 0x3380
jmp 0x85dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x7f6e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0x198(%rsp), %rdi
callq 0x3140
leaq 0x197(%rsp), %rdi
callq 0x3270
testb $0x1, 0x183(%rsp)
jne 0x7f87
jmp 0x7f91
movq 0x68(%rsp), %rdi
callq 0x3190
jmp 0x85b8
movq 0x88(%rsp), %rax
cmpq $0x0, 0x80(%rax)
jne 0x8086
movb $0x1, 0x15e(%rsp)
movl $0x28, %edi
callq 0x3100
movq %rax, 0x58(%rsp)
leaq 0x15f(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x33c0
movq 0x60(%rsp), %rdx
leaq 0x64cb(%rip), %rsi      # 0xe4ac
leaq 0x160(%rsp), %rdi
callq 0x55c0
jmp 0x7ff0
movq 0x58(%rsp), %rdi
leaq 0x160(%rsp), %rsi
callq 0x5680
movq 0x58(%rsp), %rdi
movb $0x0, 0x15e(%rsp)
leaq 0x9a92(%rip), %rsi      # 0x11aa8
leaq -0x292d(%rip), %rdx     # 0x56f0
callq 0x3380
jmp 0x85dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x805e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0x160(%rsp), %rdi
callq 0x3140
leaq 0x15f(%rsp), %rdi
callq 0x3270
testb $0x1, 0x15e(%rsp)
jne 0x8077
jmp 0x8081
movq 0x58(%rsp), %rdi
callq 0x3190
jmp 0x85b8
movq 0x88(%rsp), %rax
cmpq $0x0, 0x88(%rax)
jne 0x8176
movb $0x1, 0x136(%rsp)
movl $0x28, %edi
callq 0x3100
movq %rax, 0x48(%rsp)
leaq 0x137(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x33c0
movq 0x50(%rsp), %rdx
leaq 0x63e2(%rip), %rsi      # 0xe4b3
leaq 0x138(%rsp), %rdi
callq 0x55c0
jmp 0x80e0
movq 0x48(%rsp), %rdi
leaq 0x138(%rsp), %rsi
callq 0x5680
movq 0x48(%rsp), %rdi
movb $0x0, 0x136(%rsp)
leaq 0x99a2(%rip), %rsi      # 0x11aa8
leaq -0x2a1d(%rip), %rdx     # 0x56f0
callq 0x3380
jmp 0x85dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x814e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0x138(%rsp), %rdi
callq 0x3140
leaq 0x137(%rsp), %rdi
callq 0x3270
testb $0x1, 0x136(%rsp)
jne 0x8167
jmp 0x8171
movq 0x48(%rsp), %rdi
callq 0x3190
jmp 0x85b8
movq 0x88(%rsp), %rax
movsd 0x623a(%rip), %xmm0     # 0xe3c0
ucomisd 0x90(%rax), %xmm0
jb 0x826e
movb $0x1, 0x10e(%rsp)
movl $0x28, %edi
callq 0x3100
movq %rax, 0x38(%rsp)
leaq 0x10f(%rsp), %rdi
movq %rdi, 0x40(%rsp)
callq 0x33c0
movq 0x40(%rsp), %rdx
leaq 0x62f6(%rip), %rsi      # 0xe4bf
leaq 0x110(%rsp), %rdi
callq 0x55c0
jmp 0x81d8
movq 0x38(%rsp), %rdi
leaq 0x110(%rsp), %rsi
callq 0x5680
movq 0x38(%rsp), %rdi
movb $0x0, 0x10e(%rsp)
leaq 0x98aa(%rip), %rsi      # 0x11aa8
leaq -0x2b15(%rip), %rdx     # 0x56f0
callq 0x3380
jmp 0x85dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x8246
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0x110(%rsp), %rdi
callq 0x3140
leaq 0x10f(%rsp), %rdi
callq 0x3270
testb $0x1, 0x10e(%rsp)
jne 0x825f
jmp 0x8269
movq 0x38(%rsp), %rdi
callq 0x3190
jmp 0x85b8
movq 0x88(%rsp), %rax
xorps %xmm0, %xmm0
ucomisd 0x98(%rax), %xmm0
jbe 0x8361
movb $0x1, 0xe6(%rsp)
movl $0x28, %edi
callq 0x3100
movq %rax, 0x28(%rsp)
leaq 0xe7(%rsp), %rdi
movq %rdi, 0x30(%rsp)
callq 0x33c0
movq 0x30(%rsp), %rdx
leaq 0x6212(%rip), %rsi      # 0xe4ce
leaq 0xe8(%rsp), %rdi
callq 0x55c0
jmp 0x82cb
movq 0x28(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
callq 0x5680
movq 0x28(%rsp), %rdi
movb $0x0, 0xe6(%rsp)
leaq 0x97b7(%rip), %rsi      # 0x11aa8
leaq -0x2c08(%rip), %rdx     # 0x56f0
callq 0x3380
jmp 0x85dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x8339
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0xe8(%rsp), %rdi
callq 0x3140
leaq 0xe7(%rsp), %rdi
callq 0x3270
testb $0x1, 0xe6(%rsp)
jne 0x8352
jmp 0x835c
movq 0x28(%rsp), %rdi
callq 0x3190
jmp 0x85b8
movq 0x88(%rsp), %rax
xorps %xmm0, %xmm0
ucomisd 0xa0(%rax), %xmm0
jbe 0x8454
movb $0x1, 0xbe(%rsp)
movl $0x28, %edi
callq 0x3100
movq %rax, 0x18(%rsp)
leaq 0xbf(%rsp), %rdi
movq %rdi, 0x20(%rsp)
callq 0x33c0
movq 0x20(%rsp), %rdx
leaq 0x6129(%rip), %rsi      # 0xe4d8
leaq 0xc0(%rsp), %rdi
callq 0x55c0
jmp 0x83be
movq 0x18(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x5680
movq 0x18(%rsp), %rdi
movb $0x0, 0xbe(%rsp)
leaq 0x96c4(%rip), %rsi      # 0x11aa8
leaq -0x2cfb(%rip), %rdx     # 0x56f0
callq 0x3380
jmp 0x85dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x842c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0xc0(%rsp), %rdi
callq 0x3140
leaq 0xbf(%rsp), %rdi
callq 0x3270
testb $0x1, 0xbe(%rsp)
jne 0x8445
jmp 0x844f
movq 0x18(%rsp), %rdi
callq 0x3190
jmp 0x85b8
movq 0x88(%rsp), %rax
movsd 0xa8(%rax), %xmm1
movsd 0x1c0(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x854e
movb $0x1, 0x96(%rsp)
movl $0x28, %edi
callq 0x3100
movq %rax, 0x8(%rsp)
leaq 0x97(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x33c0
movq 0x10(%rsp), %rdx
leaq 0x6038(%rip), %rsi      # 0xe4e4
leaq 0x98(%rsp), %rdi
callq 0x55c0
jmp 0x84bb
movq 0x8(%rsp), %rdi
leaq 0x98(%rsp), %rsi
callq 0x5680
movq 0x8(%rsp), %rdi
movb $0x0, 0x96(%rsp)
leaq 0x95c7(%rip), %rsi      # 0x11aa8
leaq -0x2df8(%rip), %rdx     # 0x56f0
callq 0x3380
jmp 0x85dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
jmp 0x8529
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x3140
leaq 0x97(%rsp), %rdi
callq 0x3270
testb $0x1, 0x96(%rsp)
jne 0x8542
jmp 0x854c
movq 0x8(%rsp), %rdi
callq 0x3190
jmp 0x85b8
movq 0x88(%rsp), %rcx
movq %rcx, %rdi
addq $0x120, %rdi            # imm = 0x120
movq 0x78(%rcx), %rax
movq 0x80(%rcx), %rcx
leaq 0x1(%rcx,%rcx), %rdx
imulq %rdx, %rax
leaq (%rax,%rcx,2), %rsi
callq 0x8d60
jmp 0x857f
movq 0x88(%rsp), %rax
movq %rax, %rdi
addq $0x138, %rdi            # imm = 0x138
movq 0x78(%rax), %rsi
callq 0x8d60
jmp 0x859c
addq $0x1f8, %rsp            # imm = 0x1F8
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x188(%rsp)
movl %eax, 0x184(%rsp)
movq 0x80(%rsp), %rdi
callq 0x47d0
movq 0x78(%rsp), %rdi
callq 0x47d0
movq 0x188(%rsp), %rdi
callq 0x33b0
nopl (%rax)