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

```asm
<construct_array_with_main_lobe>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r14
  mov    %rsi,%r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  mov    %rdx,%r12
  push   %rbx
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x28(%rbp)
  xor    %eax,%eax
  movslq (%rsi),%rax
  mov    %rsp,%rcx
  mov    %rax,%rsi
  lea    0xf(,%rax,8),%rax
  mov    %rax,%rdx
  and    $0xfffffffffffff000,%rax
  sub    %rax,%rcx
  and    $0xfffffffffffffff0,%rdx
  cmp    %rcx,%rsp
  je     L67
L90:
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  cmp    %rcx,%rsp
  jne    L90
L67:
  and    $0xfff,%edx
  sub    %rdx,%rsp
  test   %rdx,%rdx
  jne    L175
L246:
  lea    -0x30(%rbp),%rcx
  lea    -0x34(%rbp),%rdx
  mov    %r13,%rdi
  mov    %rsp,%rbx
  mov    $0x1,%r8d
  call   <amplitudeloc@plt>
  mov    (%r14),%esi
  mov    -0x34(%rbp),%ecx
  movsd  -0x30(%rbp),%xmm3
  test   %esi,%esi
  jle    L157
  cmp    $0x1,%esi
  je     L234
  mov    %esi,%edx
  movapd %xmm3,%xmm1
  xor    %eax,%eax
  shr    %edx
  unpcklpd %xmm1,%xmm1
  shl    $0x4,%rdx
  nopl   0x0(%rax,%rax,1)
L91:
  movupd 0x0(%r13,%rax,1),%xmm0
  divpd  %xmm1,%xmm0
  movups %xmm0,(%rbx,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L91
  mov    %esi,%eax
  and    $0xfffffffe,%eax
  test   $0x1,%sil
  je     L157
L52:
  cltq
  movsd  0x0(%r13,%rax,8),%xmm0
  divsd  %xmm3,%xmm0
  movsd  %xmm0,(%rbx,%rax,8)
L157:
  lea    -0x1(%rsi),%edi
  xor    %edx,%edx
  test   %ecx,%ecx
  jne    L95
L137:
  cmp    %edi,%edx
  jge    L147
  movq   D11(%rip),%xmm2
  movsd  D40(%rip),%xmm1
  movslq %edx,%rax
  jmp    L166
  nopl   0x0(%rax,%rax,1)
L238:
  add    $0x1,%rax
  cmp    %eax,%edi
  jle    L147
L166:
  movsd  (%rbx,%rax,8),%xmm0
  andpd  %xmm2,%xmm0
  comisd %xmm0,%xmm1
  jbe    L238
  mov    %eax,%edi
L147:
  movslq %esi,%rdx
  xor    %eax,%eax
  test   %esi,%esi
  jle    L210
  movapd %xmm3,%xmm5
  movsd  D40(%rip),%xmm4
  andpd  D11(%rip),%xmm5
  movsd  D36(%rip),%xmm2
  xchg   %ax,%ax
L218:
  cmp    %eax,%ecx
  jge    L59
  cmp    %eax,%edi
  jle    L59
  movapd %xmm3,%xmm0
  movsd  (%rbx,%rax,8),%xmm1
  divsd  %xmm5,%xmm0
  subsd  %xmm4,%xmm1
  mulsd  %xmm1,%xmm0
  divsd  %xmm2,%xmm0
  movsd  %xmm0,(%r12,%rax,8)
  add    $0x1,%rax
  cmp    %rax,%rdx
  jne    L218
L210:
  mov    -0x28(%rbp),%rax
  sub    %fs:0x28,%rax
  jne    L38
  lea    -0x20(%rbp),%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %rbp
  ret
  nopw   0x0(%rax,%rax,1)
L59:
  movq   $0x0,(%r12,%rax,8)
  add    $0x1,%rax
  cmp    %rax,%rdx
  jne    L218
  jmp    L210
  nopl   0x0(%rax,%rax,1)
L95:
  lea    -0x1(%rcx),%edx
  test   %edx,%edx
  jle    L48
  movq   D11(%rip),%xmm2
  movsd  D40(%rip),%xmm1
  movslq %edx,%rax
  nopw   0x0(%rax,%rax,1)
L116:
  movsd  (%rbx,%rax,8),%xmm0
  mov    %eax,%ecx
  andpd  %xmm2,%xmm0
  comisd %xmm0,%xmm1
  ja     L137
  sub    $0x1,%rax
  test   %eax,%eax
  jg     L116
L48:
  xor    %ecx,%ecx
  jmp    L137
  nopl   0x0(%rax)
L175:
  orq    $0x0,-0x8(%rsp,%rdx,1)
  jmp    L246
L234:
  xor    %eax,%eax
  jmp    L52
L38:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_label: D11
type_infered: qword[2]
name: retrieve_data
arguments: data_label: D40
type_infered: f64
name: retrieve_data
arguments: data_label: D36
type_infered: byte[8]

tool: {"D11": [0x7fffffffffffffff,0x0000000000000000]}

tool: D40: 0.1

tool: {"D36": [0xcd,0xcc,0xcc,0xcc,0xcc,0xcc,0xec,0x3f]}

assistant: ```c
int construct_array_with_main_lobe(double *array_in, int *npts_in, double *array_out) {
  int amplitudeloc(double *array, int len, int *max_amp_loc, double *amplitude, int flag);
  int npts_peak_min, npts_peak_max, npts_peak;
  double peak_max, peak_min, value_peak;
  int count, flag;
  double cut_min = 0.1;
  double cut_max = 1.0;
  double array_tmp[*npts_in];
  amplitudeloc(array_in, *npts_in, &npts_peak_max, &peak_max, 1);
  if (value_peak == 0)
    value_peak = 1;
  npts_peak = npts_peak_max;
  value_peak = peak_max;
  for (count = 0; count < *npts_in; count++) {
    array_tmp[count] = array_in[count] / value_peak;
  }
  if (npts_peak == 0)
    npts_peak = 1;
  int ONSET = 0;
  int ENDSET = *npts_in - 1;
  for (count = npts_peak - 1; count > 0; count--) {
    if (fabs(array_tmp[count]) < cut_min) {
      ONSET = count;
      break;
    }
  }
  for (count = npts_peak - 1; count < *npts_in - 1; count++) {
    if (fabs(array_tmp[count]) < cut_min) {
      ENDSET = count;
      break;
    }
  }
  for (count = 0; count < *npts_in; count++) {
    if (count <= ONSET || count >= ENDSET)
      array_out[count] = 0;
    else {
      array_out[count] = value_peak / fabs(value_peak) * (array_tmp[count] - cut_min) / (1 - cut_min);
    }
  }
  return 0;
}
```