user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<solve_real_virt>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  mov    $0x137,%edi
  push   %r14
  mov    %rsi,%r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x98,%rsp
  mov    0xd0(%rsp),%rax
  mov    %rdx,0x20(%rsp)
  mov    %rcx,0x10(%rsp)
  mov    0xd8(%rsp),%rbx
  mov    %r8,0x18(%rsp)
  mov    %r9,0x38(%rsp)
  mov    %rax,0x28(%rsp)
  mov    %fs:0x28,%rax
  mov    %rax,0x88(%rsp)
  xor    %eax,%eax
  call   <create_1D_array@plt>
  mov    $0x137,%edi
  mov    %rax,0x40(%rsp)
  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    %rax,%rbp
  lea    0x40(%rsp),%rax
  mov    %rax,(%rsp)
  mov    %rbp,0x30(%rsp)
  mov    0x38(%rsp),%rbp
  mov    %rbx,0x38(%rsp)
  mov    %r11,%rbx
L121:
  mov    0x18(%rsp),%rax
  mov    0x0(%rbp),%rdi
  mov    (%rax,%rbx,1),%rdx
  mov    (%rsp),%rax
  mov    (%rax,%rbx,1),%rcx
  lea    0x8(%rdx),%rax
  cmp    %rax,%rcx
  je     L73
  lea    0x8(%rdi),%rsi
  xor    %eax,%eax
  cmp    %rsi,%rcx
  je     L73
  nopw   0x0(%rax,%rax,1)
L55:
  movupd (%rdx,%rax,1),%xmm0
  movupd (%rdi,%rax,1),%xmm6
  divpd  %xmm6,%xmm0
  movups %xmm0,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    $0x320,%rax
  jne    L55
L63:
  lea    0x5a0(%rcx),%rax
  lea    0x5a8(%rdx),%rsi
  cmp    %rsi,%rax
  je     L82
  lea    0x5a8(%rdi),%rsi
  cmp    %rsi,%rax
  je     L82
  mov    $0x5a0,%eax
  nopw   0x0(%rax,%rax,1)
L279:
  movupd (%rdx,%rax,1),%xmm0
  movupd (%rdi,%rax,1),%xmm7
  divpd  %xmm7,%xmm0
  movups %xmm0,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    $0x9b0,%rax
  jne    L279
  movsd  0x9b0(%rdx),%xmm0
  divsd  0x9b0(%rdi),%xmm0
  movsd  %xmm0,0x9b0(%rcx)
L230:
  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    L121
  mov    %rbp,%r10
  mov    0x38(%rsp),%rbx
  mov    0x30(%rsp),%rbp
  xor    %r11d,%r11d
  mov    %r10,0x18(%rsp)
  mov    0x20(%rsp),%r8
  lea    0x60(%rsp),%r9
  mov    (%rsp),%r10
L295:
  mov    0x10(%rsp),%rax
  movdqu (%r8),%xmm5
  mov    %r9,%rdx
  mov    (%rax,%r11,8),%rdi
  movups %xmm5,(%r9)
  xor    %eax,%eax
  movsd  0x9b0(%rdi),%xmm3
  nop
L79:
  movsd  (%r8,%rax,1),%xmm0
  mov    (%r10,%rax,1),%rsi
  xor    %ecx,%ecx
  nopl   0x0(%rax)
L12:
  movupd (%rdi,%rcx,1),%xmm1
  movupd (%rsi,%rcx,1),%xmm4
  add    $0x10,%rcx
  mulpd  %xmm4,%xmm1
  subsd  %xmm1,%xmm0
  unpckhpd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  cmp    $0x9b0,%rcx
  jne    L12
  movsd  0x9b0(%rsi),%xmm1
  add    $0x8,%rax
  add    $0x8,%rdx
  mulsd  %xmm3,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rdx)
  cmp    $0x10,%rax
  jne    L79
  add    $0x10,%r8
  add    $0x10,%r9
  cmp    $0x1,%r11
  je     L99
  mov    $0x1,%r11d
  jmp    L295
