user: Translate the below assembly code into C programming language:

```asm
<dist_az>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x20,%rsp
  mov    %rdi,%rbp
  mov    %rsi,%r12
  movss  %xmm0,0xc(%rsp)
  movss  %xmm1,(%rsp)
  movss  %xmm2,0x1c(%rsp)
  movss  %xmm3,0x10(%rsp)
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm2,%xmm0
  mulsd  D97(%rip),%xmm0
  divsd  D103(%rip),%xmm0
  pxor   %xmm4,%xmm4
  cvtsd2ss %xmm0,%xmm4
  movd   %xmm4,%ebx
  movaps %xmm4,%xmm0
  call   <cos@plt>
  movss  %xmm0,0x14(%rsp)
  movd   %ebx,%xmm0
  call   <sin@plt>
  movss  %xmm0,0x4(%rsp)
  pxor   %xmm0,%xmm0
  cvtss2sd 0xc(%rsp),%xmm0
  mulsd  D97(%rip),%xmm0
  divsd  D103(%rip),%xmm0
  pxor   %xmm6,%xmm6
  cvtsd2ss %xmm0,%xmm6
  movd   %xmm6,%ebx
  movaps %xmm6,%xmm0
  call   <cos@plt>
  movss  %xmm0,0x8(%rsp)
  movd   %ebx,%xmm0
  call   <sin@plt>
  movaps %xmm0,%xmm7
  movss  %xmm0,0x18(%rsp)
  movss  (%rsp),%xmm5
  subss  0x10(%rsp),%xmm5
  pxor   %xmm0,%xmm0
  cvtss2sd %xmm5,%xmm0
  mulsd  D97(%rip),%xmm0
  divsd  D103(%rip),%xmm0
  pxor   %xmm6,%xmm6
  cvtsd2ss %xmm0,%xmm6
  movss  %xmm6,(%rsp)
  movss  0x4(%rsp),%xmm4
  mulss  %xmm7,%xmm4
  movss  %xmm4,0x10(%rsp)
  movss  0x14(%rsp),%xmm2
  mulss  0x8(%rsp),%xmm2
  movss  %xmm2,0x14(%rsp)
  movaps %xmm6,%xmm0
  call   <cos@plt>
  mulss  0x14(%rsp),%xmm0
  addss  0x10(%rsp),%xmm0
  movd   %xmm0,%ebx
  call   <fabs@plt>
  cmp    $0x1,%eax
  jle    L93
  mov    D78(%rip),%ebx
L93:
  movd   %ebx,%xmm1
  mulss  %xmm1,%xmm1
  movss  D78(%rip),%xmm0
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%edi
  call   <sqrt@plt>
  mov    %eax,%edi
  movd   %ebx,%xmm0
  call   <atan2@plt>
  movss  %xmm0,0x10(%rsp)
  mulss  D61(%rip),%xmm0
  movss  %xmm0,0x0(%rbp)
  movss  D42(%rip),%xmm1
  comiss %xmm0,%xmm1
  ja     L89
  pxor   %xmm0,%xmm0
  cvtss2sd (%rsp),%xmm0
  movsd  D68(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L112
  addsd  D180(%rip),%xmm0
  pxor   %xmm3,%xmm3
  cvtsd2ss %xmm0,%xmm3
  movss  %xmm3,(%rsp)
L112:
  pxor   %xmm0,%xmm0
  cvtss2sd (%rsp),%xmm0
  comisd D97(%rip),%xmm0
  jbe    L48
  subsd  D180(%rip),%xmm0
  pxor   %xmm5,%xmm5
  cvtsd2ss %xmm0,%xmm5
  movss  %xmm5,(%rsp)
L48:
  movss  0x10(%rsp),%xmm0
  call   <cos@plt>
  mulss  0x18(%rsp),%xmm0
  movss  0x4(%rsp),%xmm3
  subss  %xmm0,%xmm3
  movd   %xmm3,%ebx
  movss  0x10(%rsp),%xmm0
  call   <sin@plt>
  mulss  0x8(%rsp),%xmm0
  movd   %ebx,%xmm5
  divss  %xmm0,%xmm5
  movd   %xmm5,%ebx
  movaps %xmm5,%xmm0
  call   <fabs@plt>
  cmp    $0x1,%eax
  jle    L91
  mov    D78(%rip),%ebx
L91:
  movd   %ebx,%xmm1
  mulss  %xmm1,%xmm1
  movss  D78(%rip),%xmm0
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%edi
  call   <sqrt@plt>
  mov    %eax,%edi
  movd   %ebx,%xmm0
  call   <atan2@plt>
  movss  (%rsp),%xmm7
  ucomiss D103(%rip),%xmm7
  jp     L37
  jne    L37
  movss  0xc(%rsp),%xmm4
  comiss 0x1c(%rsp),%xmm4
  jbe    L12
  movl   $0x40490fdb,(%r12)
  jmp    L11
L89:
  movl   $0x0,0x0(%rbp)
  movl   $0x0,(%r12)
L11:
  add    $0x20,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L12:
  movl   $0x40c90fdb,(%r12)
  jmp    L11
L37:
  movss  (%rsp),%xmm5
  comiss D103(%rip),%xmm5
  jbe    L56
  cvtss2sd %xmm0,%xmm0
  movsd  D180(%rip),%xmm1
  subsd  %xmm0,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,(%r12)
  jmp    L11
L56:
  movss  %xmm0,(%r12)
  jmp    L11
```

