user: Demonstrate the C code that generates the assembly output below:

```asm
<contr_eri>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  movsd  %xmm0,-0x48(%rbp)
  movsd  %xmm1,-0x50(%rbp)
  movsd  %xmm2,-0x58(%rbp)
  mov    %r8d,-0x28(%rbp)
  mov    %r9d,-0x5c(%rbp)
  movsd  %xmm3,-0x68(%rbp)
  movsd  %xmm4,-0x70(%rbp)
  movsd  %xmm5,-0x78(%rbp)
  movsd  %xmm6,-0x80(%rbp)
  movsd  %xmm7,-0x88(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movl   $0x0,-0x20(%rbp)
  jmp    L52
L31:
  movl   $0x0,-0x1c(%rbp)
  jmp    L18
L4:
  movl   $0x0,-0x18(%rbp)
  jmp    L41
L10:
  movl   $0x0,-0x14(%rbp)
  jmp    L51
L72:
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x60(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0xa0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mulsd  %xmm0,%xmm1
  movsd  %xmm1,-0x90(%rbp)
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x98(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm5
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0xa8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm4
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x58(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm3
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x68(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x20(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm11
  mov    -0x20(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm10
  mov    0x48(%rbp),%r9d
  mov    0x40(%rbp),%r8d
  mov    0x38(%rbp),%edx
  movsd  -0x78(%rbp),%xmm7
  movsd  -0x70(%rbp),%xmm6
  movsd  -0x68(%rbp),%xmm12
  mov    -0x5c(%rbp),%esi
  mov    -0x28(%rbp),%edi
  movsd  -0x58(%rbp),%xmm9
  movsd  -0x50(%rbp),%xmm8
  mov    -0x48(%rbp),%rax
  lea    -0x8(%rsp),%rsp
  movsd  %xmm5,(%rsp)
  mov    0xd8(%rbp),%ecx
  push   %rcx
  mov    0xd0(%rbp),%ecx
  push   %rcx
  mov    0xc8(%rbp),%ecx
  push   %rcx
  lea    -0x8(%rsp),%rsp
  movsd  %xmm4,(%rsp)
  push   0xc0(%rbp)
  push   0xb8(%rbp)
  push   0xb0(%rbp)
  lea    -0x8(%rsp),%rsp
  movsd  %xmm3,(%rsp)
  mov    0x88(%rbp),%ecx
  push   %rcx
  mov    0x80(%rbp),%ecx
  push   %rcx
  mov    0x78(%rbp),%ecx
  push   %rcx
  lea    -0x8(%rsp),%rsp
  movsd  %xmm2,(%rsp)
  push   0x70(%rbp)
  push   -0x88(%rbp)
  push   -0x80(%rbp)
  lea    -0x8(%rsp),%rsp
  movsd  %xmm1,(%rsp)
  lea    -0x8(%rsp),%rsp
  movsd  %xmm0,(%rsp)
  mov    %edx,%ecx
  movapd %xmm12,%xmm5
  movapd %xmm11,%xmm4
  mov    0x10(%rbp),%edx
  movapd %xmm10,%xmm3
  movapd %xmm9,%xmm2
  movapd %xmm8,%xmm1
  movq   %rax,%xmm0
  call   <eri@plt>
  add    $0x90,%rsp
  mulsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  movsd  -0x10(%rbp),%xmm0
  addsd  -0x8(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L51:
  mov    -0x14(%rbp),%eax
  cmp    0x90(%rbp),%eax
  jl     L72
  addl   $0x1,-0x18(%rbp)
L41:
  mov    -0x18(%rbp),%eax
  cmp    0x50(%rbp),%eax
  jl     L10
  addl   $0x1,-0x1c(%rbp)
L18:
  mov    -0x1c(%rbp),%eax
  cmp    0x18(%rbp),%eax
  jl     L4
  addl   $0x1,-0x20(%rbp)
L52:
  mov    -0x20(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L31
  movsd  -0x10(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  leave
  ret
```

assistant: ```c
double contr_eri(int lena, double *aexps, double *acoefs, double *anorms, double xa, double ya, double za, int la, int ma, int na, int lenb, double *bexps, double *bcoefs, double *bnorms, double xb, double yb, double zb, int lb, int mb, int nb, int lenc, double *cexps, double *ccoefs, double *cnorms, double xc, double yc, double zc, int lc, int mc, int nc, int lend, double *dexps, double *dcoefs, double *dnorms, double xd, double yd, double zd, int ld, int md, int nd) {
  double val = 0.0;
  int i, j, k, l;
  double EE;
  for (i = 0; i < lena; i++) {
    for (j = 0; j < lenb; j++) {
      for (k = 0; k < lenc; k++) {
        for (l = 0; l < lend; l++) {
          EE = acoefs[i] * bcoefs[j] * ccoefs[k] * dcoefs[l] * eri(xa, ya, za, anorms[i], la, ma, na, aexps[i], xb, yb, zb, bnorms[j], lb, mb, nb, bexps[j], xc, yc, zc, cnorms[k], lc, mc, nc, cexps[k], xd, yd, zd, dnorms[l], ld, md, nd, dexps[l]);
          val += EE;
        }
      }
    }
  }
  return val;
}
```