user: 请从给定的汇编指令推导出C源代码:

```asm
<pet_c_lmosem_dda>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %esi,%ebx
  sub    $0xa8,%rsp
  mov    0xe0(%rsp),%rax
  mov    %rdi,0x28(%rsp)
  mov    %rdx,0x30(%rsp)
  mov    %rax,0x40(%rsp)
  mov    0xf0(%rsp),%rax
  mov    %r8,0x38(%rsp)
  mov    %rax,0x48(%rsp)
  mov    0x100(%rsp),%rax
  mov    %rax,0x50(%rsp)
  mov    0x110(%rsp),%rax
  mov    %rax,0x88(%rsp)
  mov    0x130(%rsp),%rax
  mov    %rax,0x98(%rsp)
  mov    0x150(%rsp),%eax
  mov    %eax,0x90(%rsp)
  imul   %eax,%eax
  mov    %eax,0x94(%rsp)
  mov    0x158(%rsp),%eax
  lea    0x0(,%rax,4),%edi
  call   <malloc@plt>
  mov    %rax,0x8(%rsp)
  test   %ebx,%ebx
  jle    L192
  movd   0x94(%rsp),%xmm5
  movslq %ebx,%rax
  movq   $0x0,0x10(%rsp)
  mov    %rax,0x58(%rsp)
  pshufd $0x0,%xmm5,%xmm5
  movaps %xmm5,0x60(%rsp)
  psrlq  $0x20,%xmm5
  movaps %xmm5,0x70(%rsp)
  nopl   0x0(%rax,%rax,1)
L40:
  mov    0x10(%rsp),%rcx
  mov    0x28(%rsp),%rax
  mov    0x48(%rsp),%rdx
  movzwl (%rax,%rcx,2),%ebp
  mov    0x30(%rsp),%rax
  movzwl (%rdx,%rcx,2),%edx
  movzwl (%rax,%rcx,2),%ebx
  mov    0x38(%rsp),%rax
  sub    %ebx,%edx
  movzwl (%rax,%rcx,2),%esi
  mov    0x40(%rsp),%rax
  mov    %edx,%r14d
  mov    0x50(%rsp),%rdx
  movzwl (%rax,%rcx,2),%eax
  mov    %esi,0x20(%rsp)
  movzwl (%rdx,%rcx,2),%r13d
  sub    %ebp,%eax
  mov    %eax,%edi
  mov    %r13d,%r15d
  mov    %eax,0x1c(%rsp)
  sub    %esi,%r15d
  call   <abs@plt>
  mov    %r14d,%edi
  movss  %xmm0,0x18(%rsp)
  call   <abs@plt>
  mov    %r15d,%edi
  movd   %xmm0,%r12d
  call   <abs@plt>
  movd   %r12d,%xmm7
  movss  0x18(%rsp),%xmm2
  mov    0x1c(%rsp),%eax
  cvttss2si %xmm7,%r12d
  movaps %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  comiss %xmm0,%xmm2
  jbe    L148
  cvttss2si %xmm2,%r12d
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
L148:
  comiss %xmm0,%xmm1
  jbe    L61
  cvttss2si %xmm1,%r12d
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
L61:
  movss  D1(%rip),%xmm6
  mov    $0x17,%esi
  mov    $0x2,%edi
  divss  %xmm0,%xmm6
  pxor   %xmm0,%xmm0
  cvtsi2ss %eax,%xmm0
  mulss  %xmm6,%xmm0
  movss  %xmm6,0x18(%rsp)
  movss  %xmm0,0x1c(%rsp)
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  mov    $0x17,%esi
  mov    $0x2,%edi
  cvtsi2ss %eax,%xmm0
  mulss  0x1c(%rsp),%xmm0
  cvttss2si %xmm0,%r13d
  pxor   %xmm0,%xmm0
  cvtsi2ss %r14d,%xmm0
  mulss  0x18(%rsp),%xmm0
  movss  %xmm0,0x1c(%rsp)
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  mov    $0x17,%esi
  mov    $0x2,%edi
  cvtsi2ss %eax,%xmm0
  mulss  0x1c(%rsp),%xmm0
  cvttss2si %xmm0,%r14d
  pxor   %xmm0,%xmm0
  cvtsi2ss %r15d,%xmm0
  mulss  0x18(%rsp),%xmm0
  movss  %xmm0,0x18(%rsp)
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  mov    $0x17,%esi
  mov    $0x2,%edi
  cvtsi2ss %eax,%xmm0
  mulss  0x18(%rsp),%xmm0
  cvttss2si %xmm0,%r15d
  call   <pow@plt>
  mov    $0x17,%esi
  mov    $0x2,%edi
  imul   %eax,%ebp
  call   <pow@plt>
  mov    $0x17,%esi
  mov    $0x2,%edi
  imul   %eax,%ebx
  call   <pow@plt>
  imul   0x20(%rsp),%eax
  test   %r12d,%r12d
  jle    L182
  cmpl   $0x1,0x90(%rsp)
  lea    -0x1(%r12),%edx
  jne    L169
  cmp    $0x2,%edx
  jbe    L137
  lea    0x0(%r13,%rbp,1),%edx
  movd   %ebp,%xmm5
  mov    0x8(%rsp),%r10
  lea    (%rdx,%r13,1),%ecx
  movd   %edx,%xmm4
  mov    %edx,0x18(%rsp)
  lea    0x0(,%r15,4),%edx
  lea    (%rcx,%r13,1),%esi
  movd   %ecx,%xmm0
  lea    (%r14,%rbx,1),%ecx
  movd   %esi,%xmm3
  lea    0x0(,%r13,4),%esi
  punpckldq %xmm4,%xmm5
  movd   %esi,%xmm8
  lea    (%r14,%rcx,1),%esi
  punpckldq %xmm3,%xmm0
  lea    (%r14,%rsi,1),%edi
  punpcklqdq %xmm0,%xmm5
  movd   %esi,%xmm0
  movd   %edi,%xmm7
  lea    0x0(,%r14,4),%esi
  movd   %ecx,%xmm3
  punpckldq %xmm7,%xmm0
  movd   %esi,%xmm7
  lea    (%r15,%rax,1),%esi
  lea    (%r15,%rsi,1),%edi
  movd   %ebx,%xmm4
  movd   %esi,%xmm6
  lea    (%r15,%rdi,1),%r8d
  punpckldq %xmm3,%xmm4
  pshufd $0x0,%xmm8,%xmm8
  movd   %r8d,%xmm3
  mov    %r12d,%r8d
  punpcklqdq %xmm0,%xmm4
  shr    $0x2,%r8d
  movd   %edi,%xmm0
  pshufd $0x0,%xmm7,%xmm7
  mov    %r10,%rdi
  punpckldq %xmm3,%xmm0
  sub    $0x1,%r8d
  movd   %eax,%xmm3
  punpckldq %xmm6,%xmm3
  shl    $0x4,%r8
  movd   %edx,%xmm6
  mov    0x18(%rsp),%edx
  punpcklqdq %xmm0,%xmm3
  pshufd $0x0,%xmm6,%xmm6
  lea    0x10(%r10,%r8,1),%r8
  nopl   (%rax)
L112:
  movdqa %xmm3,%xmm0
  movdqa %xmm4,%xmm2
  movdqa %xmm5,%xmm1
  add    $0x10,%rdi
  psrad  $0x17,%xmm0
  psrad  $0x17,%xmm2
  paddd  %xmm6,%xmm3
  paddd  %xmm2,%xmm0
  psrad  $0x17,%xmm1
  paddd  %xmm7,%xmm4
  paddd  %xmm1,%xmm0
  paddd  %xmm8,%xmm5
  movups %xmm0,-0x10(%rdi)
  cmp    %rdi,%r8
  jne    L112
  mov    %r12d,%r10d
  mov    %edx,0x18(%rsp)
  and    $0xfffffffc,%r10d
  mov    %r10d,%r8d
  mov    %r10d,%edi
  mov    %r10d,%r9d
  imul   %r13d,%r8d
  imul   %r14d,%edi
  imul   %r15d,%r9d
  lea    (%r8,%rbp,1),%edx
  mov    %edx,0x1c(%rsp)
  lea    (%rdi,%rbx,1),%edx
  add    %eax,%r9d
  cmp    %r12d,%r10d
  je     L135
L105:
  movslq %r10d,%rdi
  mov    %r9d,%r8d
  add    %r15d,%r9d
  lea    0x0(,%rdi,4),%r11
  sar    $0x17,%r8d
  mov    %r11,0x80(%rsp)
  mov    %edx,%r11d
  sar    $0x17,%r11d
  mov    %r11d,0x20(%rsp)
  mov    0x20(%rsp),%r11d
  add    %r8d,%r11d
  mov    0x1c(%rsp),%r8d
  sar    $0x17,%r8d
  add    %r8d,%r11d
  mov    0x8(%rsp),%r8
  mov    %r11d,(%r8,%rdi,4)
  mov    0x1c(%rsp),%edi
  lea    0x1(%r10),%r11d
  add    %r13d,%edi
  mov    %edi,0x1c(%rsp)
  mov    %edx,%edi
  add    %r14d,%edi
  cmp    %r11d,%r12d
  jle    L135
  mov    %edi,%edx
  mov    %r9d,%r11d
  add    $0x2,%r10d
  add    %r14d,%edi
  sar    $0x17,%edx
  sar    $0x17,%r11d
  add    %r15d,%r9d
  add    %edx,%r11d
  mov    0x1c(%rsp),%edx
  sar    $0x17,%edx
  add    %edx,%r11d
  mov    0x80(%rsp),%rdx
  mov    %r11d,0x4(%r8,%rdx,1)
  mov    0x1c(%rsp),%r8d
  add    %r13d,%r8d
  cmp    %r10d,%r12d
  jle    L135
  sar    $0x17,%r9d
  sar    $0x17,%edi
  sar    $0x17,%r8d
  add    %r9d,%edi
  add    %r8d,%edi
  mov    0x8(%rsp),%r8
  mov    %edi,0x8(%r8,%rdx,1)
L135:
  pxor   %xmm1,%xmm1
  mov    0x88(%rsp),%r8
  mov    0x18(%rsp),%edx
  xor    %edi,%edi
  movaps %xmm1,%xmm0
  jmp    L231
  nopw   0x0(%rax,%rax,1)
L199:
  add    %r13d,%edx
  add    %r14d,%ecx
  add    %r15d,%esi
L231:
  sar    $0x17,%eax
  sar    $0x17,%ebx
  add    $0x1,%edi
  add    %eax,%ebx
  sar    $0x17,%ebp
  mov    %esi,%eax
  add    %ebp,%ebx
  mov    %edx,%ebp
  movslq %ebx,%rbx
  addss  (%r8,%rbx,4),%xmm0
  mov    %ecx,%ebx
  cmp    %edi,%r12d
  jne    L199
L236:
  ucomiss %xmm1,%xmm0
  mov    0x8(%rsp),%rax
  movslq %r12d,%r12
  movl   $0xffffffff,(%rax,%r12,4)
  jp     L170
  je     L212
L170:
  mov    0x8(%rsp),%rsi
  movss  D1(%rip),%xmm1
  movslq (%rsi),%rax
  divss  %xmm0,%xmm1
  cmp    $0xffffffff,%eax
  je     L212
  mov    0x98(%rsp),%rcx
  lea    0x4(%rsi),%rdx
  nopl   0x0(%rax)
L207:
  lea    (%rcx,%rax,4),%rax
  add    $0x4,%rdx
  movss  (%rax),%xmm0
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  movslq -0x4(%rdx),%rax
  cmp    $0xffffffff,%eax
  jne    L207
L212:
  addq   $0x1,0x10(%rsp)
  mov    0x10(%rsp),%rax
  cmp    %rax,0x58(%rsp)
  jne    L40
L192:
  mov    0x8(%rsp),%rdi
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1080 <free@plt>
  xchg   %ax,%ax
L169:
  cmp    $0x2,%edx
  jbe    L19
  movd   0x90(%rsp),%xmm2
  lea    0x0(%r13,%rbp,1),%edx
  lea    0x0(%r13,%rdx,1),%ecx
  movd   %edx,%xmm4
  mov    %edx,0x18(%rsp)
  lea    0x0(,%r15,4),%edx
  lea    0x0(%r13,%rcx,1),%esi
  movd   %ecx,%xmm0
  lea    (%r14,%rbx,1),%ecx
  movd   %esi,%xmm5
  lea    0x0(,%r13,4),%esi
  pshufd $0x0,%xmm2,%xmm9
  punpckldq %xmm5,%xmm0
  movd   %esi,%xmm8
  movd   %ebp,%xmm5
  lea    (%r14,%rcx,1),%esi
  punpckldq %xmm4,%xmm5
  movd   %ebx,%xmm4
  lea    (%r14,%rsi,1),%edi
  punpcklqdq %xmm0,%xmm5
  movd   %esi,%xmm0
  movd   %edi,%xmm7
  lea    0x0(,%r14,4),%esi
  movdqa %xmm9,%xmm10
  punpckldq %xmm7,%xmm0
  movd   %ecx,%xmm7
  pshufd $0x0,%xmm8,%xmm8
  punpckldq %xmm7,%xmm4
  psrlq  $0x20,%xmm10
  movd   %esi,%xmm7
  lea    (%r15,%rax,1),%esi
  punpcklqdq %xmm0,%xmm4
  pshufd $0x0,%xmm7,%xmm7
  lea    (%r15,%rsi,1),%edi
  movd   %esi,%xmm6
  lea    (%r15,%rdi,1),%r8d
  movd   %edi,%xmm0
  movd   %r8d,%xmm3
  mov    %r12d,%r8d
  punpckldq %xmm3,%xmm0
  shr    $0x2,%r8d
  movd   %eax,%xmm3
  punpckldq %xmm6,%xmm3
  sub    $0x1,%r8d
  movd   %edx,%xmm6
  mov    0x8(%rsp),%rdx
  shl    $0x4,%r8
  punpcklqdq %xmm0,%xmm3
  pshufd $0x0,%xmm6,%xmm6
  mov    %rdx,%rdi
  lea    0x10(%rdx,%r8,1),%r8
  mov    0x18(%rsp),%edx
  nopl   0x0(%rax,%rax,1)
L206:
  movdqa %xmm3,%xmm1
  movdqa %xmm4,%xmm0
  movdqa %xmm5,%xmm2
  add    $0x10,%rdi
  movdqa 0x60(%rsp),%xmm11
  psrad  $0x17,%xmm1
  psrad  $0x17,%xmm0
  paddd  %xmm6,%xmm3
  psrad  $0x17,%xmm2
  paddd  %xmm7,%xmm4
  paddd  %xmm8,%xmm5
  pmuludq %xmm1,%xmm11
  psrlq  $0x20,%xmm1
  pmuludq 0x70(%rsp),%xmm1
  pshufd $0x8,%xmm1,%xmm1
  pshufd $0x8,%xmm11,%xmm11
  punpckldq %xmm1,%xmm11
  movdqa %xmm0,%xmm1
  psrlq  $0x20,%xmm0
  pmuludq %xmm9,%xmm1
  pmuludq %xmm10,%xmm0
  pshufd $0x8,%xmm1,%xmm1
  pshufd $0x8,%xmm0,%xmm0
  punpckldq %xmm0,%xmm1
  movdqa %xmm11,%xmm0
  paddd  %xmm1,%xmm0
  paddd  %xmm0,%xmm2
  movups %xmm2,-0x10(%rdi)
  cmp    %rdi,%r8
  jne    L206
  mov    %r12d,%edi
  mov    %r13d,%r8d
  mov    %edx,0x18(%rsp)
  and    $0xfffffffc,%edi
  imul   %edi,%r8d
  lea    (%r8,%rbp,1),%edx
  mov    %r14d,%r8d
  imul   %edi,%r8d
  mov    %edx,0x1c(%rsp)
  lea    (%r8,%rbx,1),%r11d
  mov    %r15d,%r8d
  imul   %edi,%r8d
  lea    (%r8,%rax,1),%edx
  mov    %edx,%r10d
  cmp    %edi,%r12d
  je     L140
L273:
  movslq %edi,%r9
  mov    %r11d,%r8d
  add    %r14d,%r11d
  lea    0x0(,%r9,4),%rdx
  sar    $0x17,%r8d
  imul   0x90(%rsp),%r8d
  mov    %rdx,0x20(%rsp)
  mov    %r10d,%edx
  sar    $0x17,%r10d
  imul   0x94(%rsp),%r10d
  add    %r15d,%edx
  add    %r10d,%r8d
  mov    0x1c(%rsp),%r10d
  sar    $0x17,%r10d
  add    %r10d,%r8d
  mov    0x8(%rsp),%r10
  mov    %r8d,(%r10,%r9,4)
  mov    0x1c(%rsp),%r10d
  lea    0x1(%rdi),%r8d
  add    %r13d,%r10d
  cmp    %r8d,%r12d
  jle    L140
  mov    0x90(%rsp),%r8d
  mov    %r11d,0x1c(%rsp)
  mov    %edx,%r9d
  sar    $0x17,%r11d
  sar    $0x17,%r9d
  add    %r15d,%edx
  add    $0x2,%edi
  imul   0x94(%rsp),%r9d
  imul   %r11d,%r8d
  mov    0x20(%rsp),%r11
  add    %r9d,%r8d
  mov    %r10d,%r9d
  add    %r13d,%r10d
  sar    $0x17,%r9d
  add    %r9d,%r8d
  mov    0x8(%rsp),%r9
  mov    %r8d,0x4(%r9,%r11,1)
  mov    0x1c(%rsp),%r9d
  add    %r14d,%r9d
  mov    %r9d,%r8d
  mov    %edx,%r9d
  cmp    %edi,%r12d
  jle    L140
  sar    $0x17,%r9d
  sar    $0x17,%r8d
  imul   0x94(%rsp),%r9d
  imul   0x90(%rsp),%r8d
  sar    $0x17,%r10d
  add    %r9d,%r8d
  mov    0x8(%rsp),%r9
  add    %r10d,%r8d
  mov    %r8d,0x8(%r9,%r11,1)
L140:
  pxor   %xmm1,%xmm1
  mov    0x18(%rsp),%edx
  xor    %edi,%edi
  mov    0x94(%rsp),%r8d
  mov    0x88(%rsp),%r9
  mov    0x90(%rsp),%r10d
  movaps %xmm1,%xmm0
  jmp    L136
  xchg   %ax,%ax
L230:
  add    %r13d,%edx
  add    %r14d,%ecx
  add    %r15d,%esi
L136:
  sar    $0x17,%eax
  sar    $0x17,%ebx
  add    $0x1,%edi
  imul   %r10d,%ebx
  sar    $0x17,%ebp
  imul   %r8d,%eax
  add    %ebx,%eax
  mov    %ecx,%ebx
  add    %ebp,%eax
  mov    %edx,%ebp
  cltq
  addss  (%r9,%rax,4),%xmm0
  mov    %esi,%eax
  cmp    %edi,%r12d
  jne    L230
  jmp    L236
  nopl   0x0(%rax)
L182:
  mov    0x8(%rsp),%rax
  movl   $0xffffffff,(%rax)
  jmp    L212
L137:
  lea    0x0(%r13,%rbp,1),%esi
  mov    %ebp,0x1c(%rsp)
  mov    %eax,%r9d
  mov    %ebx,%edx
  mov    %esi,0x18(%rsp)
  xor    %r10d,%r10d
  lea    (%r14,%rbx,1),%ecx
  lea    (%r15,%rax,1),%esi
  jmp    L105
L19:
  lea    0x0(%r13,%rbp,1),%esi
  mov    %ebp,0x1c(%rsp)
  mov    %eax,%r10d
  mov    %ebx,%r11d
  mov    %esi,0x18(%rsp)
  xor    %edi,%edi
  lea    (%r14,%rbx,1),%ecx
  lea    (%r15,%rax,1),%esi
  jmp    L273
```

