user: Translate the below assembly code into C programming language:

```asm
<RGB_to_YUV>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0x40(%rsp),%r12
  mov    0x38(%rsp),%rbx
  test   %r12,%r12
  jle    L16
  test   %rbx,%rbx
  jle    L16
  movsd  D42(%rip),%xmm11
  mov    %rdx,%r10
  mov    %rcx,%r11
  xor    %ebp,%ebp
  movsd  D100(%rip),%xmm7
  movsd  D48(%rip),%xmm6
  movsd  D64(%rip),%xmm5
  movsd  D71(%rip),%xmm1
  movsd  D17(%rip),%xmm4
  movsd  D34(%rip),%xmm3
  movsd  D105(%rip),%xmm10
  movsd  D6(%rip),%xmm2
  movsd  D36(%rip),%xmm9
  movsd  D106(%rip),%xmm8
  xchg   %ax,%ax
L17:
  lea    0x0(,%rbp,4),%rdx
  xor    %eax,%eax
  nopw   0x0(%rax,%rax,1)
L27:
  mov    (%rdi,%rax,8),%r15
  mov    (%rsi,%rax,8),%r14
  pxor   %xmm0,%xmm0
  pxor   %xmm12,%xmm12
  mov    (%r10,%rax,8),%r13
  mov    (%r11,%rax,8),%rcx
  add    %rdx,%r15
  add    %rdx,%r14
  cvtss2sd (%r15),%xmm0
  cvtss2sd (%r14),%xmm12
  mulsd  %xmm11,%xmm0
  add    %rdx,%r13
  mulsd  %xmm10,%xmm12
  addsd  %xmm12,%xmm0
  pxor   %xmm12,%xmm12
  cvtss2sd 0x0(%r13),%xmm12
  mulsd  %xmm9,%xmm12
  addsd  %xmm12,%xmm0
  pxor   %xmm12,%xmm12
  addsd  %xmm8,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rcx,%rdx,1)
  pxor   %xmm0,%xmm0
  mov    (%r8,%rax,8),%rcx
  cvtss2sd (%r15),%xmm0
  cvtss2sd (%r14),%xmm12
  mulsd  %xmm7,%xmm0
  mulsd  %xmm6,%xmm12
  subsd  %xmm12,%xmm0
  pxor   %xmm12,%xmm12
  cvtss2sd 0x0(%r13),%xmm12
  mulsd  %xmm5,%xmm12
  addsd  %xmm12,%xmm0
  pxor   %xmm12,%xmm12
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rcx,%rdx,1)
  pxor   %xmm0,%xmm0
  mov    (%r9,%rax,8),%rcx
  cvtss2sd (%r15),%xmm0
  cvtss2sd (%r14),%xmm12
  mulsd  %xmm4,%xmm0
  add    $0x1,%rax
  mulsd  %xmm3,%xmm12
  subsd  %xmm12,%xmm0
  pxor   %xmm12,%xmm12
  cvtss2sd 0x0(%r13),%xmm12
  mulsd  %xmm2,%xmm12
  subsd  %xmm12,%xmm0
  addsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rcx,%rdx,1)
  cmp    %rax,%rbx
  jne    L27
  add    $0x1,%rbp
  cmp    %rbp,%r12
  jne    L17
L16:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D42
datatype: f64
name: extract_symbolic_data
arguments: data_label: D100
datatype: byte[8]
name: extract_symbolic_data
arguments: data_label: D48
datatype: f64
name: extract_symbolic_data
arguments: data_label: D64
datatype: f64
name: extract_symbolic_data
arguments: data_label: D71
datatype: f64
name: extract_symbolic_data
arguments: data_label: D17
datatype: f64
name: extract_symbolic_data
arguments: data_label: D34
datatype: f64
name: extract_symbolic_data
arguments: data_label: D105
datatype: f64
name: extract_symbolic_data
arguments: data_label: D6
datatype: f64
name: extract_symbolic_data
arguments: data_label: D36
datatype: f64
name: extract_symbolic_data
arguments: data_label: D106
datatype: f64

tool: D42: 0.1277

tool: {"D100": [0x59,0x17,0xb7,0xd1,0x00,0xde,0xb2,0xbf]}

tool: D48: 0.3007

tool: D64: 0.3744

tool: D71: 128

tool: D17: 0.5334

tool: D34: 0.3802

tool: D105: 0.5212

tool: D6: 0.1532

tool: D36: 0.21

tool: D106: 16

assistant: ```c
void RGB_to_YUV(float **R, float **G, float **B, float **Y, float **U, float **V, long nx, long ny) {
  long i, j;
  for (j = 0; j < ny; j++)
    for (i = 0; i < nx; i++) {
      Y[i][j] = (0.1277 * R[i][j] + 0.5212 * G[i][j] + 0.21 * B[i][j]) + 16.0;
      U[i][j] = ((-0.0737 * R[i][j] - 0.3007 * G[i][j] + 0.3744 * B[i][j])) + 128.0;
      V[i][j] = ((0.5334 * R[i][j] - 0.3802 * G[i][j] - 0.1532 * B[i][j])) + 128.0;
    }
  return;
}
```