user: What is the c source code of the assembly code below:

```asm
<load_xor_and_store_eight>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <_mm_loadu_si128@plt>
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    -0x18(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    -0x20(%rbp),%rax
  add    $0x4,%rax
  mov    %rax,%rdi
  call   <_mm_loadu_si128@plt>
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    -0x18(%rbp),%rcx
  lea    0x4(%rcx),%rbx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,(%rbx)
  mov    -0x20(%rbp),%rax
  add    $0x8,%rax
  mov    %rax,%rdi
  call   <_mm_loadu_si128@plt>
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  mov    -0x18(%rbp),%rcx
  lea    0x8(%rcx),%rbx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,(%rbx)
  mov    -0x20(%rbp),%rax
  add    $0xc,%rax
  mov    %rax,%rdi
  call   <_mm_loadu_si128@plt>
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  add    $0xc,%rax
  mov    (%rax),%eax
  mov    -0x18(%rbp),%rcx
  lea    0xc(%rcx),%rbx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,(%rbx)
  mov    -0x20(%rbp),%rax
  add    $0x10,%rax
  mov    %rax,%rdi
  call   <_mm_loadu_si128@plt>
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%eax
  mov    -0x18(%rbp),%rcx
  lea    0x10(%rcx),%rbx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,(%rbx)
  mov    -0x20(%rbp),%rax
  add    $0x14,%rax
  mov    %rax,%rdi
  call   <_mm_loadu_si128@plt>
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  add    $0x14,%rax
  mov    (%rax),%eax
  mov    -0x18(%rbp),%rcx
  lea    0x14(%rcx),%rbx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,(%rbx)
  mov    -0x20(%rbp),%rax
  add    $0x18,%rax
  mov    %rax,%rdi
  call   <_mm_loadu_si128@plt>
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%eax
  mov    -0x18(%rbp),%rcx
  lea    0x18(%rcx),%rbx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,(%rbx)
  mov    -0x20(%rbp),%rax
  add    $0x1c,%rax
  mov    %rax,%rdi
  call   <_mm_loadu_si128@plt>
  mov    %eax,%edx
  mov    -0x28(%rbp),%rax
  add    $0x1c,%rax
  mov    (%rax),%eax
  mov    -0x18(%rbp),%rcx
  lea    0x1c(%rcx),%rbx
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,(%rbx)
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

assistant: ```c
void load_xor_and_store_eight(__m128i *out, const __m128i *in, const __m128i *states) {
  out[0] = _mm_xor_si128(states[0], _mm_loadu_si128((__m128i *)in));
  out[1] = _mm_xor_si128(states[1], _mm_loadu_si128((__m128i *)in + 1));
  out[2] = _mm_xor_si128(states[2], _mm_loadu_si128((__m128i *)in + 2));
  out[3] = _mm_xor_si128(states[3], _mm_loadu_si128((__m128i *)in + 3));
  out[4] = _mm_xor_si128(states[4], _mm_loadu_si128((__m128i *)in + 4));
  out[5] = _mm_xor_si128(states[5], _mm_loadu_si128((__m128i *)in + 5));
  out[6] = _mm_xor_si128(states[6], _mm_loadu_si128((__m128i *)in + 6));
  out[7] = _mm_xor_si128(states[7], _mm_loadu_si128((__m128i *)in + 7));
}
```