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

```asm
<A2toRH>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x8d0,%rsp
  mov    %rdi,-0x1898(%rbp)
  mov    %rsi,-0x18a0(%rbp)
  mov    %rdx,-0x18a8(%rbp)
  mov    %rcx,-0x18b0(%rbp)
  mov    %r8,-0x18b8(%rbp)
  mov    %r9,-0x18c0(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0x18c8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x1888(%rbp)
  movl   $0x0,-0x188c(%rbp)
  jmp    L39
L61:
  mov    -0x188c(%rbp),%eax
  cltq
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x1530(%rbp,%rax,8)
  addl   $0x1,-0x188c(%rbp)
L39:
  cmpl   $0xd1,-0x188c(%rbp)
  jle    L61
  cmpl   $0x0,-0x1888(%rbp)
  je     L58
  mov    -0x18c0(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  mov    -0x18c0(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x18c0(%rbp),%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x18c0(%rbp),%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    -0x1830(%rbp),%rcx
  lea    -0x1880(%rbp),%rdx
  mov    %rcx,%rsi
  mov    %rdx,%rdi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <norm2pt@plt>
  mov    -0x18c0(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x6,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm2
  mov    -0x18c0(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x5,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x18c0(%rbp),%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x6,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x18c0(%rbp),%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  add    $0x5,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  lea    -0x1790(%rbp),%rcx
  lea    -0x17e0(%rbp),%rdx
  mov    %rcx,%rsi
  mov    %rdx,%rdi
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <norm2pt@plt>
  mov    -0x18c0(%rbp),%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  lea    -0x17e0(%rbp),%rcx
  lea    -0x1880(%rbp),%rdx
  lea    -0x1530(%rbp),%rax
  mov    $0x2,%r8d
  mov    %rax,%rdi
  call   <ZuN@plt>
  mov    -0x18c0(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  lea    (%rdx,%rax,1),%rsi
  lea    -0x1530(%rbp),%rax
  add    $0x38,%rax
  lea    -0x17e0(%rbp),%rcx
  lea    -0x1880(%rbp),%rdx
  mov    $0x2,%r8d
  mov    %rax,%rdi
  call   <ZuN@plt>
  mov    -0x1898(%rbp),%rdx
  lea    -0x1790(%rbp),%rsi
  lea    -0x1740(%rbp),%rax
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <mmul@plt>
  mov    -0x18a8(%rbp),%rdx
  lea    -0x1790(%rbp),%rsi
  lea    -0x16f0(%rbp),%rax
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <mmul@plt>
  lea    -0x1880(%rbp),%rdx
  mov    -0x18a0(%rbp),%rsi
  lea    -0x16a0(%rbp),%rax
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <mmul@plt>
  lea    -0x1880(%rbp),%rdx
  mov    -0x18b0(%rbp),%rsi
  lea    -0x1650(%rbp),%rax
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <mmul@plt>
  lea    -0x1530(%rbp),%rax
  add    $0x3f0,%rax
  lea    -0x1740(%rbp),%rdx
  lea    -0x16a0(%rbp),%rsi
  mov    $0x2,%ecx
  mov    %rax,%rdi
  call   <Znd@plt>
  lea    -0x1530(%rbp),%rax
  add    $0x578,%rax
  lea    -0x16f0(%rbp),%rdx
  lea    -0x1650(%rbp),%rsi
  mov    $0x2,%ecx
  mov    %rax,%rdi
  call   <Znd@plt>
  jmp    L67
L58:
  mov    -0x18c0(%rbp),%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  lea    -0x1530(%rbp),%rax
  mov    $0x2,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <Zu@plt>
  mov    -0x18c0(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%edx
  mov    %edx,%eax
  shl    $0x2,%eax
  add    %edx,%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18b8(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  lea    -0x1530(%rbp),%rax
  add    $0x38,%rax
  mov    $0x2,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <Zu@plt>
  lea    -0x1530(%rbp),%rax
  add    $0x3f0,%rax
  mov    -0x1898(%rbp),%rdx
  mov    -0x18a0(%rbp),%rsi
  mov    $0x2,%ecx
  mov    %rax,%rdi
  call   <Znd@plt>
  lea    -0x1530(%rbp),%rax
  add    $0x578,%rax
  mov    -0x18a8(%rbp),%rdx
  mov    -0x18b0(%rbp),%rsi
  mov    $0x2,%ecx
  mov    %rax,%rdi
  call   <Znd@plt>
L67:
  lea    -0x1530(%rbp),%rsi
  lea    -0xe20(%rbp),%rax
  mov    $0xe,%ecx
  mov    $0xf,%edx
  mov    %rax,%rdi
  call   <mattr@plt>
  movl   $0xd2,-0x188c(%rbp)
  jmp    L1
L7:
  mov    -0x188c(%rbp),%eax
  cltq
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0xe20(%rbp,%rax,8)
  addl   $0x1,-0x188c(%rbp)
L1:
  cmpl   $0xe0,-0x188c(%rbp)
  jle    L7
  lea    -0x15b0(%rbp),%rdx
  lea    -0x710(%rbp),%rsi
  lea    -0xe20(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0xf,%edx
  mov    %rax,%rdi
  call   <nullspace@plt>
  mov    %eax,-0x1884(%rbp)
  lea    -0x710(%rbp),%rcx
  mov    -0x18c8(%rbp),%rax
  mov    $0x48,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x18c8(%rbp),%rax
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <trnm@plt>
  cmpl   $0x0,-0x1888(%rbp)
  je     L48
  mov    -0x18c8(%rbp),%rdx
  lea    -0x17e0(%rbp),%rsi
  lea    -0x1600(%rbp),%rax
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <mmul@plt>
  lea    -0x1830(%rbp),%rdx
  lea    -0x1600(%rbp),%rsi
  mov    -0x18c8(%rbp),%rax
  mov    $0x3,%ecx
  mov    %rax,%rdi
  call   <mmul@plt>
L48:
  cmpl   $0x1,-0x1884(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L66
  call   <__stack_chk_fail@plt>
L66:
  leave
  ret
```

