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

```asm
<cu_convolve_image_psf>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa00,%rsp
  mov    %edi,-0x984(%rbp)
  mov    %esi,-0x988(%rbp)
  mov    %edx,-0x98c(%rbp)
  mov    %ecx,-0x990(%rbp)
  mov    %r8d,-0x994(%rbp)
  mov    %r9d,-0x998(%rbp)
  mov    0x30(%rbp),%rax
  mov    %rax,-0x9a0(%rbp)
  mov    0x38(%rbp),%rax
  mov    %rax,-0x9a8(%rbp)
  mov    0x40(%rbp),%rax
  mov    %rax,-0x9b0(%rbp)
  mov    0x48(%rbp),%rax
  mov    %rax,-0x9b8(%rbp)
  mov    0x50(%rbp),%rax
  mov    %rax,-0x9c0(%rbp)
  mov    0x58(%rbp),%rax
  mov    %rax,-0x9c8(%rbp)
  mov    0x60(%rbp),%rax
  mov    %rax,-0x9d0(%rbp)
  mov    0x68(%rbp),%rax
  mov    %rax,-0x9d8(%rbp)
  mov    0x70(%rbp),%rax
  mov    %rax,-0x9e0(%rbp)
  mov    0x78(%rbp),%rax
  mov    %rax,-0x9e8(%rbp)
  mov    0x80(%rbp),%rax
  mov    %rax,-0x9f0(%rbp)
  mov    0x88(%rbp),%rax
  mov    %rax,-0x9f8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movsd  D80(%rip),%xmm0
  movsd  %xmm0,-0x8b8(%rbp)
  movsd  D98(%rip),%xmm0
  movsd  %xmm0,-0x8b0(%rbp)
  movl   $0x10,-0x944(%rbp)
  movl   $0x10,-0x940(%rbp)
  mov    -0x988(%rbp),%eax
  sub    $0x1,%eax
  cltd
  idivl  -0x990(%rbp)
  add    $0x1,%eax
  mov    %eax,-0x93c(%rbp)
  mov    -0x98c(%rbp),%eax
  sub    $0x1,%eax
  cltd
  idivl  -0x994(%rbp)
  add    $0x1,%eax
  mov    %eax,-0x938(%rbp)
  mov    -0x998(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    -0x998(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x934(%rbp)
  mov    0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    0x10(%rbp),%eax
  add    $0x2,%eax
  imul   %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,-0x930(%rbp)
  mov    -0x9b8(%rbp),%rax
  movsd  (%rax),%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x92c(%rbp)
  mov    -0x9b8(%rbp),%rax
  movsd  0x8(%rax),%xmm0
  movsd  %xmm0,-0x8a8(%rbp)
  mov    -0x9b8(%rbp),%rax
  movsd  0x10(%rax),%xmm0
  movsd  %xmm0,-0x8a0(%rbp)
  mov    -0x9b8(%rbp),%rax
  movsd  0x18(%rax),%xmm0
  movsd  %xmm0,-0x898(%rbp)
  mov    -0x9b8(%rbp),%rax
  movsd  0x20(%rax),%xmm0
  movsd  %xmm0,-0x890(%rbp)
  mov    -0x9b8(%rbp),%rax
  movsd  0x28(%rax),%xmm0
  movsd  %xmm0,-0x888(%rbp)
  mov    -0x9b8(%rbp),%rax
  movsd  0x30(%rax),%xmm0
  movsd  %xmm0,-0x8d0(%rbp)
  mov    -0x9b8(%rbp),%rax
  movsd  0x38(%rax),%xmm0
  movsd  %xmm0,-0x880(%rbp)
  movsd  -0x8d0(%rbp),%xmm0
  comisd D129(%rip),%xmm0
  jbe    L226
  movsd  D129(%rip),%xmm0
  movsd  %xmm0,-0x8d0(%rbp)
L226:
  movsd  -0x8d0(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x878(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8c0(%rbp)
  movl   $0x1,-0x980(%rbp)
  jmp    L159
L115:
  movl   $0x1,-0x97c(%rbp)
  jmp    L231
L433:
  mov    -0x97c(%rbp),%eax
  imul   -0x92c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x980(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9c0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  -0x8c0(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8c0(%rbp)
  addl   $0x1,-0x97c(%rbp)
L231:
  mov    -0x92c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x97c(%rbp)
  jl     L433
  addl   $0x1,-0x980(%rbp)
L159:
  mov    -0x92c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x980(%rbp)
  jl     L115
  cmpl   $0x0,-0x984(%rbp)
  jne    L342
  movsd  -0x8c0(%rbp),%xmm1
  movsd  D117(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  -0x8a8(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  mulsd  -0x8b8(%rbp),%xmm0
  mulsd  -0x8b0(%rbp),%xmm0
  mulsd  -0x8b0(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8c8(%rbp)
  jmp    L251
L342:
  cmpl   $0x1,-0x984(%rbp)
  jne    L251
  mov    -0x9b8(%rbp),%rax
  movsd  0x40(%rax),%xmm0
  movsd  %xmm0,-0x870(%rbp)
  movsd  -0x8a0(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x868(%rbp)
  movsd  -0x898(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x860(%rbp)
  movsd  -0x870(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x858(%rbp)
  movsd  D123(%rip),%xmm0
  divsd  -0x868(%rbp),%xmm0
  movsd  D123(%rip),%xmm1
  divsd  -0x860(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x850(%rbp)
  movsd  D123(%rip),%xmm0
  movapd %xmm0,%xmm1
  divsd  -0x868(%rbp),%xmm1
  movsd  D123(%rip),%xmm0
  divsd  -0x860(%rbp),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x848(%rbp)
  movsd  -0x850(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  -0x858(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rax
  movq   %rax,%xmm3
  addsd  -0x848(%rbp),%xmm3
  movq   %xmm3,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  movsd  D123(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x840(%rbp)
  movsd  -0x850(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  addsd  -0x858(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movsd  -0x848(%rbp),%xmm1
  subsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  movapd %xmm0,%xmm1
  movsd  D123(%rip),%xmm0
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x838(%rbp)
  movsd  -0x8c0(%rbp),%xmm1
  movsd  D117(%rip),%xmm0
  movapd %xmm1,%xmm2
  mulsd  %xmm0,%xmm2
  movsd  -0x8a8(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x8b8(%rbp),%xmm1
  movsd  -0x840(%rbp),%xmm0
  mulsd  -0x838(%rbp),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0x8a0(%rbp),%xmm1
  mulsd  -0x898(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,-0x8c8(%rbp)
L251:
  movl   $0x0,-0x94c(%rbp)
  jmp    L266
L53:
  movl   $0x0,-0x948(%rbp)
  jmp    L218
L206:
  mov    -0x94c(%rbp),%eax
  imul   -0x990(%rbp),%eax
  mov    %eax,%edx
  mov    -0x990(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  add    %edx,%eax
  mov    %eax,-0x928(%rbp)
  mov    -0x948(%rbp),%eax
  imul   -0x994(%rbp),%eax
  mov    %eax,%edx
  mov    -0x994(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  add    %edx,%eax
  mov    %eax,-0x924(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x928(%rbp),%xmm0
  mov    -0x988(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  D45(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x988(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x830(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x924(%rbp),%xmm0
  mov    -0x98c(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  movsd  D45(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  mov    -0x98c(%rbp),%eax
  sub    $0x1,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x828(%rbp)
  movl   $0x0,-0x954(%rbp)
  jmp    L151
L335:
  movl   $0x0,-0x950(%rbp)
  jmp    L269
L430:
  mov    -0x950(%rbp),%eax
  imul   -0x944(%rbp),%eax
  mov    %eax,%edx
  mov    -0x954(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x908(%rbp)
  mov    -0x908(%rbp),%eax
  cltq
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x810(%rbp,%rax,8)
  mov    -0x9b8(%rbp),%r8
  mov    -0x924(%rbp),%edi
  mov    -0x928(%rbp),%ecx
  mov    -0x950(%rbp),%edx
  mov    -0x954(%rbp),%esi
  mov    -0x984(%rbp),%eax
  sub    $0x8,%rsp
  push   -0x9d0(%rbp)
  push   -0x9c8(%rbp)
  push   -0x9c0(%rbp)
  mov    %r8,%r9
  mov    %edi,%r8d
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <integrated_profile@plt>
  add    $0x20,%rsp
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x820(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8d8(%rbp)
  movl   $0x0,-0x978(%rbp)
  jmp    L23
L256:
  mov    -0x978(%rbp),%eax
  cmp    -0x934(%rbp),%eax
  jl     L203
  mov    -0x978(%rbp),%eax
  sub    -0x934(%rbp),%eax
  cltd
  idivl  -0x930(%rbp)
  add    $0x1,%eax
  jmp    L516
L203:
  mov    $0x0,%eax
L516:
  mov    %eax,-0x8fc(%rbp)
  mov    -0x8fc(%rbp),%eax
  cmp    0x20(%rbp),%eax
  jge    L422
  mov    -0x8fc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x9a0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x8f8(%rbp)
  mov    -0x8fc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x9a8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x8f4(%rbp)
  cmpl   $0x0,-0x8fc(%rbp)
  jne    L262
  mov    -0x998(%rbp),%eax
  mov    %eax,-0x974(%rbp)
  mov    -0x978(%rbp),%eax
  mov    %eax,-0x970(%rbp)
  jmp    L31
L262:
  mov    0x10(%rbp),%eax
  mov    %eax,-0x974(%rbp)
  mov    -0x978(%rbp),%eax
  sub    -0x934(%rbp),%eax
  mov    -0x8fc(%rbp),%edx
  sub    $0x1,%edx
  imul   -0x930(%rbp),%edx
  sub    %edx,%eax
  mov    %eax,-0x970(%rbp)
L31:
  movl   $0x0,-0x960(%rbp)
  mov    -0x960(%rbp),%eax
  mov    %eax,-0x964(%rbp)
  cmpl   $0x0,-0x974(%rbp)
  jle    L455
  movl   $0x0,-0x980(%rbp)
  movl   $0x0,-0x96c(%rbp)
  jmp    L332
L188:
  movl   $0x0,-0x968(%rbp)
  jmp    L362
L418:
  mov    -0x980(%rbp),%eax
  cmp    -0x970(%rbp),%eax
  jne    L403
  mov    -0x96c(%rbp),%eax
  mov    %eax,-0x964(%rbp)
  mov    -0x968(%rbp),%eax
  mov    %eax,-0x960(%rbp)
L403:
  addl   $0x1,-0x980(%rbp)
  addl   $0x1,-0x968(%rbp)
L362:
  mov    -0x974(%rbp),%eax
  sub    -0x96c(%rbp),%eax
  cmp    %eax,-0x968(%rbp)
  jle    L418
  addl   $0x1,-0x96c(%rbp)
L332:
  mov    -0x96c(%rbp),%eax
  cmp    -0x974(%rbp),%eax
  jle    L188
L455:
  cmpl   $0x0,-0x8fc(%rbp)
  jle    L369
  mov    -0x954(%rbp),%edx
  mov    -0x8f8(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x8f0(%rbp)
  mov    -0x950(%rbp),%edx
  mov    -0x8f4(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x8ec(%rbp)
  mov    -0x9b8(%rbp),%r8
  mov    -0x924(%rbp),%edi
  mov    -0x928(%rbp),%ecx
  mov    -0x8ec(%rbp),%edx
  mov    -0x8f0(%rbp),%esi
  mov    -0x984(%rbp),%eax
  sub    $0x8,%rsp
  push   -0x9d0(%rbp)
  push   -0x9c8(%rbp)
  push   -0x9c0(%rbp)
  mov    %r8,%r9
  mov    %edi,%r8d
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <integrated_profile@plt>
  add    $0x20,%rsp
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x8e0(%rbp)
  mov    -0x8fc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x9b0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L426
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8e0(%rbp)
  movl   $0xffffffff,-0x95c(%rbp)
  jmp    L13
L273:
  movl   $0xffffffff,-0x958(%rbp)
  jmp    L235
L194:
  mov    -0x8f0(%rbp),%edx
  mov    -0x95c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x8e8(%rbp)
  mov    -0x8ec(%rbp),%edx
  mov    -0x958(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x8e4(%rbp)
  mov    -0x9b8(%rbp),%r8
  mov    -0x924(%rbp),%edi
  mov    -0x928(%rbp),%ecx
  mov    -0x8e4(%rbp),%edx
  mov    -0x8e8(%rbp),%esi
  mov    -0x984(%rbp),%eax
  sub    $0x8,%rsp
  push   -0x9d0(%rbp)
  push   -0x9c8(%rbp)
  push   -0x9c0(%rbp)
  mov    %r8,%r9
  mov    %edi,%r8d
  mov    %eax,%edi
  mov    $0x0,%eax
  call   <integrated_profile@plt>
  add    $0x20,%rsp
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  movsd  %xmm0,-0x818(%rbp)
  movsd  -0x8e0(%rbp),%xmm0
  addsd  -0x818(%rbp),%xmm0
  movsd  %xmm0,-0x8e0(%rbp)
  addl   $0x1,-0x958(%rbp)
L235:
  cmpl   $0x1,-0x958(%rbp)
  jle    L194
  addl   $0x1,-0x95c(%rbp)
L13:
  cmpl   $0x1,-0x95c(%rbp)
  jle    L273
  movsd  -0x8e0(%rbp),%xmm0
  movsd  D28(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8e0(%rbp)
L426:
  mov    -0x978(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9d8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x8e0(%rbp),%xmm0
  subsd  -0x820(%rbp),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0xa00(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x964(%rbp),%xmm0
  mov    -0x830(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mulsd  -0xa00(%rbp),%xmm0
  movsd  %xmm0,-0xa00(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x960(%rbp),%xmm0
  mov    -0x828(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mulsd  -0xa00(%rbp),%xmm0
  movsd  -0x8d8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8d8(%rbp)
  jmp    L422
L369:
  mov    -0x978(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9d8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  -0x820(%rbp),%xmm0
  movsd  %xmm0,-0xa00(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x964(%rbp),%xmm0
  mov    -0x830(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  movapd %xmm0,%xmm6
  mulsd  -0xa00(%rbp),%xmm6
  movsd  %xmm6,-0xa00(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sdl -0x960(%rbp),%xmm0
  mov    -0x828(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <pow@plt>
  mulsd  -0xa00(%rbp),%xmm0
  movsd  -0x8d8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8d8(%rbp)
L422:
  addl   $0x1,-0x978(%rbp)
L23:
  mov    -0x978(%rbp),%eax
  cmp    0x18(%rbp),%eax
  jl     L256
  movsd  -0x8d8(%rbp),%xmm0
  divsd  -0x8c8(%rbp),%xmm0
  mov    -0x908(%rbp),%eax
  cltq
  movsd  %xmm0,-0x810(%rbp,%rax,8)
  addl   $0x1,-0x950(%rbp)
L269:
  mov    -0x950(%rbp),%eax
  cmp    -0x940(%rbp),%eax
  jl     L430
  addl   $0x1,-0x954(%rbp)
L151:
  mov    -0x954(%rbp),%eax
  cmp    -0x944(%rbp),%eax
  jl     L335
  mov    -0x990(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x928(%rbp),%eax
  add    %eax,%edx
  mov    -0x988(%rbp),%eax
  cmp    %edx,%eax
  cmovg  %edx,%eax
  mov    %eax,-0x920(%rbp)
  mov    -0x994(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x924(%rbp),%eax
  add    %eax,%edx
  mov    -0x98c(%rbp),%eax
  cmp    %edx,%eax
  cmovg  %edx,%eax
  mov    %eax,-0x91c(%rbp)
  mov    -0x990(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  neg    %eax
  mov    %eax,%edx
  mov    -0x928(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x980(%rbp)
  jmp    L331
L487:
  mov    -0x994(%rbp),%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  neg    %eax
  mov    %eax,%edx
  mov    -0x924(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x97c(%rbp)
  jmp    L278
L407:
  mov    -0x97c(%rbp),%eax
  imul   -0x988(%rbp),%eax
  mov    %eax,%edx
  mov    -0x980(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9e0(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x97c(%rbp),%eax
  imul   -0x988(%rbp),%eax
  mov    %eax,%edx
  mov    -0x980(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9e8(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rax)
  cmpl   $0x7,-0x980(%rbp)
  jg     L409
  mov    $0x8,%eax
  sub    -0x980(%rbp),%eax
  jmp    L447
L409:
  mov    $0x0,%eax
L447:
  mov    %eax,-0x918(%rbp)
  mov    -0x988(%rbp),%eax
  add    $0x8,%eax
  sub    -0x980(%rbp),%eax
  mov    -0x944(%rbp),%edx
  cmp    %eax,%edx
  cmovle %edx,%eax
  mov    %eax,-0x914(%rbp)
  cmpl   $0x7,-0x97c(%rbp)
  jg     L110
  mov    $0x8,%eax
  sub    -0x97c(%rbp),%eax
  jmp    L390
L110:
  mov    $0x0,%eax
L390:
  mov    %eax,-0x910(%rbp)
  mov    -0x98c(%rbp),%eax
  add    $0x8,%eax
  sub    -0x97c(%rbp),%eax
  cmp    %eax,-0x940(%rbp)
  jl     L129
  mov    -0x98c(%rbp),%eax
  add    $0x8,%eax
  sub    -0x97c(%rbp),%eax
  jmp    L402
L129:
  mov    -0x944(%rbp),%eax
L402:
  mov    %eax,-0x90c(%rbp)
  mov    -0x918(%rbp),%eax
  mov    %eax,-0x954(%rbp)
  jmp    L476
L50:
  mov    -0x910(%rbp),%eax
  mov    %eax,-0x950(%rbp)
  jmp    L475
L282:
  mov    -0x950(%rbp),%eax
  imul   -0x944(%rbp),%eax
  mov    %eax,%edx
  mov    -0x954(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x908(%rbp)
  mov    -0x980(%rbp),%edx
  mov    -0x954(%rbp),%eax
  add    %edx,%eax
  sub    $0x8,%eax
  mov    %eax,-0x904(%rbp)
  mov    -0x97c(%rbp),%edx
  mov    -0x950(%rbp),%eax
  add    %edx,%eax
  sub    $0x8,%eax
  mov    %eax,-0x900(%rbp)
  mov    -0x904(%rbp),%eax
  cmp    -0x988(%rbp),%eax
  jge    L76
  mov    -0x900(%rbp),%eax
  cmp    -0x98c(%rbp),%eax
  jge    L76
  mov    -0x97c(%rbp),%eax
  imul   -0x988(%rbp),%eax
  mov    %eax,%edx
  mov    -0x980(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9e0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x908(%rbp),%eax
  cltq
  movsd  -0x810(%rbp,%rax,8),%xmm2
  mov    -0x988(%rbp),%eax
  imul   -0x900(%rbp),%eax
  mov    %eax,%edx
  mov    -0x904(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9f0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm2,%xmm0
  mov    -0x97c(%rbp),%eax
  imul   -0x988(%rbp),%eax
  mov    %eax,%edx
  mov    -0x980(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9e0(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x97c(%rbp),%eax
  imul   -0x988(%rbp),%eax
  mov    %eax,%edx
  mov    -0x980(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9e8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x908(%rbp),%eax
  cltq
  movsd  -0x810(%rbp,%rax,8),%xmm2
  mov    -0x988(%rbp),%eax
  imul   -0x900(%rbp),%eax
  mov    %eax,%edx
  mov    -0x904(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9f8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm2,%xmm0
  mov    -0x97c(%rbp),%eax
  imul   -0x988(%rbp),%eax
  mov    %eax,%edx
  mov    -0x980(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x9e8(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L76:
  addl   $0x1,-0x950(%rbp)
L475:
  mov    -0x950(%rbp),%eax
  cmp    -0x90c(%rbp),%eax
  jl     L282
  addl   $0x1,-0x954(%rbp)
L476:
  mov    -0x954(%rbp),%eax
  cmp    -0x914(%rbp),%eax
  jl     L50
  addl   $0x1,-0x97c(%rbp)
L278:
  mov    -0x97c(%rbp),%eax
  cmp    -0x91c(%rbp),%eax
  jl     L407
  addl   $0x1,-0x980(%rbp)
L331:
  mov    -0x980(%rbp),%eax
  cmp    -0x920(%rbp),%eax
  jl     L487
  addl   $0x1,-0x948(%rbp)
L218:
  mov    -0x948(%rbp),%eax
  cmp    -0x938(%rbp),%eax
  jl     L206
  addl   $0x1,-0x94c(%rbp)
L266:
  mov    -0x94c(%rbp),%eax
  cmp    -0x93c(%rbp),%eax
  jl     L53
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L243
  call   <__stack_chk_fail@plt>
L243:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D80
type_infered: f64
name: unpack_data
arguments: data_label: D98
type_infered: f64
name: unpack_data
arguments: data_label: D129
type_infered: f64[2]
name: unpack_data
arguments: data_label: D117
type_infered: f64
name: unpack_data
arguments: data_label: D123
type_infered: f64
name: unpack_data
arguments: data_label: D45
type_infered: f64
name: unpack_data
arguments: data_label: D28
type_infered: f64

tool: D80: 3.14159265

tool: D98: 0.8493218

tool: {"D129": [6.0,0.25]}

tool: D117: 0.25

tool: D123: 1

tool: D45: 0.5

tool: D28: 9

assistant: ```c
void cu_convolve_image_psf(int profile_type, int nx, int ny, int dx, int dy, int dp, int ds, int n_coeff, int nkernel, int kernel_radius, int *kxindex, int *kyindex, int *ext_basis, double *psf_parameters, double *psf_0, double *psf_xd, double *psf_yd, double *coeff, double *cim1, double *cim2, double *tex0, double *tex1) {
  int id, txa, tyb, txag, tybg, imax, jmax, idxmin, idxmax, idymin, idymax;
  int np, ns, i, j, ii, ip, jp, ic, ki, a, b;
  int d1, sidx, l, m, l1, m1, ig, jg;
  int psf_size, ix, jx;
  double x, y, p0, p1, p1g, cpsf_pixel;
  int xpos, ypos;
  double psf_height, psf_sigma_x, psf_sigma_y, psf_sigma_xy, psf_xpos, psf_ypos;
  double gain, psf_rad, psf_rad2, px, py;
  double sx2, sy2, sxy2, sx2msy2, sx2psy2;
  double psf_norm, dd;
  double pi = 3.14159265, fwtosig = 0.8493218;
  double psf_sum;
  double cpsf[256];
  int idx, idy, blockIdx, blockIdy, blockDimx = 16, blockDimy = 16, gridDimx, gridDimy;
  gridDimx = (nx - 1) / dx + 1;
  gridDimy = (ny - 1) / dy + 1;
  np = (dp + 1) * (dp + 2) / 2;
  ns = (ds + 1) * (ds + 2) / 2;
  psf_size = (int)psf_parameters[0];
  psf_height = psf_parameters[1];
  psf_sigma_x = psf_parameters[2];
  psf_sigma_y = psf_parameters[3];
  psf_ypos = psf_parameters[4];
  psf_xpos = psf_parameters[5];
  psf_rad = psf_parameters[6];
  gain = psf_parameters[7];
  if (psf_rad > 6.0) {
    psf_rad = 6.0;
  }
  psf_rad2 = psf_rad * psf_rad;
  psf_sum = 0.0;
  for (i = 1; i < psf_size - 1; i++) {
    for (j = 1; j < psf_size - 1; j++) {
      psf_sum += psf_0[i + j * psf_size];
    }
  }
  if (profile_type == 0) {
    psf_norm = 0.25 * psf_sum + psf_height * 2 * pi * fwtosig * fwtosig;
  } else if (profile_type == 1) {
    psf_sigma_xy = psf_parameters[8];
    sx2 = psf_sigma_x * psf_sigma_x;
    sy2 = psf_sigma_y * psf_sigma_y;
    sxy2 = psf_sigma_xy * psf_sigma_xy;
    sx2msy2 = 1.0 / sx2 - 1.0 / sy2;
    sx2psy2 = 1.0 / sx2 + 1.0 / sy2;
    px = 1.0 / sqrt(sx2psy2 + sqrt(sx2msy2 * sx2msy2 + sxy2));
    py = 1.0 / sqrt(sx2psy2 - sqrt(sx2msy2 * sx2msy2 + sxy2));
    psf_norm = 0.25 * psf_sum + psf_height * pi * (px * py) / (psf_sigma_x * psf_sigma_y);
  }
  for (blockIdx = 0; blockIdx < gridDimx; blockIdx += 1) {
    for (blockIdy = 0; blockIdy < gridDimy; blockIdy += 1) {
      xpos = blockIdx * dx + dx / 2;
      ypos = blockIdy * dy + dy / 2;
      x = (xpos - 0.5 * (nx - 1)) / (nx - 1);
      y = (ypos - 0.5 * (ny - 1)) / (ny - 1);
      for (idx = 0; idx < blockDimx; idx++) {
        for (idy = 0; idy < blockDimy; idy++) {
          id = idx + idy * blockDimx;
          cpsf[id] = 0.0;
          p0 = integrated_profile(profile_type, idx, idy, xpos, ypos, psf_parameters, psf_0, psf_xd, psf_yd);
          cpsf_pixel = 0.0;
          for (ic = 0; ic < n_coeff; ic++) {
            ki = ic < np ? 0 : (ic - np) / ns + 1;
            if (ki < nkernel) {
              a = kxindex[ki];
              b = kyindex[ki];
              if (ki == 0) {
                d1 = dp;
                sidx = ic;
              } else {
                d1 = ds;
                sidx = ic - np - (ki - 1) * ns;
              }
              l1 = m1 = 0;
              if (d1 > 0) {
                i = 0;
                for (l = 0; l <= d1; l++) {
                  for (m = 0; m <= d1 - l; m++) {
                    if (i == sidx) {
                      l1 = l;
                      m1 = m;
                    }
                    i++;
                  }
                }
              }
              if (ki > 0) {
                txa = idx + a;
                tyb = idy + b;
                p1 = integrated_profile(profile_type, txa, tyb, xpos, ypos, psf_parameters, psf_0, psf_xd, psf_yd);
                if (ext_basis[ki]) {
                  p1 = 0.0;
                  for (ig = -1; ig < 2; ig++) {
                    for (jg = -1; jg < 2; jg++) {
                      txag = txa + ig;
                      tybg = tyb + jg;
                      p1g = integrated_profile(profile_type, txag, tybg, xpos, ypos, psf_parameters, psf_0, psf_xd, psf_yd);
                      p1 += p1g;
                    }
                  }
                  p1 /= 9.0;
                }
                cpsf_pixel += coeff[ic] * (p1 - p0) * pow(x, l1) * pow(y, m1);
              } else {
                cpsf_pixel += coeff[ic] * p0 * pow(x, l1) * pow(y, m1);
              }
            }
          }
          cpsf[id] = cpsf_pixel / psf_norm;
        }
      }
      imax = (xpos + dx / 2) < nx ? xpos + dx / 2 : nx;
      jmax = (ypos + dy / 2) < ny ? ypos + dy / 2 : ny;
      for (i = xpos - dx / 2; i < imax; i++) {
        for (j = ypos - dy / 2; j < jmax; j++) {
          cim1[i + j * nx] = 0.0;
          cim2[i + j * nx] = 0.0;
          idxmin = ((i - 8) >= 0) ? 0 : 8 - i;
          idxmax = (blockDimx < (nx + 8 - i)) ? blockDimx : nx + 8 - i;
          idymin = ((j - 8) >= 0) ? 0 : 8 - j;
          idymax = (blockDimy < (ny + 8 - j)) ? blockDimx : ny + 8 - j;
          for (idx = idxmin; idx < idxmax; idx++) {
            for (idy = idymin; idy < idymax; idy++) {
              id = idx + idy * blockDimx;
              ix = i + idx - 8;
              jx = j + idy - 8;
              if ((ix < nx) && (jx < ny)) {
                cim1[i + j * nx] += cpsf[id] * tex0[ix + nx * jx];
                cim2[i + j * nx] += cpsf[id] * tex1[ix + nx * jx];
              }
            }
          }
        }
      }
    }
  }
  return;
}
```