user: Demonstrate the C code that generates the assembly output below:

```asm
<vobsub_rgb_to_yuv>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  shr    $0x10,%eax
  and    $0xff,%eax
  mov    %eax,-0x18(%rbp)
  mov    -0x24(%rbp),%eax
  shr    $0x8,%eax
  and    $0xff,%eax
  mov    %eax,-0x14(%rbp)
  mov    -0x24(%rbp),%eax
  and    $0xff,%eax
  mov    %eax,-0x10(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x18(%rbp),%xmm1
  movsd  D124(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x14(%rbp),%xmm2
  movsd  D12(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x10(%rbp),%xmm2
  movsd  D90(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  D168(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D158(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  D165(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0xc(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x18(%rbp),%xmm1
  movsd  D177(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x14(%rbp),%xmm2
  movsd  D71(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x10(%rbp),%xmm2
  movsd  D109(%rip),%xmm0
  mulsd  %xmm2,%xmm0
  addsd  %xmm0,%xmm1
  movsd  D106(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D158(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  D15(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x8(%rbp)
  pxor   %xmm1,%xmm1
  cvtsi2sdl -0x18(%rbp),%xmm1
  movsd  D109(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x14(%rbp),%xmm2
  movsd  D43(%rip),%xmm1
  mulsd  %xmm2,%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm2,%xmm2
  cvtsi2sdl -0x10(%rbp),%xmm2
  movsd  D112(%rip),%xmm1
  mulsd  %xmm1,%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D106(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D158(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  D15(%rip),%xmm0
  addsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%eax
  mov    %eax,-0x4(%rbp)
  mov    -0xc(%rbp),%eax
  shl    $0x10,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0x8,%eax
  or     %edx,%eax
  or     -0x4(%rbp),%eax
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: label: D124
type: f64
name: disassemble_data
arguments: label: D12
type: f64
name: disassemble_data
arguments: label: D90
type: f64
name: disassemble_data
arguments: label: D168
type: byte[8]
name: disassemble_data
arguments: label: D158
type: byte[8]
name: disassemble_data
arguments: label: D165
type: f64
name: disassemble_data
arguments: label: D177
type: byte[8]
name: disassemble_data
arguments: label: D71
type: f64
name: disassemble_data
arguments: label: D109
type: f64
name: disassemble_data
arguments: label: D106
type: byte[8]
name: disassemble_data
arguments: label: D15
type: f64
name: disassemble_data
arguments: label: D43
type: f64
name: disassemble_data
arguments: label: D112
type: f64

tool: D124: 0.299

tool: D12: 0.587

tool: D90: 0.114

tool: {"D168": [0x00,0x00,0x00,0x00,0x00,0x60,0x6b,0x40]}

tool: {"D158": [0x00,0x00,0x00,0x00,0x00,0xe0,0x6f,0x40]}

tool: D165: 16.5

tool: {"D177": [0x0c,0x76,0xc3,0xb6,0x45,0x99,0xc5,0xbf]}

tool: D71: 0.33126

tool: D109: 0.5

tool: {"D106": [0x00,0x00,0x00,0x00,0x00,0x00,0x6c,0x40]}

tool: D15: 128.5

tool: D43: 0.41869

tool: D112: 0.08131

assistant: ```c
unsigned int vobsub_rgb_to_yuv(unsigned int rgb) {
  int r, g, b, y, u, v;
  r = rgb >> 16 & 0xff;
  g = rgb >> 8 & 0xff;
  b = rgb & 0xff;
  y = (0.299 * r + 0.587 * g + 0.114 * b) * 219 / 255 + 16.5;
  u = (-0.16874 * r - 0.33126 * g + 0.5 * b) * 224 / 255 + 128.5;
  v = (0.5 * r - 0.41869 * g - 0.08131 * b) * 224 / 255 + 128.5;
  return y << 16 | u << 8 | v;
}
```