user: Please show me the C implementation that matches the assembly code listed below:

```asm
<solve>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  test   %esi,%esi
  jle    L13
  lea    (%rsi,%rsi,1),%eax
  mov    $0x1,%r15d
  mov    %esi,%r13d
  mov    %rdi,%r8
  test   %eax,%eax
  lea    -0x1(%rsi),%esi
  mov    %eax,0x2c(%rsp)
  mov    %r13d,%r14d
  cmovg  %eax,%r15d
  mov    %esi,0x28(%rsp)
  xor    %r12d,%r12d
  mov    %rsi,0x30(%rsp)
  mov    %eax,%esi
  lea    -0x4(%rax),%eax
  mov    %eax,0x10(%rsp)
  mov    %r15d,%eax
  mov    %r15d,%r11d
  mov    %r15d,%ebx
  shr    $0x2,%eax
  and    $0xfffffffc,%r11d
  mov    %r13d,0x20(%rsp)
  lea    -0x1(%rax),%ebp
  mov    %esi,%eax
  lea    -0x2(%rsi),%esi
  mov    %r11d,%r13d
  mov    %esi,0x8(%rsp)
  add    $0x1,%rbp
  mov    %eax,%r15d
  shl    $0x4,%rbp
  nopl   (%rax)
L309:
  mov    0x20(%rsp),%edx
  mov    %r12d,%esi
  mov    %r8,%rdi
  mov    %r8,0x18(%rsp)
  call   <pivoting@plt>
  mov    0x18(%rsp),%r8
  lea    0x0(,%r12,4),%r11
  xor    %esi,%esi
  nopl   0x0(%rax,%rax,1)
L15:
  cmp    %r12d,%esi
  je     L158
  mov    (%r8,%rsi,8),%rax
  mov    (%r8,%r12,8),%rcx
  mov    %rax,%rdx
  lea    0x4(%rcx),%rdi
  movss  (%rax,%r11,1),%xmm2
  divss  (%rcx,%r11,1),%xmm2
  sub    %rdi,%rdx
  cmp    $0x8,%rdx
  jbe    L222
  cmpl   $0x7ffffffd,0x8(%rsp)
  ja     L222
  cmpl   $0x7ffffffb,0x10(%rsp)
  ja     L307
  movaps %xmm2,%xmm3
  xor    %edx,%edx
  shufps $0x0,%xmm3,%xmm3
  xchg   %ax,%ax
L144:
  movups (%rcx,%rdx,1),%xmm1
  movups (%rax,%rdx,1),%xmm0
  mulps  %xmm3,%xmm1
  subps  %xmm1,%xmm0
  movups %xmm0,(%rax,%rdx,1)
  add    $0x10,%rdx
  cmp    %rbp,%rdx
  jne    L144
  cmp    %ebx,%r13d
  je     L158
  mov    %r13d,%edi
  mov    %r13d,%edx
L86:
  mov    %ebx,%r9d
  sub    %edi,%r9d
  cmp    $0x1,%r9d
  je     L191
  movq   (%rcx,%rdi,4),%xmm1
  movaps %xmm2,%xmm3
  lea    (%rax,%rdi,4),%r10
  mov    %r9d,%edi
  shufps $0xe0,%xmm3,%xmm3
  movq   (%r10),%xmm0
  and    $0xfffffffe,%edi
  mulps  %xmm3,%xmm1
  add    %edi,%edx
  subps  %xmm1,%xmm0
  movlps %xmm0,(%r10)
  cmp    %edi,%r9d
  je     L158
L191:
  movslq %edx,%rdx
  mulss  (%rcx,%rdx,4),%xmm2
  lea    (%rax,%rdx,4),%rax
  movss  (%rax),%xmm0
  subss  %xmm2,%xmm0
  movss  %xmm0,(%rax)
L158:
  add    $0x1,%rsi
  cmp    %r14,%rsi
  jne    L15
  add    $0x1,%r12
  cmp    %rsi,%r12
  jne    L309
  movslq 0x20(%rsp),%rsi
  mov    %r8,%rbx
  shl    $0x2,%r12
  xor    %ecx,%ecx
  mov    %esi,%eax
  mov    %esi,%r9d
  lea    0x0(,%rsi,4),%rdi
  mov    %rsi,%r13
  and    $0xfffffffc,%r9d
  shr    $0x2,%eax
  mov    %rsi,0x38(%rsp)
  lea    0x0(,%rsi,8),%r10
  lea    -0x1(%rax),%r8d
  lea    (%rsi,%r9,1),%eax
  mov    %rdi,0x10(%rsp)
  cltq
  lea    0x1(%r9),%r11d
  lea    0x2(%r9),%r15d
  add    $0x1,%r8
  lea    0x0(,%rax,4),%rbp
  lea    (%rsi,%r11,1),%eax
  mov    %r15d,0x8(%rsp)
  shl    $0x4,%r8
  cltq
  lea    0x0(,%rax,4),%r14
  lea    (%rsi,%r15,1),%eax
  mov    %rdi,%r15
  cltq
  shl    $0x2,%rax
  mov    %rax,0x18(%rsp)
  mov    0x30(%rsp),%rax
  lea    0x1(%rsi,%rax,1),%rax
  shl    $0x2,%rax
  mov    %rax,0x20(%rsp)
  nopl   0x0(%rax)
L283:
  mov    (%rbx,%rcx,2),%rdx
  mov    %rcx,%rax
  lea    (%rdx,%rcx,1),%rdi
  add    $0x4,%rcx
  cmp    %rax,%r10
  setle  %sil
  cmp    %rcx,%r15
  setge  %al
  or     %sil,%al
  je     L85
  cmpl   $0x2,0x28(%rsp)
  jbe    L85
  movss  (%rdi),%xmm1
  lea    (%rdx,%r15,1),%rax
  lea    (%r8,%rax,1),%rsi
  shufps $0x0,%xmm1,%xmm1
  nopl   0x0(%rax,%rax,1)
L215:
  movups (%rax),%xmm0
  add    $0x10,%rax
  divps  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rsi,%rax
  jne    L215
  cmp    %r9d,%r13d
  je     L172
  lea    (%rdx,%rbp,1),%rax
  movss  (%rax),%xmm0
  divss  (%rdi),%xmm0
  movss  %xmm0,(%rax)
  cmp    %r13d,%r11d
  jge    L172
  lea    (%rdx,%r14,1),%rax
  movss  (%rax),%xmm0
  divss  (%rdi),%xmm0
  movss  %xmm0,(%rax)
  cmp    0x8(%rsp),%r13d
  jle    L172
  add    0x18(%rsp),%rdx
  movss  (%rdx),%xmm0
  divss  (%rdi),%xmm0
  movss  %xmm0,(%rdx)
L172:
  cmp    %r12,%rcx
  jne    L283
  xor    %eax,%eax
L229:
  mov    (%rbx,%rax,2),%rdx
  add    %rax,%rdx
  add    $0x4,%rax
  movss  (%rdx),%xmm0
  divss  %xmm0,%xmm0
  movss  %xmm0,(%rdx)
  cmp    %r12,%rax
  jne    L229
  lea    D84(%rip),%rdi
  lea    D59(%rip),%r12
  call   <puts@plt>
  lea    0x0(%r13,%r13,1),%eax
  mov    %rbx,0x20(%rsp)
  mov    0x2c(%rsp),%ebp
  mov    %eax,0x18(%rsp)
  mov    0x30(%rsp),%rax
  lea    0x8(%rbx,%rax,8),%rax
  mov    %rax,0x8(%rsp)
  mov    %rax,%r15
  nopl   0x0(%rax,%rax,1)
L176:
  xor    %r14d,%r14d
  jmp    L142
  nopl   (%rax)
L223:
  mov    %r12,%rdi
  mov    $0x1,%eax
  add    $0x1,%r14
  call   <printf@plt>
  cmp    %r14,%rbp
  je     L74
L142:
  mov    (%rbx),%rax
  pxor   %xmm0,%xmm0
  cvtss2sd (%rax,%r14,4),%xmm0
  cmp    %r14d,%r13d
  jne    L223
  lea    D12(%rip),%rdi
  mov    $0x1,%eax
  add    $0x1,%r14
  call   <printf@plt>
  cmp    %r14,%rbp
  jne    L142
L74:
  mov    $0xa,%edi
  add    $0x8,%rbx
  call   <putchar@plt>
  cmp    %rbx,%r15
  jne    L176
  lea    D30(%rip),%rdi
  mov    0x20(%rsp),%rbx
  lea    D13(%rip),%r12
  call   <puts@plt>
  lea    D81(%rip),%rdi
  call   <puts@plt>
  mov    0x2c(%rsp),%eax
  mov    0x38(%rsp),%rsi
  mov    0x18(%rsp),%r15d
  sub    %r13d,%eax
  sub    $0x1,%eax
  lea    0x1(%rsi,%rax,1),%rbp
  shl    $0x2,%rbp
  cs nopw 0x0(%rax,%rax,1)
L265:
  mov    0x10(%rsp),%r14
  cmp    %r15d,%r13d
  jge    L313
  nopw   0x0(%rax,%rax,1)
L72:
  mov    (%rbx),%rax
  pxor   %xmm0,%xmm0
  mov    %r12,%rdi
  cvtss2sd (%rax,%r14,1),%xmm0
  mov    $0x1,%eax
  add    $0x4,%r14
  call   <printf@plt>
  cmp    %rbp,%r14
  jne    L72
L313:
  mov    $0xa,%edi
  add    $0x8,%rbx
  call   <putchar@plt>
  cmp    %rbx,0x8(%rsp)
  jne    L265
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L222:
  xor    %edx,%edx
  nopw   0x0(%rax,%rax,1)
L118:
  movss  (%rcx,%rdx,4),%xmm1
  movss  (%rax,%rdx,4),%xmm0
  mulss  %xmm2,%xmm1
  subss  %xmm1,%xmm0
  movss  %xmm0,(%rax,%rdx,4)
  add    $0x1,%rdx
  cmp    %edx,%r15d
  jg     L118
  jmp    L158
L307:
  xor    %edi,%edi
  xor    %edx,%edx
  jmp    L86
L85:
  lea    (%rdx,%r15,1),%rax
  add    0x20(%rsp),%rdx
  nop
L87:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  divss  (%rdi),%xmm0
  movss  %xmm0,-0x4(%rax)
  cmp    %rdx,%rax
  jne    L87
  jmp    L172
L13:
  lea    D84(%rip),%rdi
  call   <puts@plt>
  lea    D30(%rip),%rdi
  call   <puts@plt>
  add    $0x48,%rsp
  lea    D81(%rip),%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <puts@plt>
```

