user: What is the c source code of the assembly code below:

```asm
<getdist>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  movss  %xmm0,-0x24(%rbp)
  movss  %xmm1,-0x28(%rbp)
  movss  %xmm2,-0x2c(%rbp)
  movss  %xmm3,-0x30(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x28(%rbp),%xmm1
  movsd  D68(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x20(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x24(%rbp),%xmm1
  movsd  D68(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x1c(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x30(%rbp),%xmm1
  movsd  D68(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x18(%rbp)
  pxor   %xmm1,%xmm1
  cvtss2sd -0x2c(%rbp),%xmm1
  movsd  D68(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,-0x14(%rbp)
  mov    -0x1c(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  movss  %xmm0,-0x34(%rbp)
  mov    -0x20(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  movaps %xmm0,%xmm4
  mulss  -0x34(%rbp),%xmm4
  movss  %xmm4,-0x34(%rbp)
  mov    -0x14(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  mulss  -0x34(%rbp),%xmm0
  movss  %xmm0,-0x34(%rbp)
  mov    -0x18(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  mulss  -0x34(%rbp),%xmm0
  movss  %xmm0,-0x10(%rbp)
  mov    -0x1c(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  movss  %xmm0,-0x34(%rbp)
  mov    -0x20(%rbp),%eax
  movd   %eax,%xmm0
  call   <sin@plt>
  movaps %xmm0,%xmm6
  mulss  -0x34(%rbp),%xmm6
  movss  %xmm6,-0x34(%rbp)
  mov    -0x14(%rbp),%eax
  movd   %eax,%xmm0
  call   <cos@plt>
  mulss  -0x34(%rbp),%xmm0
  movss  %xmm0,-0x34(%rbp)
  mov    -0x18(%rbp),%eax
  movd   %eax,%xmm0
  call   <sin@plt>
  mulss  -0x34(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  mov    -0x1c(%rbp),%eax
  movd   %eax,%xmm0
  call   <sin@plt>
  movss  %xmm0,-0x34(%rbp)
  mov    -0x14(%rbp),%eax
  movd   %eax,%xmm0
  call   <sin@plt>
  mulss  -0x34(%rbp),%xmm0
  movss  %xmm0,-0x8(%rbp)
  movss  -0x10(%rbp),%xmm0
  addss  -0xc(%rbp),%xmm0
  movss  -0x8(%rbp),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,-0x4(%rbp)
  movss  -0x4(%rbp),%xmm0
  movss  D10(%rip),%xmm1
  comiss %xmm1,%xmm0
  jbe    L18
  movss  D10(%rip),%xmm0
  jmp    L16
L18:
  movss  -0x4(%rbp),%xmm0
L16:
  movss  %xmm0,-0x4(%rbp)
  mov    -0x4(%rbp),%eax
  movd   %eax,%xmm0
  call   <acos@plt>
  movsd  D64(%rip),%xmm1
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D68
type_guessed: byte[8]
name: unpack_data
arguments: data_label: D10
type_guessed: f32
name: unpack_data
arguments: data_label: D64
type_guessed: f64

tool: {"D68": [0xe3,0xa8,0x62,0xc3,0x46,0xdf,0x91,0x3f]}

tool: D10: 1

tool: D64: 6378

assistant: ```c
float getdist(float lat1, float long1, float lat2, float long2) {
  float theta1, theta2, phi1, phi2, temp;
  float term1, term2, term3;
  theta1 = 2.0 * 3.141593 / 360.0 * long1;
  phi1 = 2.0 * 3.141593 / 360.0 * lat1;
  theta2 = 2.0 * 3.141593 / 360.0 * long2;
  phi2 = 2.0 * 3.141593 / 360.0 * lat2;
  term1 = cos(phi1) * cos(theta1) * cos(phi2) * cos(theta2);
  term2 = cos(phi1) * sin(theta1) * cos(phi2) * sin(theta2);
  term3 = sin(phi1) * sin(phi2);
  temp = term1 + term2 + term3;
  temp = temp > 1.0 ? 1.0 : temp;
  return 6378.0 * acos(temp);
}
```