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

```asm
<get_gymy>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %rdi,0x58(%rsp)
  mov    %esi,0x50(%rsp)
  mov    %edx,0x2c(%rsp)
  mov    %ecx,0x28(%rsp)
  mov    %r8d,0x40(%rsp)
  mov    0xb8(%rsp),%r15
  mov    0xc8(%rsp),%eax
  movsd  %xmm0,0x38(%rsp)
  test   %eax,%eax
  jle    L128
  mov    %r9,%r13
  mov    %eax,%eax
  mov    %rax,0x68(%rsp)
  imul   %r8d,%edx
  mov    %edx,0x54(%rsp)
  movslq %r8d,%rax
  shl    $0x2,%rax
  mov    %rax,0x30(%rsp)
  movq   $0x0,0x60(%rsp)
  movsd  D105(%rip),%xmm6
  movsd  %xmm6,0x20(%rsp)
  jmp    L118
L158:
  movsd  0x18(%rsp),%xmm0
  call   <sqrt@plt>
  movq   %xmm0,%rbx
  movsd  0x18(%rsp),%xmm0
  call   <sqrt@plt>
  jmp    L11
L0:
  call   <sqrt@plt>
  jmp    L36
L185:
  movsd  0x8(%rsp),%xmm4
  addsd  D78(%rip),%xmm4
  movsd  %xmm4,0x8(%rsp)
L138:
  add    $0x1,%rbx
  cmp    %rbp,%rbx
  je     L105
L71:
  pxor   %xmm0,%xmm0
  cvtsi2sdl (%r15,%rbx,4),%xmm0
  mov    %r14d,%edx
  sub    0x0(%r13,%rbx,4),%edx
  mov    %edx,%eax
  neg    %eax
  cmovs  %edx,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  mulsd  %xmm0,%xmm0
  mulsd  %xmm1,%xmm1
  addsd  %xmm1,%xmm0
  addsd  0x10(%rsp),%xmm0
  pxor   %xmm7,%xmm7
  ucomisd %xmm0,%xmm7
  ja     L0
  sqrtsd %xmm0,%xmm0
L36:
  pxor   %xmm2,%xmm2
  cvtsi2sdl 0x28(%rsp),%xmm2
  movsd  D85(%rip),%xmm1
  divsd  %xmm2,%xmm1
  addsd  0x18(%rsp),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  D59(%rip),%xmm0
  movapd %xmm0,%xmm2
  movsd  0x20(%rsp),%xmm5
  movapd %xmm5,%xmm1
  andpd  %xmm0,%xmm1
  movsd  D23(%rip),%xmm3
  ucomisd %xmm1,%xmm3
  jbe    L141
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm2
  cmpnlesd %xmm0,%xmm2
  movsd  D78(%rip),%xmm3
  andpd  %xmm3,%xmm2
  subsd  %xmm2,%xmm1
  andnpd %xmm0,%xmm5
  movapd %xmm5,%xmm2
  orpd   %xmm1,%xmm2
L141:
  subsd  %xmm2,%xmm0
  movsd  D40(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L185
  movsd  0x8(%rsp),%xmm7
  subsd  D78(%rip),%xmm7
  movsd  %xmm7,0x8(%rsp)
  jmp    L138
L105:
  mov    0x48(%rsp),%ebp
L100:
  add    0x40(%rsp),%ebp
  add    0x30(%rsp),%r12
  cmp    %ebp,0x2c(%rsp)
  jle    L148
L56:
  pxor   %xmm0,%xmm0
  cvtsi2sdl (%r12),%xmm0
  comisd 0x38(%rsp),%xmm0
  jbe    L100
  mov    0x44(%rsp),%ecx
  mov    %ecx,%eax
  neg    %eax
  cmovs  %ecx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  pxor   %xmm1,%xmm1
  cvtsi2sdl 0xd0(%rsp),%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sd %ebp,%xmm2
  movapd %xmm2,%xmm3
  mulsd  %xmm2,%xmm3
  movsd  %xmm3,0x10(%rsp)
  mulsd  %xmm0,%xmm0
  mulsd  %xmm1,%xmm1
  addsd  %xmm1,%xmm0
  addsd  %xmm3,%xmm0
  movsd  %xmm0,0x18(%rsp)
  pxor   %xmm6,%xmm6
  ucomisd %xmm0,%xmm6
  ja     L158
  sqrtsd %xmm0,%xmm0
  movq   %xmm0,%rbx
L11:
  movapd %xmm0,%xmm3
  movsd  D105(%rip),%xmm2
  movapd %xmm0,%xmm1
  andpd  %xmm2,%xmm1
  movsd  D23(%rip),%xmm4
  ucomisd %xmm1,%xmm4
  jbe    L126
  cvttsd2si %xmm0,%rax
  pxor   %xmm1,%xmm1
  cvtsi2sd %rax,%xmm1
  movapd %xmm1,%xmm3
  cmpnlesd %xmm0,%xmm3
  movsd  D78(%rip),%xmm4
  andpd  %xmm4,%xmm3
  subsd  %xmm3,%xmm1
  andnpd %xmm0,%xmm2
  movapd %xmm1,%xmm3
  orpd   %xmm2,%xmm3
L126:
  movq   %rbx,%xmm7
  subsd  %xmm3,%xmm7
  movsd  %xmm7,0x18(%rsp)
  cmpl   $0x0,0xb0(%rsp)
  jle    L100
  mov    0xb0(%rsp),%eax
  mov    $0x0,%ebx
  mov    %ebp,0x48(%rsp)
  mov    %rax,%rbp
  jmp    L71
L148:
  mov    0x40(%rsp),%esi
  add    %esi,%r14d
  add    %esi,0x44(%rsp)
  mov    0x54(%rsp),%edi
  add    %edi,0x4c(%rsp)
  cmp    %r14d,0x50(%rsp)
  jle    L84
L45:
  cmpl   $0x0,0x2c(%rsp)
  jle    L148
  movslq 0x4c(%rsp),%rax
  mov    0x58(%rsp),%rdi
  lea    (%rdi,%rax,4),%r12
  mov    $0x0,%ebp
  jmp    L56
L54:
  pxor   %xmm4,%xmm4
  movsd  %xmm4,0x8(%rsp)
L84:
  movsd  0x8(%rsp),%xmm0
  andpd  D105(%rip),%xmm0
  cvttsd2si %xmm0,%eax
  mov    0xc0(%rsp),%rsi
  mov    0x60(%rsp),%rdi
  mov    %eax,(%rsi,%rdi,4)
  add    $0x1,%rdi
  mov    %rdi,0x60(%rsp)
  cmp    0x68(%rsp),%rdi
  je     L128
L118:
  cmpl   $0x0,0x50(%rsp)
  jle    L54
  mov    0x60(%rsp),%eax
  neg    %eax
  mov    %eax,0x44(%rsp)
  movl   $0x0,0x4c(%rsp)
  mov    $0x0,%r14d
  pxor   %xmm6,%xmm6
  movsd  %xmm6,0x8(%rsp)
  jmp    L45
L128:
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: read_data
arguments: label: D105
type: qword[2]
name: read_data
arguments: label: D78
type: f32[2]
name: read_data
arguments: label: D85
type: f64
name: read_data
arguments: label: D59
type: f64
name: read_data
arguments: label: D23
type: f32[2]
name: read_data
arguments: label: D40
type: f64

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

tool: {"D78": [0.0,1.875]}

tool: D85: 2

tool: D59: 0.75

tool: {"D23": [0.0,176.0]}

tool: D40: 0.5

assistant: ```c
void get_gymy(int *gymy_space, int width, int height, int q, int skip, int *probe, int probe_num_values, int *probe_dist, int *out, int out_size, int out_dist, double threshold) {
  for (int y = 0; y < out_size; y++) {
    double sum = 0;
    for (int x1 = 0; x1 < width; x1 += skip) {
      for (int x2 = 0; x2 < height; x2 += skip) {
        if (gymy_space[x1 * height + x2] > threshold) {
          double m1_sqrt_x1_x2_y_outd = (((double)(sqrt(((abs(x1 - y)) * ((double)abs(x1 - y))) + ((out_dist) * ((double)out_dist)) + ((x2) * ((double)x2))))) - floor((sqrt(((abs(x1 - y)) * ((double)abs(x1 - y))) + ((out_dist) * ((double)out_dist)) + ((x2) * ((double)x2))))));
          for (int val = 0; val < probe_num_values; val++) {
            double alpha = (((sqrt((((probe_dist[val])) * ((double)(probe_dist[val]))) + ((abs(x1 - probe[val])) * ((double)abs(x1 - probe[val]))) + (((x2)) * ((double)(x2)))))) + m1_sqrt_x1_x2_y_outd);
            double X = 0.75 + 2.0 / q * alpha;
            if ((((double)X) - floor(X)) < 0.5)
              sum -= 1;
            else
              sum += 1;
          }
        }
      }
    }
    out[y] = fabs(sum);
  }
}
```