user: 这段汇编代码用C语言表示是什么样的：

```asm
<large_opchain>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x88,%rsp
  movsd  %xmm0,-0xe8(%rbp)
  movsd  %xmm1,-0xf0(%rbp)
  movsd  %xmm2,-0xf8(%rbp)
  movsd  %xmm3,-0x100(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  mulsd  -0xf0(%rbp),%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  mulsd  -0xf8(%rbp),%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  mulsd  -0x100(%rbp),%xmm0
  movsd  %xmm0,-0xd0(%rbp)
  movsd  -0xf0(%rbp),%xmm0
  mulsd  -0xf8(%rbp),%xmm0
  movsd  %xmm0,-0xc8(%rbp)
  movsd  -0xf0(%rbp),%xmm0
  mulsd  -0x100(%rbp),%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  movsd  -0xf8(%rbp),%xmm0
  mulsd  -0x100(%rbp),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  -0xe0(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  movsd  -0xe0(%rbp),%xmm0
  addsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movsd  -0xd8(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  -0xd0(%rbp),%xmm0
  addsd  -0xd8(%rbp),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  movsd  -0xd0(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0xe0(%rbp),%xmm0
  addsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0xc8(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0xc8(%rbp),%xmm0
  addsd  -0xc0(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0xc0(%rbp),%xmm0
  addsd  -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0xb8(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0xc8(%rbp),%xmm0
  addsd  -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0xb0(%rbp),%xmm0
  mulsd  -0xa8(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0xa0(%rbp),%xmm0
  mulsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x90(%rbp),%xmm0
  mulsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x80(%rbp),%xmm0
  mulsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x70(%rbp),%xmm0
  mulsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x60(%rbp),%xmm0
  mulsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x50(%rbp),%xmm0
  addsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x20(%rbp),%xmm0
  addsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x38(%rbp),%xmm0
  addsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x18(%rbp),%xmm0
  addsd  -0x8(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

assistant: ```c
double large_opchain(double a, double b, double c, double d) {
  double ab = a * b;
  double ac = a * c;
  double ad = a * d;
  double bc = b * c;
  double bd = b * d;
  double cd = c * d;
  double p01 = ab + ab;
  double p02 = ab + ac;
  double p03 = ac + ac;
  double p04 = ad + ac;
  double p05 = ad + ad;
  double p06 = ab + ad;
  double p07 = bc + bc;
  double p08 = bc + bd;
  double p09 = bd + bd;
  double p10 = bd + cd;
  double p11 = cd + cd;
  double p12 = bc + cd;
  double q01 = p01 * p02;
  double q02 = p03 * p04;
  double q03 = p05 * p06;
  double q04 = p07 * p08;
  double q05 = p09 * p10;
  double q06 = p11 * p12;
  double r01 = q01 + q02;
  double r02 = r01 + q03;
  double r03 = q04 + q05;
  double r04 = r03 + q06;
  return r02 + r04;
}
```