tool_calls: name: disassemble_data
arguments: tag: D97
data_type: f64[2]
name: disassemble_data
arguments: tag: D103
data_type: byte[8]
name: disassemble_data
arguments: tag: D78
data_type: byte[4]
name: disassemble_data
arguments: tag: D61
data_type: byte[4]
name: disassemble_data
arguments: tag: D42
data_type: byte[4]
name: disassemble_data
arguments: tag: D68
data_type: byte[8]
name: disassemble_data
arguments: tag: D180
data_type: byte[8]

tool: {"D97": [3.141592653589793,180.0]}

tool: {"D103": [0x00,0x00,0x00,0x00,0x00,0x80,0x66,0x40]}

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

tool: {"D61": [0x00,0xf0,0xc6,0x45]}

tool: {"D42": [0x00,0x00,0xa0,0x40]}

tool: {"D68": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x09,0xc0]}

tool: {"D180": [0x18,0x2d,0x44,0x54,0xfb,0x21,0x19,0x40]}

assistant: ```c
void dist_az(float *dist, float *azimuth, float lat, float lon, float dxlat, float dxlon) {
  float sin_dxl, cos_dxl;
  float sin_lat, cos_lat;
  float t1, t2, t3;
  cos_dxl = cos(3.1415926535897932 * dxlat / 180);
  sin_dxl = sin(3.1415926535897932 * dxlat / 180);
  cos_lat = cos(3.1415926535897932 * lat / 180);
  sin_lat = sin(3.1415926535897932 * lat / 180);
  t1 = 3.1415926535897932 * (lon - dxlon) / 180;
  t2 = sin_dxl * sin_lat + cos_dxl * cos_lat * cos(t1);
  if (fabs(t2) > 1)
    t2 = 1;
  t2 = atan2(sqrt(1 - t2 * t2), t2);
  dist[0] = t2 * 6366;
  if (dist[0] < 5) {
    dist[0] = 0;
    azimuth[0] = 0;
    return;
  }
  if (t1 < -3.1415926535897932)
    t1 += 2 * 3.1415926535897932;
  if (t1 > 3.1415926535897932)
    t1 -= 2 * 3.1415926535897932;
  t3 = (sin_dxl - sin_lat * cos(t2)) / (cos_lat * sin(t2));
  if (fabs(t3) > 1)
    t3 = 1;
  azimuth[0] = atan2(sqrt(1 - t3 * t3), t3);
  if (t1 == 0) {
    if (dxlat < lat) {
      azimuth[0] = 3.1415926535897932;
    } else {
      azimuth[0] = 2 * 3.1415926535897932;
    }
  } else {
    if (t1 > 0)
      azimuth[0] = 2 * 3.1415926535897932 - azimuth[0];
  }
}
```