user: Please show me the C implementation that matches the assembly code listed below:

```asm
<xor_salsa_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)
  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,-0x18(%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,-0x14(%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,-0x10(%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,-0xc(%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    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)
  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    -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)
  movl   $0x0,-0x1c(%rbp)
  jmp    L10
L17:
  mov    -0xc(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x7,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x19,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x8(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x9,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x17,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x4(%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_xor_si128@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0xd,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x13,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x8(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x10(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x12,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0xe,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x8(%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    -0x8(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x14(%rbp),%eax
  mov    $0x93,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x10(%rbp),%eax
  mov    $0x4e,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0xc(%rbp),%eax
  mov    $0x39,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x14(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x7,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x19,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x8(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x18(%rbp),%edx
  mov    -0xc(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x9,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x17,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x4(%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_xor_si128@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0xd,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x13,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x4(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x8(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x10(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0x12,%esi
  mov    %eax,%edi
  call   <_mm_slli_epi32@plt>
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  mov    $0xe,%esi
  mov    %eax,%edi
  call   <_mm_srli_epi32@plt>
  mov    %eax,-0x8(%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    -0x8(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x14(%rbp),%eax
  mov    $0x39,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x10(%rbp),%eax
  mov    $0x4e,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0xc(%rbp),%eax
  mov    $0x93,%esi
  mov    %eax,%edi
  call   <_mm_shuffle_epi32@plt>
  mov    %eax,-0xc(%rbp)
  addl   $0x1,-0x1c(%rbp)
L10:
  mov    -0x1c(%rbp),%eax
  cmp    0x20(%rbp),%eax
  jl     L17
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x18(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    -0x28(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x14(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    -0x40(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  mov    -0x10(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    -0x38(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    -0xc(%rbp),%edx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_add_epi32@plt>
  mov    -0x30(%rbp),%rdx
  mov    %eax,(%rdx)
  nop
  leave
  ret
```

assistant: ```c
void xor_salsa_sidm(__m128i *calc_18, __m128i *calc_13, __m128i *calc_9, __m128i *calc_7, __m128i *calc_1, __m128i *calc_4, __m128i *calc_3, __m128i *calc_2, uint32_t double_rounds) {
  int i;
  __m128i _calc;
  __m128i _shift_left;
  __m128i row1 = _mm_xor_si128(*calc_18, *calc_1);
  ;
  __m128i row2 = _mm_xor_si128(*calc_7, *calc_2);
  ;
  __m128i row3 = _mm_xor_si128(*calc_9, *calc_3);
  ;
  __m128i row4 = _mm_xor_si128(*calc_13, *calc_4);
  ;
  *calc_18 = _mm_xor_si128(*calc_18, *calc_1);
  *calc_7 = _mm_xor_si128(*calc_7, *calc_2);
  *calc_9 = _mm_xor_si128(*calc_9, *calc_3);
  *calc_13 = _mm_xor_si128(*calc_13, *calc_4);
  for (i = 0; i < double_rounds; i++) {
    _calc = _mm_add_epi32(row1, row4);
    _shift_left = _mm_slli_epi32(_calc, 7);
    _calc = _mm_srli_epi32(_calc, (32 - 7));
    row2 = _mm_xor_si128(row2, _shift_left);
    row2 = _mm_xor_si128(row2, _calc);
    _calc = _mm_add_epi32(row2, row1);
    _shift_left = _mm_slli_epi32(_calc, 9);
    _calc = _mm_srli_epi32(_calc, (32 - 9));
    row3 = _mm_xor_si128(row3, _shift_left);
    row3 = _mm_xor_si128(row3, _calc);
    _calc = _mm_add_epi32(row3, row2);
    _shift_left = _mm_slli_epi32(_calc, 13);
    _calc = _mm_srli_epi32(_calc, (32 - 13));
    row4 = _mm_xor_si128(row4, _shift_left);
    row4 = _mm_xor_si128(row4, _calc);
    _calc = _mm_add_epi32(row4, row3);
    _shift_left = _mm_slli_epi32(_calc, 18);
    _calc = _mm_srli_epi32(_calc, (32 - 18));
    row1 = _mm_xor_si128(row1, _shift_left);
    row1 = _mm_xor_si128(row1, _calc);
    row2 = _mm_shuffle_epi32(row2, 0x93);
    row3 = _mm_shuffle_epi32(row3, 0x4e);
    row4 = _mm_shuffle_epi32(row4, 0x39);
    _calc = _mm_add_epi32(row1, row2);
    _shift_left = _mm_slli_epi32(_calc, 7);
    _calc = _mm_srli_epi32(_calc, (32 - 7));
    row4 = _mm_xor_si128(row4, _shift_left);
    row4 = _mm_xor_si128(row4, _calc);
    _calc = _mm_add_epi32(row4, row1);
    _shift_left = _mm_slli_epi32(_calc, 9);
    _calc = _mm_srli_epi32(_calc, (32 - 9));
    row3 = _mm_xor_si128(row3, _shift_left);
    row3 = _mm_xor_si128(row3, _calc);
    _calc = _mm_add_epi32(row3, row4);
    _shift_left = _mm_slli_epi32(_calc, 13);
    _calc = _mm_srli_epi32(_calc, (32 - 13));
    row2 = _mm_xor_si128(row2, _shift_left);
    row2 = _mm_xor_si128(row2, _calc);
    _calc = _mm_add_epi32(row2, row3);
    _shift_left = _mm_slli_epi32(_calc, 18);
    _calc = _mm_srli_epi32(_calc, (32 - 18));
    row1 = _mm_xor_si128(row1, _shift_left);
    row1 = _mm_xor_si128(row1, _calc);
    row2 = _mm_shuffle_epi32(row2, 0x39);
    row3 = _mm_shuffle_epi32(row3, 0x4e);
    row4 = _mm_shuffle_epi32(row4, 0x93);
  }
  *calc_18 = _mm_add_epi32(*calc_18, row1);
  *calc_7 = _mm_add_epi32(*calc_7, row2);
  *calc_9 = _mm_add_epi32(*calc_9, row3);
  *calc_13 = _mm_add_epi32(*calc_13, row4);
}
```