// File: kaityo256[P]lj_simd/force_soa.cpp
// Function: main
int
main(void) {
  SoADataManager soadm(p, q);
  init(&soadm, particle_number);
  check_pairlist(particle_number, number_of_pairs, number_of_partners, i_particles, j_particles, &soadm);
  sortpair(particle_number, number_of_pairs, number_of_partners, i_particles, j_particles, pointer, sorted_list);
#ifdef PAIR
  measure(&force_pair, "SoA+Pair", particle_number);
  soadm.print_results(particle_number);
#elif SORTED
  measure(&force_sorted, "SoA+Sorted", particle_number);
  soadm.print_results(particle_number);
#elif SORTED_SWP
  measure(&force_sorted_swp, "SoA+Sorted+SWP", particle_number);
  soadm.print_results(particle_number);
#elif AVX2
  measure(&force_avx2, "SoA+Sorted+AVX2", particle_number);
  soadm.print_results(particle_number);
#elif AVX2_SWP
  measure(&force_avx2_swp, "SoA+Sorted+AVX2+SWP", particle_number);
  soadm.print_results(particle_number);
#elif AVX512_SIMPLE
  measure(&force_avx512, "SoA+AVX-512+CDE", particle_number);
  soadm.print_results(particle_number);
#elif AVX512_LOOPOPT
  measure(&force_avx512_loopopt, "SoA+AVX-512+CDE+RLE", particle_number);
  soadm.print_results(particle_number);
#elif AVX512_LOOPOPT_SWP
  measure(&force_avx512_loopopt_swp, "SoA+AVX-512+CDE+RLE+SWP", particle_number);
  soadm.print_results(particle_number);
#else
  measure(&force_pair, "SoA+Pair", particle_number);
  measure(&force_sorted, "SoA+Sorted", particle_number);
  measure(&force_sorted_swp, "SoA+Sorted+SWP", particle_number);
  measure(&force_avx2, "SoA+Sorted+AVX2", particle_number);
  measure(&force_avx2_swp, "SoA+Sorted+AVX2+SWP", particle_number);
#ifdef AVX512
  measure(&force_avx512, "SoA+AVX-512+CDE", particle_number);
  measure(&force_avx512_loopopt, "SoA+AVX-512+CDE+RLE", particle_number);
  measure(&force_avx512_loopopt_swp, "SoA+AVX-512+CDE+RLE+SWP", particle_number);
#endif //AVX512
#endif
}

// Assembly:
subq $0x28, %rsp
leaq 0x10(%rsp), %rdi
leaq 0xdbf620(%rip), %rsi    # 0xdc5b10
leaq 0x18a619(%rip), %rdx    # 0x190b10
callq 0x6690
leaq 0x10(%rsp), %rdi
leaq 0x19f4608(%rip), %rsi   # 0x19fab10
callq 0x2c80
movl 0x19f45fd(%rip), %edi   # 0x19fab10
leaq 0x19f45fa(%rip), %rsi   # 0x19fab14
leaq 0x19f45ff(%rip), %rdx   # 0x19fab20
leaq 0x1b7aff8(%rip), %rcx   # 0x1b81520
leaq 0x4941bf1(%rip), %r8    # 0x4948120
leaq 0x10(%rsp), %r9
callq 0x29c0
movl 0x19f45d1(%rip), %edi   # 0x19fab10
leaq 0x19f45ce(%rip), %rsi   # 0x19fab14
leaq 0x19f45d3(%rip), %rdx   # 0x19fab20
leaq 0x1b7afcc(%rip), %rcx   # 0x1b81520
leaq 0x4941bc5(%rip), %r8    # 0x4948120
leaq 0x77087be(%rip), %r9    # 0x770ed20
leaq 0x7a15bb7(%rip), %rax   # 0x7a1c120
movq %rax, (%rsp)
callq 0x2b20
movl 0x19f4598(%rip), %edx   # 0x19fab10
leaq -0x370f(%rip), %rdi     # 0x2e70
leaq 0x1b74(%rip), %rsi      # 0x80fa
callq 0x25b0
movl 0x19f457f(%rip), %edx   # 0x19fab10
leaq -0x3428(%rip), %rdi     # 0x3170
leaq 0x1b64(%rip), %rsi      # 0x8103
callq 0x25b0
movl 0x19f4566(%rip), %edx   # 0x19fab10
leaq -0x6a1(%rip), %rdi      # 0x5f10
leaq 0x1b56(%rip), %rsi      # 0x810e
callq 0x25b0
movl 0x19f454d(%rip), %edx   # 0x19fab10
leaq -0x308a(%rip), %rdi     # 0x3540
leaq 0x1b4c(%rip), %rsi      # 0x811d
callq 0x25b0
movl 0x19f4534(%rip), %edx   # 0x19fab10
leaq -0x2023(%rip), %rdi     # 0x45c0
leaq 0x1b43(%rip), %rsi      # 0x812d
callq 0x25b0
xorl %eax, %eax
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)