// File: /workspace/github_c_makefile_star2_O2/samtools[P]htslib/htscodecs/htscodecs/rANS_static32x16pr_avx512.c
// Function: transpose_and_copy
static inline void transpose_and_copy(uint8_t *out, int iN[32],
                                      uint8_t t[32][32]) {
//  int z;
//  for (z = 0; z < 32; z++) {
//      int k;
//      for (k = 0; k < 32; k++)
//          out[iN[z]+k] = t[k][z];
//      iN[z] += 32;
//  }

    rot32_simd(t, out, iN);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
andq $-0x20, %rsp
subq $0x820, %rsp            # imm = 0x820
xorl %eax, %eax
xorl %ecx, %ecx
cmpq $0xf, %rcx
ja 0x5947a
vmovdqu (%rdx,%rax,2), %ymm0
vmovdqu 0x20(%rdx,%rax,2), %ymm1
vmovdqu 0x40(%rdx,%rax,2), %ymm2
vmovdqu 0x60(%rdx,%rax,2), %ymm3
vpunpcklbw %ymm1, %ymm0, %ymm4 # ymm4 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
vmovdqa %ymm4, (%rsp,%rax)
vpunpckhbw %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
vmovdqa %ymm0, 0x200(%rsp,%rax)
vpunpcklbw %ymm3, %ymm2, %ymm0 # ymm0 = ymm2[0],ymm3[0],ymm2[1],ymm3[1],ymm2[2],ymm3[2],ymm2[3],ymm3[3],ymm2[4],ymm3[4],ymm2[5],ymm3[5],ymm2[6],ymm3[6],ymm2[7],ymm3[7],ymm2[16],ymm3[16],ymm2[17],ymm3[17],ymm2[18],ymm3[18],ymm2[19],ymm3[19],ymm2[20],ymm3[20],ymm2[21],ymm3[21],ymm2[22],ymm3[22],ymm2[23],ymm3[23]
vmovdqa %ymm0, 0x20(%rsp,%rax)
vpunpckhbw %ymm3, %ymm2, %ymm0 # ymm0 = ymm2[8],ymm3[8],ymm2[9],ymm3[9],ymm2[10],ymm3[10],ymm2[11],ymm3[11],ymm2[12],ymm3[12],ymm2[13],ymm3[13],ymm2[14],ymm3[14],ymm2[15],ymm3[15],ymm2[24],ymm3[24],ymm2[25],ymm3[25],ymm2[26],ymm3[26],ymm2[27],ymm3[27],ymm2[28],ymm3[28],ymm2[29],ymm3[29],ymm2[30],ymm3[30],ymm2[31],ymm3[31]
vmovdqa %ymm0, 0x220(%rsp,%rax)
addq $0x2, %rcx
addq $0x40, %rax
jmp 0x59426
xorl %eax, %eax
xorl %ecx, %ecx
cmpq $0x8, %rcx
jae 0x5955c
vmovdqa (%rsp,%rax,4), %ymm0
vmovdqa 0x20(%rsp,%rax,4), %ymm1
vmovdqa 0x40(%rsp,%rax,4), %ymm2
vmovdqa 0x60(%rsp,%rax,4), %ymm3
vpunpcklwd %ymm1, %ymm0, %ymm4 # ymm4 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]
vpunpcklwd %ymm3, %ymm2, %ymm5 # ymm5 = ymm2[0],ymm3[0],ymm2[1],ymm3[1],ymm2[2],ymm3[2],ymm2[3],ymm3[3],ymm2[8],ymm3[8],ymm2[9],ymm3[9],ymm2[10],ymm3[10],ymm2[11],ymm3[11]
vpunpckhwd %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15]
vpunpckhwd %ymm3, %ymm2, %ymm1 # ymm1 = ymm2[4],ymm3[4],ymm2[5],ymm3[5],ymm2[6],ymm3[6],ymm2[7],ymm3[7],ymm2[12],ymm3[12],ymm2[13],ymm3[13],ymm2[14],ymm3[14],ymm2[15],ymm3[15]
vmovdqa 0x80(%rsp,%rax,4), %ymm2
vmovdqa 0xa0(%rsp,%rax,4), %ymm3
vpunpcklwd %ymm3, %ymm2, %ymm6 # ymm6 = ymm2[0],ymm3[0],ymm2[1],ymm3[1],ymm2[2],ymm3[2],ymm2[3],ymm3[3],ymm2[8],ymm3[8],ymm2[9],ymm3[9],ymm2[10],ymm3[10],ymm2[11],ymm3[11]
vmovdqa 0xc0(%rsp,%rax,4), %ymm7
vmovdqa 0xe0(%rsp,%rax,4), %ymm8
vpunpcklwd %ymm8, %ymm7, %ymm9 # ymm9 = ymm7[0],ymm8[0],ymm7[1],ymm8[1],ymm7[2],ymm8[2],ymm7[3],ymm8[3],ymm7[8],ymm8[8],ymm7[9],ymm8[9],ymm7[10],ymm8[10],ymm7[11],ymm8[11]
vpunpckhwd %ymm3, %ymm2, %ymm2 # ymm2 = ymm2[4],ymm3[4],ymm2[5],ymm3[5],ymm2[6],ymm3[6],ymm2[7],ymm3[7],ymm2[12],ymm3[12],ymm2[13],ymm3[13],ymm2[14],ymm3[14],ymm2[15],ymm3[15]
vpunpckhwd %ymm8, %ymm7, %ymm3 # ymm3 = ymm7[4],ymm8[4],ymm7[5],ymm8[5],ymm7[6],ymm8[6],ymm7[7],ymm8[7],ymm7[12],ymm8[12],ymm7[13],ymm8[13],ymm7[14],ymm8[14],ymm7[15],ymm8[15]
vpunpckldq %ymm5, %ymm4, %ymm7 # ymm7 = ymm4[0],ymm5[0],ymm4[1],ymm5[1],ymm4[4],ymm5[4],ymm4[5],ymm5[5]
vmovdqa %ymm7, 0x400(%rsp,%rax)
vpunpckldq %ymm1, %ymm0, %ymm7 # ymm7 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]
vmovdqa %ymm7, 0x500(%rsp,%rax)
vpunpckhdq %ymm5, %ymm4, %ymm4 # ymm4 = ymm4[2],ymm5[2],ymm4[3],ymm5[3],ymm4[6],ymm5[6],ymm4[7],ymm5[7]
vmovdqa %ymm4, 0x600(%rsp,%rax)
vpunpckhdq %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]
vmovdqa %ymm0, 0x700(%rsp,%rax)
vpunpckldq %ymm9, %ymm6, %ymm0 # ymm0 = ymm6[0],ymm9[0],ymm6[1],ymm9[1],ymm6[4],ymm9[4],ymm6[5],ymm9[5]
vmovdqa %ymm0, 0x420(%rsp,%rax)
vpunpckldq %ymm3, %ymm2, %ymm0 # ymm0 = ymm2[0],ymm3[0],ymm2[1],ymm3[1],ymm2[4],ymm3[4],ymm2[5],ymm3[5]
vmovdqa %ymm0, 0x520(%rsp,%rax)
vpunpckhdq %ymm9, %ymm6, %ymm0 # ymm0 = ymm6[2],ymm9[2],ymm6[3],ymm9[3],ymm6[6],ymm9[6],ymm6[7],ymm9[7]
vmovdqa %ymm0, 0x620(%rsp,%rax)
vpunpckhdq %ymm3, %ymm2, %ymm0 # ymm0 = ymm2[2],ymm3[2],ymm2[3],ymm3[3],ymm2[6],ymm3[6],ymm2[7],ymm3[7]
vmovdqa %ymm0, 0x720(%rsp,%rax)
addq $0x2, %rcx
addq $0x40, %rax
jmp 0x5947e
xorl %eax, %eax
leaq 0x287db(%rip), %rcx     # 0x81d40
leaq 0x400(%rsp), %rdx
cmpq $0x20, %rax
je 0x59613
movslq (%rax,%rcx), %r8
leaq (%r8,%r8), %r9
shlq $0x6, %r8
vmovdqa 0x400(%rsp,%r8), %ymm0
leal 0x1(%r9), %r8d
movslq %r8d, %r8
shlq $0x5, %r8
vmovdqa 0x400(%rsp,%r8), %ymm1
vpunpcklqdq %ymm1, %ymm0, %ymm2 # ymm2 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]
movslq %r9d, %r8
shlq $0x5, %r8
vmovdqa 0x40(%r8,%rdx), %ymm3
vmovdqa 0x60(%r8,%rdx), %ymm4
vpunpcklqdq %ymm4, %ymm3, %ymm5 # ymm5 = ymm3[0],ymm4[0],ymm3[2],ymm4[2]
vpunpckhqdq %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]
vpunpckhqdq %ymm4, %ymm3, %ymm1 # ymm1 = ymm3[1],ymm4[1],ymm3[3],ymm4[3]
vinserti128 $0x1, %xmm5, %ymm2, %ymm3
vinserti128 $0x1, %xmm1, %ymm0, %ymm4
vperm2i128 $0x31, %ymm5, %ymm2, %ymm2 # ymm2 = ymm2[2,3],ymm5[2,3]
vperm2i128 $0x31, %ymm1, %ymm0, %ymm0 # ymm0 = ymm0[2,3],ymm1[2,3]
movslq (%rsi,%rax,2), %r8
vmovdqu %ymm3, (%rdi,%r8)
movslq 0x4(%rsi,%rax,2), %r8
vmovdqu %ymm4, (%rdi,%r8)
movslq 0x40(%rsi,%rax,2), %r8
vmovdqu %ymm2, (%rdi,%r8)
movslq 0x44(%rsi,%rax,2), %r8
vmovdqu %ymm0, (%rdi,%r8)
addq $0x4, %rax
jmp 0x5956d
xorl %eax, %eax
cmpq $0x20, %rax
je 0x59624
addl $0x20, (%rsi,%rax,4)
incq %rax
jmp 0x59615
movq %rbp, %rsp
popq %rbp
vzeroupper
retq