user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<solve_real_virt>:
  endbr64
  push   %r15
  mov    %rsi,%r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  mov    $0x137,%edi
  sub    $0x88,%rsp
  mov    0xc0(%rsp),%rax
  mov    %rcx,0x8(%rsp)
  mov    %rdx,0x20(%rsp)
  mov    0xc8(%rsp),%r14
  mov    %r8,0x10(%rsp)
  mov    %r9,0x38(%rsp)
  mov    %rax,0x18(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  call   <create_1D_array@plt>
  mov    $0x137,%edi
  mov    %rax,%r13
  call   <create_1D_array@plt>
  mov    $0x137,%edi
  mov    %rax,0x48(%rsp)
  mov    %rax,%r12
  call   <create_1D_array@plt>
  xor    %r11d,%r11d
  mov    0x38(%rsp),%rbp
  mov    %r13,%rcx
  mov    %rax,0x28(%rsp)
  mov    %rbx,0x30(%rsp)
  mov    %r11,%rbx
L84:
  mov    0x10(%rsp),%rax
  mov    0x0(%rbp),%rdi
  mov    (%rax,%rbx,1),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L97:
  movsd  (%rdx,%rax,1),%xmm0
  divsd  (%rdi,%rax,1),%xmm0
  movsd  %xmm0,(%rcx,%rax,1)
  add    $0x8,%rax
  cmp    $0x320,%rax
  jne    L97
  mov    $0x5a0,%eax
  nopl   0x0(%rax,%rax,1)
L34:
  movsd  (%rdx,%rax,1),%xmm0
  divsd  (%rdi,%rax,1),%xmm0
  movsd  %xmm0,(%rcx,%rax,1)
  add    $0x8,%rax
  cmp    $0x9b8,%rax
  jne    L34
  mov    0x8(%rbp),%rax
  lea    0x320(%rdx),%r8
  add    $0x320,%rcx
  add    $0x320,%rdi
  mov    $0x50,%r9d
  add    $0x8,%rbx
  lea    0x320(%rax),%r10
  mov    0x10(%rbp),%rax
  mov    %r10,%rdx
  lea    0x320(%rax),%rsi
  call   <solveTXeqB@plt>
  cmp    $0x10,%rbx
  jne    L80
  mov    %rbp,%r10
  mov    0x30(%rsp),%rbx
  mov    0x28(%rsp),%rbp
  xor    %edi,%edi
  mov    0x20(%rsp),%rsi
  mov    0x8(%rsp),%r8
  lea    0x50(%rsp),%rcx
L36:
  movdqu (%rsi),%xmm7
  mov    (%r8,%rdi,8),%rdx
  xor    %eax,%eax
  movsd  (%rsi),%xmm1
  movups %xmm7,(%rcx)
  nopl   0x0(%rax)
L141:
  movsd  0x0(%r13,%rax,1),%xmm0
  mulsd  (%rdx,%rax,1),%xmm0
  add    $0x8,%rax
  subsd  %xmm0,%xmm1
  cmp    $0x9b8,%rax
  jne    L141
  movsd  %xmm1,(%rcx)
  movsd  0x8(%rsi),%xmm1
  xor    %eax,%eax
  nop
L0:
  movsd  (%rdx,%rax,1),%xmm0
  mulsd  (%r12,%rax,1),%xmm0
  add    $0x8,%rax
  subsd  %xmm0,%xmm1
  cmp    $0x9b8,%rax
  jne    L0
  movsd  %xmm1,0x8(%rcx)
  add    $0x10,%rsi
  add    $0x10,%rcx
  cmp    $0x1,%rdi
  je     L1
  mov    $0x1,%edi
  jmp    L36
L80:
  mov    0x40(%rsp,%rbx,1),%rcx
  jmp    L84
L1:
  mov    (%r10),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L59:
  movsd  (%r14,%rax,1),%xmm0
  divsd  (%rdx,%rax,1),%xmm0
  movsd  %xmm0,0x0(%rbp,%rax,1)
  add    $0x8,%rax
  cmp    $0x320,%rax
  jne    L59
  mov    $0x5a0,%eax
  nopw   0x0(%rax,%rax,1)
L9:
  movsd  (%r14,%rax,1),%xmm0
  divsd  (%rdx,%rax,1),%xmm0
  movsd  %xmm0,0x0(%rbp,%rax,1)
  add    $0x8,%rax
  cmp    $0x9b8,%rax
  jne    L9
  mov    0x8(%r10),%rax
  mov    0x10(%r10),%rsi
  lea    0x320(%rdx),%rdi
  lea    0x320(%rbp),%rcx
  mov    $0x50,%r9d
  lea    0x320(%r14),%r8
  lea    0x320(%rax),%r11
  add    $0x320,%rsi
  mov    %r11,%rdx
  call   <solveTXeqB@plt>
  mov    0x18(%rsp),%rax
  movsd  (%rax),%xmm2
  mov    0x8(%rsp),%rax
  mov    (%rax),%rdx
  xor    %eax,%eax
  nopl   0x0(%rax)
L90:
  movsd  0x0(%rbp,%rax,1),%xmm0
  mulsd  (%rdx,%rax,1),%xmm0
  add    $0x8,%rax
  subsd  %xmm0,%xmm2
  cmp    $0x9b8,%rax
  jne    L90
  mov    0x18(%rsp),%rax
  movsd  0x8(%rax),%xmm0
  mov    0x8(%rsp),%rax
  mov    0x8(%rax),%rdx
  xor    %eax,%eax
L10:
  movsd  (%rdx,%rax,1),%xmm1
  mulsd  0x0(%rbp,%rax,1),%xmm1
  add    $0x8,%rax
  subsd  %xmm1,%xmm0
  cmp    $0x9b8,%rax
  jne    L10
  movsd  0x50(%rsp),%xmm6
  movsd  0x58(%rsp),%xmm5
  xor    %eax,%eax
  movsd  0x68(%rsp),%xmm1
  movsd  0x60(%rsp),%xmm4
  movapd %xmm5,%xmm7
  movapd %xmm6,%xmm3
  mulsd  %xmm1,%xmm3
  mulsd  %xmm4,%xmm7
  mulsd  %xmm2,%xmm1
  mulsd  %xmm0,%xmm5
  mulsd  %xmm2,%xmm4
  mulsd  %xmm6,%xmm0
  subsd  %xmm7,%xmm3
  subsd  %xmm5,%xmm1
  subsd  %xmm4,%xmm0
  divsd  %xmm3,%xmm1
  divsd  %xmm3,%xmm0
  movsd  %xmm1,(%rbx)
  movapd %xmm1,%xmm2
  movsd  %xmm0,0x8(%rbx)
  jmp    L129
  nopl   0x0(%rax,%rax,1)
L24:
  movsd  (%rbx),%xmm2
  movsd  0x8(%rbx),%xmm0
L129:
  mulsd  0x0(%r13,%rax,1),%xmm2
  movsd  0x0(%rbp,%rax,1),%xmm1
  mulsd  (%r12,%rax,1),%xmm0
  subsd  %xmm2,%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,(%r15,%rax,1)
  add    $0x8,%rax
  cmp    $0x9b8,%rax
  jne    L24
  mov    %r13,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <free@plt>
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L20
  add    $0x88,%rsp
  mov    %rbp,%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1080 <free@plt>
L20:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void solve_real_virt(double xr[2], double xv[311], double Trr[2][2], double *Trv[2], double *Tvr[2], double *Tvv[3], double sr[2], double sv[311]) {
  double *Tvv_inv_Tvr[2];
  double *Tvv_inv_sv;
  double Trr_new[2][2];
  double sr_new[2];
  unsigned i, j, b;
  double det;
  unsigned NSUBDIFF;
  NSUBDIFF = 140 - 80 / 2;
  for (i = 0; i < 2; i++)
    Tvv_inv_Tvr[i] = create_1D_array(311);
  Tvv_inv_sv = create_1D_array(311);
  for (i = 0; i < 2; i++) {
    for (b = 0; b < NSUBDIFF; b++)
      Tvv_inv_Tvr[i][b] = Tvr[i][b] / Tvv[0][b];
    for (b = 140 + 80 / 2; b < 311; b++)
      Tvv_inv_Tvr[i][b] = Tvr[i][b] / Tvv[0][b];
    solveTXeqB(Tvv[0] + NSUBDIFF, Tvv[2] + NSUBDIFF, Tvv[1] + NSUBDIFF, Tvv_inv_Tvr[i] + NSUBDIFF, Tvr[i] + NSUBDIFF, 80);
  }
  for (i = 0; i < 2; i++)
    for (j = 0; j < 2; j++) {
      Trr_new[i][j] = Trr[i][j];
      for (b = 0; b < 311; b++)
        Trr_new[i][j] -= Trv[i][b] * Tvv_inv_Tvr[j][b];
    }
  for (b = 0; b < NSUBDIFF; b++)
    Tvv_inv_sv[b] = sv[b] / Tvv[0][b];
  for (b = 140 + 80 / 2; b < 311; b++)
    Tvv_inv_sv[b] = sv[b] / Tvv[0][b];
  solveTXeqB(Tvv[0] + NSUBDIFF, Tvv[2] + NSUBDIFF, Tvv[1] + NSUBDIFF, Tvv_inv_sv + NSUBDIFF, sv + NSUBDIFF, 80);
  for (i = 0; i < 2; i++) {
    sr_new[i] = sr[i];
    for (b = 0; b < 311; b++)
      sr_new[i] -= Trv[i][b] * Tvv_inv_sv[b];
  }
  det = Trr_new[0][0] * Trr_new[1][1] - Trr_new[0][1] * Trr_new[1][0];
  xr[0] = (Trr_new[1][1] * sr_new[0] - Trr_new[0][1] * sr_new[1]) / det;
  xr[1] = (Trr_new[0][0] * sr_new[1] - Trr_new[1][0] * sr_new[0]) / det;
  for (b = 0; b < 311; b++)
    xv[b] = Tvv_inv_sv[b] - Tvv_inv_Tvr[0][b] * xr[0] - Tvv_inv_Tvr[1][b] * xr[1];
  for (i = 0; i < 2; i++)
    free(Tvv_inv_Tvr[i]);
  free(Tvv_inv_sv);
}
```