L99:
  mov    0x18(%rsp),%r10
  mov    (%r10),%rdx
  lea    0x8(%rdx),%rax
  cmp    %rax,%rbp
  je     L134
  lea    0x8(%rbx),%rax
  cmp    %rax,%rbp
  je     L134
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L200:
  movupd (%rbx,%rax,1),%xmm0
  movupd (%rdx,%rax,1),%xmm6
  divpd  %xmm6,%xmm0
  movups %xmm0,0x0(%rbp,%rax,1)
  add    $0x10,%rax
  cmp    $0x320,%rax
  jne    L200
L46:
  lea    0x5a0(%rbp),%rax
  lea    0x5a8(%rbx),%rcx
  cmp    %rcx,%rax
  je     L8
  lea    0x5a8(%rdx),%rcx
  cmp    %rcx,%rax
  je     L8
  mov    $0x5a0,%eax
  nopl   0x0(%rax,%rax,1)
L45:
  movupd (%rbx,%rax,1),%xmm0
  movupd (%rdx,%rax,1),%xmm7
  divpd  %xmm7,%xmm0
  movups %xmm0,0x0(%rbp,%rax,1)
  add    $0x10,%rax
  cmp    $0x9b0,%rax
  jne    L45
  movsd  0x9b0(%rbx),%xmm0
  divsd  0x9b0(%rdx),%xmm0
  movsd  %xmm0,0x9b0(%rbp)
L236:
  mov    0x8(%r10),%rax
  mov    0x10(%r10),%rsi
  lea    0x320(%rdx),%rdi
  lea    0x320(%rbx),%r8
  lea    0x320(%rbp),%rcx
  mov    $0x50,%r9d
  lea    0x320(%rax),%r11
  add    $0x320,%rsi
  mov    %r11,%rdx
  call   <solveTXeqB@plt>
  mov    0x28(%rsp),%r8
  mov    0x10(%rsp),%rdi
  xor    %eax,%eax
  movsd  0x9b0(%rbp),%xmm3
  lea    0x50(%rsp),%rdx
  movdqu (%r8),%xmm5
  movaps %xmm5,(%rsp)
  movaps %xmm5,0x50(%rsp)
  nopw   0x0(%rax,%rax,1)
L305:
  movsd  (%r8,%rax,1),%xmm0
  mov    (%rdi,%rax,1),%rsi
  xor    %ecx,%ecx
  nopl   0x0(%rax)
L212:
  movupd 0x0(%rbp,%rcx,1),%xmm1
  movupd (%rsi,%rcx,1),%xmm5
  add    $0x10,%rcx
  mulpd  %xmm5,%xmm1
  subsd  %xmm1,%xmm0
  unpckhpd %xmm1,%xmm1
  subsd  %xmm1,%xmm0
  cmp    $0x9b0,%rcx
  jne    L212
  movsd  0x9b0(%rsi),%xmm1
  add    $0x8,%rax
  add    $0x8,%rdx
  mulsd  %xmm3,%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rdx)
  cmp    $0x10,%rax
  jne    L305
  movsd  0x60(%rsp),%xmm0
  movsd  0x78(%rsp),%xmm1
  lea    0x9b8(%r14),%rdx
  lea    0x8(%r14),%rax
  movsd  0x70(%rsp),%xmm2
  movupd 0x68(%rsp),%xmm5
  cmp    %rdx,%r15
  lea    0x10(%r15),%rdx
  mulsd  %xmm0,%xmm1
  movsd  0x68(%rsp),%xmm0
  setae  %cl
  cmp    %rdx,%rax
  setae  %dl
  lea    0x10(%r13),%rsi
  mulsd  %xmm2,%xmm0
  movapd 0x50(%rsp),%xmm2
  or     %edx,%ecx
  lea    0x10(%rbp),%rdx
  cmp    %rdx,%rax
  setne  %dl
  cmp    %rsi,%rax
  setne  %sil
  and    %esi,%edx
  subsd  %xmm0,%xmm1
  movapd 0x70(%rsp),%xmm0
  shufpd $0x1,0x60(%rsp),%xmm0
  mulpd  %xmm2,%xmm0
  shufpd $0x1,%xmm2,%xmm2
  mulpd  %xmm5,%xmm2
  unpcklpd %xmm1,%xmm1
  subpd  %xmm2,%xmm0
  divpd  %xmm1,%xmm0
  movups %xmm0,(%r15)
  movsd  0x0(%r13),%xmm2
  movsd  0x0(%rbp),%xmm1
  mulsd  %xmm0,%xmm2
  unpckhpd %xmm0,%xmm0
  mulsd  (%r12),%xmm0
  subsd  %xmm2,%xmm1
  subsd  %xmm0,%xmm1
  movsd  %xmm1,(%r14)
  test   %dl,%cl
  je     L144
  lea    0x10(%r12),%rdx
  cmp    %rdx,%rax
  je     L144
  movsd  (%r15),%xmm3
  movsd  0x8(%r15),%xmm2
  mov    $0x8,%eax
  unpcklpd %xmm3,%xmm3
  unpcklpd %xmm2,%xmm2
  nopl   (%rax)
