user: Please show me the C implementation that matches the assembly code listed below:

```asm
<gsw_sp_from_c>:
  endbr64
  sub    $0x28,%rsp
  movsd  D321(%rip),%xmm7
  movapd %xmm0,%xmm4
  movsd  D361(%rip),%xmm0
  movsd  D292(%rip),%xmm6
  movsd  D53(%rip),%xmm3
  mulsd  %xmm1,%xmm7
  mulsd  %xmm2,%xmm3
  addsd  D342(%rip),%xmm3
  mulsd  D350(%rip),%xmm4
  movapd %xmm7,%xmm5
  subsd  D109(%rip),%xmm5
  mulsd  %xmm5,%xmm0
  addsd  %xmm6,%xmm0
  divsd  %xmm0,%xmm5
  movsd  D331(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm3,%xmm0
  movsd  D173(%rip),%xmm3
  mulsd  %xmm7,%xmm3
  mulsd  %xmm2,%xmm0
  movsd  D97(%rip),%xmm2
  mulsd  %xmm7,%xmm2
  mulsd  %xmm7,%xmm3
  addsd  %xmm6,%xmm2
  addsd  %xmm3,%xmm2
  movsd  D114(%rip),%xmm3
  mulsd  %xmm7,%xmm3
  addsd  D316(%rip),%xmm3
  mulsd  %xmm4,%xmm3
  addsd  %xmm3,%xmm2
  divsd  %xmm2,%xmm0
  movapd %xmm0,%xmm2
  movsd  D228(%rip),%xmm0
  addsd  %xmm6,%xmm2
  mulsd  %xmm7,%xmm0
  subsd  D134(%rip),%xmm0
  mulsd  %xmm7,%xmm0
  addsd  D255(%rip),%xmm0
  mulsd  %xmm7,%xmm0
  addsd  D318(%rip),%xmm0
  mulsd  %xmm7,%xmm0
  pxor   %xmm7,%xmm7
  addsd  D281(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  divsd  %xmm0,%xmm4
  comisd %xmm4,%xmm7
  ja     L2
  ucomisd %xmm4,%xmm7
  ja     L42
L5:
  movapd %xmm4,%xmm3
  sqrtsd %xmm3,%xmm3
L18:
  movsd  D172(%rip),%xmm0
  movsd  D30(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  addsd  D178(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  subsd  D367(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  subsd  D140(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  addsd  D212(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  subsd  D208(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  addsd  D7(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  subsd  D241(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  subsd  D60(%rip),%xmm2
  mulsd  %xmm3,%xmm0
  addsd  D277(%rip),%xmm0
  mulsd  %xmm3,%xmm2
  addsd  D162(%rip),%xmm2
  mulsd  %xmm5,%xmm0
  addsd  %xmm0,%xmm2
  movsd  D219(%rip),%xmm0
  comisd %xmm2,%xmm0
  ja     L34
L37:
  comisd %xmm2,%xmm7
  jbe    L62
  movsd  D326(%rip),%xmm2
L62:
  movapd %xmm2,%xmm0
  add    $0x28,%rsp
  ret
  nopl   (%rax)
L2:
  movsd  D326(%rip),%xmm4
  jmp    L5
  nopl   (%rax)
L34:
  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  D305(%rip),%xmm4
  movapd %xmm0,%xmm8
  movsd  D226(%rip),%xmm0
  mov    D292(%rip),%rax
  movsd  D162(%rip),%xmm1
  movsd  0x10(%rsp),%xmm3
  mulsd  D233(%rip),%xmm3
  movq   %rax,%xmm6
  movsd  0x18(%rsp),%xmm2
  mulsd  D277(%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    L37
L42:
  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    L18
```

tool_calls: name: disassemble_data
arguments: label: D321
datatype: f64
name: disassemble_data
arguments: label: D361
datatype: f64
name: disassemble_data
arguments: label: D292
datatype: f64
name: disassemble_data
arguments: label: D53
datatype: byte[8]
name: disassemble_data
arguments: label: D342
datatype: byte[8]
name: disassemble_data
arguments: label: D350
datatype: f64
name: disassemble_data
arguments: label: D109
datatype: f64
name: disassemble_data
arguments: label: D331
datatype: byte[8]
name: disassemble_data
arguments: label: D173
datatype: byte[8]
name: disassemble_data
arguments: label: D97
datatype: byte[8]
name: disassemble_data
arguments: label: D114
datatype: byte[8]
name: disassemble_data
arguments: label: D316
datatype: byte[8]
name: disassemble_data
arguments: label: D228
datatype: byte[8]
name: disassemble_data
arguments: label: D134
datatype: byte[8]
name: disassemble_data
arguments: label: D255
datatype: byte[8]
name: disassemble_data
arguments: label: D318
datatype: byte[8]
name: disassemble_data
arguments: label: D281
datatype: f64
name: disassemble_data
arguments: label: D172
datatype: byte[8]
name: disassemble_data
arguments: label: D30
datatype: f64
name: disassemble_data
arguments: label: D178
datatype: f64
name: disassemble_data
arguments: label: D367
datatype: f64
name: disassemble_data
arguments: label: D140
datatype: f64
name: disassemble_data
arguments: label: D212
datatype: f64
name: disassemble_data
arguments: label: D208
datatype: f64
name: disassemble_data
arguments: label: D7
datatype: f64
name: disassemble_data
arguments: label: D241
datatype: f64
name: disassemble_data
arguments: label: D60
datatype: f64
name: disassemble_data
arguments: label: D277
datatype: f64
name: disassemble_data
arguments: label: D162
datatype: f64
name: disassemble_data
arguments: label: D219
datatype: f32[2]
name: disassemble_data
arguments: label: D326
datatype: f64
name: disassemble_data
arguments: label: D305
datatype: f64
name: disassemble_data
arguments: label: D226
datatype: f64
name: disassemble_data
arguments: label: D233
datatype: f64

tool: D321: 1.00024

tool: D361: 0.0162

tool: D292: 1

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

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

tool: D350: 0.023302418791070513

tool: D109: 15

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

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

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

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

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

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

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

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

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

tool: D281: 0.6766097

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

tool: D30: 2.7081

tool: D178: 0.0636

tool: D367: 7.0261

tool: D140: 0.0375

tool: D212: 14.0941

tool: D208: 0.0066

tool: D7: 25.3851

tool: D241: 0.0056

tool: D60: 0.1692

tool: D277: 0.0005

tool: D162: 0.008

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

tool: D326: 9000000000000000.0

tool: D305: 400

tool: D226: 1.5

tool: D233: 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);
}
```