user: Demonstrate the C code that generates the assembly output below:

```asm
<unpack32_avx2>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %ecx,%ebp
  lea    0x1f(%rdx),%ecx
  test   %edx,%edx
  cmovns %edx,%ecx
  mov    %ecx,%ebx
  sar    $0x5,%ebx
  and    $0xffffffe0,%ecx
  mov    %ecx,%r12d
  cmp    $0x20,%ebp
  ja     L483
  mov    %rsi,%rax
  mov    %ebp,%ecx
  lea    D0(%rip),%rsi
  movslq (%rsi,%rcx,4),%rcx
  add    %rsi,%rcx
  notrack jmp *%rcx
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L579:
  mov    %r13,%rsi
  call   <unpack32_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L579
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L929:
  mov    %r13,%rsi
  call   <unpack31_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L929
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L881:
  mov    %r13,%rsi
  call   <unpack30_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L881
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L912:
  mov    %r13,%rsi
  call   <unpack29_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L912
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L418:
  mov    %r13,%rsi
  call   <unpack28_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L418
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L556:
  mov    %r13,%rsi
  call   <unpack27_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L556
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L846:
  mov    %r13,%rsi
  call   <unpack26_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L846
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L286:
  mov    %r13,%rsi
  call   <unpack25_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L286
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L396:
  mov    %r13,%rsi
  call   <unpack24_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L396
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L246:
  mov    %r13,%rsi
  call   <unpack23_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L246
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L641:
  mov    %r13,%rsi
  call   <unpack22_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L641
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L695:
  mov    %r13,%rsi
  call   <unpack21_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L695
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L966:
  mov    %r13,%rsi
  call   <unpack20_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L966
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L92:
  mov    %r13,%rsi
  call   <unpack19_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L92
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L73:
  mov    %r13,%rsi
  call   <unpack18_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L73
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L185:
  mov    %r13,%rsi
  call   <unpack17_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L185
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L818:
  mov    %r13,%rsi
  call   <unpack16_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L818
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L400:
  mov    %r13,%rsi
  call   <unpack15_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L400
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L820:
  mov    %r13,%rsi
  call   <unpack14_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L820
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L627:
  mov    %r13,%rsi
  call   <unpack13_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L627
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L175:
  mov    %r13,%rsi
  call   <unpack12_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L175
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L805:
  mov    %r13,%rsi
  call   <unpack11_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L805
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L681:
  mov    %r13,%rsi
  call   <unpack10_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L681
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L743:
  mov    %r13,%rsi
  call   <unpack9_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L743
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L485:
  mov    %r13,%rsi
  call   <unpack8_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L485
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L8:
  mov    %r13,%rsi
  call   <unpack7_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L8
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L698:
  mov    %r13,%rsi
  call   <unpack6_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L698
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L439:
  mov    %r13,%rsi
  call   <unpack5_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L439
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L232:
  mov    %r13,%rsi
  call   <unpack4_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L232
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L477:
  mov    %r13,%rsi
  call   <unpack3_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L477
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L377:
  mov    %r13,%rsi
  call   <unpack2_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L377
  jmp    L483
  mov    %rax,%r13
  mov    $0x0,%ebp
  cmp    $0x1f,%edx
  jle    L483
L94:
  mov    %r13,%rsi
  call   <unpack1_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L94
  jmp    L483
  cmp    $0x1f,%edx
  jle    L483
  mov    %rax,%r13
L466:
  mov    %r13,%rsi
  call   <unpack0_32_avx2@plt>
  mov    %rax,%rdi
  add    $0x1,%ebp
  sub    $0xffffffffffffff80,%r13
  cmp    %ebp,%ebx
  jg     L466
L483:
  mov    %r12d,%eax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
```

