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

```asm
<gsw_sp_from_c>:
  endbr64
  sub    $0x28,%rsp
  movsd  D40(%rip),%xmm7
  movapd %xmm0,%xmm4
  movsd  D357(%rip),%xmm0
  movsd  D251(%rip),%xmm6
  movsd  D101(%rip),%xmm3
  mulsd  %xmm1,%xmm7
  mulsd  %xmm2,%xmm3
  addsd  D195(%rip),%xmm3
  mulsd  D105(%rip),%xmm4
  movapd %xmm7,%xmm5
  subsd  D354(%rip),%xmm5
  mulsd  %xmm5,%xmm0
  addsd  %xmm6,%xmm0
  divsd  %xmm0,%xmm5
  movsd  D267(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm3,%xmm0
  movsd  D11(%rip),%xmm3
  mulsd  %xmm7,%xmm3
  mulsd  %xmm2,%xmm0
  movsd  D340(%rip),%xmm2
  mulsd  %xmm7,%xmm2
  mulsd  %xmm7,%xmm3
  addsd  %xmm6,%xmm2
  addsd  %xmm3,%xmm2
  movsd  D60(%rip),%xmm3
  mulsd  %xmm7,%xmm3
  addsd  D76(%rip),%xmm3
  mulsd  %xmm4,%xmm3
  addsd  %xmm3,%xmm2
  divsd  %xmm2,%xmm0
  movapd %xmm0,%xmm2
  movsd  D214(%rip),%xmm0
  addsd  %xmm6,%xmm2
  mulsd  %xmm7,%xmm0
  subsd  D125(%rip),%xmm0
  mulsd  %xmm7,%xmm0
  addsd  D192(%rip),%xmm0
  mulsd  %xmm7,%xmm0
  addsd  D174(%rip),%xmm0
  mulsd  %xmm7,%xmm0
  pxor   %xmm7,%xmm7
  addsd  D73(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm0,%xmm4
  comisd %xmm4,%xmm7
  ja     L41
  ucomisd %xmm4,%xmm7
  ja     L60
L57:
  movapd %xmm4,%xmm3
  sqrtsd %xmm3,%xmm3
L39:
  movsd  D360(%rip),%xmm0
  movsd  D85(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  addsd  D201(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  subsd  D154(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  subsd  D179(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  addsd  D132(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  subsd  D69(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  addsd  D123(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  subsd  D185(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  subsd  D207(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  addsd  D256(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  addsd  D86(%rip),%xmm2
  mulsd  %xmm5,%xmm0
  addsd  %xmm0,%xmm2
  movsd  D355(%rip),%xmm0
  comisd %xmm2,%xmm0
  ja     L53
L67:
  comisd %xmm2,%xmm7
  jbe    L62
  movsd  D5(%rip),%xmm2
L62:
  movapd %xmm2,%xmm0
  add    $0x28,%rsp
  ret
  nopl   (%rax)
L41:
  movsd  D5(%rip),%xmm4
  jmp    L57
  nopl   (%rax)
L53:
  movapd %xmm1,%xmm0
  movsd  %xmm2,0x18(%rsp)
  movsd  %xmm3,0x10(%rsp)
  movsd  %xmm4,0x8(%rsp)
  movsd  %xmm5,(%rsp)
  call   <gsw_hill_ratio_at_sp2@plt>
  movsd  0x8(%rsp),%xmm4
  movsd  (%rsp),%xmm5
  pxor   %xmm7,%xmm7
  mulsd  D339(%rip),%xmm4
  movapd %xmm0,%xmm8
  movsd  D334(%rip),%xmm0
  mov    D251(%rip),%rax
  movsd  D86(%rip),%xmm1
  movsd  0x10(%rsp),%xmm3
  mulsd  D239(%rip),%xmm3
  movq   %rax,%xmm6
  movsd  0x18(%rsp),%xmm2
  mulsd  D256(%rip),%xmm5
  addsd  %xmm4,%xmm0
  mulsd  %xmm4,%xmm0
  addsd  %xmm6,%xmm0
  divsd  %xmm0,%xmm1
  subsd  %xmm1,%xmm2
  movapd %xmm3,%xmm1
  addsd  %xmm6,%xmm1
  movapd %xmm2,%xmm0
  movapd %xmm8,%xmm2
  mulsd  %xmm3,%xmm1
  addsd  %xmm6,%xmm1
  mulsd  %xmm3,%xmm1
  addsd  %xmm6,%xmm1
  divsd  %xmm1,%xmm5
  subsd  %xmm5,%xmm0
  mulsd  %xmm0,%xmm2
  jmp    L67
L60:
  movapd %xmm4,%xmm0
  movsd  %xmm1,0x10(%rsp)
  movsd  %xmm5,0x8(%rsp)
  movsd  %xmm4,(%rsp)
  call   <sqrt@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  0x8(%rsp),%xmm5
  pxor   %xmm7,%xmm7
  movsd  (%rsp),%xmm4
  movapd %xmm0,%xmm3
  jmp    L39
```

