// File: /workspace/github_cpp_makefile_star2_O2/sid1607[P]avx2-merge-sort/merge_sort.cpp
// Function: transpose8(float vector[8]*, float vector[8]*, float vector[8]*, float vector[8]*, float vector[8]*, float vector[8]*, float vector[8]*, float vector[8]*)
inline void transpose8(__m256* row0, __m256* row1, __m256* row2, __m256* row3,
                       __m256* row4, __m256* row5, __m256* row6, __m256* row7) {
  __m256 __t0, __t1, __t2, __t3, __t4, __t5, __t6, __t7;
  __m256 __tt0, __tt1, __tt2, __tt3, __tt4, __tt5, __tt6, __tt7;
  static const int mask0 = _MM_SHUFFLE(1,0,1,0);
  static const int mask1 = _MM_SHUFFLE(3,2,3,2);
  __t0 = _mm256_unpacklo_ps(*row0, *row1);
  __t1 = _mm256_unpackhi_ps(*row0, *row1);
  __t2 = _mm256_unpacklo_ps(*row2, *row3);
  __t3 = _mm256_unpackhi_ps(*row2, *row3);
  __t4 = _mm256_unpacklo_ps(*row4, *row5);
  __t5 = _mm256_unpackhi_ps(*row4, *row5);
  __t6 = _mm256_unpacklo_ps(*row6, *row7);
  __t7 = _mm256_unpackhi_ps(*row6, *row7);
  __tt0 = _mm256_shuffle_ps(__t0,__t2, mask0);
  __tt1 = _mm256_shuffle_ps(__t0,__t2, mask1);
  __tt2 = _mm256_shuffle_ps(__t1,__t3, mask0);
  __tt3 = _mm256_shuffle_ps(__t1,__t3, mask1);
  __tt4 = _mm256_shuffle_ps(__t4,__t6, mask0);
  __tt5 = _mm256_shuffle_ps(__t4,__t6, mask1);
  __tt6 = _mm256_shuffle_ps(__t5,__t7, mask0);
  __tt7 = _mm256_shuffle_ps(__t5,__t7, mask1);
  *row0 = _mm256_permute2f128_ps(__tt0, __tt4, 0x20);
  *row1 = _mm256_permute2f128_ps(__tt1, __tt5, 0x20);
  *row2 = _mm256_permute2f128_ps(__tt2, __tt6, 0x20);
  *row3 = _mm256_permute2f128_ps(__tt3, __tt7, 0x20);
  *row4 = _mm256_permute2f128_ps(__tt0, __tt4, 0x31);
  *row5 = _mm256_permute2f128_ps(__tt1, __tt5, 0x31);
  *row6 = _mm256_permute2f128_ps(__tt2, __tt6, 0x31);
  *row7 = _mm256_permute2f128_ps(__tt3, __tt7, 0x31);
}

// Assembly:
movq 0x10(%rsp), %rax
movq 0x8(%rsp), %r10
vmovaps (%rdi), %ymm0
vmovaps (%rsi), %ymm1
vunpcklps %ymm1, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
vunpckhps %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
vmovaps (%rdx), %ymm1
vmovaps (%rcx), %ymm3
vunpcklps %ymm3, %ymm1, %ymm4 # ymm4 = ymm1[0],ymm3[0],ymm1[1],ymm3[1],ymm1[4],ymm3[4],ymm1[5],ymm3[5]
vunpckhps %ymm3, %ymm1, %ymm1 # ymm1 = ymm1[2],ymm3[2],ymm1[3],ymm3[3],ymm1[6],ymm3[6],ymm1[7],ymm3[7]
vmovaps (%r8), %ymm3
vmovaps (%r9), %ymm5
vunpcklps %ymm5, %ymm3, %ymm6 # ymm6 = ymm3[0],ymm5[0],ymm3[1],ymm5[1],ymm3[4],ymm5[4],ymm3[5],ymm5[5]
vunpckhps %ymm5, %ymm3, %ymm3 # ymm3 = ymm3[2],ymm5[2],ymm3[3],ymm5[3],ymm3[6],ymm5[6],ymm3[7],ymm5[7]
vmovaps (%r10), %ymm5
vmovaps (%rax), %ymm7
vunpcklps %ymm7, %ymm5, %ymm8 # ymm8 = ymm5[0],ymm7[0],ymm5[1],ymm7[1],ymm5[4],ymm7[4],ymm5[5],ymm7[5]
vunpckhps %ymm7, %ymm5, %ymm5 # ymm5 = ymm5[2],ymm7[2],ymm5[3],ymm7[3],ymm5[6],ymm7[6],ymm5[7],ymm7[7]
vunpcklpd %ymm4, %ymm2, %ymm7 # ymm7 = ymm2[0],ymm4[0],ymm2[2],ymm4[2]
vunpckhpd %ymm4, %ymm2, %ymm2 # ymm2 = ymm2[1],ymm4[1],ymm2[3],ymm4[3]
vunpcklpd %ymm1, %ymm0, %ymm4 # ymm4 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
vunpckhpd %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]
vunpcklpd %ymm8, %ymm6, %ymm1 # ymm1 = ymm6[0],ymm8[0],ymm6[2],ymm8[2]
vunpckhpd %ymm8, %ymm6, %ymm6 # ymm6 = ymm6[1],ymm8[1],ymm6[3],ymm8[3]
vunpcklpd %ymm5, %ymm3, %ymm8 # ymm8 = ymm3[0],ymm5[0],ymm3[2],ymm5[2]
vunpckhpd %ymm5, %ymm3, %ymm3 # ymm3 = ymm3[1],ymm5[1],ymm3[3],ymm5[3]
vinsertf128 $0x1, %xmm1, %ymm7, %ymm5
vmovaps %ymm5, (%rdi)
vinsertf128 $0x1, %xmm6, %ymm2, %ymm5
vmovaps %ymm5, (%rsi)
vinsertf128 $0x1, %xmm8, %ymm4, %ymm5
vmovaps %ymm5, (%rdx)
vinsertf128 $0x1, %xmm3, %ymm0, %ymm5
vmovaps %ymm5, (%rcx)
vperm2f128 $0x31, %ymm1, %ymm7, %ymm1 # ymm1 = ymm7[2,3],ymm1[2,3]
vmovaps %ymm1, (%r8)
vperm2f128 $0x31, %ymm6, %ymm2, %ymm1 # ymm1 = ymm2[2,3],ymm6[2,3]
vmovaps %ymm1, (%r9)
vperm2f128 $0x31, %ymm8, %ymm4, %ymm1 # ymm1 = ymm4[2,3],ymm8[2,3]
vmovaps %ymm1, (%r10)
vperm2f128 $0x31, %ymm3, %ymm0, %ymm0 # ymm0 = ymm0[2,3],ymm3[2,3]
vmovaps %ymm0, (%rax)
vzeroupper
retq
nop