assistant: ```c
int A2toRH(double *N1, double *D1, double *N2, double *D2, double *u, int *samidx, double *h) {
  int do_norm = 0, i;
  double Z[15 * 15], ZT[15 * 15];
  double U[15 * 15];
  double T1[3 * 3], iT1[3 * 3], T2[3 * 3], iT2[3 * 3];
  double N1N[3 * 3], N2N[3 * 3], D1N[3 * 3], D2N[3 * 3], temp[3 * 3];
  int nullsize, nullspace_buff[2 * 15];
  for (i = 0; i < 2 * 7 * 15; ++i) {
    Z[i] = 0.0;
  }
  if (do_norm) {
    norm2pt(u[10 * samidx[0] + 0], u[10 * samidx[0] + 1], u[10 * samidx[1] + 0], u[10 * samidx[1] + 1], T1, iT1);
    norm2pt(u[10 * samidx[0] + 5], u[10 * samidx[0] + 6], u[10 * samidx[1] + 5], u[10 * samidx[1] + 6], T2, iT2);
    ZuN(Z, u + 10 * samidx[0], T1, T2, 2);
    ZuN(Z + 7, u + 10 * samidx[1], T1, T2, 2);
    mmul(N1N, iT2, N1, 3);
    mmul(N2N, iT2, N2, 3);
    mmul(D1N, D1, T1, 3);
    mmul(D2N, D2, T1, 3);
    Znd(Z + 2 * 7 * 9, D1N, N1N, 2);
    Znd(Z + 2 * 7 * 9 + 2 * 7 * 3 + 7, D2N, N2N, 2);
  } else {
    Zu(Z, u + 10 * samidx[0], 2);
    Zu(Z + 7, u + 10 * samidx[1], 2);
    Znd(Z + 2 * 7 * 9, D1, N1, 2);
    Znd(Z + 2 * 7 * 9 + 2 * 7 * 3 + 7, D2, N2, 2);
  }
  mattr(ZT, Z, 15, 2 * 7);
  for (i = 14 * 15; i < 15 * 15; ++i) {
    ZT[i] = 0;
  }
  nullsize = nullspace(ZT, U, 15, nullspace_buff);
  memcpy(h, U, 3 * 3 * sizeof(double));
  trnm(h, 3);
  if (do_norm) {
    mmul(temp, T2, h, 3);
    mmul(h, temp, iT1, 3);
  }
  return nullsize != 1;
}
```