tool_calls: name: unpack_data
arguments: data_label: D40
datatype: f64
name: unpack_data
arguments: data_label: D357
datatype: f64
name: unpack_data
arguments: data_label: D251
datatype: f64
name: unpack_data
arguments: data_label: D101
datatype: byte[8]
name: unpack_data
arguments: data_label: D195
datatype: byte[8]
name: unpack_data
arguments: data_label: D105
datatype: f64
name: unpack_data
arguments: data_label: D354
datatype: f64
name: unpack_data
arguments: data_label: D267
datatype: byte[8]
name: unpack_data
arguments: data_label: D11
datatype: byte[8]
name: unpack_data
arguments: data_label: D340
datatype: byte[8]
name: unpack_data
arguments: data_label: D60
datatype: byte[8]
name: unpack_data
arguments: data_label: D76
datatype: byte[8]
name: unpack_data
arguments: data_label: D214
datatype: byte[8]
name: unpack_data
arguments: data_label: D125
datatype: byte[8]
name: unpack_data
arguments: data_label: D192
datatype: byte[8]
name: unpack_data
arguments: data_label: D174
datatype: byte[8]
name: unpack_data
arguments: data_label: D73
datatype: f64
name: unpack_data
arguments: data_label: D360
datatype: byte[8]
name: unpack_data
arguments: data_label: D85
datatype: f64
name: unpack_data
arguments: data_label: D201
datatype: f64
name: unpack_data
arguments: data_label: D154
datatype: f64
name: unpack_data
arguments: data_label: D179
datatype: f64
name: unpack_data
arguments: data_label: D132
datatype: f64
name: unpack_data
arguments: data_label: D69
datatype: f64
name: unpack_data
arguments: data_label: D123
datatype: f64
name: unpack_data
arguments: data_label: D185
datatype: f64
name: unpack_data
arguments: data_label: D207
datatype: f64
name: unpack_data
arguments: data_label: D256
datatype: f64
name: unpack_data
arguments: data_label: D86
datatype: f64
name: unpack_data
arguments: data_label: D355
datatype: f32[2]
name: unpack_data
arguments: data_label: D5
datatype: f64
name: unpack_data
arguments: data_label: D339
datatype: f64
name: unpack_data
arguments: data_label: D334
datatype: f64
name: unpack_data
arguments: data_label: D239
datatype: f64

tool: D40: 1.00024

tool: D357: 0.0162

tool: D251: 1

tool: {"D101": [0xb6,0x9f,0x37,0x7b,0x1c,0xe3,0x05,0xbe]}

tool: {"D195": [0xbb,0x91,0x1e,0x2b,0x9d,0xb4,0xf5,0x3e]}

tool: D105: 0.023302418791070513

tool: D354: 15

tool: {"D267": [0x87,0x15,0x67,0xfe,0x00,0xf7,0xf1,0x3c]}

tool: {"D11": [0x08,0xa3,0xa3,0x66,0x59,0x41,0x3d,0x3f]}

