user: What is the c source code of the assembly code below?

```asm
<compare>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %edi,-0x44(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %rdx,-0x58(%rbp)
  mov    -0x44(%rbp),%eax
  movslq %eax,%rdx
  sub    $0x1,%rdx
  mov    %rdx,-0x20(%rbp)
  movslq %eax,%rdx
  mov    %rdx,%rcx
  mov    $0x0,%ebx
  mov    -0x44(%rbp),%edx
  movslq %edx,%rcx
  sub    $0x1,%rcx
  mov    %rcx,-0x18(%rbp)
  movslq %edx,%rcx
  mov    %rcx,%r8
  mov    $0x0,%r9d
  movl   $0x0,-0x3c(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movl   $0x0,-0x38(%rbp)
  jmp    L71
L2:
  movl   $0x0,-0x34(%rbp)
  jmp    L50
L4:
  mov    -0x38(%rbp),%ecx
  movslq %ecx,%rsi
  movslq %eax,%rcx
  imul   %rsi,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x50(%rbp),%rcx
  add    %rcx,%rsi
  mov    -0x34(%rbp),%ecx
  movslq %ecx,%rcx
  movsd  (%rsi,%rcx,8),%xmm0
  mov    -0x38(%rbp),%ecx
  movslq %ecx,%rsi
  movslq %edx,%rcx
  imul   %rsi,%rcx
  lea    0x0(,%rcx,8),%rsi
  mov    -0x58(%rbp),%rcx
  add    %rcx,%rsi
  mov    -0x34(%rbp),%ecx
  movslq %ecx,%rcx
  movsd  (%rsi,%rcx,8),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  comisd -0x28(%rbp),%xmm0
  jbe    L42
  movsd  -0x28(%rbp),%xmm0
  movq   D3(%rip),%xmm1
  xorpd  %xmm1,%xmm0
  movsd  %xmm0,-0x28(%rbp)
L42:
  movsd  -0x28(%rbp),%xmm0
  comisd D14(%rip),%xmm0
  jbe    L17
  addl   $0x1,-0x3c(%rbp)
  movsd  -0x28(%rbp),%xmm0
  comisd -0x30(%rbp),%xmm0
  jbe    L17
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
L17:
  addl   $0x1,-0x34(%rbp)
L50:
  mov    -0x34(%rbp),%ecx
  cmp    -0x44(%rbp),%ecx
  jl     L4
  addl   $0x1,-0x38(%rbp)
L71:
  mov    -0x38(%rbp),%ecx
  cmp    -0x44(%rbp),%ecx
  jl     L2
  cmpl   $0x0,-0x3c(%rbp)
  jle    L84
  movsd  -0x30(%rbp),%xmm0
  mov    D14(%rip),%rdx
  mov    -0x3c(%rbp),%eax
  movapd %xmm0,%xmm1
  movq   %rdx,%xmm0
  mov    %eax,%esi
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  jmp    L75
L84:
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L75:
  nop
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D3
data_type: byte[8]
name: extract_symbolic_data
arguments: data_tag: D14
data_type: f64
name: extract_symbolic_data
arguments: data_tag: D13
data_type: string
name: extract_symbolic_data
arguments: data_tag: D47
data_type: string

tool: {"D3": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80]}

tool: D14: 1e-07

tool: D13: %d Diffs found over threshold %f; Max Diff = %f


tool: D47: Passed Correctness Check

assistant: ```c
void compare(int n, double wref[][n], double w[][n]) {
  double maxdiff, this_diff;
  int numdiffs;
  int i, j;
  numdiffs = 0;
  maxdiff = 0;
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++) {
      this_diff = wref[i][j] - w[i][j];
      if (this_diff < 0)
        this_diff = -1.0 * this_diff;
      if (this_diff > 0.0000001) {
        numdiffs++;
        if (this_diff > maxdiff)
          maxdiff = this_diff;
      }
    }
  if (numdiffs > 0)
    printf("%d Diffs found over threshold %f; Max Diff = %f\n", numdiffs, 0.0000001, maxdiff);
  else
    printf("Passed Correctness Check\n");
}
```