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

```asm
<ScaleData>:
  endbr64
  sub    $0x53,%esi
  cmp    $0x22,%sil
  ja     L121
  mov    %rdi,%rcx
  movzbl %sil,%esi
  lea    D15(%rip),%rdi
  movslq (%rdi,%rsi,4),%rax
  add    %rdi,%rax
  notrack jmp *%rax
  test   %edx,%edx
  jle    L108
  mov    %rcx,%rax
  lea    -0x1(%rdx),%edx
  lea    0x2(%rcx,%rdx,2),%rcx
L4:
  movzwl (%rax),%edx
  pxor   %xmm2,%xmm2
  cvtsi2sd %edx,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm2
  cvttsd2si %xmm2,%edx
  mov    %dx,(%rax)
  add    $0x2,%rax
  cmp    %rcx,%rax
  jne    L4
  ret
L108:
  ret
  test   %edx,%edx
  jle    L45
  mov    %rcx,%rax
  lea    -0x1(%rdx),%edx
  lea    0x2(%rcx,%rdx,2),%rcx
L130:
  movswl (%rax),%edx
  pxor   %xmm2,%xmm2
  cvtsi2sd %edx,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm2
  cvttsd2si %xmm2,%edx
  mov    %dx,(%rax)
  add    $0x2,%rax
  cmp    %rcx,%rax
  jne    L130
  ret
L45:
  ret
  test   %edx,%edx
  jle    L127
  mov    %rcx,%rax
  lea    -0x1(%rdx),%edx
  lea    0x4(%rcx,%rdx,4),%rdx
L79:
  pxor   %xmm2,%xmm2
  cvtss2sd (%rax),%xmm2
  mulsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm2
  cvtsd2ss %xmm2,%xmm2
  movss  %xmm2,(%rax)
  add    $0x4,%rax
  cmp    %rdx,%rax
  jne    L79
  ret
L127:
  ret
  test   %edx,%edx
  jle    L8
  mov    %rcx,%rax
  lea    -0x1(%rdx),%edx
  lea    0x8(%rcx,%rdx,8),%rdx
L15:
  movapd %xmm0,%xmm2
  mulsd  (%rax),%xmm2
  addsd  %xmm1,%xmm2
  movsd  %xmm2,(%rax)
  add    $0x8,%rax
  cmp    %rdx,%rax
  jne    L15
  ret
L8:
  ret
  test   %edx,%edx
  jle    L134
  mov    %rcx,%rax
  lea    -0x1(%rdx),%edx
  lea    0x1(%rcx,%rdx,1),%rcx
L143:
  movzbl (%rax),%edx
  pxor   %xmm2,%xmm2
  cvtsi2sd %edx,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm2
  cvttsd2si %xmm2,%edx
  mov    %dl,(%rax)
  add    $0x1,%rax
  cmp    %rcx,%rax
  jne    L143
  ret
L134:
  ret
  test   %edx,%edx
  jle    L65
  mov    %rcx,%rax
  lea    -0x1(%rdx),%edx
  lea    0x4(%rcx,%rdx,4),%rcx
L54:
  mov    (%rax),%edx
  pxor   %xmm2,%xmm2
  cvtsi2sd %rdx,%xmm2
  mulsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm2
  cvttsd2si %xmm2,%rdx
  mov    %edx,(%rax)
  add    $0x4,%rax
  cmp    %rcx,%rax
  jne    L54
  ret
L65:
  ret
  test   %edx,%edx
  jle    L124
  mov    %rcx,%rax
  lea    -0x1(%rdx),%edx
  lea    0x4(%rcx,%rdx,4),%rcx
L72:
  pxor   %xmm2,%xmm2
  cvtsi2sdl (%rax),%xmm2
  mulsd  %xmm0,%xmm2
  addsd  %xmm1,%xmm2
  cvttsd2si %xmm2,%edx
  mov    %edx,(%rax)
  add    $0x4,%rax
  cmp    %rax,%rcx
  jne    L72
  ret
L124:
  ret
L121:
  sub    $0x8,%rsp
  lea    D8(%rip),%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  call   <abort@plt>
  add    $0x8,%rsp
  ret
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D8
datatype: string

tool: D8: Another impossible error


assistant: ```c
void ScaleData(void *data, char type, int npts, double m, double b) {
  unsigned char *data_c;
  short *data_s;
  unsigned short *data_u;
  unsigned *data_U;
  int *data_i;
  float *data_f;
  double *data_d;
  int i;
  switch (type) {
  case 'n':
    break;
  case 'c':
    data_c = (unsigned char *)data;
    for (i = 0; i < npts; i++) {
      data_c[i] = (unsigned char)((double)data_c[i] * m + b);
    }
    break;
  case 's':
    data_s = (short *)data;
    for (i = 0; i < npts; i++) {
      data_s[i] = (short)((double)data_s[i] * m + b);
    }
    break;
  case 'u':
    data_u = (unsigned short *)data;
    for (i = 0; i < npts; i++) {
      data_u[i] = (unsigned short)((double)data_u[i] * m + b);
    }
    break;
  case 'S':
  case 'i':
    data_i = (int *)data;
    for (i = 0; i < npts; i++) {
      data_i[i] = (int)((double)data_i[i] * m + b);
    }
    break;
  case 'U':
    data_U = (unsigned *)data;
    for (i = 0; i < npts; i++) {
      data_U[i] = (unsigned)((double)data_U[i] * m + b);
    }
    break;
  case 'f':
    data_f = (float *)data;
    for (i = 0; i < npts; i++) {
      data_f[i] = (float)((double)data_f[i] * m + b);
    }
    break;
  case 'd':
    data_d = (double *)data;
    for (i = 0; i < npts; i++) {
      data_d[i] = data_d[i] * m + b;
    }
    break;
  default:
    printf("Another impossible error\n");
    abort();
    break;
  }
}
```