user: Converte this assembly snippet into its equivalent C code:

```asm
<gaosifansuan>:
  endbr64
  push   %r12
  mov    $0x7fffffff,%edi
  push   %rbx
  movq   %xmm0,%rbx
  sub    $0x78,%rsp
  subsd  D212(%rip),%xmm1
  movsd  %xmm2,0x68(%rsp)
  movsd  %xmm1,0x48(%rsp)
  call   <sqrt@plt>
  mov    $0x7fffffff,%edi
  movapd %xmm0,%xmm1
  divsd  D263(%rip),%xmm1
  movsd  %xmm1,0x8(%rsp)
  call   <sqrt@plt>
  movsd  0x8(%rsp),%xmm1
  divsd  D382(%rip),%xmm0
  movsd  %xmm0,0x60(%rsp)
  movsd  D61(%rip),%xmm0
  movsd  D263(%rip),%xmm5
  mulsd  %xmm1,%xmm1
  movsd  D332(%rip),%xmm3
  movsd  D392(%rip),%xmm8
  movsd  D427(%rip),%xmm6
  movsd  D370(%rip),%xmm4
  subsd  %xmm1,%xmm0
  movapd %xmm1,%xmm2
  movapd %xmm1,%xmm7
  movsd  %xmm1,0x50(%rsp)
  mulsd  %xmm0,%xmm5
  movapd %xmm7,%xmm0
  mulsd  %xmm5,%xmm2
  movsd  %xmm5,0x58(%rsp)
  mulsd  D332(%rip),%xmm2
  mulsd  D203(%rip),%xmm2
  mulsd  %xmm2,%xmm1
  mulsd  D417(%rip),%xmm1
  mulsd  D344(%rip),%xmm1
  mulsd  D203(%rip),%xmm2
  mulsd  %xmm1,%xmm0
  mulsd  %xmm1,%xmm3
  addsd  %xmm2,%xmm5
  mulsd  %xmm8,%xmm0
  divsd  D320(%rip),%xmm0
  mulsd  %xmm0,%xmm7
  mulsd  %xmm6,%xmm3
  mulsd  %xmm7,%xmm4
  movsd  D417(%rip),%xmm7
  addsd  %xmm5,%xmm3
  movsd  D198(%rip),%xmm5
  mulsd  %xmm0,%xmm7
  mulsd  %xmm6,%xmm4
  mulsd  %xmm5,%xmm7
  addsd  %xmm7,%xmm3
  movsd  D231(%rip),%xmm7
  mulsd  %xmm4,%xmm7
  mulsd  D14(%rip),%xmm7
  addsd  %xmm7,%xmm3
  movsd  D203(%rip),%xmm7
  mulsd  %xmm1,%xmm7
  movsd  %xmm3,0x28(%rsp)
  mulsd  %xmm6,%xmm1
  movapd %xmm3,%xmm9
  movapd %xmm8,%xmm3
  movsd  D426(%rip),%xmm8
  mulsd  %xmm4,%xmm3
  mulsd  %xmm5,%xmm4
  mulsd  %xmm0,%xmm8
  addsd  %xmm7,%xmm2
  movsd  D338(%rip),%xmm7
  mulsd  %xmm7,%xmm8
  addsd  %xmm8,%xmm2
  movapd %xmm3,%xmm8
  mulsd  %xmm5,%xmm8
  mulsd  %xmm7,%xmm3
  addsd  %xmm8,%xmm2
  movsd  %xmm2,0x30(%rsp)
  movsd  D332(%rip),%xmm2
  mulsd  %xmm0,%xmm2
  mulsd  %xmm7,%xmm0
  mulsd  %xmm5,%xmm2
  addsd  %xmm4,%xmm0
  movsd  %xmm0,0x40(%rsp)
  addsd  %xmm2,%xmm1
  addsd  %xmm3,%xmm1
  movsd  %xmm1,0x38(%rsp)
  movq   %rbx,%xmm1
  divsd  %xmm9,%xmm1
  movsd  %xmm1,0x8(%rsp)
  nopl   (%rax)
L0:
  movsd  0x8(%rsp),%xmm5
  movapd %xmm5,%xmm0
  addsd  %xmm5,%xmm0
  call   <sin@plt>
  movsd  %xmm0,0x20(%rsp)
  movsd  D164(%rip),%xmm0
  mulsd  0x8(%rsp),%xmm0
  call   <sin@plt>
  movsd  %xmm0,0x18(%rsp)
  movsd  D320(%rip),%xmm0
  mulsd  0x8(%rsp),%xmm0
  call   <sin@plt>
  movsd  0x20(%rsp),%xmm3
  pxor   %xmm1,%xmm1
  movsd  0x18(%rsp),%xmm2
  mulsd  0x30(%rsp),%xmm3
  movapd %xmm0,%xmm4
  movsd  D203(%rip),%xmm0
  mov    $0xfffffff8,%edi
  mulsd  0x38(%rsp),%xmm2
  mov    D399(%rip),%rax
  mulsd  0x40(%rsp),%xmm4
  movsd  0x8(%rsp),%xmm5
  movsd  %xmm5,0x10(%rsp)
  mulsd  %xmm3,%xmm0
  subsd  %xmm0,%xmm1
  movsd  D344(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  movapd %xmm4,%xmm1
  divsd  D320(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movq   %rbx,%xmm1
  subsd  %xmm0,%xmm1
  movq   %rax,%xmm0
  divsd  0x28(%rsp),%xmm1
  movsd  %xmm1,0x8(%rsp)
  call   <pow@plt>
  movsd  0x8(%rsp),%xmm2
  pxor   %xmm0,%xmm0
  subsd  0x10(%rsp),%xmm2
  andpd  D49(%rip),%xmm2
  cvtsi2sd %eax,%xmm0
  mulsd  D209(%rip),%xmm0
  divsd  D228(%rip),%xmm0
  comisd %xmm0,%xmm2
  ja     L0
  movsd  0x8(%rsp),%xmm1
  movapd %xmm1,%xmm0
  call   <tan@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  %xmm0,0x28(%rsp)
  movapd %xmm1,%xmm0
  movsd  %xmm1,0x18(%rsp)
  call   <sin@plt>
  movapd %xmm0,%xmm3
  movsd  0x50(%rsp),%xmm0
  mulsd  %xmm3,%xmm0
  mulsd  %xmm3,%xmm0
  movsd  D61(%rip),%xmm3
  subsd  %xmm0,%xmm3
  cvttsd2si %xmm3,%edi
  call   <sqrt@plt>
  movsd  D263(%rip),%xmm6
  movsd  0x58(%rsp),%xmm4
  movapd %xmm0,%xmm3
  movsd  0x18(%rsp),%xmm1
  mulsd  %xmm0,%xmm3
  divsd  %xmm0,%xmm6
  mulsd  %xmm3,%xmm0
  divsd  %xmm0,%xmm4
  movapd %xmm1,%xmm0
  movsd  %xmm6,0x8(%rsp)
  movsd  %xmm4,0x10(%rsp)
  call   <cos@plt>
  pxor   %xmm3,%xmm3
  mov    $0x10,%edi
  cvtsi2sd %eax,%xmm3
  mulsd  0x60(%rsp),%xmm3
  movsd  %xmm3,0x20(%rsp)
  call   <malloc@plt>
  movsd  0x48(%rsp),%xmm6
  mov    $0x4,%edi
  movsd  0x28(%rsp),%xmm2
  movsd  0x10(%rsp),%xmm7
  movsd  0x18(%rsp),%xmm1
  mov    %rax,%r12
  movapd %xmm6,%xmm0
  movsd  0x20(%rsp),%xmm3
  mulsd  %xmm2,%xmm0
  movapd %xmm7,%xmm4
  movsd  %xmm1,0x50(%rsp)
  movapd %xmm1,%xmm5
  addsd  %xmm7,%xmm4
  mulsd  0x8(%rsp),%xmm4
  movsd  D370(%rip),%xmm1
  movsd  %xmm3,0x38(%rsp)
  mulsd  %xmm3,%xmm1
  mulsd  %xmm6,%xmm0
  divsd  %xmm4,%xmm0
  movapd %xmm1,%xmm4
  mulsd  %xmm3,%xmm4
  mulsd  %xmm2,%xmm4
  mulsd  %xmm2,%xmm4
  subsd  %xmm0,%xmm5
  movsd  D332(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  movsd  %xmm5,0x18(%rsp)
  movapd %xmm3,%xmm5
  mulsd  %xmm3,%xmm5
  mulsd  %xmm2,%xmm0
  addsd  D417(%rip),%xmm0
  movsd  %xmm5,0x40(%rsp)
  addsd  %xmm5,%xmm0
  subsd  %xmm4,%xmm0
  mulsd  %xmm2,%xmm0
  movsd  %xmm0,0x20(%rsp)
  movapd %xmm6,%xmm0
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  movsd  0x20(%rsp),%xmm2
  mov    $0x3,%edi
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm0,%xmm2
  movsd  0x8(%rsp),%xmm0
  movsd  %xmm2,0x20(%rsp)
  call   <pow@plt>
  movsd  0x10(%rsp),%xmm6
  pxor   %xmm0,%xmm0
  movsd  0x20(%rsp),%xmm4
  cvtsi2sd %eax,%xmm0
  movsd  0x28(%rsp),%xmm2
  mov    $0x4,%edi
  mulsd  D9(%rip),%xmm6
  mulsd  %xmm0,%xmm6
  divsd  %xmm6,%xmm4
  movapd %xmm4,%xmm0
  movsd  0x18(%rsp),%xmm4
  movsd  %xmm2,0x18(%rsp)
  addsd  %xmm0,%xmm4
  movapd %xmm2,%xmm0
  movsd  %xmm4,0x20(%rsp)
  call   <pow@plt>
  movsd  0x18(%rsp),%xmm2
  pxor   %xmm6,%xmm6
  movsd  D71(%rip),%xmm4
  imul   $0x2d,%eax,%eax
  mov    $0x6,%edi
  mulsd  %xmm2,%xmm4
  movsd  %xmm2,0x30(%rsp)
  cvtsi2sd %eax,%xmm6
  movapd %xmm4,%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D483(%rip),%xmm0
  addsd  %xmm6,%xmm0
  movapd %xmm0,%xmm4
  movsd  0x48(%rsp),%xmm0
  mulsd  %xmm2,%xmm4
  movsd  %xmm4,0x18(%rsp)
  call   <pow@plt>
  pxor   %xmm6,%xmm6
  movsd  0x8(%rsp),%xmm0
  mov    $0x5,%edi
  cvtsi2sd %eax,%xmm6
  mulsd  0x18(%rsp),%xmm6
  movsd  %xmm6,0x18(%rsp)
  call   <pow@plt>
  movsd  0x10(%rsp),%xmm6
  pxor   %xmm7,%xmm7
  movsd  0x20(%rsp),%xmm4
  mulsd  D115(%rip),%xmm6
  cvtsi2sd %eax,%xmm7
  movsd  0x50(%rsp),%xmm1
  movsd  %xmm1,0x20(%rsp)
  movapd %xmm6,%xmm0
  movsd  0x18(%rsp),%xmm6
  mulsd  %xmm7,%xmm0
  divsd  %xmm0,%xmm6
  movapd %xmm1,%xmm0
  subsd  %xmm6,%xmm4
  movsd  %xmm4,(%r12)
  call   <cos@plt>
  pxor   %xmm0,%xmm0
  mov    $0x3,%edi
  movsd  0x48(%rsp),%xmm7
  cvtsi2sd %eax,%xmm0
  mulsd  0x8(%rsp),%xmm0
  movsd  0x30(%rsp),%xmm2
  movapd %xmm7,%xmm6
  movsd  0x40(%rsp),%xmm5
  movsd  %xmm2,0x18(%rsp)
  divsd  %xmm0,%xmm6
  movapd %xmm2,%xmm0
  addsd  %xmm2,%xmm0
  mulsd  %xmm2,%xmm0
  addsd  D61(%rip),%xmm0
  addsd  %xmm5,%xmm0
  movsd  %xmm0,0x10(%rsp)
  movapd %xmm7,%xmm0
  movsd  %xmm6,0x28(%rsp)
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  movsd  0x10(%rsp),%xmm4
  mov    $0x3,%edi
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm0,%xmm4
  movsd  0x8(%rsp),%xmm0
  movsd  %xmm4,0x10(%rsp)
  call   <pow@plt>
  movsd  0x20(%rsp),%xmm1
  mov    %eax,%ebx
  movapd %xmm1,%xmm0
  call   <cos@plt>
  pxor   %xmm5,%xmm5
  mov    $0x4,%edi
  movsd  0x10(%rsp),%xmm4
  imul   %ebx,%eax
  movsd  0x28(%rsp),%xmm6
  movsd  0x18(%rsp),%xmm2
  movapd %xmm2,%xmm0
  lea    (%rax,%rax,2),%eax
  add    %eax,%eax
  cvtsi2sd %eax,%xmm5
  divsd  %xmm5,%xmm4
  subsd  %xmm4,%xmm6
  movsd  %xmm6,0x10(%rsp)
  call   <pow@plt>
  movsd  0x18(%rsp),%xmm2
  movsd  D367(%rip),%xmm4
  mov    $0x5,%edi
  movsd  0x38(%rsp),%xmm3
  movsd  D320(%rip),%xmm5
  lea    (%rax,%rax,2),%eax
  mulsd  %xmm2,%xmm4
  shl    $0x3,%eax
  mulsd  %xmm3,%xmm5
  movapd %xmm4,%xmm0
  pxor   %xmm4,%xmm4
  mulsd  %xmm2,%xmm0
  cvtsi2sd %eax,%xmm4
  addsd  D417(%rip),%xmm0
  addsd  %xmm0,%xmm4
  movapd %xmm5,%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm4,%xmm0
  movsd  D55(%rip),%xmm4
  mulsd  %xmm3,%xmm4
  movapd %xmm0,%xmm6
  movsd  0x48(%rsp),%xmm0
  mulsd  %xmm4,%xmm3
  mulsd  %xmm2,%xmm3
  mulsd  %xmm3,%xmm2
  addsd  %xmm2,%xmm6
  movsd  %xmm6,0x18(%rsp)
  call   <pow@plt>
  pxor   %xmm0,%xmm0
  movsd  0x18(%rsp),%xmm2
  mov    $0x5,%edi
  cvtsi2sd %eax,%xmm0
  mulsd  %xmm0,%xmm2
  movsd  0x8(%rsp),%xmm0
  movsd  %xmm2,0x18(%rsp)
  call   <pow@plt>
  movsd  0x20(%rsp),%xmm1
  mov    %eax,%ebx
  movapd %xmm1,%xmm0
  call   <cos@plt>
  pxor   %xmm1,%xmm1
  movsd  0x18(%rsp),%xmm2
  movsd  0x10(%rsp),%xmm0
  imul   %eax,%ebx
  mov    %r12,%rax
  imul   $0x78,%ebx,%ebx
  cvtsi2sd %ebx,%xmm1
  divsd  %xmm1,%xmm2
  movsd  D97(%rip),%xmm1
  addsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  divsd  D209(%rip),%xmm0
  addsd  0x68(%rsp),%xmm0
  mulsd  (%r12),%xmm1
  divsd  D209(%rip),%xmm1
  unpcklpd %xmm0,%xmm1
  movups %xmm1,(%r12)
  add    $0x78,%rsp
  pop    %rbx
  pop    %r12
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D212
data_type: f32[2]
name: unpack_data
arguments: data_tag: D263
data_type: f32[2]
name: unpack_data
arguments: data_tag: D382
data_type: byte[8]
name: unpack_data
arguments: data_tag: D61
data_type: f32[2]
name: unpack_data
arguments: data_tag: D332
data_type: f32[2]
name: unpack_data
arguments: data_tag: D392
data_type: f32[2]
name: unpack_data
arguments: data_tag: D427
data_type: f32[2]
name: unpack_data
arguments: data_tag: D370
data_type: f32[2]
name: unpack_data
arguments: data_tag: D203
data_type: f32[2]
name: unpack_data
arguments: data_tag: D417
data_type: f32[2]
name: unpack_data
arguments: data_tag: D344
data_type: f32[2]
name: unpack_data
arguments: data_tag: D320
data_type: f64
name: unpack_data
arguments: data_tag: D198
data_type: f32[2]
name: unpack_data
arguments: data_tag: D231
data_type: f32[2]
name: unpack_data
arguments: data_tag: D14
data_type: f32[2]
name: unpack_data
arguments: data_tag: D426
data_type: f32[2]
name: unpack_data
arguments: data_tag: D338
data_type: f32[2]
name: unpack_data
arguments: data_tag: D164
data_type: f64
name: unpack_data
arguments: data_tag: D399
data_type: f64
name: unpack_data
arguments: data_tag: D49
data_type: qword[2]
name: unpack_data
arguments: data_tag: D209
data_type: f64
name: unpack_data
arguments: data_tag: D228
data_type: f32[2]
name: unpack_data
arguments: data_tag: D9
data_type: f32[2]
name: unpack_data
arguments: data_tag: D71
data_type: f32[2]
name: unpack_data
arguments: data_tag: D483
data_type: f32[2]
name: unpack_data
arguments: data_tag: D115
data_type: f32[2]
name: unpack_data
arguments: data_tag: D367
data_type: f32[2]
name: unpack_data
arguments: data_tag: D55
data_type: f64
name: unpack_data
arguments: data_tag: D97
data_type: f32[2]

tool: {"D212": [0.0,9.9073486328125]}

tool: {"D263": [2.0,13.520666122436523]}

tool: {"D382": [0x6d,0xf8,0x15,0x13,0xc4,0x3f,0x58,0x41]}

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

tool: {"D332": [0.0,2.125]}

tool: {"D392": [0.0,2.4375]}

tool: {"D427": [0.0,1.5]}

tool: {"D370": [0.0,2.53125]}

tool: {"D203": [0.0,1.75]}

tool: {"D417": [0.0,2.3125]}

tool: {"D344": [0.0,1.625]}

tool: D320: 6

tool: {"D198": [0.0,1.375]}

tool: {"D231": [0.0,3.0234375]}

tool: {"D14": [0.0,1.0]}

tool: {"D426": [0.0,2.71875]}

tool: {"D338": [0.0,1.25]}

tool: D164: 4

tool: D399: 10

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

tool: D209: 3.1415926

tool: {"D228": [0.0,4.1328125]}

tool: {"D9": [0.0,2.875]}

tool: {"D71": [0.0,3.3515625]}

tool: {"D483": [0.0,3.2265625]}

tool: {"D115": [0.0,4.203125]}

tool: {"D367": [0.0,2.9375]}

tool: D55: 8

tool: {"D97": [0.0,3.6015625]}

assistant: ```c
double *gaosifansuan(double x, double y, double L0) {
  double a, f, b, c, e1, e2;
  double Bf, itaf, tf, Nf, Mf, Wf;
  double l;
  double *BL;
  double m[5], n[5];
  a = 6378137;
  b = 6356752.3142;
  f = 1 / 298.257;
  e1 = 0.006694385;
  e2 = 0.00673950;
  y = y - 500000;
  {
    b = a * (1 - f);
    e1 = sqrt(a * a - b * b) / a;
    e2 = sqrt(a * a - b * b) / b;
    c = a * a / b;
    m[0] = a * (1 - e1 * e1);
    m[1] = 3 * (e1 * e1 * m[0]) / 2.0;
    m[2] = 5 * (e1 * e1 * m[1]) / 4.0;
    m[3] = 7 * (e1 * e1 * m[2]) / 6.0;
    m[4] = 9 * (e1 * e1 * m[3]) / 8.0;
    n[0] = m[0] + m[1] / 2 + 3 * m[2] / 8 + 5 * m[3] / 16 + 35 * m[4] / 128;
    n[1] = m[1] / 2 + m[2] / 2 + 15 * m[3] / 32 + 7 * m[4] / 16;
    n[2] = m[2] / 8 + 3 * m[3] / 16 + 7 * m[4] / 32;
    n[3] = m[3] / 32 + m[4] / 16;
    n[4] = m[4] / 128;
  }
  {
    double Bf1, Bfi0, Bfi1, FBfi;
    Bf1 = x / n[0];
    Bfi0 = Bf1;
    Bfi1 = 0;
    FBfi = 0;
    int num = 0;
    do {
      num = 0;
      FBfi = 0.0 - n[1] * sin(2 * Bfi0) / 2.0 + n[2] * sin(4 * Bfi0) / 4.0 - n[3] * sin(6 * Bfi0) / 6.0;
      Bfi1 = (x - FBfi) / n[0];
      if (fabs(Bfi1 - Bfi0) > (3.1415926 * pow(10.0, -8) / (36 * 18))) {
        num = 1;
        Bfi0 = Bfi1;
      }
    } while (num == 1);
    Bf = Bfi1;
  }
  tf = tan(Bf);
  Wf = sqrt(1 - e1 * e1 * sin(Bf) * sin(Bf));
  Nf = a / Wf;
  Mf = a * (1 - e1 * e1) / (Wf * Wf * Wf);
  itaf = e2 * cos(Bf);
  BL = (double *)malloc(2 * sizeof(double));
  BL[0] = Bf - tf * y * y / (2 * Mf * Nf) + tf * (5 + 3 * tf * tf + itaf * itaf - 9 * itaf * itaf * tf * tf) * pow(y, 4) / (24 * Mf * pow(Nf, 3)) - tf * (61 + 90 * tf * tf + 45 * pow(tf, 4)) * pow(y, 6) / (720 * Mf * pow(Nf, 5));
  l = y / (Nf * cos(Bf)) - (1 + 2 * tf * tf + itaf * itaf) * pow(y, 3) / (6 * pow(Nf, 3) * cos(Bf)) + (5 + 28 * tf * tf + 24 * pow(tf, 4) + 6 * itaf * itaf + 8 * itaf * itaf * tf * tf) * pow(y, 5) / (120 * pow(Nf, 5) * cos(Bf));
  l = l * 180 / 3.1415926;
  BL[0] = BL[0] * 180 / 3.1415926;
  BL[1] = l + L0;
  return BL;
}
```