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

```asm
<ec_encode_data_update_avx2>:
  endbr64
  push   %r15
  mov    %ecx,%r15d
  push   %r14
  mov    %edi,%r14d
  push   %r13
  mov    %r8,%r13
  mov    %r9,%r8
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  mov    %esi,%ebp
  push   %rbx
  sub    $0x18,%rsp
  mov    0x50(%rsp),%rbx
  cmp    $0x1f,%edi
  jle    L9
  cmp    $0x6,%r12d
  jle    L36
  lea    (%rsi,%rsi,2),%eax
  shl    $0x6,%eax
  cltq
  mov    %rax,0x8(%rsp)
L29:
  mov    %rbx,%r9
  mov    %r13,%rcx
  mov    %r15d,%edx
  mov    %ebp,%esi
  mov    %r14d,%edi
  sub    $0x6,%r12d
  mov    %r8,(%rsp)
  add    $0x30,%rbx
  call   <gf_6vect_mad_avx2@plt>
  add    0x8(%rsp),%r13
  cmp    $0x6,%r12d
  mov    (%rsp),%r8
  jg     L29
L36:
  cmp    $0x6,%r12d
  ja     L18
  lea    D2(%rip),%rcx
  movslq (%rcx,%r12,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
L9:
  mov    %rbx,0x50(%rsp)
  add    $0x18,%rsp
  mov    %r13,%r8
  mov    %r12d,%edx
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1110 <ec_encode_data_update_base@plt>
  xchg   %ax,%ax
  add    $0x18,%rsp
  mov    %rbx,%r9
  mov    %r13,%rcx
  mov    %r15d,%edx
  pop    %rbx
  mov    %ebp,%esi
  mov    %r14d,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10d0 <gf_6vect_mad_avx2@plt>
  nopl   0x0(%rax)
  mov    (%rbx),%r9
  add    $0x18,%rsp
  mov    %r13,%rcx
  mov    %r15d,%edx
  pop    %rbx
  mov    %ebp,%esi
  mov    %r14d,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10c0 <gf_vect_mad_avx2@plt>
  nopl   0x0(%rax)
  add    $0x18,%rsp
  mov    %rbx,%r9
  mov    %r13,%rcx
  mov    %r15d,%edx
  pop    %rbx
  mov    %ebp,%esi
  mov    %r14d,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1100 <gf_2vect_mad_avx2@plt>
  nopl   0x0(%rax)
  add    $0x18,%rsp
  mov    %rbx,%r9
  mov    %r13,%rcx
  mov    %r15d,%edx
  pop    %rbx
  mov    %ebp,%esi
  mov    %r14d,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10f0 <gf_3vect_mad_avx2@plt>
  nopl   0x0(%rax)
  add    $0x18,%rsp
  mov    %rbx,%r9
  mov    %r13,%rcx
  mov    %r15d,%edx
  pop    %rbx
  mov    %ebp,%esi
  mov    %r14d,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10b0 <gf_4vect_mad_avx2@plt>
  nopl   0x0(%rax)
  add    $0x18,%rsp
  mov    %rbx,%r9
  mov    %r13,%rcx
  mov    %r15d,%edx
  pop    %rbx
  mov    %ebp,%esi
  mov    %r14d,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    10e0 <gf_5vect_mad_avx2@plt>
L18:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
void ec_encode_data_update_avx2(int len, int k, int rows, int vec_i, unsigned char *g_tbls, unsigned char *data, unsigned char **coding) {
  if (len < 32) {
    ec_encode_data_update_base(len, k, rows, vec_i, g_tbls, data, coding);
    return;
  }
  while (rows > 6) {
    gf_6vect_mad_avx2(len, k, vec_i, g_tbls, data, coding);
    g_tbls += 6 * k * 32;
    coding += 6;
    rows -= 6;
  }
  switch (rows) {
  case 6:
    gf_6vect_mad_avx2(len, k, vec_i, g_tbls, data, coding);
    break;
  case 5:
    gf_5vect_mad_avx2(len, k, vec_i, g_tbls, data, coding);
    break;
  case 4:
    gf_4vect_mad_avx2(len, k, vec_i, g_tbls, data, coding);
    break;
  case 3:
    gf_3vect_mad_avx2(len, k, vec_i, g_tbls, data, coding);
    break;
  case 2:
    gf_2vect_mad_avx2(len, k, vec_i, g_tbls, data, coding);
    break;
  case 1:
    gf_vect_mad_avx2(len, k, vec_i, g_tbls, data, *coding);
    break;
  case 0:
    break;
  }
}
```