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

```asm
<getSipHash24b>:
  endbr64
  push   %r15
  lea    0x8(%rdx),%eax
  mov    %r8d,%r15d
  push   %r14
  xor    $0x6e646f6d,%r15d
  push   %r13
  push   %r12
  mov    %r8d,%r12d
  push   %rbp
  mov    %ecx,%ebp
  xor    $0x79746573,%r12d
  xor    $0x6e657261,%ecx
  push   %rbx
  xor    $0x70736575,%ebp
  sub    $0x28,%rsp
  mov    %rdi,0x18(%rsp)
  mov    %edx,0x14(%rsp)
  cmp    %eax,%esi
  jg     L78
  movslq %esi,%rax
  mov    %rax,0x8(%rsp)
L18:
  mov    0x8(%rsp),%rdx
  mov    %edx,%eax
  cmp    %edx,0x14(%rsp)
  jge    L28
  movl   $0x0,0x10(%rsp)
  xor    $0xff,%cl
  movl   $0x4,0x4(%rsp)
L92:
  xor    %r14d,%r14d
L51:
  mov    %r15d,%edi
  mov    $0xd,%esi
  lea    (%rcx,%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,%ecx
  cmp    %r14d,0x4(%rsp)
  jne    L51
  addq   $0x8,0x8(%rsp)
  mov    0x8(%rsp),%rax
  xor    0x10(%rsp),%ebp
  sub    $0x8,%eax
  cmp    %eax,0x14(%rsp)
  jge    L18
L78:
  mov    %ebp,%eax
  add    $0x28,%rsp
  xor    %r15d,%eax
  pop    %rbx
  pop    %rbp
  xor    %ecx,%eax
  xor    %r12d,%eax
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L28:
  jle    L83
  mov    %rdx,%rbx
  mov    0x18(%rsp),%rdx
  movzbl (%rdx,%rbx,1),%edx
  mov    %edx,0x10(%rsp)
  lea    0x1(%rax),%edx
  cmp    %edx,0x14(%rsp)
  jle    L60
  mov    0x18(%rsp),%rbx
  movslq %edx,%rdx
  movsbl (%rbx,%rdx,1),%edx
  shl    $0x8,%edx
  movzwl %dx,%edx
  or     %edx,0x10(%rsp)
  lea    0x2(%rax),%edx
  cmp    %edx,0x14(%rsp)
  jle    L60
  movslq %edx,%rdx
  add    $0x3,%eax
  movsbl (%rbx,%rdx,1),%edx
  shl    $0x10,%edx
  and    $0xff0000,%edx
  or     %edx,0x10(%rsp)
  cmp    %eax,0x14(%rsp)
  jle    L60
  cltq
  movsbl (%rbx,%rax,1),%eax
  shl    $0x18,%eax
  or     %eax,0x10(%rsp)
  mov    0x10(%rsp),%edx
  xor    %edx,%r12d
L103:
  movl   $0x2,0x4(%rsp)
  jmp    L92
L60:
  xor    0x10(%rsp),%r12d
  jmp    L103
L83:
  movl   $0x0,0x10(%rsp)
  jmp    L103
```

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;
}
```