user: What is the c source code of the assembly code below?

```asm
<updateSolutionEconomic_CFP64>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  movslq %ecx,%r13
  push   %r12
  lea    -0x1(%r13),%r9d
  mov    %rsi,%r12
  mov    %r13,%rax
  push   %rbp
  push   %rbx
  mov    %r13,%rbx
  shl    $0x4,%rbx
  lea    -0x10(%rdx,%rbx,1),%rcx
  sub    $0x48,%rsp
  movsd  (%rcx),%xmm6
  movsd  0x8(%rcx),%xmm7
  test   %r9d,%r9d
  jle    L73
  lea    -0x2(%r13),%ecx
  lea    0x4(%rdi),%rbp
  lea    0x8(%rdx),%r14
  lea    0xc(%rdi,%rcx,8),%r15
  nopw   0x0(%rax,%rax,1)
L57:
  movsd  -0x8(%r14),%xmm2
  movsd  (%r14),%xmm3
  pxor   %xmm5,%xmm5
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm5
  cvtss2sd 0x0(%rbp),%xmm1
  movapd %xmm2,%xmm4
  movapd %xmm3,%xmm0
  movapd %xmm3,%xmm8
  mulsd  %xmm1,%xmm0
  mulsd  %xmm5,%xmm4
  mulsd  %xmm5,%xmm8
  subsd  %xmm0,%xmm4
  movapd %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm8,%xmm0
  ucomisd %xmm4,%xmm0
  jp     L25
  add    $0x8,%rbp
  subsd  %xmm4,%xmm6
  subsd  %xmm0,%xmm7
  add    $0x10,%r14
  cmp    %rbp,%r15
  jne    L57
L73:
  lea    0x0(,%r13,8),%rbp
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  lea    -0x8(%rdi,%rbp,1),%rcx
  cvtss2sd (%rcx),%xmm0
  cvtss2sd 0x4(%rcx),%xmm1
  movapd %xmm0,%xmm4
  movapd %xmm1,%xmm2
  mulsd  %xmm7,%xmm2
  movapd %xmm0,%xmm5
  mulsd  %xmm6,%xmm4
  mulsd  %xmm7,%xmm5
  subsd  %xmm2,%xmm4
  movapd %xmm1,%xmm2
  mulsd  %xmm6,%xmm2
  addsd  %xmm2,%xmm5
  ucomisd %xmm5,%xmm4
  jp     L67
L72:
  mov    -0x8(%r8,%rbp,1),%rcx
  lea    (%rax,%rax,1),%esi
  shl    $0x4,%rcx
  lea    -0x10(%r12,%rcx,1),%rcx
  movsd  0x8(%rcx),%xmm0
  movsd  (%rcx),%xmm1
  addsd  %xmm5,%xmm0
  addsd  %xmm4,%xmm1
  movsd  %xmm0,0x8(%rcx)
  movsd  %xmm1,(%rcx)
  test   %r9d,%r9d
  jle    L44
  movslq %esi,%rcx
  sub    $0x2,%eax
  lea    0x8(%rdx),%rbp
  add    %rdi,%rbx
  add    %rcx,%rax
  sub    %rcx,%r13
  lea    0x8(%rdi,%rax,8),%r14
  nopl   0x0(%rax,%rax,1)
L45:
  pxor   %xmm10,%xmm10
  pxor   %xmm1,%xmm1
  movapd %xmm4,%xmm3
  movsd  -0x8(%rbp),%xmm9
  movapd %xmm5,%xmm0
  cvtss2sd -0x8(%rbx),%xmm10
  movapd %xmm5,%xmm2
  pxor   %xmm6,%xmm6
  cvtss2sd -0x4(%rbx),%xmm1
  mulsd  %xmm10,%xmm3
  pxor   %xmm7,%xmm7
  movsd  0x0(%rbp),%xmm8
  mulsd  %xmm1,%xmm0
  cvtss2sd (%rbx,%r13,8),%xmm6
  cvtss2sd 0x4(%rbx,%r13,8),%xmm7
  mulsd  %xmm10,%xmm2
  subsd  %xmm0,%xmm3
  movapd %xmm4,%xmm0
  mulsd  %xmm1,%xmm0
  addsd  %xmm2,%xmm0
  ucomisd %xmm3,%xmm0
  jp     L90
L109:
  subsd  %xmm3,%xmm9
  subsd  %xmm0,%xmm8
  movapd %xmm9,%xmm0
  movapd %xmm8,%xmm1
  movapd %xmm8,%xmm3
  mulsd  %xmm7,%xmm1
  mulsd  %xmm6,%xmm0
  mulsd  %xmm6,%xmm3
  subsd  %xmm1,%xmm0
  movapd %xmm9,%xmm1
  mulsd  %xmm7,%xmm1
  addsd  %xmm3,%xmm1
  ucomisd %xmm0,%xmm1
  jp     L112
L110:
  mov    (%r8),%rax
  add    $0x8,%rbx
  add    $0x8,%r8
  add    $0x10,%rbp
  shl    $0x4,%rax
  lea    -0x10(%r12,%rax,1),%rax
  addsd  0x8(%rax),%xmm1
  addsd  (%rax),%xmm0
  movsd  %xmm1,0x8(%rax)
  movsd  %xmm0,(%rax)
  cmp    %r14,%rbx
  jne    L45
L44:
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L25:
  movapd %xmm5,%xmm0
  mov    %eax,0x30(%rsp)
  add    $0x8,%rbp
  add    $0x10,%r14
  mov    %r8,0x38(%rsp)
  mov    %rdx,0x28(%rsp)
  mov    %rdi,0x20(%rsp)
  mov    %r9d,0x8(%rsp)
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm7,0x10(%rsp)
  call   <__muldc3>
  movsd  0x18(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm7
  cmp    %rbp,%r15
  mov    0x8(%rsp),%r9d
  mov    0x20(%rsp),%rdi
  subsd  %xmm0,%xmm6
  subsd  %xmm1,%xmm7
  mov    0x28(%rsp),%rdx
  mov    0x30(%rsp),%eax
  mov    0x38(%rsp),%r8
  jne    L57
  jmp    L73
L112:
  movapd %xmm8,%xmm3
  movapd %xmm9,%xmm2
  movapd %xmm7,%xmm1
  mov    %r8,0x8(%rsp)
  movapd %xmm6,%xmm0
  movsd  %xmm5,0x18(%rsp)
  movsd  %xmm4,0x10(%rsp)
  call   <__muldc3>
  movsd  0x18(%rsp),%xmm5
  movsd  0x10(%rsp),%xmm4
  mov    0x8(%rsp),%r8
  jmp    L110
L90:
  movapd %xmm5,%xmm3
  movapd %xmm10,%xmm0
  movapd %xmm4,%xmm2
  mov    %r8,0x18(%rsp)
  movsd  %xmm6,0x38(%rsp)
  movsd  %xmm7,0x30(%rsp)
  movsd  %xmm9,0x28(%rsp)
  movsd  %xmm8,0x20(%rsp)
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm4,0x8(%rsp)
  call   <__muldc3>
  movsd  0x38(%rsp),%xmm6
  movsd  0x30(%rsp),%xmm7
  movapd %xmm0,%xmm3
  movsd  0x28(%rsp),%xmm9
  mov    0x18(%rsp),%r8
  movapd %xmm1,%xmm0
  movsd  0x20(%rsp),%xmm8
  movsd  0x10(%rsp),%xmm5
  movsd  0x8(%rsp),%xmm4
  jmp    L109
L67:
  movapd %xmm7,%xmm3
  movapd %xmm6,%xmm2
  mov    %r8,0x28(%rsp)
  mov    %eax,0x20(%rsp)
  mov    %rdx,0x18(%rsp)
  mov    %rdi,0x10(%rsp)
  mov    %r9d,0x8(%rsp)
  call   <__muldc3>
  mov    0x28(%rsp),%r8
  mov    0x20(%rsp),%eax
  mov    0x18(%rsp),%rdx
  mov    0x10(%rsp),%rdi
  movapd %xmm0,%xmm4
  movapd %xmm1,%xmm5
  mov    0x8(%rsp),%r9d
  jmp    L72
```

assistant: ```c
void updateSolutionEconomic_CFP64(float _Complex *mat, double _Complex *x, double _Complex *r, int n, long long *Idxs) {
  int i, j, offset1, offset2;
  double _Complex t = r[n - 1];
  for (i = 0; i < n - 1; ++i) {
    t -= mat[i] * r[i];
  }
  t *= mat[n - 1];
  offset1 = n;
  offset2 = 2 * n - 1;
  x[Idxs[n - 1] - 1] += t;
  for (i = 0; i < n - 1; ++i) {
    x[Idxs[i] - 1] += mat[i + offset1] * (r[i] - mat[i + offset2] * t);
  }
}
```