tool_calls: name: extract_symbolic_data
arguments: label: D1
type_infered: byte[4]

tool: {"D1": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void pet_c_lmosem_dda(unsigned short int *X1, int nx1, unsigned short int *Y1, int ny1, unsigned short int *Z1, int nz1, unsigned short int *X2, int nx2, unsigned short int *Y2, int ny2, unsigned short int *Z2, int nz2, float *im, int nim1, int nim2, int nim3, float *F, int nf1, int nf2, int nf3, int wim, int ndata) {
  int length, lengthy, lengthz, i, j, n;
  float flength, val;
  float x, y, z, lx, ly, lz;
  int fxinc, fyinc, fzinc, fx, fy, fz;
  int x1, y1, z1, x2, y2, z2, diffx, diffy, diffz;
  int step;
  step = wim * wim;
  int *cols = (int *)malloc(ndata * sizeof(int));
  int LOR_ind;
  int vcol;
  float buf, sum, Qi;
  for (i = 0; i < nx1; ++i) {
    Qi = 0.0f;
    x1 = X1[i];
    x2 = X2[i];
    y1 = Y1[i];
    y2 = Y2[i];
    z1 = Z1[i];
    z2 = Z2[i];
    diffx = x2 - x1;
    diffy = y2 - y1;
    diffz = z2 - z1;
    lx = abs(diffx);
    ly = abs(diffy);
    lz = abs(diffz);
    length = ly;
    if (lx > length) {
      length = lx;
    }
    if (lz > length) {
      length = lz;
    }
    flength = 1.0f / (float)length;
    fxinc = ((int)diffx * flength * (int)(pow(2, 23)));
    fyinc = ((int)diffy * flength * (int)(pow(2, 23)));
    fzinc = ((int)diffz * flength * (int)(pow(2, 23)));
    fx = ((int)x1 * (int)(pow(2, 23)));
    fy = ((int)y1 * (int)(pow(2, 23)));
    fz = ((int)z1 * (int)(pow(2, 23)));
    for (n = 0; n < length; ++n) {
      vcol = (fz >> 23) * step + (fy >> 23) * wim + (fx >> 23);
      cols[n] = vcol;
      Qi += im[vcol];
      fx = fx + fxinc;
      fy = fy + fyinc;
      fz = fz + fzinc;
    }
    cols[n] = -1;
    if (Qi == 0.0f) {
      continue;
    }
    Qi = 1.0f / Qi;
    vcol = cols[0];
    j = 0;
    while (vcol != -1) {
      F[vcol] += Qi;
      ++j;
      vcol = cols[j];
    }
  }
  free(cols);
}
```