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

```asm
<calcMean>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  cmpl   $0x2,-0x2c(%rbp)
  je     L125
  cmpl   $0x2,-0x2c(%rbp)
  jg     L88
  cmpl   $0x0,-0x2c(%rbp)
  je     L134
  cmpl   $0x1,-0x2c(%rbp)
  je     L139
  jmp    L88
L134:
  pxor   %xmm0,%xmm0
  jmp    L65
L139:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  jmp    L65
L125:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm1
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  addsd  %xmm1,%xmm0
  movsd  D5(%rip),%xmm1
  divsd  %xmm1,%xmm0
  jmp    L65
L88:
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  mov    -0x28(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movl   $0x0,-0x1c(%rbp)
  jmp    L52
L91:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  comisd -0x18(%rbp),%xmm0
  jbe    L108
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x18(%rbp)
L108:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x10(%rbp),%xmm0
  comisd %xmm1,%xmm0
  jbe    L30
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0x10(%rbp)
L30:
  addl   $0x1,-0x1c(%rbp)
L52:
  mov    -0x1c(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L91
  movl   $0x0,-0x1c(%rbp)
  jmp    L57
L168:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  ucomisd -0x18(%rbp),%xmm0
  jp     L41
  ucomisd -0x18(%rbp),%xmm0
  je     L51
L41:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  ucomisd -0x10(%rbp),%xmm0
  jp     L142
  ucomisd -0x10(%rbp),%xmm0
  je     L51
L142:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  movsd  -0x8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rbp)
L51:
  addl   $0x1,-0x1c(%rbp)
L57:
  mov    -0x1c(%rbp),%eax
  cmp    -0x2c(%rbp),%eax
  jl     L168
  mov    -0x2c(%rbp),%eax
  sub    $0x2,%eax
  pxor   %xmm1,%xmm1
  cvtsi2sd %eax,%xmm1
  movsd  -0x8(%rbp),%xmm0
  divsd  %xmm1,%xmm0
L65:
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  pop    %rbp
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D5
type_infered: f32[2]

tool: {"D5": [0.0,2.0]}

assistant: ```c
double calcMean(double *arr, int size) {
  switch (size) {
  case 0:
    return 0;
  case 1:
    return arr[0];
  case 2:
    return (arr[0] + arr[1]) / 2;
  default: {
    int i;
    double max = arr[0];
    double min = arr[0];
    double meantime = 0;
    for (i = 0; i < size; i++) {
      if (arr[i] > max)
        max = arr[i];
      if (arr[i] < min)
        min = arr[i];
    }
    for (i = 0; i < size; i++)
      if (arr[i] != max && arr[i] != min)
        meantime += arr[i];
    return meantime / (size - 2);
  }
  }
  return 0;
}
```