tool: {"D340": [0x26,0x36,0x1f,0xd7,0x86,0x8a,0xa1,0x3f]}

tool: {"D60": [0x43,0x00,0x70,0xec,0xd9,0x73,0x69,0xbf]}

tool: {"D76": [0x60,0xe5,0xd0,0x22,0xdb,0xf9,0xda,0x3f]}

tool: {"D214": [0x2a,0x5a,0x51,0x32,0xae,0x3b,0x11,0x3e]}

tool: {"D125": [0x2b,0x1c,0x89,0x3a,0x03,0x63,0xa7,0x3e]}

tool: {"D192": [0x4e,0x03,0x3b,0x84,0x8e,0xf2,0x1c,0x3f]}

tool: {"D174": [0x67,0x4e,0x4d,0x38,0xaa,0x89,0x94,0x3f]}

tool: D73: 0.6766097

tool: {"D360": [0x92,0xcb,0x7f,0x48,0xbf,0x7d,0x8d,0xbf]}

tool: D85: 2.7081

tool: D201: 0.0636

tool: D154: 7.0261

tool: D179: 0.0375

tool: D132: 14.0941

tool: D69: 0.0066

tool: D123: 25.3851

tool: D185: 0.0056

tool: D207: 0.1692

tool: D256: 0.0005

tool: D86: 0.008

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

tool: D5: 9000000000000000.0

tool: D339: 400

tool: D334: 1.5

tool: D239: 10

assistant: ```c
double gsw_sp_from_c(double c, double t, double p) {
  double a0 = 0.0080e0, a1 = -0.1692e0, a2 = 25.3851e0, a3 = 14.0941e0, a4 = -7.0261e0, a5 = 2.7081e0, b0 = 0.0005e0, b1 = -0.0056e0, b2 = -0.0066e0, b3 = -0.0375e0, b4 = 0.0636e0, b5 = -0.0144e0, c0 = 0.6766097e0, c1 = 2.00564e-2, c2 = 1.104259e-4, c3 = -6.9698e-7, c4 = 1.0031e-9, d1 = 3.426e-2, d2 = 4.464e-4, d3 = 4.215e-1, d4 = -3.107e-3, e1 = 2.070e-5, e2 = -6.370e-10, e3 = 3.989e-15, k = 0.0162;
  double sp, t68, ft68, r, rt_lc, rp, rt, rtx, hill_ratio, x, sqrty, part1, part2, sp_hill_raw;
  t68 = t * 1.00024e0;
  ft68 = (t68 - 15e0) / (1e0 + k * (t68 - 15e0));
  r = 0.023302418791070513e0 * c;
  rt_lc = c0 + (c1 + (c2 + (c3 + c4 * t68) * t68) * t68) * t68;
  rp = 1e0 + (p * (e1 + e2 * p + e3 * p * p)) / (1e0 + d1 * t68 + d2 * t68 * t68 + (d3 + d4 * t68) * r);
  rt = r / (rp * rt_lc);
  if (rt < 0.0) {
    rt = 9e15;
  }
  rtx = sqrt(rt);
  sp = a0 + (a1 + (a2 + (a3 + (a4 + a5 * rtx) * rtx) * rtx) * rtx) * rtx + ft68 * (b0 + (b1 + (b2 + (b3 + (b4 + b5 * rtx) * rtx) * rtx) * rtx) * rtx);
  if (sp < 2) {
    hill_ratio = gsw_hill_ratio_at_sp2(t);
    x = 400e0 * rt;
    sqrty = 10e0 * rtx;
    part1 = 1e0 + x * (1.5e0 + x);
    part2 = 1e0 + sqrty * (1e0 + sqrty * (1e0 + sqrty));
    sp_hill_raw = sp - a0 / part1 - b0 * ft68 / part2;
    sp = hill_ratio * sp_hill_raw;
  }
  if (sp < 0.0) {
    sp = 9e15;
  }
  return (sp);
}
```