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

```asm
<pseudoinverse>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %rdi,-0xc8(%rbp)
  mov    %rsi,-0xd0(%rbp)
  mov    %edx,-0xd4(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0xb4(%rbp)
  jmp    L94
L183:
  movl   $0x0,-0xb0(%rbp)
  jmp    L116
L178:
  mov    -0xb4(%rbp),%eax
  add    $0x3,%eax
  cmp    %eax,-0xb0(%rbp)
  jne    L238
  movsd  D2(%rip),%xmm0
  jmp    L134
L238:
  pxor   %xmm0,%xmm0
L134:
  mov    -0xb0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0xa0(%rbp,%rax,8)
  addl   $0x1,-0xb0(%rbp)
L116:
  cmpl   $0x5,-0xb0(%rbp)
  jle    L178
  movl   $0x0,-0xb0(%rbp)
  jmp    L160
L81:
  movl   $0x0,-0xac(%rbp)
  jmp    L195
L8:
  mov    -0xb0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  -0xa0(%rbp,%rax,8),%xmm1
  mov    -0xac(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm2
  mov    -0xac(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb0(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm1,%xmm0
  mov    -0xb0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0xa0(%rbp,%rax,8)
  addl   $0x1,-0xac(%rbp)
L195:
  mov    -0xac(%rbp),%eax
  cmp    -0xd4(%rbp),%eax
  jl     L8
  addl   $0x1,-0xb0(%rbp)
L160:
  cmpl   $0x2,-0xb0(%rbp)
  jle    L81
  addl   $0x1,-0xb4(%rbp)
L94:
  cmpl   $0x2,-0xb4(%rbp)
  jle    L183
  movl   $0x0,-0xb4(%rbp)
  jmp    L181
L34:
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  shl    $0x3,%rax
  add    %rbp,%rax
  sub    $0xa0,%rax
  movsd  (%rax),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movl   $0x0,-0xb0(%rbp)
  jmp    L137
L244:
  mov    -0xb0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  -0xa0(%rbp,%rax,8),%xmm0
  divsd  -0xa8(%rbp),%xmm0
  mov    -0xb0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0xa0(%rbp,%rax,8)
  addl   $0x1,-0xb0(%rbp)
L137:
  cmpl   $0x5,-0xb0(%rbp)
  jle    L244
  movl   $0x0,-0xac(%rbp)
  jmp    L257
L32:
  mov    -0xac(%rbp),%eax
  cmp    -0xb4(%rbp),%eax
  je     L199
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xac(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  -0xa0(%rbp,%rax,8),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movl   $0x0,-0xb0(%rbp)
  jmp    L100
L147:
  mov    -0xb0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xac(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  -0xa0(%rbp,%rax,8),%xmm0
  mov    -0xb0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  -0xa0(%rbp,%rax,8),%xmm1
  mulsd  -0xa8(%rbp),%xmm1
  subsd  %xmm1,%xmm0
  mov    -0xb0(%rbp),%eax
  movslq %eax,%rcx
  mov    -0xac(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  %xmm0,-0xa0(%rbp,%rax,8)
  addl   $0x1,-0xb0(%rbp)
L100:
  cmpl   $0x5,-0xb0(%rbp)
  jle    L147
  jmp    L73
L199:
  nop
L73:
  addl   $0x1,-0xac(%rbp)
L257:
  cmpl   $0x2,-0xac(%rbp)
  jle    L32
  addl   $0x1,-0xb4(%rbp)
L181:
  cmpl   $0x2,-0xb4(%rbp)
  jle    L34
  movl   $0x0,-0xb4(%rbp)
  jmp    L171
L172:
  movl   $0x0,-0xb0(%rbp)
  jmp    L72
L143:
  movl   $0x0,-0xac(%rbp)
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb0(%rbp),%eax
  cltq
  pxor   %xmm0,%xmm0
  movsd  %xmm0,(%rdx,%rax,8)
  jmp    L269
L163:
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb0(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm1
  mov    -0xac(%rbp),%eax
  add    $0x3,%eax
  movslq %eax,%rcx
  mov    -0xb0(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movsd  -0xa0(%rbp,%rax,8),%xmm2
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xac(%rbp),%eax
  cltq
  movsd  (%rdx,%rax,8),%xmm0
  mulsd  %xmm2,%xmm0
  mov    -0xb4(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rax,%rdx
  addsd  %xmm1,%xmm0
  mov    -0xb0(%rbp),%eax
  cltq
  movsd  %xmm0,(%rdx,%rax,8)
  addl   $0x1,-0xac(%rbp)
L269:
  cmpl   $0x2,-0xac(%rbp)
  jle    L163
  addl   $0x1,-0xb0(%rbp)
L72:
  cmpl   $0x2,-0xb0(%rbp)
  jle    L143
  addl   $0x1,-0xb4(%rbp)
L171:
  mov    -0xb4(%rbp),%eax
  cmp    -0xd4(%rbp),%eax
  jl     L172
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L113
  call   <__stack_chk_fail@plt>
L113:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D2
data_type: byte[8]

tool: {"D2": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

assistant: ```c
void pseudoinverse(double (*in)[3], double (*out)[3], int size) {
  double work[3][6], num;
  int i, j, k;
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 6; j++)
      work[i][j] = j == i + 3;
    for (j = 0; j < 3; j++)
      for (k = 0; k < size; k++)
        work[i][j] += in[k][i] * in[k][j];
  }
  for (i = 0; i < 3; i++) {
    num = work[i][i];
    for (j = 0; j < 6; j++)
      work[i][j] /= num;
    for (k = 0; k < 3; k++) {
      if (k == i)
        continue;
      num = work[k][i];
      for (j = 0; j < 6; j++)
        work[k][j] -= work[i][j] * num;
    }
  }
  for (i = 0; i < size; i++)
    for (j = 0; j < 3; j++)
      for (out[i][j] = k = 0; k < 3; k++)
        out[i][j] += work[j][k + 3] * in[i][k];
}
```