user: 请将以下的汇编代码转换成C语言代码:

```asm
<eltran>:
  endbr64
  test   %ecx,%ecx
  jle    L87
  push   %r15
  mov    (%rsi),%r8
  mov    %rdi,%r9
  mov    %rdx,%r10
  push   %r14
  movsd  D12(%rip),%xmm1
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  cmp    $0x1,%ecx
  je     L34
  movsd  D12(%rip),%xmm1
  movslq %ecx,%rbx
  mov    $0x1,%r11d
  xor    %edi,%edi
  nop
L69:
  mov    %r11,%rax
  nopl   0x0(%rax,%rax,1)
L81:
  mov    (%rsi,%rax,8),%rdx
  movq   $0x0,(%r8,%rax,8)
  add    $0x1,%rax
  movq   $0x0,(%rdx,%rdi,1)
  cmp    %eax,%ecx
  jg     L81
  movsd  %xmm1,(%r8,%rdi,1)
  add    $0x1,%r11
  add    $0x8,%rdi
  mov    (%rsi,%rdi,1),%r8
  cmp    %r11,%rbx
  jne    L69
L34:
  lea    -0x1(%rcx),%ebx
  mov    %ebx,%eax
  movsd  %xmm1,(%r8,%rax,8)
  cmp    $0x2,%ecx
  jle    L135
  movslq %ebx,%r11
  mov    $0x2,%ebp
  pxor   %xmm2,%xmm2
  lea    -0x8(,%r11,8),%rdi
  nop
L10:
  lea    -0x8(%rdi),%r8
  mov    %r11,%rax
  cmp    %ebx,%ecx
  jle    L159
  nopl   0x0(%rax,%rax,1)
L97:
  mov    (%r9,%rax,8),%rdx
  movsd  (%rdx,%r8,1),%xmm0
  mov    (%rsi,%rax,8),%rdx
  add    $0x1,%rax
  movsd  %xmm0,(%rdx,%rdi,1)
  cmp    %eax,%ecx
  jg     L97
L159:
  movslq -0x4(%r10,%r11,4),%rax
  sub    $0x1,%ebx
  cmp    %r11d,%eax
  jne    L150
L42:
  sub    $0x1,%r11
  mov    %r8,%rdi
  add    $0x1,%ebp
  cmp    $0x1,%ebx
  jne    L10
L135:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L150:
  mov    -0x8(%rsi,%rax,8),%r12
  cmp    %ebx,%ecx
  jle    L113
  mov    (%rsi,%rdi,1),%r13
  lea    0x10(%rdi),%rax
  lea    (%r12,%rdi,1),%rdx
  lea    (%r12,%rax,1),%r14
  lea    0x0(%r13,%rdi,1),%r15
  cmp    %r14,%r15
  setae  %r14b
  add    %r13,%rax
  cmp    %rax,%rdx
  setae  %al
  or     %r14b,%al
  je     L44
  mov    %ecx,%eax
  sub    %r11d,%eax
  cmp    $0x1,%eax
  jbe    L44
  mov    %ebp,%r14d
  xor    %eax,%eax
  shr    %r14d
  shl    $0x4,%r14
  nopl   (%rax)
L37:
  movupd (%rdx,%rax,1),%xmm3
  movups %xmm3,(%r15,%rax,1)
  movups %xmm2,(%rdx,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%r14
  jne    L37
  mov    %ebp,%edx
  and    $0xfffffffe,%edx
  lea    (%rdx,%rbx,1),%eax
  cmp    %ebp,%edx
  je     L113
  cltq
  lea    (%r12,%rax,8),%rdx
  movsd  (%rdx),%xmm0
  movsd  %xmm0,0x0(%r13,%rax,8)
  movq   $0x0,(%rdx)
L113:
  movsd  %xmm1,(%r12,%rdi,1)
  jmp    L42
L44:
  movslq %ebx,%rax
  nopl   0x0(%rax)
L46:
  movsd  (%r12,%rax,8),%xmm0
  movsd  %xmm0,0x0(%r13,%rax,8)
  movq   $0x0,(%r12,%rax,8)
  add    $0x1,%rax
  cmp    %eax,%ecx
  jg     L46
  jmp    L113
L87:
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D12
data_type: f64

tool: D12: 1

assistant: ```c
void eltran(double **a, double **zz, int *order, const int n) {
  int i, j, m;
  for (i = 0; i < n; i++) {
    for (j = i + 1; j < n; j++) {
      zz[i][j] = 0.0;
      zz[j][i] = 0.0;
    }
    zz[i][i] = 1.0;
  }
  if (n <= 2) {
    return;
  }
  for (m = n - 1; m >= 2; m--) {
    for (i = m; i < n; i++) {
      zz[i][m - 1] = a[i][m - 2];
    }
    i = order[m - 1];
    if (i != m) {
      for (j = m - 1; j < n; j++) {
        zz[m - 1][j] = zz[i - 1][j];
        zz[i - 1][j] = 0.0;
      }
      zz[i - 1][m - 1] = 1.0;
    }
  }
}
```