user: 请将以下的汇编代码转换成C语言代码：

```asm
<XXH32_SSE4>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x58(%rbp)
  mov    %esi,-0x5c(%rbp)
  mov    %edx,-0x60(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x5c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x10(%rbp)
  cmpl   $0x1f,-0x5c(%rbp)
  jle    L64
  mov    -0x10(%rbp),%rax
  sub    $0x20,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x24234428,%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x60(%rbp),%eax
  sub    $0x7a143589,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x61c8864f,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x24234428,%eax
  mov    %eax,-0x30(%rbp)
  mov    -0x60(%rbp),%eax
  sub    $0x7a143589,%eax
  mov    %eax,-0x2c(%rbp)
  mov    -0x60(%rbp),%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x61c8864f,%eax
  mov    %eax,-0x24(%rbp)
L39:
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x40(%rbp)
  roll   $0xd,-0x40(%rbp)
  mov    -0x40(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x40(%rbp)
  addq   $0x4,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x3c(%rbp)
  roll   $0xd,-0x3c(%rbp)
  mov    -0x3c(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x3c(%rbp)
  addq   $0x4,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x38(%rbp)
  roll   $0xd,-0x38(%rbp)
  mov    -0x38(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x38(%rbp)
  addq   $0x4,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x34(%rbp)
  roll   $0xd,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x34(%rbp)
  addq   $0x4,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x30(%rbp)
  roll   $0xd,-0x30(%rbp)
  mov    -0x30(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x30(%rbp)
  addq   $0x4,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x2c(%rbp)
  roll   $0xd,-0x2c(%rbp)
  mov    -0x2c(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x2c(%rbp)
  addq   $0x4,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x28(%rbp)
  roll   $0xd,-0x28(%rbp)
  mov    -0x28(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x28(%rbp)
  addq   $0x4,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x24(%rbp)
  roll   $0xd,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x24(%rbp)
  addq   $0x4,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  jbe    L39
  mov    -0x30(%rbp),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x40(%rbp)
  roll   $0xd,-0x40(%rbp)
  mov    -0x40(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x40(%rbp)
  mov    -0x2c(%rbp),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x3c(%rbp)
  roll   $0xd,-0x3c(%rbp)
  mov    -0x3c(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x3c(%rbp)
  mov    -0x28(%rbp),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x38(%rbp)
  roll   $0xd,-0x38(%rbp)
  mov    -0x38(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x38(%rbp)
  mov    -0x24(%rbp),%eax
  imul   $0x85ebca77,%eax,%eax
  add    %eax,-0x34(%rbp)
  roll   $0xd,-0x34(%rbp)
  mov    -0x34(%rbp),%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x34(%rbp)
  mov    -0x40(%rbp),%eax
  rol    %eax
  mov    %eax,%edx
  mov    -0x3c(%rbp),%eax
  rol    $0x7,%eax
  add    %eax,%edx
  mov    -0x38(%rbp),%eax
  rol    $0xc,%eax
  add    %eax,%edx
  mov    -0x34(%rbp),%eax
  ror    $0xe,%eax
  add    %edx,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x20(%rbp),%rax
  sub    -0x18(%rbp),%rax
  mov    %eax,-0x5c(%rbp)
  jmp    L41
L64:
  mov    -0x60(%rbp),%eax
  add    $0x165667b1,%eax
  mov    %eax,-0x44(%rbp)
L41:
  mov    -0x5c(%rbp),%eax
  add    %eax,-0x44(%rbp)
  jmp    L19
L61:
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  imul   $0xc2b2ae3d,%eax,%eax
  add    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  ror    $0xf,%eax
  imul   $0x27d4eb2f,%eax,%eax
  mov    %eax,-0x44(%rbp)
  addq   $0x4,-0x20(%rbp)
L19:
  mov    -0x10(%rbp),%rax
  sub    $0x4,%rax
  cmp    %rax,-0x20(%rbp)
  jbe    L61
  jmp    L8
L37:
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  imul   $0x165667b1,%eax,%eax
  add    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  rol    $0xb,%eax
  imul   $0x9e3779b1,%eax,%eax
  mov    %eax,-0x44(%rbp)
  addq   $0x1,-0x20(%rbp)
L8:
  mov    -0x20(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L37
  mov    -0x44(%rbp),%eax
  shr    $0xf,%eax
  xor    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  imul   $0x85ebca77,%eax,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  shr    $0xd,%eax
  xor    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  imul   $0xc2b2ae3d,%eax,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  shr    $0x10,%eax
  xor    %eax,-0x44(%rbp)
  mov    -0x44(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
unsigned int XXH32_SSE4(const void *input, int len, unsigned int seed) {
  const unsigned char *p = (const unsigned char *)input;
  const unsigned char *p1 = p;
  const unsigned char *const bEnd = p + len;
  unsigned int h32;
  if (len >= 32) {
    const unsigned char *const limit = bEnd - 32;
    unsigned int v1 = seed + 2654435761U + 2246822519U;
    unsigned int v2 = seed + 2246822519U;
    unsigned int v3 = seed + 0;
    unsigned int v4 = seed - 2654435761U;
    unsigned int vx1 = seed + 2654435761U + 2246822519U;
    unsigned int vx2 = seed + 2246822519U;
    unsigned int vx3 = seed + 0;
    unsigned int vx4 = seed - 2654435761U;
    do {
      v1 += (0 ? __builtin_bswap32(*(unsigned int *)(p)) : *(unsigned int *)(p)) * 2246822519U;
      v1 = ((v1 << 13) | (v1 >> (32 - 13)));
      v1 *= 2654435761U;
      p += 4;
      v2 += (0 ? __builtin_bswap32(*(unsigned int *)(p)) : *(unsigned int *)(p)) * 2246822519U;
      v2 = ((v2 << 13) | (v2 >> (32 - 13)));
      v2 *= 2654435761U;
      p += 4;
      v3 += (0 ? __builtin_bswap32(*(unsigned int *)(p)) : *(unsigned int *)(p)) * 2246822519U;
      v3 = ((v3 << 13) | (v3 >> (32 - 13)));
      v3 *= 2654435761U;
      p += 4;
      v4 += (0 ? __builtin_bswap32(*(unsigned int *)(p)) : *(unsigned int *)(p)) * 2246822519U;
      v4 = ((v4 << 13) | (v4 >> (32 - 13)));
      v4 *= 2654435761U;
      p += 4;
      vx1 += (0 ? __builtin_bswap32(*(unsigned int *)(p)) : *(unsigned int *)(p)) * 2246822519U;
      vx1 = ((vx1 << 13) | (vx1 >> (32 - 13)));
      vx1 *= 2654435761U;
      p += 4;
      vx2 += (0 ? __builtin_bswap32(*(unsigned int *)(p)) : *(unsigned int *)(p)) * 2246822519U;
      vx2 = ((vx2 << 13) | (vx2 >> (32 - 13)));
      vx2 *= 2654435761U;
      p += 4;
      vx3 += (0 ? __builtin_bswap32(*(unsigned int *)(p)) : *(unsigned int *)(p)) * 2246822519U;
      vx3 = ((vx3 << 13) | (vx3 >> (32 - 13)));
      vx3 *= 2654435761U;
      p += 4;
      vx4 += (0 ? __builtin_bswap32(*(unsigned int *)(p)) : *(unsigned int *)(p)) * 2246822519U;
      vx4 = ((vx4 << 13) | (vx4 >> (32 - 13)));
      vx4 *= 2654435761U;
      p += 4;
    } while (p <= limit);
    v1 += vx1 * 2246822519U;
    v1 = ((v1 << 13) | (v1 >> (32 - 13)));
    v1 *= 2654435761U;
    v2 += vx2 * 2246822519U;
    v2 = ((v2 << 13) | (v2 >> (32 - 13)));
    v2 *= 2654435761U;
    v3 += vx3 * 2246822519U;
    v3 = ((v3 << 13) | (v3 >> (32 - 13)));
    v3 *= 2654435761U;
    v4 += vx4 * 2246822519U;
    v4 = ((v4 << 13) | (v4 >> (32 - 13)));
    v4 *= 2654435761U;
    h32 = ((v1 << 1) | (v1 >> (32 - 1))) + ((v2 << 7) | (v2 >> (32 - 7))) + ((v3 << 12) | (v3 >> (32 - 12))) + ((v4 << 18) | (v4 >> (32 - 18)));
    len = p - p1;
  } else {
    h32 = seed + 374761393U;
  }
  h32 += (unsigned int)len;
  while (p <= bEnd - 4) {
    h32 += (0 ? __builtin_bswap32(*(unsigned int *)(p)) : *(unsigned int *)(p)) * 3266489917U;
    h32 = ((h32 << 17) | (h32 >> (32 - 17))) * 668265263U;
    p += 4;
  }
  while (p < bEnd) {
    h32 += (*p) * 374761393U;
    h32 = ((h32 << 11) | (h32 >> (32 - 11))) * 2654435761U;
    p++;
  }
  h32 ^= h32 >> 15;
  h32 *= 2246822519U;
  h32 ^= h32 >> 13;
  h32 *= 3266489917U;
  h32 ^= h32 >> 16;
  return h32;
}
```