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

```asm
<siphash_nocase>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%rbp
  mov    (%rdx),%r12d
  mov    0x20(%rdx),%r14d
  mov    %rsi,%rax
  and    $0xfffffffffffffffc,%rax
  lea    (%rdi,%rax,4),%rax
  mov    %rax,0x10(%rsp)
  and    $0x7,%esi
  mov    %esi,0x1c(%rsp)
  mov    %r14d,%ebx
  xor    $0x79746573,%ebx
  mov    %r12d,%r13d
  xor    $0x6e657261,%r13d
  xor    $0x6e646f6d,%r14d
  xor    $0x70736575,%r12d
  cmp    %rax,%rdi
  je     L37
L44:
  mov    0x0(%rbp),%edi
  call   <siptlw@plt>
  mov    %rax,0x8(%rsp)
  mov    0x4(%rbp),%edi
  call   <siptlw@plt>
  mov    %rax,%r15
  mov    0x8(%rbp),%edi
  call   <siptlw@plt>
  shl    $0x8,%r15d
  shl    $0x10,%eax
  or     %eax,%r15d
  or     0x8(%rsp),%r15d
  mov    0xc(%rbp),%edi
  call   <siptlw@plt>
  shl    $0x18,%eax
  or     %eax,%r15d
  mov    0x10(%rbp),%edi
  call   <siptlw@plt>
  mov    0x14(%rbp),%edi
  call   <siptlw@plt>
  mov    0x18(%rbp),%edi
  call   <siptlw@plt>
  mov    0x1c(%rbp),%edi
  call   <siptlw@plt>
  xor    %r15d,%ebx
  add    %r14d,%r12d
  mov    %r14d,%eax
  shl    $0xd,%eax
  mov    $0x33,%ecx
  sar    %cl,%r14d
  or     %r14d,%eax
  xor    %r12d,%eax
  mov    $0x20,%ecx
  sar    %cl,%r12d
  add    %ebx,%r13d
  mov    %ebx,%edx
  shl    $0x10,%edx
  mov    $0x30,%ecx
  sar    %cl,%ebx
  or     %ebx,%edx
  xor    %r13d,%edx
  add    %edx,%r12d
  mov    %edx,%ebx
  shl    $0x15,%ebx
  mov    $0x2b,%ecx
  sar    %cl,%edx
  or     %edx,%ebx
  xor    %r12d,%ebx
  add    %eax,%r13d
  mov    %eax,%r14d
  shl    $0x11,%r14d
  mov    $0x2f,%ecx
  sar    %cl,%eax
  or     %eax,%r14d
  xor    %r13d,%r14d
  mov    $0x20,%ecx
  sar    %cl,%r13d
  xor    %r15d,%r12d
  add    $0x20,%rbp
  cmp    %rbp,0x10(%rsp)
  jne    L44
L12:
  mov    0x1c(%rsp),%eax
  lea    D4(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
L37:
  mov    0x10(%rsp),%rbp
  jmp    L12
  mov    0x18(%rbp),%edi
  call   <siptlw@plt>
  mov    0x14(%rbp),%edi
  call   <siptlw@plt>
  mov    0x10(%rbp),%edi
  call   <siptlw@plt>
  mov    0xc(%rbp),%edi
  call   <siptlw@plt>
  mov    %eax,%r15d
  shl    $0x18,%r15d
L9:
  mov    0x8(%rbp),%edi
  call   <siptlw@plt>
  shl    $0x10,%eax
  or     %eax,%r15d
L14:
  mov    0x4(%rbp),%edi
  call   <siptlw@plt>
  shl    $0x8,%eax
  or     %eax,%r15d
L54:
  mov    0x0(%rbp),%edi
  call   <siptlw@plt>
  or     %r15d,%eax
L68:
  xor    %eax,%ebx
  add    %r14d,%r12d
  mov    %r14d,%edi
  shl    $0xd,%edi
  mov    $0x33,%ecx
  sar    %cl,%r14d
  or     %r14d,%edi
  xor    %r12d,%edi
  mov    $0x20,%ecx
  sar    %cl,%r12d
  add    %ebx,%r13d
  mov    %ebx,%edx
  shl    $0x10,%edx
  mov    $0x30,%ecx
  sar    %cl,%ebx
  or     %ebx,%edx
  xor    %r13d,%edx
  add    %edx,%r12d
  mov    %edx,%esi
  shl    $0x15,%esi
  mov    $0x2b,%ecx
  sar    %cl,%edx
  or     %edx,%esi
  mov    %esi,%ebx
  xor    %r12d,%ebx
  lea    (%rdi,%r13,1),%edx
  mov    %edi,%esi
  shl    $0x11,%esi
  mov    $0x2f,%ecx
  sar    %cl,%edi
  or     %edi,%esi
  xor    %edx,%esi
  mov    $0x20,%ecx
  sar    %cl,%edx
  xor    %r12d,%eax
  xor    $0xff,%dl
  add    %esi,%eax
  mov    %esi,%edi
  shl    $0xd,%edi
  mov    $0x33,%ecx
  sar    %cl,%esi
  or     %esi,%edi
  xor    %eax,%edi
  mov    $0x20,%ecx
  sar    %cl,%eax
  add    %ebx,%edx
  mov    %ebx,%esi
  shl    $0x10,%esi
  mov    $0x30,%ecx
  sar    %cl,%ebx
  or     %ebx,%esi
  xor    %edx,%esi
  add    %esi,%eax
  mov    %esi,%ebx
  shl    $0x15,%ebx
  mov    $0x2b,%ecx
  sar    %cl,%esi
  or     %esi,%ebx
  xor    %eax,%ebx
  add    %edi,%edx
  mov    %edi,%esi
  shl    $0x11,%esi
  mov    $0x2f,%ecx
  sar    %cl,%edi
  or     %edi,%esi
  xor    %edx,%esi
  mov    $0x20,%ecx
  sar    %cl,%edx
  add    %esi,%eax
  mov    %esi,%edi
  shl    $0xd,%edi
  mov    $0x33,%ecx
  sar    %cl,%esi
  or     %edi,%esi
  xor    %esi,%eax
  add    %ebx,%edx
  mov    %ebx,%esi
  shl    $0x10,%esi
  mov    $0x30,%ecx
  sar    %cl,%ebx
  mov    %ebx,%ecx
  or     %esi,%ecx
  mov    %ecx,%esi
  xor    %edx,%esi
  mov    %esi,%edi
  shl    $0x15,%edi
  mov    $0x2b,%ecx
  sar    %cl,%esi
  mov    %esi,%ebx
  add    %eax,%edx
  mov    %eax,%r8d
  shl    $0x11,%r8d
  mov    $0x2f,%ecx
  sar    %cl,%eax
  mov    %edx,%esi
  mov    $0x20,%ecx
  sar    %cl,%esi
  or     %r8d,%eax
  xor    %esi,%eax
  xor    %edx,%eax
  mov    %edi,%edx
  or     %ebx,%edx
  xor    %edx,%eax
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  mov    $0x0,%r15d
  jmp    L9
  mov    $0x0,%r15d
  jmp    L14
  mov    $0x0,%r15d
  jmp    L54
  mov    $0x0,%eax
  jmp    L68
```

