user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<xor_chacha_sidm>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x50,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    %r8,-0x48(%rbp)
  mov    %r9,-0x50(%rbp)
  push   $0xd
  push   $0xc
  push   $0xf
  push   $0xe
  push   $0x9
  push   $0x8
  push   $0xb
  push   $0xa
  push   $0x5
  push   $0x4
  mov    $0x7,%r9d
  mov    $0x6,%r8d
  mov    $0x1,%ecx
  mov    $0x0,%edx
  mov    $0x3,%esi
  mov    $0x2,%edi
  call   <_mm_setr_epi8@plt>
  add    $0x50,%rsp
  mov    %eax,-0xc(%rbp)
  push   $0xe
  push   $0xd
  push   $0xc
  push   $0xf
  push   $0xa
  push   $0x9
  push   $0x8
  push   $0xb
  push   $0x6
  push   $0x5
  mov    $0x4,%r9d
  mov    $0x7,%r8d
  mov    $0x2,%ecx
  mov    $0x1,%edx
  mov    $0x0,%esi
  mov    $0x3,%edi
  call   <_mm_setr_epi8@plt>
  add    $0x50,%rsp
  mov    %eax,-0x8(%rbp)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x50(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x18(%rbp)
  mov    0x10(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x14(%rbp)
  mov    0x18(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    -0x28(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x50(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    -0x30(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    0x10(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    -0x38(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    0x18(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    -0x40(%rbp),%rdx
  mov    %eax,(%rdx)
  movl   $0x0,-0x20(%rbp)
  jmp    L1
L14:
  mov    -0x18(%rbp),%edx
  mov    -0x1c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi8@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0xc,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x14,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x1c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x8(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi8@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x7,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x19,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%eax
  mov    $0x39,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x14(%rbp),%eax
  mov    $0x4e,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x10(%rbp),%eax
  mov    $0x93,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x1c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi8@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0xc,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x14,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x1c(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x1c(%rbp)
  mov    -0x1c(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x8(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi8@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x7,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x4(%rbp),%eax
  mov    $0x19,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%eax
  mov    $0x93,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x14(%rbp),%eax
  mov    $0x4e,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x10(%rbp),%eax
  mov    $0x39,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x10(%rbp)
  addl   $0x1,-0x20(%rbp)
L1:
  mov    -0x20(%rbp),%eax
  cmp    0x20(%rbp),%eax
  jl     L14
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x1c(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    -0x28(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x18(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    -0x30(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x14(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    -0x38(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x10(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    -0x40(%rbp),%rdx
  mov    %eax,(%rdx)
  nop
  leave
  ret
```

assistant: ```c
void xor_chacha_sidm(__m128i *calc_16, __m128i *calc_12, __m128i *calc_8, __m128i *calc_7, __m128i *calc_1, __m128i *calc_2, __m128i *calc_3, __m128i *calc_4, uint32_t double_rounds) {
  int i;
  __m128i _calc;
  __m128i _rotate_16 = _mm_setr_epi8(2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9, 14, 15, 12, 13);
  __m128i _rotate_8 = _mm_setr_epi8(3, 0, 1, 2, 7, 4, 5, 6, 11, 8, 9, 10, 15, 12, 13, 14);
  __m128i rowa = _mm_xor_si128(*calc_16, *calc_1);
  ;
  __m128i rowb = _mm_xor_si128(*calc_12, *calc_2);
  ;
  __m128i rowc = _mm_xor_si128(*calc_8, *calc_3);
  ;
  __m128i rowd = _mm_xor_si128(*calc_7, *calc_4);
  ;
  *calc_16 = _mm_xor_si128(*calc_16, *calc_1);
  *calc_12 = _mm_xor_si128(*calc_12, *calc_2);
  *calc_8 = _mm_xor_si128(*calc_8, *calc_3);
  *calc_7 = _mm_xor_si128(*calc_7, *calc_4);
  for (i = 0; i < double_rounds; i++) {
    rowa = _mm_add_epi32(rowa, rowb);
    rowd = _mm_xor_si128(rowd, rowa);
    rowd = _mm_shuffle_epi8(rowd, _rotate_16);
    rowc = _mm_add_epi32(rowc, rowd);
    _calc = _mm_xor_si128(rowb, rowc);
    rowb = _mm_slli_epi32(_calc, (12));
    _calc = _mm_srli_epi32(_calc, (32 - 12));
    rowb = _mm_xor_si128(rowb, _calc);
    rowa = _mm_add_epi32(rowa, rowb);
    rowd = _mm_xor_si128(rowd, rowa);
    rowd = _mm_shuffle_epi8(rowd, _rotate_8);
    rowc = _mm_add_epi32(rowc, rowd);
    _calc = _mm_xor_si128(rowb, rowc);
    rowb = _mm_slli_epi32(_calc, (7));
    _calc = _mm_srli_epi32(_calc, (32 - 7));
    rowb = _mm_xor_si128(rowb, _calc);
    rowb = _mm_shuffle_epi32(rowb, 0x39);
    rowc = _mm_shuffle_epi32(rowc, 0x4e);
    rowd = _mm_shuffle_epi32(rowd, 0x93);
    rowa = _mm_add_epi32(rowa, rowb);
    rowd = _mm_xor_si128(rowd, rowa);
    rowd = _mm_shuffle_epi8(rowd, _rotate_16);
    rowc = _mm_add_epi32(rowc, rowd);
    _calc = _mm_xor_si128(rowb, rowc);
    rowb = _mm_slli_epi32(_calc, (12));
    _calc = _mm_srli_epi32(_calc, (32 - 12));
    rowb = _mm_xor_si128(rowb, _calc);
    rowa = _mm_add_epi32(rowa, rowb);
    rowd = _mm_xor_si128(rowd, rowa);
    rowd = _mm_shuffle_epi8(rowd, _rotate_8);
    rowc = _mm_add_epi32(rowc, rowd);
    _calc = _mm_xor_si128(rowb, rowc);
    rowb = _mm_slli_epi32(_calc, (7));
    _calc = _mm_srli_epi32(_calc, (32 - 7));
    rowb = _mm_xor_si128(rowb, _calc);
    rowb = _mm_shuffle_epi32(rowb, 0x93);
    rowc = _mm_shuffle_epi32(rowc, 0x4e);
    rowd = _mm_shuffle_epi32(rowd, 0x39);
  }
  *calc_16 = _mm_add_epi32(*calc_16, rowa);
  *calc_12 = _mm_add_epi32(*calc_12, rowb);
  *calc_8 = _mm_add_epi32(*calc_8, rowc);
  *calc_7 = _mm_add_epi32(*calc_7, rowd);
}
```