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

```asm
<frlufact>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %ecx,-0x3c(%rbp)
  mov    -0x28(%rbp),%rax
  cmp    -0x38(%rbp),%rax
  je     L115
  mov    -0x3c(%rbp),%eax
  imul   %eax,%eax
  lea    0x0(,%rax,4),%edx
  mov    -0x38(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
L115:
  movl   $0x0,-0x14(%rbp)
  jmp    L110
L114:
  pxor   %xmm0,%xmm0
  movss  %xmm0,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  jmp    L36
L78:
  mov    -0x1c(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  movd   %eax,%xmm0
  call   <fabs@plt>
  movd   %xmm0,%eax
  mov    %eax,-0x4(%rbp)
  movss  -0x4(%rbp),%xmm0
  comiss -0xc(%rbp),%xmm0
  jbe    L152
  movss  -0x4(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  mov    -0x1c(%rbp),%eax
  mov    %eax,-0x10(%rbp)
L152:
  addl   $0x1,-0x1c(%rbp)
L36:
  mov    -0x1c(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jb     L78
  mov    -0x14(%rbp),%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x1c(%rbp)
  jmp    L13
L33:
  mov    -0x14(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0x8(%rbp)
  mov    -0x10(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%ecx
  mov    -0x1c(%rbp),%eax
  add    %ecx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rcx
  mov    -0x28(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x10(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  -0x8(%rbp),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x1c(%rbp)
L13:
  mov    -0x1c(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jb     L33
  mov    -0x3c(%rbp),%eax
  add    $0x1,%eax
  imul   -0x14(%rbp),%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  movss  %xmm0,-0xc(%rbp)
  pxor   %xmm0,%xmm0
  ucomiss -0xc(%rbp),%xmm0
  jp     L149
  pxor   %xmm0,%xmm0
  ucomiss -0xc(%rbp),%xmm0
  je     L125
L149:
  movss  D0(%rip),%xmm0
  divss  -0xc(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x1c(%rbp)
  jmp    L73
L92:
  mov    -0x1c(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x1c(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mulss  -0xc(%rbp),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x1c(%rbp)
L73:
  mov    -0x1c(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jb     L92
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x1c(%rbp)
  jmp    L95
L51:
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x18(%rbp)
  jmp    L79
L4:
  mov    -0x1c(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x1c(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x14(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  %xmm2,%xmm1
  mov    -0x1c(%rbp),%eax
  imul   -0x3c(%rbp),%eax
  mov    %eax,%edx
  mov    -0x18(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x18(%rbp)
L79:
  mov    -0x18(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jb     L4
  addl   $0x1,-0x1c(%rbp)
L95:
  mov    -0x1c(%rbp),%eax
  cmp    -0x3c(%rbp),%eax
  jb     L51
L125:
  addl   $0x1,-0x14(%rbp)
L110:
  mov    -0x3c(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x14(%rbp)
  jb     L114
  nop
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D0
data_type: byte[4]

tool: {"D0": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void frlufact(float *u, unsigned int *p, const float *a, unsigned int d) {
  unsigned int i, j, k, mu;
  float f1, f2;
  if (u != a)
    memcpy(u, a, d * d * sizeof(u[0]));
  for (k = 0; k < d - 1; k++) {
    for (f1 = 0, i = mu = k; i < d; i++) {
      f2 = fabs(u[i * d + k]);
      if (f2 > f1) {
        f1 = f2;
        mu = i;
      }
    }
    p[k] = mu;
    for (i = k; i < d; i++)
      do {
        float z;
        z = (u[k * d + i]);
        (u[k * d + i]) = (u[mu * d + i]);
        (u[mu * d + i]) = z;
      } while (0);
    f1 = u[k * d + k];
    if (f1 != 0) {
      f1 = 1 / f1;
      for (i = k + 1; i < d; i++)
        u[i * d + k] *= f1;
      for (i = k + 1; i < d; i++)
        for (j = k + 1; j < d; j++)
          u[i * d + j] -= u[i * d + k] * u[k * d + j];
    }
  }
}
```