user: 下面的汇编指令对应的C源代码是什么：

```asm
<updateSolutionEconomic_CFP64>:
  endbr64
  push   %r15
  mov    %rdi,%rax
  push   %r14
  push   %r13
  movslq %ecx,%r13
  push   %r12
  mov    %rsi,%r12
  mov    %rdx,%rsi
  lea    -0x1(%r13),%edi
  push   %rbp
  mov    %r13,%rdx
  push   %rbx
  mov    %r13,%rbx
  shl    $0x4,%rbx
  lea    -0x10(%rsi,%rbx,1),%rcx
  sub    $0x48,%rsp
  movsd  (%rcx),%xmm6
  movsd  0x8(%rcx),%xmm7
  test   %edi,%edi
  jle    L50
  lea    -0x2(%r13),%ecx
  lea    0x4(%rax),%rbp
  lea    0x8(%rsi),%r14
  lea    0xc(%rax,%rcx,8),%r15
  nop
L31:
  movsd  -0x8(%r14),%xmm2
  movsd  (%r14),%xmm3
  pxor   %xmm5,%xmm5
  pxor   %xmm1,%xmm1
  cvtss2sd -0x4(%rbp),%xmm5
  cvtss2sd 0x0(%rbp),%xmm1
  movapd %xmm5,%xmm4
  movapd %xmm1,%xmm0
  mulsd  %xmm3,%xmm0
  movapd %xmm1,%xmm8
  mulsd  %xmm2,%xmm4
  mulsd  %xmm2,%xmm8
  subsd  %xmm0,%xmm4
  movapd %xmm5,%xmm0
  mulsd  %xmm3,%xmm0
  addsd  %xmm8,%xmm0
  ucomisd %xmm0,%xmm4
  jp     L17
L105:
  add    $0x8,%rbp
  subsd  %xmm4,%xmm6
  subsd  %xmm0,%xmm7
  add    $0x10,%r14
  cmp    %rbp,%r15
  jne    L31
L50:
  lea    0x0(,%r13,8),%rbp
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  lea    -0x8(%rax,%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     L117
L77:
  mov    -0x8(%r8,%rbp,1),%rcx
  lea    (%rdx,%rdx,1),%r9d
  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   %edi,%edi
  jle    L38
  movslq %r9d,%rcx
  sub    $0x2,%edx
  lea    0x8(%rsi),%rbp
  add    %rax,%rbx
  add    %rcx,%rdx
  sub    %rcx,%r13
  lea    0x8(%rax,%rdx,8),%r14
  nopl   0x0(%rax,%rax,1)
L13:
  pxor   %xmm10,%xmm10
  pxor   %xmm1,%xmm1
  pxor   %xmm6,%xmm6
  movsd  -0x8(%rbp),%xmm9
  cvtss2sd -0x8(%rbx),%xmm10
  cvtss2sd -0x4(%rbx),%xmm1
  movapd %xmm1,%xmm0
  movapd %xmm10,%xmm3
  mulsd  %xmm5,%xmm0
  movapd %xmm1,%xmm2
  pxor   %xmm7,%xmm7
  movsd  0x0(%rbp),%xmm8
  mulsd  %xmm4,%xmm3
  cvtss2sd (%rbx,%r13,8),%xmm6
  cvtss2sd 0x4(%rbx,%r13,8),%xmm7
  mulsd  %xmm4,%xmm2
  subsd  %xmm0,%xmm3
  movapd %xmm10,%xmm0
  mulsd  %xmm5,%xmm0
  addsd  %xmm2,%xmm0
  ucomisd %xmm0,%xmm3
  jp     L54
L79:
  subsd  %xmm3,%xmm9
  subsd  %xmm0,%xmm8
  movapd %xmm7,%xmm1
  movapd %xmm6,%xmm0
  movapd %xmm7,%xmm3
  mulsd  %xmm8,%xmm1
  mulsd  %xmm9,%xmm0
  mulsd  %xmm9,%xmm3
  subsd  %xmm1,%xmm0
  movapd %xmm6,%xmm1
  mulsd  %xmm8,%xmm1
  addsd  %xmm3,%xmm1
  ucomisd %xmm1,%xmm0
  jp     L5
L111:
  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    %rbx,%r14
  jne    L13
L38:
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L17:
  movapd %xmm5,%xmm0
  mov    %r8,0x38(%rsp)
  mov    %edx,0x30(%rsp)
  mov    %rsi,0x28(%rsp)
  mov    %rax,0x20(%rsp)
  mov    %edi,0x18(%rsp)
  movsd  %xmm7,0x10(%rsp)
  movsd  %xmm6,0x8(%rsp)
  call   <__muldc3>
  mov    0x38(%rsp),%r8
  mov    0x30(%rsp),%edx
  movapd %xmm0,%xmm4
  mov    0x28(%rsp),%rsi
  mov    0x20(%rsp),%rax
  movapd %xmm1,%xmm0
  mov    0x18(%rsp),%edi
  movsd  0x10(%rsp),%xmm7
  movsd  0x8(%rsp),%xmm6
  jmp    L105
L5:
  movapd %xmm8,%xmm3
  movapd %xmm9,%xmm2
  movapd %xmm7,%xmm1
  mov    %r8,0x18(%rsp)
  movapd %xmm6,%xmm0
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm4,0x8(%rsp)
  call   <__muldc3>
  mov    0x18(%rsp),%r8
  movsd  0x10(%rsp),%xmm5
  movsd  0x8(%rsp),%xmm4
  jmp    L111
L54:
  movapd %xmm5,%xmm3
  movapd %xmm10,%xmm0
  movapd %xmm4,%xmm2
  mov    %r8,0x38(%rsp)
  movsd  %xmm8,0x30(%rsp)
  movsd  %xmm9,0x28(%rsp)
  movsd  %xmm7,0x20(%rsp)
  movsd  %xmm6,0x18(%rsp)
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm4,0x8(%rsp)
  call   <__muldc3>
  mov    0x38(%rsp),%r8
  movsd  0x30(%rsp),%xmm8
  movapd %xmm0,%xmm3
  movsd  0x20(%rsp),%xmm7
  movapd %xmm1,%xmm0
  movsd  0x28(%rsp),%xmm9
  movsd  0x18(%rsp),%xmm6
  movsd  0x10(%rsp),%xmm5
  movsd  0x8(%rsp),%xmm4
  jmp    L79
L117:
  movapd %xmm7,%xmm3
  movapd %xmm6,%xmm2
  mov    %r8,0x28(%rsp)
  mov    %edx,0x20(%rsp)
  mov    %rsi,0x18(%rsp)
  mov    %rax,0x10(%rsp)
  mov    %edi,0x8(%rsp)
  call   <__muldc3>
  mov    0x28(%rsp),%r8
  mov    0x20(%rsp),%edx
  mov    0x18(%rsp),%rsi
  mov    0x8(%rsp),%edi
  movapd %xmm0,%xmm4
  movapd %xmm1,%xmm5
  mov    0x10(%rsp),%rax
  jmp    L77
```

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