user: 这段汇编代码用C语言表示是什么样的：

```asm
<clnh_full_block>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    $0x0,%eax
  call   <_mm_setzero_si128@plt>
  mov    -0x38(%rbp),%rdx
  mov    %eax,(%rdx)
  mov    $0x0,%eax
  call   <_mm_setzero_si128@plt>
  mov    -0x40(%rbp),%rdx
  mov    %eax,(%rdx)
  movq   $0x400,-0x8(%rbp)
  jmp    L0
L3:
  mov    -0x28(%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    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x28(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%edx
  mov    -0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x18(%rbp),%ecx
  mov    -0x18(%rbp),%eax
  mov    $0x1,%edx
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <_mm_clmulepi64_si128@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x14(%rbp),%ecx
  mov    -0x14(%rbp),%eax
  mov    $0x1,%edx
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <_mm_clmulepi64_si128@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x10(%rbp),%ecx
  mov    -0x10(%rbp),%eax
  mov    $0x1,%edx
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <_mm_clmulepi64_si128@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0xc(%rbp),%ecx
  mov    -0xc(%rbp),%eax
  mov    $0x1,%edx
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <_mm_clmulepi64_si128@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0x10(%rbp),%edx
  mov    -0x18(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,%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    -0xc(%rbp),%edx
  mov    -0x14(%rbp),%eax
  mov    %edx,%esi
  mov    %eax,%edi
  call   <_mm_xor_si128@plt>
  mov    %eax,%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)
  subq   $0x20,-0x8(%rbp)
  addq   $0x8,-0x30(%rbp)
  addq   $0x8,-0x28(%rbp)
L0:
  cmpq   $0x1f,-0x8(%rbp)
  ja     L3
  nop
  nop
  leave
  ret
```

assistant: ```c
void clnh_full_block(__m128i *k, __m128i *m, __m128i *sum1, __m128i *sum2) {
  *sum1 = _mm_setzero_si128();
  *sum2 = _mm_setzero_si128();
  size_t len = 1024;
  do {
    __m128i tmp1, tmp2, tmp3, tmp4;
    while (len >= 32) {
      tmp1 = _mm_xor_si128(*m, *k);
      tmp2 = _mm_xor_si128(*m, *(k + 1));
      tmp3 = _mm_xor_si128(*(m + 1), *(k + 1));
      tmp4 = _mm_xor_si128(*(m + 1), *(k + 2));
      tmp1 = _mm_clmulepi64_si128(tmp1, tmp1, 0x01);
      tmp2 = _mm_clmulepi64_si128(tmp2, tmp2, 0x01);
      tmp3 = _mm_clmulepi64_si128(tmp3, tmp3, 0x01);
      tmp4 = _mm_clmulepi64_si128(tmp4, tmp4, 0x01);
      *sum1 = _mm_xor_si128(*sum1, _mm_xor_si128(tmp1, tmp3));
      *sum2 = _mm_xor_si128(*sum2, _mm_xor_si128(tmp2, tmp4));
      len -= 32;
      m += 2;
      k += 2;
    }
  } while (0);
}
```