user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<getSipHash24b>:
  endbr64
  push   %r15
  mov    %edx,%eax
  mov    %r8d,%r15d
  push   %r14
  add    $0x8,%eax
  xor    $0x6e646f6d,%r15d
  push   %r13
  push   %r12
  mov    %r8d,%r12d
  push   %rbp
  mov    %ecx,%ebp
  xor    $0x79746573,%r12d
  push   %rbx
  mov    %ecx,%ebx
  xor    $0x70736575,%ebp
  xor    $0x6e657261,%ebx
  sub    $0x28,%rsp
  mov    %edx,0x18(%rsp)
  mov    %ebx,%edx
  mov    %esi,0xc(%rsp)
  cmp    %eax,%esi
  jg     L75
  movslq %esi,%rax
  mov    0x18(%rsp),%ecx
  add    %rdi,%rax
  mov    %rax,0x10(%rsp)
  cmp    %ecx,0xc(%rsp)
  jle    L17
  cs nopw 0x0(%rax,%rax,1)
L27:
  movl   $0x0,0x1c(%rsp)
  xor    $0xff,%dl
  movl   $0x4,0x8(%rsp)
L79:
  xor    %r14d,%r14d
L73:
  mov    %r15d,%edi
  mov    $0xd,%esi
  lea    (%rdx,%r12,1),%r13d
  add    $0x1,%r14d
  call   <rotateLeft64@plt>
  mov    %r12d,%edi
  mov    $0x10,%esi
  lea    0x0(%rbp,%r15,1),%ebx
  mov    %eax,%r15d
  call   <rotateLeft64@plt>
  xor    %ebx,%r15d
  mov    $0x20,%esi
  mov    %ebx,%edi
  xor    %r13d,%eax
  add    %r15d,%r13d
  mov    %eax,%r12d
  call   <rotateLeft64@plt>
  mov    %r15d,%edi
  mov    $0x11,%esi
  lea    (%r12,%rax,1),%ebp
  call   <rotateLeft64@plt>
  mov    %r12d,%edi
  mov    $0x15,%esi
  mov    %eax,%r15d
  call   <rotateLeft64@plt>
  mov    $0x20,%esi
  mov    %r13d,%edi
  xor    %r13d,%r15d
  xor    %ebp,%eax
  mov    %eax,%r12d
  call   <rotateLeft64@plt>
  mov    %eax,%edx
  cmp    %r14d,0x8(%rsp)
  jne    L73
  mov    0xc(%rsp),%ecx
  addq   $0x8,0x10(%rsp)
  xor    0x1c(%rsp),%ebp
  lea    0x8(%rcx),%eax
  cmp    0x18(%rsp),%ecx
  jg     L75
  mov    %eax,0xc(%rsp)
  mov    0x18(%rsp),%ecx
  cmp    %ecx,0xc(%rsp)
  jg     L27
L17:
  mov    %ecx,%r8d
  xor    %eax,%eax
  sub    0xc(%rsp),%r8d
  xor    %edi,%edi
L1:
  cmp    %rax,%r8
  je     L60
  mov    0x10(%rsp),%rcx
  movzbl (%rcx,%rax,1),%esi
  lea    0x0(,%rax,8),%ecx
  add    $0x1,%rax
  shl    %cl,%esi
  movslq %esi,%rsi
  or     %rsi,%rdi
  cmp    $0x8,%rax
  jne    L1
L60:
  mov    %edi,0x1c(%rsp)
  xor    %edi,%r12d
  movl   $0x2,0x8(%rsp)
  jmp    L79
  nopl   0x0(%rax,%rax,1)
L75:
  mov    %ebp,%eax
  add    $0x28,%rsp
  xor    %r12d,%eax
  pop    %rbx
  pop    %rbp
  xor    %edx,%eax
  pop    %r12
  pop    %r13
  xor    %r15d,%eax
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
uint64_t getSipHash24b(char *b, int start, int end, uint64_t k0, uint64_t k1) {
  uint64_t v0 = k0 ^ 0x736f6d6570736575L;
  uint64_t v1 = k1 ^ 0x646f72616e646f6dL;
  uint64_t v2 = k0 ^ 0x6c7967656e657261L;
  uint64_t v3 = k1 ^ 0x7465646279746573L;
  int repeat;
  for (int off = start; off <= end + 8; off += 8) {
    long m;
    if (off <= end) {
      m = 0;
      int i = 0;
      for (; i < 8 && off + i < end; i++) {
        m |= ((uint64_t)b[off + i] & 255) << (8 * i);
      }
      if (i < 8) {
        m |= ((uint64_t)end - start) << 56;
      }
      v3 ^= m;
      repeat = 2;
    } else {
      m = 0;
      v2 ^= 0xff;
      repeat = 4;
    }
    for (int i = 0; i < repeat; i++) {
      v0 += v1;
      v2 += v3;
      v1 = rotateLeft64(v1, 13);
      v3 = rotateLeft64(v3, 16);
      v1 ^= v0;
      v3 ^= v2;
      v0 = rotateLeft64(v0, 32);
      v2 += v1;
      v0 += v3;
      v1 = rotateLeft64(v1, 17);
      v3 = rotateLeft64(v3, 21);
      v1 ^= v2;
      v3 ^= v0;
      v2 = rotateLeft64(v2, 32);
    }
    v0 ^= m;
  }
  return v0 ^ v1 ^ v2 ^ v3;
}
```