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

```asm
<ReferenceDct>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x440,%rsp
  mov    %rdi,-0x438(%rbp)
  mov    %rsi,-0x440(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x410(%rbp),%rax
  mov    %rax,-0x420(%rbp)
  mov    -0x438(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  jmp    L102
L71:
  mov    -0x428(%rbp),%rax
  mov    (%rax),%ecx
  mov    -0x420(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    %rdx,-0x420(%rbp)
  pxor   %xmm0,%xmm0
  cvtsi2sd %ecx,%xmm0
  movsd  %xmm0,(%rax)
  addq   $0x4,-0x428(%rbp)
L102:
  mov    -0x438(%rbp),%rax
  add    $0x100,%rax
  cmp    %rax,-0x428(%rbp)
  jb     L71
  lea    -0x210(%rbp),%rax
  mov    %rax,-0x418(%rbp)
  lea    -0x410(%rbp),%rax
  mov    %rax,-0x420(%rbp)
  jmp    L49
L10:
  mov    -0x418(%rbp),%rdx
  mov    -0x420(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <DoubleReferenceDct1D@plt>
  addq   $0x40,-0x418(%rbp)
  addq   $0x40,-0x420(%rbp)
L49:
  lea    -0x410(%rbp),%rax
  add    $0x200,%rax
  cmp    %rax,-0x420(%rbp)
  jb     L10
  lea    -0x410(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <DoubleTransposeMatrix@plt>
  lea    -0x210(%rbp),%rax
  mov    %rax,-0x418(%rbp)
  lea    -0x410(%rbp),%rax
  mov    %rax,-0x420(%rbp)
  jmp    L99
L38:
  mov    -0x418(%rbp),%rdx
  mov    -0x420(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <DoubleReferenceDct1D@plt>
  addq   $0x40,-0x418(%rbp)
  addq   $0x40,-0x420(%rbp)
L99:
  lea    -0x410(%rbp),%rax
  add    $0x200,%rax
  cmp    %rax,-0x420(%rbp)
  jb     L38
  lea    -0x410(%rbp),%rdx
  lea    -0x210(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <DoubleTransposeMatrix@plt>
  lea    -0x410(%rbp),%rax
  mov    %rax,-0x420(%rbp)
  mov    -0x440(%rbp),%rax
  mov    %rax,-0x428(%rbp)
  jmp    L59
L97:
  mov    -0x420(%rbp),%rax
  movsd  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  comisd %xmm1,%xmm0
  jbe    L76
  mov    -0x420(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  D2(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  jmp    L86
L76:
  mov    -0x420(%rbp),%rax
  movsd  (%rax),%xmm0
  movsd  D2(%rip),%xmm1
  subsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
L86:
  mov    -0x428(%rbp),%rdx
  lea    0x4(%rdx),%rcx
  mov    %rcx,-0x428(%rbp)
  mov    %eax,(%rdx)
  addq   $0x8,-0x420(%rbp)
L59:
  mov    -0x440(%rbp),%rax
  add    $0x100,%rax
  cmp    %rax,-0x428(%rbp)
  jb     L97
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L82
  call   <__stack_chk_fail@plt>
L82:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D2
type_guessed: f64

tool: D2: 0.5

assistant: ```c
void ReferenceDct(matrix, newmatrix) int *matrix;
int *newmatrix;
{
  static char RoutineName[] = "ReferenceDct";
  int *mptr;
  double *sptr, *dptr;
  double sourcematrix[64], destmatrix[64];
  for (sptr = sourcematrix, mptr = matrix; mptr < matrix + 64; mptr++) {
    *(sptr++) = (double)*mptr;
  }
  for (dptr = destmatrix, sptr = sourcematrix; sptr < sourcematrix + 64; sptr += 8) {
    DoubleReferenceDct1D(sptr, dptr);
    dptr += 8;
  }
  DoubleTransposeMatrix(destmatrix, sourcematrix);
  for (dptr = destmatrix, sptr = sourcematrix; sptr < sourcematrix + 64; sptr += 8) {
    DoubleReferenceDct1D(sptr, dptr);
    dptr += 8;
  }
  DoubleTransposeMatrix(destmatrix, sourcematrix);
  for (sptr = sourcematrix, mptr = newmatrix; mptr < newmatrix + 64; sptr++) {
    *(mptr++) = (int)(*sptr > 0 ? (*(sptr) + 0.5) : (*(sptr)-0.5));
  }
}
```