// File: kaityo256[P]lj_simd/force_aos.cpp
// Function: force_avx2()
void
force_avx2(void) {
  const v4df vzero = _mm256_set1_pd(0.0);
  const v4df vcl2 = _mm256_set1_pd(CL2);
  const v4df vc24 = _mm256_set1_pd(24 * dt);
  const v4df vc48 = _mm256_set1_pd(48 * dt);
  const int pn = particle_number;
  for (int i = 0; i < pn; i++) {
    const v4df vqi = _mm256_load_pd((double *)(q + i));
    v4df vpi = _mm256_load_pd((double *)(p + i));
    const int np = number_of_partners[i];
    const int kp = pointer[i];
    for (int k = 0; k < (np / 4) * 4; k += 4) {
      const int j_1 = sorted_list[kp + k];
      const int j_2 = sorted_list[kp + k + 1];
      const int j_3 = sorted_list[kp + k + 2];
      const int j_4 = sorted_list[kp + k + 3];
      v4df vqj_1 = _mm256_load_pd((double *)(q + j_1));
      v4df vqj_2 = _mm256_load_pd((double *)(q + j_2));
      v4df vqj_3 = _mm256_load_pd((double *)(q + j_3));
      v4df vqj_4 = _mm256_load_pd((double *)(q + j_4));

      v4df vdq_1 = (vqj_1 - vqi);
      v4df vdq_2 = (vqj_2 - vqi);
      v4df vdq_3 = (vqj_3 - vqi);
      v4df vdq_4 = (vqj_4 - vqi);

      v4df tmp0 = _mm256_unpacklo_pd(vdq_1, vdq_2);
      v4df tmp1 = _mm256_unpackhi_pd(vdq_1, vdq_2);
      v4df tmp2 = _mm256_unpacklo_pd(vdq_3, vdq_4);
      v4df tmp3 = _mm256_unpackhi_pd(vdq_3, vdq_4);

      v4df vdx = _mm256_permute2f128_pd(tmp0, tmp2, 0x20);
      v4df vdy = _mm256_permute2f128_pd(tmp1, tmp3, 0x20);
      v4df vdz = _mm256_permute2f128_pd(tmp0, tmp2, 0x31);

      v4df vr2 = vdx * vdx + vdy * vdy + vdz * vdz;
      v4df vr6 = vr2 * vr2 * vr2;
      v4df vdf = (vc24 * vr6 - vc48) / (vr6 * vr6 * vr2);
      v4df mask = vcl2 - vr2;
      vdf = _mm256_blendv_pd(vdf, vzero, mask);

      v4df vdf_1 = _mm256_permute4x64_pd(vdf, 0);
      v4df vdf_2 = _mm256_permute4x64_pd(vdf, 85);
      v4df vdf_3 = _mm256_permute4x64_pd(vdf, 170);
      v4df vdf_4 = _mm256_permute4x64_pd(vdf, 255);

      v4df vpj_1 = _mm256_load_pd((double *)(p + j_1));
      v4df vpj_2 = _mm256_load_pd((double *)(p + j_2));
      v4df vpj_3 = _mm256_load_pd((double *)(p + j_3));
      v4df vpj_4 = _mm256_load_pd((double *)(p + j_4));

      vpj_1 -= vdq_1 * vdf_1;
      vpj_2 -= vdq_2 * vdf_2;
      vpj_3 -= vdq_3 * vdf_3;
      vpj_4 -= vdq_4 * vdf_4;

      vpi += vdq_1 * vdf_1;
      vpi += vdq_2 * vdf_2;
      vpi += vdq_3 * vdf_3;
      vpi += vdq_4 * vdf_4;

      _mm256_store_pd((double *)(p + j_1), vpj_1);
      _mm256_store_pd((double *)(p + j_2), vpj_2);
      _mm256_store_pd((double *)(p + j_3), vpj_3);
      _mm256_store_pd((double *)(p + j_4), vpj_4);
    }
    _mm256_store_pd((double *)(p + i), vpi);
    for (int k = (np / 4) * 4; k < np; k++) {
      const int j = sorted_list[kp + k];
      double dx = q[j][X] - q[i][X];
      double dy = q[j][Y] - q[i][Y];
      double dz = q[j][Z] - q[i][Z];
      double r2 = (dx * dx + dy * dy + dz * dz);
      double r6 = r2 * r2 * r2;
      double df = ((24.0 * r6 - 48.0) / (r6 * r6 * r2)) * dt;
      if (r2 > CL2) df = 0.0;
      p[i][X] += df * dx;
      p[i][Y] += df * dy;
      p[i][Z] += df * dz;
      p[j][X] -= df * dx;
      p[j][Y] -= df * dy;
      p[j][Z] -= df * dz;
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
andq $-0x20, %rsp
subq $0x8e0, %rsp            # imm = 0x8E0
movq $0x0, 0x4c8(%rsp)
vmovsd 0x4c8(%rsp), %xmm0
vmovsd %xmm0, 0x7f8(%rsp)
vmovsd %xmm0, 0x7f0(%rsp)
vmovsd %xmm0, 0x7e8(%rsp)
vmovsd %xmm0, 0x7e0(%rsp)
vmovsd 0x7e8(%rsp), %xmm1
vmovsd 0x7e0(%rsp), %xmm0
vunpcklpd %xmm1, %xmm0, %xmm0 # xmm0 = xmm0[0],xmm1[0]
vmovsd 0x7f8(%rsp), %xmm2
vmovsd 0x7f0(%rsp), %xmm1
vunpcklpd %xmm2, %xmm1, %xmm1 # xmm1 = xmm1[0],xmm2[0]
vmovapd %xmm1, 0x7d0(%rsp)
vmovapd %xmm0, 0x7c0(%rsp)
vmovapd 0x7c0(%rsp), %ymm0
vmovapd %ymm0, 0x480(%rsp)
movabsq $0x4022000000000000, %rax # imm = 0x4022000000000000
movq %rax, 0x4c0(%rsp)
vmovsd 0x4c0(%rsp), %xmm0
vmovsd %xmm0, 0x838(%rsp)
vmovsd %xmm0, 0x830(%rsp)
vmovsd %xmm0, 0x828(%rsp)
vmovsd %xmm0, 0x820(%rsp)
vmovsd 0x828(%rsp), %xmm1
vmovsd 0x820(%rsp), %xmm0
vunpcklpd %xmm1, %xmm0, %xmm0 # xmm0 = xmm0[0],xmm1[0]
vmovsd 0x838(%rsp), %xmm2
vmovsd 0x830(%rsp), %xmm1
vunpcklpd %xmm2, %xmm1, %xmm1 # xmm1 = xmm1[0],xmm2[0]
vmovapd %xmm1, 0x810(%rsp)
vmovapd %xmm0, 0x800(%rsp)
vmovapd 0x800(%rsp), %ymm0
vmovapd %ymm0, 0x460(%rsp)
movabsq $0x3f989374bc6a7efa, %rax # imm = 0x3F989374BC6A7EFA
movq %rax, 0x4b8(%rsp)
vmovsd 0x4b8(%rsp), %xmm0
vmovsd %xmm0, 0x878(%rsp)
vmovsd %xmm0, 0x870(%rsp)
vmovsd %xmm0, 0x868(%rsp)
vmovsd %xmm0, 0x860(%rsp)
vmovsd 0x868(%rsp), %xmm1
vmovsd 0x860(%rsp), %xmm0
vunpcklpd %xmm1, %xmm0, %xmm0 # xmm0 = xmm0[0],xmm1[0]
vmovsd 0x878(%rsp), %xmm2
vmovsd 0x870(%rsp), %xmm1
vunpcklpd %xmm2, %xmm1, %xmm1 # xmm1 = xmm1[0],xmm2[0]
vmovapd %xmm1, 0x850(%rsp)
vmovapd %xmm0, 0x840(%rsp)
vmovapd 0x840(%rsp), %ymm0
vmovapd %ymm0, 0x440(%rsp)
movabsq $0x3fa89374bc6a7efa, %rax # imm = 0x3FA89374BC6A7EFA
movq %rax, 0x4b0(%rsp)
vmovsd 0x4b0(%rsp), %xmm0
vmovsd %xmm0, 0x8c8(%rsp)
vmovsd %xmm0, 0x8c0(%rsp)
vmovsd %xmm0, 0x8b8(%rsp)
vmovsd %xmm0, 0x8b0(%rsp)
vmovsd 0x8c8(%rsp), %xmm1
vmovsd 0x8c0(%rsp), %xmm0
vunpcklpd %xmm1, %xmm0, %xmm1 # xmm1 = xmm0[0],xmm1[0]
vmovsd 0x8b8(%rsp), %xmm2
vmovsd 0x8b0(%rsp), %xmm0
vunpcklpd %xmm2, %xmm0, %xmm2 # xmm2 = xmm0[0],xmm2[0]
vmovaps %xmm2, %xmm0
vinsertf128 $0x1, %xmm1, %ymm0, %ymm0
vmovapd %ymm0, 0x880(%rsp)
vmovapd 0x880(%rsp), %ymm0
vmovapd %ymm0, 0x420(%rsp)
movl 0x32627e4(%rip), %eax   # 0x3266b80
movl %eax, 0x41c(%rsp)
movl $0x0, 0x418(%rsp)
movl 0x418(%rsp), %eax
cmpl 0x41c(%rsp), %eax
jge 0x4f9d
movslq 0x418(%rsp), %rcx
leaq 0x18e77f(%rip), %rax    # 0x192b50
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, 0x518(%rsp)
movq 0x518(%rsp), %rax
vmovapd (%rax), %ymm0
vmovapd %ymm0, 0x3e0(%rsp)
movslq 0x418(%rsp), %rcx
leaq 0xdc374c(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, 0x510(%rsp)
movq 0x510(%rsp), %rax
vmovapd (%rax), %ymm0
vmovapd %ymm0, 0x3c0(%rsp)
movslq 0x418(%rsp), %rcx
leaq 0x3262759(%rip), %rax   # 0x3266b90
movl (%rax,%rcx,4), %eax
movl %eax, 0x3bc(%rsp)
movslq 0x418(%rsp), %rcx
leaq 0x8f76940(%rip), %rax   # 0x8f7ad90
movl (%rax,%rcx,4), %eax
movl %eax, 0x3b8(%rsp)
movl $0x0, 0x3b4(%rsp)
movl 0x3b4(%rsp), %eax
movl %eax, 0x4(%rsp)
movl 0x3bc(%rsp), %eax
movl $0x4, %ecx
cltd
idivl %ecx
movl %eax, %ecx
movl 0x4(%rsp), %eax
shll $0x2, %ecx
cmpl %ecx, %eax
jge 0x4c39
movl 0x3b8(%rsp), %eax
movl 0x3b4(%rsp), %ecx
addl %ecx, %eax
movslq %eax, %rcx
leaq 0x90fd2e6(%rip), %rax   # 0x9101790
movl (%rax,%rcx,4), %ecx
movl %ecx, 0x3b0(%rsp)
movl 0x3b8(%rsp), %ecx
movl 0x3b4(%rsp), %edx
addl %edx, %ecx
movslq %ecx, %rcx
movl 0x4(%rax,%rcx,4), %ecx
movl %ecx, 0x3ac(%rsp)
movl 0x3b8(%rsp), %ecx
movl 0x3b4(%rsp), %edx
addl %edx, %ecx
movslq %ecx, %rcx
movl 0x8(%rax,%rcx,4), %ecx
movl %ecx, 0x3a8(%rsp)
movl 0x3b8(%rsp), %ecx
movl 0x3b4(%rsp), %edx
addl %edx, %ecx
movslq %ecx, %rcx
movl 0xc(%rax,%rcx,4), %eax
movl %eax, 0x3a4(%rsp)
movslq 0x3b0(%rsp), %rdx
shlq $0x5, %rdx
leaq 0x18e62f(%rip), %rax    # 0x192b50
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, 0x508(%rsp)
movq 0x508(%rsp), %rcx
vmovapd (%rcx), %ymm0
vmovapd %ymm0, 0x380(%rsp)
movslq 0x3ac(%rsp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, 0x500(%rsp)
movq 0x500(%rsp), %rcx
vmovapd (%rcx), %ymm0
vmovapd %ymm0, 0x360(%rsp)
movslq 0x3a8(%rsp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, 0x4f8(%rsp)
movq 0x4f8(%rsp), %rcx
vmovapd (%rcx), %ymm0
vmovapd %ymm0, 0x340(%rsp)
movslq 0x3a4(%rsp), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, 0x4f0(%rsp)
movq 0x4f0(%rsp), %rax
vmovapd (%rax), %ymm0
vmovapd %ymm0, 0x320(%rsp)
vmovapd 0x380(%rsp), %ymm0
vmovapd 0x3e0(%rsp), %ymm1
vsubpd %ymm1, %ymm0, %ymm0
vmovapd %ymm0, 0x300(%rsp)
vmovapd 0x360(%rsp), %ymm0
vmovapd 0x3e0(%rsp), %ymm1
vsubpd %ymm1, %ymm0, %ymm0
vmovapd %ymm0, 0x2e0(%rsp)
vmovapd 0x340(%rsp), %ymm0
vmovapd 0x3e0(%rsp), %ymm1
vsubpd %ymm1, %ymm0, %ymm0
vmovapd %ymm0, 0x2c0(%rsp)
vmovapd 0x320(%rsp), %ymm0
vmovapd 0x3e0(%rsp), %ymm1
vsubpd %ymm1, %ymm0, %ymm0
vmovapd %ymm0, 0x2a0(%rsp)
vmovapd 0x300(%rsp), %ymm1
vmovapd 0x2e0(%rsp), %ymm0
vmovapd %ymm1, 0x580(%rsp)
vmovapd %ymm0, 0x560(%rsp)
vmovapd 0x580(%rsp), %ymm0
vmovapd 0x560(%rsp), %ymm1
vunpcklpd %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
vmovapd %ymm0, 0x280(%rsp)
vmovapd 0x300(%rsp), %ymm1
vmovapd 0x2e0(%rsp), %ymm0
vmovapd %ymm1, 0x600(%rsp)
vmovapd %ymm0, 0x5e0(%rsp)
vmovapd 0x600(%rsp), %ymm0
vmovapd 0x5e0(%rsp), %ymm1
vunpckhpd %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]
vmovapd %ymm0, 0x260(%rsp)
vmovapd 0x2c0(%rsp), %ymm1
vmovapd 0x2a0(%rsp), %ymm0
vmovapd %ymm1, 0x540(%rsp)
vmovapd %ymm0, 0x520(%rsp)
vmovapd 0x540(%rsp), %ymm0
vmovapd 0x520(%rsp), %ymm1
vunpcklpd %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
vmovapd %ymm0, 0x240(%rsp)
vmovapd 0x2c0(%rsp), %ymm1
vmovapd 0x2a0(%rsp), %ymm0
vmovapd %ymm1, 0x5c0(%rsp)
vmovapd %ymm0, 0x5a0(%rsp)
vmovapd 0x5c0(%rsp), %ymm0
vmovapd 0x5a0(%rsp), %ymm1
vunpckhpd %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]
vmovapd %ymm0, 0x220(%rsp)
vmovapd 0x280(%rsp), %ymm0
vmovapd 0x240(%rsp), %ymm1
vperm2f128 $0x20, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[0,1],ymm1[0,1]
vmovapd %ymm0, 0x200(%rsp)
vmovapd 0x260(%rsp), %ymm0
vmovapd 0x220(%rsp), %ymm1
vperm2f128 $0x20, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[0,1],ymm1[0,1]
vmovapd %ymm0, 0x1e0(%rsp)
vmovapd 0x280(%rsp), %ymm0
vmovapd 0x240(%rsp), %ymm1
vperm2f128 $0x31, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2,3],ymm1[2,3]
vmovapd %ymm0, 0x1c0(%rsp)
vmovapd 0x200(%rsp), %ymm1
vmovapd 0x1e0(%rsp), %ymm0
vmulpd %ymm0, %ymm0, %ymm0
vfmadd213pd %ymm0, %ymm1, %ymm1 # ymm1 = (ymm1 * ymm1) + ymm0
vmovapd 0x1c0(%rsp), %ymm0
vfmadd213pd %ymm1, %ymm0, %ymm0 # ymm0 = (ymm0 * ymm0) + ymm1
vmovapd %ymm0, 0x1a0(%rsp)
vmovapd 0x1a0(%rsp), %ymm1
vmulpd %ymm1, %ymm1, %ymm0
vmulpd %ymm1, %ymm0, %ymm0
vmovapd %ymm0, 0x180(%rsp)
vmovapd 0x440(%rsp), %ymm2
vmovapd 0x180(%rsp), %ymm1
vmovapd 0x420(%rsp), %ymm3
vmovaps %ymm1, %ymm0
vfmsub213pd %ymm3, %ymm2, %ymm0 # ymm0 = (ymm2 * ymm0) - ymm3
vmulpd %ymm1, %ymm1, %ymm1
vmovapd 0x1a0(%rsp), %ymm2
vmulpd %ymm2, %ymm1, %ymm1
vdivpd %ymm1, %ymm0, %ymm0
vmovapd %ymm0, 0x160(%rsp)
vmovapd 0x460(%rsp), %ymm0
vmovapd 0x1a0(%rsp), %ymm1
vsubpd %ymm1, %ymm0, %ymm0
vmovapd %ymm0, 0x140(%rsp)
vmovapd 0x160(%rsp), %ymm2
vmovapd 0x480(%rsp), %ymm1
vmovapd 0x140(%rsp), %ymm0
vmovapd %ymm2, 0x660(%rsp)
vmovapd %ymm1, 0x640(%rsp)
vmovapd %ymm0, 0x620(%rsp)
vmovapd 0x660(%rsp), %ymm0
vmovapd 0x640(%rsp), %ymm1
vmovdqa 0x620(%rsp), %ymm2
vblendvpd %ymm2, %ymm1, %ymm0, %ymm0
vmovapd %ymm0, 0x160(%rsp)
vbroadcastsd 0x160(%rsp), %ymm0
vmovapd %ymm0, 0x120(%rsp)
vbroadcastsd 0x168(%rsp), %ymm0
vmovapd %ymm0, 0x100(%rsp)
vbroadcastsd 0x170(%rsp), %ymm0
vmovapd %ymm0, 0xe0(%rsp)
vbroadcastsd 0x178(%rsp), %ymm0
vmovapd %ymm0, 0xc0(%rsp)
movslq 0x3b0(%rsp), %rdx
shlq $0x5, %rdx
leaq 0xdc322b(%rip), %rax    # 0xdc7b50
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, 0x4e8(%rsp)
movq 0x4e8(%rsp), %rcx
vmovapd (%rcx), %ymm0
vmovapd %ymm0, 0xa0(%rsp)
movslq 0x3ac(%rsp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, 0x4e0(%rsp)
movq 0x4e0(%rsp), %rcx
vmovapd (%rcx), %ymm0
vmovapd %ymm0, 0x80(%rsp)
movslq 0x3a8(%rsp), %rdx
shlq $0x5, %rdx
movq %rax, %rcx
addq %rdx, %rcx
movq %rcx, 0x4d8(%rsp)
movq 0x4d8(%rsp), %rcx
vmovapd (%rcx), %ymm0
vmovapd %ymm0, 0x60(%rsp)
movslq 0x3a4(%rsp), %rcx
shlq $0x5, %rcx
addq %rcx, %rax
movq %rax, 0x4d0(%rsp)
movq 0x4d0(%rsp), %rax
vmovapd (%rax), %ymm0
vmovapd %ymm0, 0x40(%rsp)
vmovapd 0x300(%rsp), %ymm1
vmovapd 0x120(%rsp), %ymm0
vmovapd 0xa0(%rsp), %ymm2
vfnmadd213pd %ymm2, %ymm1, %ymm0 # ymm0 = -(ymm1 * ymm0) + ymm2
vmovapd %ymm0, 0xa0(%rsp)
vmovapd 0x2e0(%rsp), %ymm1
vmovapd 0x100(%rsp), %ymm0
vmovapd 0x80(%rsp), %ymm2
vfnmadd213pd %ymm2, %ymm1, %ymm0 # ymm0 = -(ymm1 * ymm0) + ymm2
vmovapd %ymm0, 0x80(%rsp)
vmovapd 0x2c0(%rsp), %ymm1
vmovapd 0xe0(%rsp), %ymm0
vmovapd 0x60(%rsp), %ymm2
vfnmadd213pd %ymm2, %ymm1, %ymm0 # ymm0 = -(ymm1 * ymm0) + ymm2
vmovapd %ymm0, 0x60(%rsp)
vmovapd 0x2a0(%rsp), %ymm1
vmovapd 0xc0(%rsp), %ymm0
vmovapd 0x40(%rsp), %ymm2
vpbroadcastq 0x55ee(%rip), %ymm3 # 0xa050
vpxor %ymm3, %ymm1, %ymm1
vfmadd213pd %ymm2, %ymm1, %ymm0 # ymm0 = (ymm1 * ymm0) + ymm2
vmovapd %ymm0, 0x40(%rsp)
vmovapd 0x300(%rsp), %ymm1
vmovapd 0x120(%rsp), %ymm0
vmovapd 0x3c0(%rsp), %ymm2
vfmadd213pd %ymm2, %ymm1, %ymm0 # ymm0 = (ymm1 * ymm0) + ymm2
vmovapd %ymm0, 0x3c0(%rsp)
vmovapd 0x2e0(%rsp), %ymm1
vmovapd 0x100(%rsp), %ymm0
vmovapd 0x3c0(%rsp), %ymm2
vfmadd213pd %ymm2, %ymm1, %ymm0 # ymm0 = (ymm1 * ymm0) + ymm2
vmovapd %ymm0, 0x3c0(%rsp)
vmovapd 0x2c0(%rsp), %ymm1
vmovapd 0xe0(%rsp), %ymm0
vmovapd 0x3c0(%rsp), %ymm2
vfmadd213pd %ymm2, %ymm1, %ymm0 # ymm0 = (ymm1 * ymm0) + ymm2
vmovapd %ymm0, 0x3c0(%rsp)
vmovapd 0x2a0(%rsp), %ymm1
vmovapd 0xc0(%rsp), %ymm0
vmovapd 0x3c0(%rsp), %ymm2
vfmadd213pd %ymm2, %ymm1, %ymm0 # ymm0 = (ymm1 * ymm0) + ymm2
vmovapd %ymm0, 0x3c0(%rsp)
movslq 0x3b0(%rsp), %rcx
leaq 0xdc302c(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovapd 0xa0(%rsp), %ymm0
movq %rax, 0x7b8(%rsp)
vmovapd %ymm0, 0x780(%rsp)
vmovapd 0x780(%rsp), %ymm0
movq 0x7b8(%rsp), %rax
vmovapd %ymm0, (%rax)
movslq 0x3ac(%rsp), %rcx
leaq 0xdc2fe7(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovapd 0x80(%rsp), %ymm0
movq %rax, 0x778(%rsp)
vmovapd %ymm0, 0x740(%rsp)
vmovapd 0x740(%rsp), %ymm0
movq 0x778(%rsp), %rax
vmovapd %ymm0, (%rax)
movslq 0x3a8(%rsp), %rcx
leaq 0xdc2fa2(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovapd 0x60(%rsp), %ymm0
movq %rax, 0x738(%rsp)
vmovapd %ymm0, 0x700(%rsp)
vmovapd 0x700(%rsp), %ymm0
movq 0x738(%rsp), %rax
vmovapd %ymm0, (%rax)
movslq 0x3a4(%rsp), %rcx
leaq 0xdc2f60(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovapd 0x40(%rsp), %ymm0
movq %rax, 0x6f8(%rsp)
vmovapd %ymm0, 0x6c0(%rsp)
vmovapd 0x6c0(%rsp), %ymm0
movq 0x6f8(%rsp), %rax
vmovapd %ymm0, (%rax)
movl 0x3b4(%rsp), %eax
addl $0x4, %eax
movl %eax, 0x3b4(%rsp)
jmp 0x4465
movslq 0x418(%rsp), %rcx
leaq 0xdc2f08(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovapd 0x3c0(%rsp), %ymm0
movq %rax, 0x6b8(%rsp)
vmovapd %ymm0, 0x680(%rsp)
vmovapd 0x680(%rsp), %ymm0
movq 0x6b8(%rsp), %rax
vmovapd %ymm0, (%rax)
movl 0x3bc(%rsp), %eax
movl $0x4, %ecx
cltd
idivl %ecx
shll $0x2, %eax
movl %eax, 0x3c(%rsp)
movl 0x3c(%rsp), %eax
cmpl 0x3bc(%rsp), %eax
jge 0x4f85
movl 0x3b8(%rsp), %eax
addl 0x3c(%rsp), %eax
movslq %eax, %rcx
leaq 0x90fcad6(%rip), %rax   # 0x9101790
movl (%rax,%rcx,4), %eax
movl %eax, 0x38(%rsp)
movslq 0x38(%rsp), %rcx
leaq 0x18de83(%rip), %rax    # 0x192b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovsd (%rax), %xmm0
movslq 0x418(%rsp), %rcx
leaq 0x18de69(%rip), %rax    # 0x192b50
shlq $0x5, %rcx
addq %rcx, %rax
vsubsd (%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x30(%rsp)
movslq 0x38(%rsp), %rcx
leaq 0x18de4c(%rip), %rax    # 0x192b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovsd 0x8(%rax), %xmm0
movslq 0x418(%rsp), %rcx
leaq 0x18de31(%rip), %rax    # 0x192b50
shlq $0x5, %rcx
addq %rcx, %rax
vsubsd 0x8(%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x28(%rsp)
movslq 0x38(%rsp), %rcx
leaq 0x18de13(%rip), %rax    # 0x192b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovsd 0x10(%rax), %xmm0
movslq 0x418(%rsp), %rcx
leaq 0x18ddf8(%rip), %rax    # 0x192b50
shlq $0x5, %rcx
addq %rcx, %rax
vsubsd 0x10(%rax), %xmm0, %xmm0
vmovsd %xmm0, 0x20(%rsp)
vmovsd 0x30(%rsp), %xmm0
vmovsd 0x30(%rsp), %xmm2
vmovsd 0x28(%rsp), %xmm1
vmulsd 0x28(%rsp), %xmm1, %xmm1
vfmadd213sd %xmm1, %xmm0, %xmm2 # xmm2 = (xmm0 * xmm2) + xmm1
vmovsd 0x20(%rsp), %xmm1
vmovsd 0x20(%rsp), %xmm0
vfmadd213sd %xmm2, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm0) + xmm2
vmovsd %xmm0, 0x18(%rsp)
vmovsd 0x18(%rsp), %xmm0
vmulsd 0x18(%rsp), %xmm0, %xmm0
vmulsd 0x18(%rsp), %xmm0, %xmm0
vmovsd %xmm0, 0x10(%rsp)
vmovsd 0x10(%rsp), %xmm1
vmovsd 0x527c(%rip), %xmm2     # 0xa040
vmovsd 0x527c(%rip), %xmm0     # 0xa048
vfmadd213sd %xmm2, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm0) + xmm2
vmovsd 0x10(%rsp), %xmm1
vmulsd 0x10(%rsp), %xmm1, %xmm1
vmulsd 0x18(%rsp), %xmm1, %xmm1
vdivsd %xmm1, %xmm0, %xmm0
vmovsd 0x5249(%rip), %xmm1     # 0xa038
vmulsd %xmm1, %xmm0, %xmm0
vmovsd %xmm0, 0x8(%rsp)
vmovsd 0x18(%rsp), %xmm0
vmovsd 0x5229(%rip), %xmm1     # 0xa030
vucomisd %xmm1, %xmm0
jbe 0x4e17
vpxor %xmm0, %xmm0, %xmm0
vmovsd %xmm0, 0x8(%rsp)
vmovsd 0x8(%rsp), %xmm1
vmovsd 0x30(%rsp), %xmm0
movslq 0x418(%rsp), %rcx
leaq 0xdc2d1e(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovsd (%rax), %xmm2
vfmadd213sd %xmm2, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm0) + xmm2
vmovsd %xmm0, (%rax)
vmovsd 0x8(%rsp), %xmm1
vmovsd 0x28(%rsp), %xmm0
movslq 0x418(%rsp), %rcx
leaq 0xdc2cef(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovsd 0x8(%rax), %xmm2
vfmadd213sd %xmm2, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm0) + xmm2
vmovsd %xmm0, 0x8(%rax)
vmovsd 0x8(%rsp), %xmm1
vmovsd 0x20(%rsp), %xmm0
movslq 0x418(%rsp), %rcx
leaq 0xdc2cbe(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovsd 0x10(%rax), %xmm2
vfmadd213sd %xmm2, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm0) + xmm2
vmovsd %xmm0, 0x10(%rax)
vmovsd 0x8(%rsp), %xmm1
vmovsd 0x30(%rsp), %xmm0
movslq 0x38(%rsp), %rcx
leaq 0xdc2c90(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovsd (%rax), %xmm2
vmovq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
vmovq %rcx, %xmm1
vfmadd213sd %xmm2, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm0) + xmm2
vmovsd %xmm0, (%rax)
vmovsd 0x8(%rsp), %xmm1
vmovsd 0x28(%rsp), %xmm0
movslq 0x38(%rsp), %rcx
leaq 0xdc2c4d(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovsd 0x8(%rax), %xmm2
vmovq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
vmovq %rcx, %xmm1
vfmadd213sd %xmm2, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm0) + xmm2
vmovsd %xmm0, 0x8(%rax)
vmovsd 0x8(%rsp), %xmm1
vmovsd 0x20(%rsp), %xmm0
movslq 0x38(%rsp), %rcx
leaq 0xdc2c08(%rip), %rax    # 0xdc7b50
shlq $0x5, %rcx
addq %rcx, %rax
vmovsd 0x10(%rax), %xmm2
vmovq %xmm1, %rcx
movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000
xorq %rdx, %rcx
vmovq %rcx, %xmm1
vfmadd213sd %xmm2, %xmm1, %xmm0 # xmm0 = (xmm1 * xmm0) + xmm2
vmovsd %xmm0, 0x10(%rax)
movl 0x3c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x3c(%rsp)
jmp 0x4c94
jmp 0x4f87
movl 0x418(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x418(%rsp)
jmp 0x43ae
movq %rbp, %rsp
popq %rbp
vzeroupper
retq
nopw %cs:(%rax,%rax)