user: 下面的汇编指令对应的C源代码是什么:

```asm
<internal_pointop>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x38,%rsp
  mov    %rdi,-0x50(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %edx,%r15d
  mov    %rcx,%r14
  mov    %r8d,%r13d
  movsd  %xmm0,-0x58(%rbp)
  movsd  %xmm1,-0x60(%rbp)
  mov    %r9d,%eax
  mov    %eax,-0x34(%rbp)
  mov    %eax,-0x38(%rbp)
  sub    $0x2,%r13d
  pxor   %xmm0,%xmm0
  comisd %xmm0,%xmm1
  jbe    L28
  mov    $0x0,%r12d
  jmp    L25
L92:
  movslq %r12d,%rax
  shl    $0x3,%rax
  add    -0x50(%rbp),%rax
  movsd  (%rax),%xmm0
  subsd  -0x58(%rbp),%xmm0
  divsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  cvttsd2si %xmm0,%ebx
  test   %ebx,%ebx
  jns    L82
  mov    $0x0,%ebx
  cmpl   $0x0,-0x34(%rbp)
  je     L87
  lea    D12(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x34(%rbp)
  jmp    L87
L82:
  cmp    %r13d,%ebx
  jle    L87
  mov    %r13d,%ebx
  cmpl   $0x0,-0x38(%rbp)
  je     L87
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x38(%rbp)
L87:
  movslq %ebx,%rax
  shl    $0x3,%rax
  add    %r14,%rax
  movsd  (%rax),%xmm1
  movslq %ebx,%rax
  add    $0x1,%rax
  shl    $0x3,%rax
  add    %r14,%rax
  movsd  (%rax),%xmm0
  movslq %ebx,%rax
  shl    $0x3,%rax
  add    %r14,%rax
  movsd  (%rax),%xmm3
  movapd %xmm0,%xmm2
  subsd  %xmm3,%xmm2
  pxor   %xmm3,%xmm3
  cvtsi2sd %ebx,%xmm3
  movsd  -0x48(%rbp),%xmm4
  movapd %xmm4,%xmm0
  subsd  %xmm3,%xmm0
  mulsd  %xmm2,%xmm0
  movslq %r12d,%rax
  shl    $0x3,%rax
  mov    -0x40(%rbp),%rcx
  add    %rcx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  movslq %r12d,%rax
  shl    $0x3,%rax
  add    %rcx,%rax
  movsd  (%rax),%xmm0
  ucomisd %xmm0,%xmm0
  jnp    L114
  movslq %ebx,%rax
  add    $0x1,%rax
  shl    $0x3,%rax
  add    %r14,%rax
  movsd  (%rax),%xmm0
  lea    0x1(%rbx),%edx
  movslq %ebx,%rax
  shl    $0x3,%rax
  add    %r14,%rax
  mov    (%rax),%rax
  mov    %ebx,%ecx
  movapd %xmm4,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  mov    %ebx,%esi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  mov    $0x3,%eax
  call   <printf@plt>
L114:
  add    $0x1,%r12d
L25:
  cmp    %r15d,%r12d
  jl     L92
  jmp    L53
L28:
  mov    $0x0,%r12d
  jmp    L62
L14:
  movslq %r12d,%rax
  shl    $0x3,%rax
  add    -0x40(%rbp),%rax
  movsd  (%r14),%xmm0
  movsd  %xmm0,(%rax)
  add    $0x1,%r12d
L62:
  cmp    %r15d,%r12d
  jl     L14
L53:
  nop
  add    $0x38,%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D12
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D5
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D28
type_guessed: string

tool: D12: Warning: Extrapolating to left of lookup table...

tool: D5: Warning: Extrapolating to right of lookup table...

tool: D28: **NAN: lut[%d]=%f lut[%d]=%f pos=%f index=%d


assistant: ```c
void internal_pointop(im, res, size, lut, lutsize, origin, increment, warnings) register double *im, *res, *lut;
register double origin, increment;
register int size, lutsize, warnings;
{
  register int i, index;
  register double pos;
  register int l_unwarned = warnings;
  register int r_unwarned = warnings;
  lutsize = lutsize - 2;
  if (increment > 0)
    for (i = 0; i < size; i++) {
      pos = (im[i] - origin) / increment;
      index = (int)pos;
      if (index < 0) {
        index = 0;
        if (l_unwarned) {
          printf("Warning: Extrapolating to left of lookup table...\n");
          l_unwarned = 0;
        }
      } else if (index > lutsize) {
        index = lutsize;
        if (r_unwarned) {
          printf("Warning: Extrapolating to right of lookup table...\n");
          r_unwarned = 0;
        }
      }
      res[i] = lut[index] + (lut[index + 1] - lut[index]) * (pos - index);
      if (isnan(res[i]))
        printf("**NAN: lut[%d]=%f lut[%d]=%f pos=%f index=%d\n", index, lut[index], index + 1, lut[index + 1], pos, index);
    }
  else
    for (i = 0; i < size; i++) {
      res[i] = *lut;
    }
}
```