tool_calls: name: parse_data
arguments: tag: D84
type: string
name: parse_data
arguments: tag: D59
type: string
name: parse_data
arguments: tag: D12
type: string
name: parse_data
arguments: tag: D30
type: string
name: parse_data
arguments: tag: D13
type: string
name: parse_data
arguments: tag: D81
type: string

tool: D84: 
 The augmented matrix is :

tool: D59: %f 

tool: D12:  |  %f 

tool: D30: 


tool: D13: %f  

tool: D81: The Inverse Matrix is :-


assistant: ```c
void solve(float **arr, int n) {
  int i, j, k, l, p;
  float m, y, max, temp;
  float x[n];
  for (k = 0; k < n; k++) {
    pivoting(arr, k, n);
    for (i = 0; i < n; i++) {
      if (i == k)
        continue;
      m = arr[i][k] / arr[k][k];
      for (j = 0; j < 2 * n; j++)
        arr[i][j] -= m * arr[k][j];
    }
  }
  for (j = 0; j < n; j++) {
    for (i = 0; i < n; i++) {
      arr[j][i + n] = arr[j][i + n] / arr[j][j];
    }
  }
  for (j = 0; j < n; j++)
    arr[j][j] /= arr[j][j];
  printf("\n The augmented matrix is :\n");
  for (j = 0; j < n; j++) {
    for (i = 0; i < 2 * n; i++) {
      if (i == n)
        printf(" |  %f ", arr[j][i]);
      else
        printf("%f ", arr[j][i]);
    }
    printf("\n");
  }
  printf("\n\n");
  printf("The Inverse Matrix is :-\n\n");
  for (i = 0; i < n; i++) {
    for (j = n; j < 2 * n; j++) {
      printf("%f  ", arr[i][j]);
    }
    printf("\n");
  }
}
```