L248:
  movupd 0x0(%r13,%rax,1),%xmm1
  movupd 0x0(%rbp,%rax,1),%xmm0
  mulpd  %xmm3,%xmm1
  subpd  %xmm1,%xmm0
  movupd (%r12,%rax,1),%xmm1
  mulpd  %xmm2,%xmm1
  subpd  %xmm1,%xmm0
  movups %xmm0,(%r14,%rax,1)
  add    $0x10,%rax
  cmp    $0x9b8,%rax
  jne    L248
L69:
  mov    %r13,%rdi
  call   <free@plt>
  mov    %r12,%rdi
  call   <free@plt>
  mov    0x88(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L24
  add    $0x98,%rsp
  mov    %rbp,%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1080 <free@plt>
L73:
  xor    %eax,%eax
  cs nopw 0x0(%rax,%rax,1)
L274:
  movsd  (%rdx,%rax,1),%xmm0
  divsd  (%rdi,%rax,1),%xmm0
  movsd  %xmm0,(%rcx,%rax,1)
  add    $0x8,%rax
  cmp    $0x320,%rax
  jne    L274
  jmp    L63
L82:
  mov    $0x5a0,%eax
  nopl   (%rax)
L252:
  movsd  (%rdx,%rax,1),%xmm0
  divsd  (%rdi,%rax,1),%xmm0
  movsd  %xmm0,(%rcx,%rax,1)
  add    $0x8,%rax
  cmp    $0x9b8,%rax
  jne    L252
  jmp    L230
L134:
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L96:
  movsd  (%rbx,%rax,1),%xmm0
  divsd  (%rdx,%rax,1),%xmm0
  movsd  %xmm0,0x0(%rbp,%rax,1)
  add    $0x8,%rax
  cmp    $0x320,%rax
  jne    L96
  jmp    L46
L144:
  mov    $0x8,%eax
  cs nopw 0x0(%rax,%rax,1)
L77:
  movsd  0x0(%r13,%rax,1),%xmm1
  mulsd  (%r15),%xmm1
  movsd  0x0(%rbp,%rax,1),%xmm0
  subsd  %xmm1,%xmm0
  movsd  (%r12,%rax,1),%xmm1
  mulsd  0x8(%r15),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,(%r14,%rax,1)
  add    $0x8,%rax
  cmp    $0x9b8,%rax
  jne    L77
  jmp    L69
L8:
  mov    $0x5a0,%eax
  nopw   0x0(%rax,%rax,1)
L186:
  movsd  (%rbx,%rax,1),%xmm0
  divsd  (%rdx,%rax,1),%xmm0
  movsd  %xmm0,0x0(%rbp,%rax,1)
  add    $0x8,%rax
  cmp    $0x9b8,%rax
  jne    L186
  jmp    L236
L24:
  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);
}
```