assistant: ```c
uint64_t siphash_nocase(const uint8_t *in, const size_t inlen, const uint8_t *k) {
  uint64_t v0 = 0x736f6d6570736575ULL;
  uint64_t v1 = 0x646f72616e646f6dULL;
  uint64_t v2 = 0x6c7967656e657261ULL;
  uint64_t v3 = 0x7465646279746573ULL;
  uint64_t k0 = (*((uint64_t *)(k)));
  uint64_t k1 = (*((uint64_t *)(k + 8)));
  uint64_t m;
  const uint8_t *end = in + inlen - (inlen % sizeof(uint64_t));
  const int left = inlen & 7;
  uint64_t b = ((uint64_t)inlen) << 56;
  v3 ^= k1;
  v2 ^= k0;
  v1 ^= k1;
  v0 ^= k0;
  for (; in != end; in += 8) {
    m = (((uint64_t)(siptlw((in)[0]))) | ((uint64_t)(siptlw((in)[1])) << 8) | ((uint64_t)(siptlw((in)[2])) << 16) | ((uint64_t)(siptlw((in)[3])) << 24) | ((uint64_t)(siptlw((in)[4])) << 32) | ((uint64_t)(siptlw((in)[5])) << 40) | ((uint64_t)(siptlw((in)[6])) << 48) | ((uint64_t)(siptlw((in)[7])) << 56));
    v3 ^= m;
    do {
      v0 += v1;
      v1 = (uint64_t)(((v1) << (13)) | ((v1) >> (64 - (13))));
      v1 ^= v0;
      v0 = (uint64_t)(((v0) << (32)) | ((v0) >> (64 - (32))));
      v2 += v3;
      v3 = (uint64_t)(((v3) << (16)) | ((v3) >> (64 - (16))));
      v3 ^= v2;
      v0 += v3;
      v3 = (uint64_t)(((v3) << (21)) | ((v3) >> (64 - (21))));
      v3 ^= v0;
      v2 += v1;
      v1 = (uint64_t)(((v1) << (17)) | ((v1) >> (64 - (17))));
      v1 ^= v2;
      v2 = (uint64_t)(((v2) << (32)) | ((v2) >> (64 - (32))));
    } while (0);
    v0 ^= m;
  }
  switch (left) {
  case 7:
    b |= ((uint64_t)siptlw(in[6])) << 48;
  case 6:
    b |= ((uint64_t)siptlw(in[5])) << 40;
  case 5:
    b |= ((uint64_t)siptlw(in[4])) << 32;
  case 4:
    b |= ((uint64_t)siptlw(in[3])) << 24;
  case 3:
    b |= ((uint64_t)siptlw(in[2])) << 16;
  case 2:
    b |= ((uint64_t)siptlw(in[1])) << 8;
  case 1:
    b |= ((uint64_t)siptlw(in[0]));
    break;
  case 0:
    break;
  }
  v3 ^= b;
  do {
    v0 += v1;
    v1 = (uint64_t)(((v1) << (13)) | ((v1) >> (64 - (13))));
    v1 ^= v0;
    v0 = (uint64_t)(((v0) << (32)) | ((v0) >> (64 - (32))));
    v2 += v3;
    v3 = (uint64_t)(((v3) << (16)) | ((v3) >> (64 - (16))));
    v3 ^= v2;
    v0 += v3;
    v3 = (uint64_t)(((v3) << (21)) | ((v3) >> (64 - (21))));
    v3 ^= v0;
    v2 += v1;
    v1 = (uint64_t)(((v1) << (17)) | ((v1) >> (64 - (17))));
    v1 ^= v2;
    v2 = (uint64_t)(((v2) << (32)) | ((v2) >> (64 - (32))));
  } while (0);
  v0 ^= b;
  v2 ^= 0xff;
  do {
    v0 += v1;
    v1 = (uint64_t)(((v1) << (13)) | ((v1) >> (64 - (13))));
    v1 ^= v0;
    v0 = (uint64_t)(((v0) << (32)) | ((v0) >> (64 - (32))));
    v2 += v3;
    v3 = (uint64_t)(((v3) << (16)) | ((v3) >> (64 - (16))));
    v3 ^= v2;
    v0 += v3;
    v3 = (uint64_t)(((v3) << (21)) | ((v3) >> (64 - (21))));
    v3 ^= v0;
    v2 += v1;
    v1 = (uint64_t)(((v1) << (17)) | ((v1) >> (64 - (17))));
    v1 ^= v2;
    v2 = (uint64_t)(((v2) << (32)) | ((v2) >> (64 - (32))));
  } while (0);
  do {
    v0 += v1;
    v1 = (uint64_t)(((v1) << (13)) | ((v1) >> (64 - (13))));
    v1 ^= v0;
    v0 = (uint64_t)(((v0) << (32)) | ((v0) >> (64 - (32))));
    v2 += v3;
    v3 = (uint64_t)(((v3) << (16)) | ((v3) >> (64 - (16))));
    v3 ^= v2;
    v0 += v3;
    v3 = (uint64_t)(((v3) << (21)) | ((v3) >> (64 - (21))));
    v3 ^= v0;
    v2 += v1;
    v1 = (uint64_t)(((v1) << (17)) | ((v1) >> (64 - (17))));
    v1 ^= v2;
    v2 = (uint64_t)(((v2) << (32)) | ((v2) >> (64 - (32))));
  } while (0);
  b = v0 ^ v1 ^ v2 ^ v3;
  return b;
}
```