user: 请从给定的汇编指令推导出C源代码:

```asm
<get_hash1_raw>:
  endbr64
  movslq %esi,%r9
  mov    %rdi,%rcx
  mov    %rdi,%rax
  lea    -0x4(%r9),%rdx
  add    %rdx,%rdi
  jb     L218
  mov    %rdx,%r8
  shr    $0x2,%r8
  add    $0x1,%r8
  cmp    $0x3b,%rdx
  jbe    L258
  pxor   %xmm6,%xmm6
  pxor   %xmm14,%xmm14
  pxor   %xmm5,%xmm5
  mov    %r8,%rdx
  shr    $0x4,%rdx
  movaps %xmm6,-0x28(%rsp)
  movdqa D7(%rip),%xmm6
  shl    $0x6,%rdx
  add    %rcx,%rdx
  nopw   0x0(%rax,%rax,1)
L15:
  movdqu (%rax),%xmm2
  movdqu (%rax),%xmm1
  movdqa %xmm6,%xmm7
  add    $0x40,%rax
  movdqu -0x30(%rax),%xmm0
  movdqu -0x10(%rax),%xmm3
  movdqa %xmm14,%xmm9
  movdqa %xmm5,%xmm15
  pand   %xmm6,%xmm2
  psrlw  $0x8,%xmm1
  movdqu -0x10(%rax),%xmm4
  movdqa %xmm5,%xmm13
  pand   %xmm6,%xmm0
  pand   %xmm6,%xmm3
  movdqa %xmm5,%xmm12
  packuswb %xmm0,%xmm2
  movdqu -0x30(%rax),%xmm0
  psrlw  $0x8,%xmm4
  psrlw  $0x8,%xmm0
  packuswb %xmm0,%xmm1
  movdqu -0x20(%rax),%xmm0
  pand   %xmm6,%xmm0
  packuswb %xmm3,%xmm0
  movdqu -0x20(%rax),%xmm3
  pand   %xmm0,%xmm7
  psrlw  $0x8,%xmm0
  psrlw  $0x8,%xmm3
  packuswb %xmm4,%xmm3
  movdqa %xmm6,%xmm4
  pand   %xmm2,%xmm4
  psrlw  $0x8,%xmm2
  packuswb %xmm7,%xmm4
  packuswb %xmm0,%xmm2
  movdqa %xmm6,%xmm7
  movdqa %xmm6,%xmm0
  pand   %xmm3,%xmm7
  movdqa %xmm4,%xmm8
  psrlw  $0x8,%xmm3
  pcmpgtb %xmm2,%xmm9
  pand   %xmm1,%xmm0
  psrlw  $0x8,%xmm1
  packuswb %xmm7,%xmm0
  movdqa %xmm14,%xmm7
  packuswb %xmm3,%xmm1
  pcmpgtb %xmm0,%xmm7
  movdqa %xmm14,%xmm3
  pcmpgtb %xmm4,%xmm3
  movdqa %xmm1,%xmm10
  punpcklbw %xmm3,%xmm8
  punpckhbw %xmm3,%xmm4
  movdqa %xmm0,%xmm3
  punpcklbw %xmm7,%xmm3
  punpckhbw %xmm7,%xmm0
  movdqa %xmm2,%xmm7
  punpcklbw %xmm9,%xmm7
  punpckhbw %xmm9,%xmm2
  movdqa %xmm14,%xmm9
  pcmpgtb %xmm1,%xmm9
  pcmpgtw %xmm8,%xmm13
  movdqa %xmm8,%xmm11
  pcmpgtw %xmm3,%xmm15
  psllw  $0x8,%xmm7
  pcmpgtw %xmm7,%xmm12
  psllw  $0x8,%xmm2
  punpcklbw %xmm9,%xmm10
  punpckhbw %xmm9,%xmm1
  movdqa %xmm3,%xmm9
  punpcklwd %xmm13,%xmm11
  punpcklwd %xmm15,%xmm9
  punpckhwd %xmm13,%xmm8
  pslld  $0x18,%xmm11
  punpckhwd %xmm15,%xmm3
  movaps %xmm12,-0x18(%rsp)
  movdqa %xmm1,%xmm13
  pslld  $0x10,%xmm9
  pslld  $0x18,%xmm8
  paddd  %xmm11,%xmm9
  pslld  $0x10,%xmm3
  movdqa %xmm7,%xmm11
  punpcklwd %xmm12,%xmm11
  punpckhwd -0x18(%rsp),%xmm7
  paddd  %xmm8,%xmm3
  paddd  %xmm11,%xmm9
  movdqa %xmm5,%xmm11
  movdqa %xmm10,%xmm8
  pcmpgtw %xmm10,%xmm11
  paddd  %xmm7,%xmm3
  movdqa %xmm5,%xmm7
  pcmpgtw %xmm2,%xmm7
  movdqa %xmm11,%xmm12
  movdqa %xmm10,%xmm11
  punpckhwd %xmm12,%xmm8
  punpcklwd %xmm12,%xmm11
  movdqa %xmm5,%xmm12
  paddd  %xmm8,%xmm3
  movdqa %xmm5,%xmm8
  paddd  %xmm9,%xmm11
  pcmpgtw %xmm0,%xmm12
  pcmpgtw %xmm4,%xmm8
  movdqa %xmm3,%xmm10
  movdqa %xmm0,%xmm9
  movdqa %xmm4,%xmm3
  punpcklwd %xmm12,%xmm9
  punpcklwd %xmm8,%xmm3
  punpckhwd %xmm12,%xmm0
  pslld  $0x18,%xmm3
  pslld  $0x10,%xmm9
  punpckhwd %xmm8,%xmm4
  pslld  $0x10,%xmm0
  pslld  $0x18,%xmm4
  paddd  %xmm3,%xmm9
  movdqa %xmm2,%xmm3
  paddd  %xmm4,%xmm0
  punpckhwd %xmm7,%xmm2
  punpcklwd %xmm7,%xmm3
  paddd  %xmm0,%xmm2
  paddd  %xmm3,%xmm9
  movdqa %xmm5,%xmm3
  pcmpgtw %xmm1,%xmm3
  punpcklwd %xmm3,%xmm13
  punpckhwd %xmm3,%xmm1
  paddd  %xmm13,%xmm9
  paddd  %xmm2,%xmm1
  movdqa %xmm1,%xmm2
  movdqa %xmm9,%xmm0
  psrld  $0x3,%xmm2
  psrld  $0x3,%xmm0
  pxor   %xmm2,%xmm1
  pxor   %xmm9,%xmm0
  movdqa %xmm10,%xmm2
  paddd  %xmm1,%xmm0
  psrld  $0x3,%xmm2
  movdqa %xmm11,%xmm1
  psrld  $0x3,%xmm1
  pxor   %xmm10,%xmm2
  pxor   %xmm11,%xmm1
  paddd  %xmm2,%xmm1
  paddd  %xmm1,%xmm0
  paddd  -0x28(%rsp),%xmm0
  movaps %xmm0,-0x28(%rsp)
  cmp    %rdx,%rax
  jne    L15
  movdqa %xmm0,%xmm5
  psrldq $0x8,%xmm0
  mov    %r8,%rsi
  paddd  %xmm5,%xmm0
  and    $0xfffffffffffffff0,%rsi
  movdqa %xmm0,%xmm1
  lea    (%rcx,%rsi,4),%rax
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%edx
  cmp    %r8,%rsi
  je     L88
L247:
  movsbl (%rax),%esi
  movsbl 0x1(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x2(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x3(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x4(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x5(%rax),%esi
  movsbl 0x4(%rax),%r10d
  shl    $0x10,%esi
  shl    $0x18,%r10d
  add    %r10d,%esi
  movsbl 0x6(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x7(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x8(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x8(%rax),%esi
  movsbl 0x9(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0xa(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0xb(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0xc(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0xc(%rax),%esi
  movsbl 0xd(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0xe(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0xf(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x10(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x10(%rax),%esi
  movsbl 0x11(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x12(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x13(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x14(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x14(%rax),%esi
  movsbl 0x15(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x16(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x17(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x18(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x18(%rax),%esi
  movsbl 0x19(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x1a(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x1b(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x1c(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x1c(%rax),%esi
  movsbl 0x1d(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x1e(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x1f(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x20(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x20(%rax),%esi
  movsbl 0x21(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x22(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x23(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x24(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x24(%rax),%esi
  movsbl 0x25(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x26(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x27(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x28(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x28(%rax),%esi
  movsbl 0x29(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x2a(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x2b(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x2c(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x2c(%rax),%esi
  movsbl 0x2d(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x2e(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x2f(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x30(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x30(%rax),%esi
  movsbl 0x31(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x32(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x33(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x34(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x34(%rax),%esi
  movsbl 0x35(%rax),%r10d
  shl    $0x18,%esi
  shl    $0x10,%r10d
  add    %r10d,%esi
  movsbl 0x36(%rax),%r10d
  shl    $0x8,%r10d
  add    %r10d,%esi
  movsbl 0x37(%rax),%r10d
  add    %r10d,%esi
  mov    %esi,%r10d
  shr    $0x3,%r10d
  xor    %r10d,%esi
  add    %esi,%edx
  lea    0x38(%rax),%rsi
  cmp    %rsi,%rdi
  jb     L88
  movsbl 0x39(%rax),%esi
  movsbl 0x38(%rax),%edi
  shl    $0x10,%esi
  shl    $0x18,%edi
  add    %edi,%esi
  movsbl 0x3a(%rax),%edi
  movsbl 0x3b(%rax),%eax
  shl    $0x8,%edi
  add    %edi,%esi
  add    %esi,%eax
  mov    %eax,%esi
  shr    $0x3,%esi
  xor    %esi,%eax
  add    %eax,%edx
  nopl   (%rax)
L88:
  lea    (%rcx,%r8,4),%rax
L181:
  add    %r9,%rcx
  sub    %rax,%rcx
  cmp    $0x2,%rcx
  je     L157
  cmp    $0x3,%rcx
  je     L70
  cmp    $0x1,%rcx
  je     L64
L82:
  mov    %edx,%eax
  mov    %edx,%ecx
  shr    $0xb,%eax
  shr    $0xd,%ecx
  add    %ecx,%eax
  add    %edx,%eax
  shr    $0x17,%edx
  add    %edx,%eax
  ret
L64:
  movsbl (%rax),%ecx
  mov    %ecx,%eax
  shr    $0x3,%eax
  xor    %ecx,%eax
  add    %eax,%edx
  jmp    L82
  xchg   %ax,%ax
L70:
  movsbl (%rax),%ecx
  movsbl 0x1(%rax),%esi
  movsbl 0x2(%rax),%eax
  shl    $0x10,%ecx
  shl    $0x8,%esi
  add    %esi,%ecx
L55:
  add    %ecx,%eax
  mov    %eax,%ecx
  shr    $0x3,%ecx
  xor    %ecx,%eax
  add    %eax,%edx
  jmp    L82
L157:
  movsbl (%rax),%ecx
  movsbl 0x1(%rax),%eax
  shl    $0x8,%ecx
  jmp    L55
  nopl   0x0(%rax)
L218:
  xor    %edx,%edx
  jmp    L181
L258:
  xor    %edx,%edx
  jmp    L247
```

tool_calls: name: read_data
arguments: tag: D7
type_infered: byte[16]

tool: {"D7": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

assistant: ```c
unsigned int get_hash1_raw(const char *s, int len) {
  const char *p;
  register unsigned v;
  register unsigned h;
  h = 0;
  do {
    for ((p) = (s); (p) <= ((s + len) - 4); (p) += 4) {
      (v) = (*(p) << 24) + ((p)[1] << 16) + ((p)[2] << 8) + (p)[3];
      (h) += (v) ^ ((v) >> 3);
    }
    switch ((s + len) - (p)) {
    case 3:
      (v) = (*(p) << 16) + ((p)[1] << 8) + (p)[2];
      break;
    case 2:
      (v) = (*(p) << 8) + p[1];
      break;
    case 1:
      (v) = *p;
      break;
    default:
      (v) = 0;
      break;
    }
    (h) += (v) ^ ((v) >> 3);
  } while (0);
  return (((h) + ((h) >> 11)) + (((h) >> 13) + ((h) >> 23)));
}
```