assistant: ```c
int unpack32_avx2(const uint32_t *in, uint32_t *out, int batch_size, int num_bits) {
  batch_size = batch_size / 32 * 32;
  int num_loops = batch_size / 32;
  switch (num_bits) {
  case 0:
    for (int i = 0; i < num_loops; ++i)
      in = unpack0_32_avx2(in, out + i * 32);
    break;
  case 1:
    for (int i = 0; i < num_loops; ++i)
      in = unpack1_32_avx2(in, out + i * 32);
    break;
  case 2:
    for (int i = 0; i < num_loops; ++i)
      in = unpack2_32_avx2(in, out + i * 32);
    break;
  case 3:
    for (int i = 0; i < num_loops; ++i)
      in = unpack3_32_avx2(in, out + i * 32);
    break;
  case 4:
    for (int i = 0; i < num_loops; ++i)
      in = unpack4_32_avx2(in, out + i * 32);
    break;
  case 5:
    for (int i = 0; i < num_loops; ++i)
      in = unpack5_32_avx2(in, out + i * 32);
    break;
  case 6:
    for (int i = 0; i < num_loops; ++i)
      in = unpack6_32_avx2(in, out + i * 32);
    break;
  case 7:
    for (int i = 0; i < num_loops; ++i)
      in = unpack7_32_avx2(in, out + i * 32);
    break;
  case 8:
    for (int i = 0; i < num_loops; ++i)
      in = unpack8_32_avx2(in, out + i * 32);
    break;
  case 9:
    for (int i = 0; i < num_loops; ++i)
      in = unpack9_32_avx2(in, out + i * 32);
    break;
  case 10:
    for (int i = 0; i < num_loops; ++i)
      in = unpack10_32_avx2(in, out + i * 32);
    break;
  case 11:
    for (int i = 0; i < num_loops; ++i)
      in = unpack11_32_avx2(in, out + i * 32);
    break;
  case 12:
    for (int i = 0; i < num_loops; ++i)
      in = unpack12_32_avx2(in, out + i * 32);
    break;
  case 13:
    for (int i = 0; i < num_loops; ++i)
      in = unpack13_32_avx2(in, out + i * 32);
    break;
  case 14:
    for (int i = 0; i < num_loops; ++i)
      in = unpack14_32_avx2(in, out + i * 32);
    break;
  case 15:
    for (int i = 0; i < num_loops; ++i)
      in = unpack15_32_avx2(in, out + i * 32);
    break;
  case 16:
    for (int i = 0; i < num_loops; ++i)
      in = unpack16_32_avx2(in, out + i * 32);
    break;
  case 17:
    for (int i = 0; i < num_loops; ++i)
      in = unpack17_32_avx2(in, out + i * 32);
    break;
  case 18:
    for (int i = 0; i < num_loops; ++i)
      in = unpack18_32_avx2(in, out + i * 32);
    break;
  case 19:
    for (int i = 0; i < num_loops; ++i)
      in = unpack19_32_avx2(in, out + i * 32);
    break;
  case 20:
    for (int i = 0; i < num_loops; ++i)
      in = unpack20_32_avx2(in, out + i * 32);
    break;
  case 21:
    for (int i = 0; i < num_loops; ++i)
      in = unpack21_32_avx2(in, out + i * 32);
    break;
  case 22:
    for (int i = 0; i < num_loops; ++i)
      in = unpack22_32_avx2(in, out + i * 32);
    break;
  case 23:
    for (int i = 0; i < num_loops; ++i)
      in = unpack23_32_avx2(in, out + i * 32);
    break;
  case 24:
    for (int i = 0; i < num_loops; ++i)
      in = unpack24_32_avx2(in, out + i * 32);
    break;
  case 25:
    for (int i = 0; i < num_loops; ++i)
      in = unpack25_32_avx2(in, out + i * 32);
    break;
  case 26:
    for (int i = 0; i < num_loops; ++i)
      in = unpack26_32_avx2(in, out + i * 32);
    break;
  case 27:
    for (int i = 0; i < num_loops; ++i)
      in = unpack27_32_avx2(in, out + i * 32);
    break;
  case 28:
    for (int i = 0; i < num_loops; ++i)
      in = unpack28_32_avx2(in, out + i * 32);
    break;
  case 29:
    for (int i = 0; i < num_loops; ++i)
      in = unpack29_32_avx2(in, out + i * 32);
    break;
  case 30:
    for (int i = 0; i < num_loops; ++i)
      in = unpack30_32_avx2(in, out + i * 32);
    break;
  case 31:
    for (int i = 0; i < num_loops; ++i)
      in = unpack31_32_avx2(in, out + i * 32);
    break;
  case 32:
    for (int i = 0; i < num_loops; ++i)
      in = unpack32_32_avx2(in, out + i * 32);
    break;
  }
  return batch_size;
}
```