user: What would the C source look like for the assembly code provided here?

```asm
<branchfree_search8_prefetch>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %edx,-0x64(%rbp)
  mov    %ecx,-0x68(%rbp)
  mov    %r8d,-0x6c(%rbp)
  mov    %r9d,-0x70(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x40(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x18(%rbp)
  mov    -0x58(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  cmpq   $0x0,-0x60(%rbp)
  je     L156
  jmp    L262
L82:
  mov    -0x60(%rbp),%rax
  shr    %rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  shr    %rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  mov    %rax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  mov    %rax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  mov    %rax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  mov    %rax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  mov    %rax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  mov    %rax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  mov    %rax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  shr    %rax
  mov    %rax,%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <__builtin_prefetch@plt>
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x64(%rbp)
  jle    L343
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  jmp    L301
L343:
  mov    -0x48(%rbp),%rax
L301:
  mov    %rax,-0x48(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x68(%rbp)
  jle    L221
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  jmp    L264
L221:
  mov    -0x40(%rbp),%rax
L264:
  mov    %rax,-0x40(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x6c(%rbp)
  jle    L338
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  jmp    L297
L338:
  mov    -0x38(%rbp),%rax
L297:
  mov    %rax,-0x38(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x70(%rbp)
  jle    L290
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  jmp    L313
L290:
  mov    -0x30(%rbp),%rax
L313:
  mov    %rax,-0x30(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,0x10(%rbp)
  jle    L167
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  jmp    L137
L167:
  mov    -0x28(%rbp),%rax
L137:
  mov    %rax,-0x28(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,0x18(%rbp)
  jle    L132
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  jmp    L180
L132:
  mov    -0x20(%rbp),%rax
L180:
  mov    %rax,-0x20(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,0x20(%rbp)
  jle    L45
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  jmp    L251
L45:
  mov    -0x18(%rbp),%rax
L251:
  mov    %rax,-0x18(%rbp)
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,0x28(%rbp)
  jle    L168
  mov    -0x8(%rbp),%rax
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  jmp    L294
L168:
  mov    -0x10(%rbp),%rax
L294:
  mov    %rax,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  sub    %rax,-0x60(%rbp)
L262:
  cmpq   $0x1,-0x60(%rbp)
  ja     L82
  mov    -0x48(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x64(%rbp)
  jle    L217
  mov    $0x4,%edx
  jmp    L259
L217:
  mov    $0x0,%edx
L259:
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  sub    -0x58(%rbp),%rax
  sar    $0x2,%rax
  mov    %rax,%rdx
  mov    0x30(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x68(%rbp)
  jle    L105
  mov    $0x4,%edx
  jmp    L133
L105:
  mov    $0x0,%edx
L133:
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  sub    -0x58(%rbp),%rax
  sar    $0x2,%rax
  mov    %rax,%rdx
  mov    0x38(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x6c(%rbp)
  jle    L35
  mov    $0x4,%edx
  jmp    L355
L35:
  mov    $0x0,%edx
L355:
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  sub    -0x58(%rbp),%rax
  sar    $0x2,%rax
  mov    %rax,%rdx
  mov    0x40(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x70(%rbp)
  jle    L206
  mov    $0x4,%edx
  jmp    L110
L206:
  mov    $0x0,%edx
L110:
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  sub    -0x58(%rbp),%rax
  sar    $0x2,%rax
  mov    %rax,%rdx
  mov    0x48(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,0x10(%rbp)
  jle    L253
  mov    $0x4,%edx
  jmp    L332
L253:
  mov    $0x0,%edx
L332:
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  sub    -0x58(%rbp),%rax
  sar    $0x2,%rax
  mov    %rax,%rdx
  mov    0x50(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,0x18(%rbp)
  jle    L197
  mov    $0x4,%edx
  jmp    L92
L197:
  mov    $0x0,%edx
L92:
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  sub    -0x58(%rbp),%rax
  sar    $0x2,%rax
  mov    %rax,%rdx
  mov    0x58(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,0x20(%rbp)
  jle    L42
  mov    $0x4,%edx
  jmp    L97
L42:
  mov    $0x0,%edx
L97:
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  sub    -0x58(%rbp),%rax
  sar    $0x2,%rax
  mov    %rax,%rdx
  mov    0x60(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x10(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,0x28(%rbp)
  jle    L50
  mov    $0x4,%edx
  jmp    L58
L50:
  mov    $0x0,%edx
L58:
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  sub    -0x58(%rbp),%rax
  sar    $0x2,%rax
  mov    %rax,%rdx
  mov    0x68(%rbp),%rax
  mov    %rdx,(%rax)
  jmp    L104
L156:
  nop
L104:
  leave
  ret
```

assistant: ```c
void branchfree_search8_prefetch(int *source, size_t n, int target1, int target2, int target3, int target4, int target5, int target6, int target7, int target8, size_t *index1, size_t *index2, size_t *index3, size_t *index4, size_t *index5, size_t *index6, size_t *index7, size_t *index8) {
  int *base1 = source;
  int *base2 = source;
  int *base3 = source;
  int *base4 = source;
  int *base5 = source;
  int *base6 = source;
  int *base7 = source;
  int *base8 = source;
  if (n == 0)
    return;
  while (n > 1) {
    size_t half = n >> 1;
    __builtin_prefetch(base1 + (half >> 1), 0, 0);
    __builtin_prefetch(base1 + half + (half >> 1), 0, 0);
    __builtin_prefetch(base2 + (half >> 1), 0, 0);
    __builtin_prefetch(base2 + half + (half >> 1), 0, 0);
    __builtin_prefetch(base3 + (half >> 1), 0, 0);
    __builtin_prefetch(base3 + half + (half >> 1), 0, 0);
    __builtin_prefetch(base4 + (half >> 1), 0, 0);
    __builtin_prefetch(base4 + half + (half >> 1), 0, 0);
    __builtin_prefetch(base5 + (half >> 1), 0, 0);
    __builtin_prefetch(base5 + half + (half >> 1), 0, 0);
    __builtin_prefetch(base6 + (half >> 1), 0, 0);
    __builtin_prefetch(base6 + half + (half >> 1), 0, 0);
    __builtin_prefetch(base7 + (half >> 1), 0, 0);
    __builtin_prefetch(base7 + half + (half >> 1), 0, 0);
    __builtin_prefetch(base8 + (half >> 1), 0, 0);
    __builtin_prefetch(base8 + half + (half >> 1), 0, 0);
    base1 = (base1[half] < target1) ? &base1[half] : base1;
    base2 = (base2[half] < target2) ? &base2[half] : base2;
    base3 = (base3[half] < target3) ? &base3[half] : base3;
    base4 = (base4[half] < target4) ? &base4[half] : base4;
    base5 = (base5[half] < target5) ? &base5[half] : base5;
    base6 = (base6[half] < target6) ? &base6[half] : base6;
    base7 = (base7[half] < target7) ? &base7[half] : base7;
    base8 = (base8[half] < target8) ? &base8[half] : base8;
    n -= half;
  }
  *index1 = (*base1 < target1) + base1 - source;
  *index2 = (*base2 < target2) + base2 - source;
  *index3 = (*base3 < target3) + base3 - source;
  *index4 = (*base4 < target4) + base4 - source;
  *index5 = (*base5 < target5) + base5 - source;
  *index6 = (*base6 < target6) + base6 - source;
  *index7 = (*base7 < target7) + base7 - source;
  *index8 = (*base8 < target8) + base8 - source;
}
```