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

```asm
<FillImage420>:
  endbr64
  push   %r15
  mov    %rdi,%rax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %esi,-0x38(%rsp)
  imul   %edx,%esi
  mov    %esi,%ecx
  movslq %esi,%rsi
  add    %rdi,%rsi
  lea    (%rcx,%rcx,4),%edi
  test   %edi,%edi
  lea    0x3(%rdi),%ecx
  cmovns %edi,%ecx
  lea    0x7(%rdx),%edi
  sar    $0x2,%ecx
  movslq %ecx,%rcx
  add    %rax,%rcx
  test   %edx,%edx
  cmovns %edx,%edi
  sar    $0x3,%edi
  mov    %edi,-0x20(%rsp)
  cmp    $0x7,%edx
  jle    L386
  mov    -0x38(%rsp),%r15d
  mov    $0x10,%r11d
  mov    $0x4,%r10d
  movdqa D171(%rip),%xmm0
  movdqa D132(%rip),%xmm3
  movdqa D134(%rip),%xmm2
  movq   D171(%rip),%xmm1
  mov    %r15d,%edi
  movq   D132(%rip),%xmm5
  movq   D134(%rip),%xmm4
  shr    $0x1f,%edi
  add    %r15d,%edi
  sar    %edi
  mov    %edi,%edx
  mov    %rdx,%r8
  shl    $0x4,%r8
  cmp    $0x1,%r15d
  cmovle %r11,%r8
  shl    $0x2,%rdx
  cmp    $0x1,%r15d
  cmovle %r10,%rdx
  mov    %r8,-0x28(%rsp)
  mov    %rdx,%r8
  mov    $0x1,%edx
  cmovg  %edi,%edx
  mov    %edx,%ebx
  mov    %edx,-0x34(%rsp)
  shr    $0x2,%edx
  and    $0xfffffffc,%ebx
  sub    $0x1,%edx
  mov    %ebx,%r9d
  mov    %ebx,-0x1c(%rsp)
  add    $0x1,%rdx
  mov    %r9,%rbx
  shl    $0x4,%rdx
  shl    $0x4,%rbx
  mov    %rdx,-0x8(%rsp)
  mov    %rbx,-0x18(%rsp)
  lea    0x0(,%r9,4),%rbx
  lea    -0x1(%rdi),%r9d
  add    $0x1,%r9
  mov    %rbx,-0x10(%rsp)
  mov    %r9,%rbx
  shl    $0x4,%rbx
  cmp    $0x1,%r15d
  cmovg  %rbx,%r11
  shl    $0x2,%r9
  cmp    $0x1,%r15d
  mov    %r10,%r15
  cmovg  %r9,%r15
  xor    %r13d,%r13d
  mov    %r11,-0x30(%rsp)
  nop
L135:
  cmpl   $0x1,-0x38(%rsp)
  jle    L206
  mov    -0x28(%rsp),%rbx
  lea    (%rsi,%r8,1),%r9
  cmp    %r9,%rax
  lea    (%rax,%rbx,1),%r11
  setae  %r10b
  cmp    %r11,%rsi
  setae  %r9b
  or     %r9d,%r10d
  lea    (%rcx,%r8,1),%r9
  cmp    %r9,%rax
  setae  %r9b
  cmp    %r11,%rcx
  setae  %r11b
  or     %r11d,%r9d
  and    %r10d,%r9d
  cmpl   $0x5,-0x38(%rsp)
  setg   %r10b
  test   %r10b,%r9b
  je     L108
  lea    0x4(%rsi),%r10
  mov    %rcx,%r9
  sub    %r10,%r9
  cmp    $0x8,%r9
  jbe    L108
  cmp    $0x3,%edi
  je     L34
  mov    -0x8(%rsp),%rdx
  xor    %r9d,%r9d
  nopl   0x0(%rax,%rax,1)
L523:
  movups %xmm0,(%rax,%r9,4)
  movups %xmm0,0x10(%rax,%r9,4)
  movups %xmm0,0x20(%rax,%r9,4)
  movups %xmm0,0x30(%rax,%r9,4)
  movups %xmm3,(%rsi,%r9,1)
  movups %xmm2,(%rcx,%r9,1)
  add    $0x10,%r9
  cmp    %r9,%rdx
  jne    L523
  mov    -0x18(%rsp),%rbx
  mov    %rdx,-0x8(%rsp)
  mov    -0x1c(%rsp),%edx
  lea    (%rax,%rbx,1),%r12
  mov    -0x10(%rsp),%rbx
  lea    (%rsi,%rbx,1),%rbp
  add    %rcx,%rbx
  cmp    %edx,-0x34(%rsp)
  je     L412
  mov    %edx,%r10d
  mov    %edx,%r11d
L526:
  mov    -0x34(%rsp),%r14d
  sub    %r10d,%r14d
  lea    -0x1(%r14),%r9d
  cmp    $0x1,%r9d
  jbe    L212
  mov    %r10,%r9
  shl    $0x4,%r9
  add    %rax,%r9
  movq   %xmm1,(%r9)
  movq   %xmm1,0x8(%r9)
  movq   %xmm1,0x10(%r9)
  movq   %xmm1,0x18(%r9)
  movq   %xmm5,(%rsi,%r10,4)
  movq   %xmm4,(%rcx,%r10,4)
  mov    %r14d,%r10d
  and    $0xfffffffe,%r10d
  mov    %r10d,%r9d
  add    %r10d,%r11d
  mov    %r9,%rdx
  shl    $0x2,%r9
  shl    $0x4,%rdx
  add    %r9,%rbp
  add    %r9,%rbx
  add    %rdx,%r12
  cmp    %r10d,%r14d
  je     L412
L212:
  add    $0x1,%r11d
  movups %xmm0,(%r12)
  movl   $0x5b,0x0(%rbp)
  movl   $0xf0,(%rbx)
  cmp    %edi,%r11d
  jge    L412
  movups %xmm0,0x10(%r12)
  movl   $0x5b,0x4(%rbp)
  movl   $0xf0,0x4(%rbx)
L412:
  add    -0x30(%rsp),%rax
  add    %r15,%rsi
  add    %r15,%rcx
L206:
  add    $0x1,%r13d
  cmp    -0x20(%rsp),%r13d
  jl     L135
  movdqa D11(%rip),%xmm0
  xor    %r13d,%r13d
  movq   D11(%rip),%xmm1
  movdqa D61(%rip),%xmm3
  movdqa D180(%rip),%xmm2
  movq   D61(%rip),%xmm5
  movq   D180(%rip),%xmm4
  nopl   0x0(%rax)
L264:
  cmpl   $0x1,-0x38(%rsp)
  jle    L158
  mov    -0x28(%rsp),%rbx
  lea    (%rsi,%r8,1),%r9
  cmp    %r9,%rax
  lea    (%rax,%rbx,1),%r11
  setae  %r10b
  cmp    %r11,%rsi
  setae  %r9b
  or     %r9d,%r10d
  lea    (%rcx,%r8,1),%r9
  cmp    %r9,%rax
  setae  %r9b
  cmp    %r11,%rcx
  setae  %r11b
  or     %r11d,%r9d
  and    %r10d,%r9d
  cmpl   $0x5,-0x38(%rsp)
  setg   %r10b
  test   %r10b,%r9b
  je     L317
  lea    0x4(%rsi),%r10
  mov    %rcx,%r9
  sub    %r10,%r9
  cmp    $0x8,%r9
  jbe    L317
  cmp    $0x3,%edi
  je     L433
  mov    -0x8(%rsp),%rdx
  xor    %r9d,%r9d
  nopl   0x0(%rax,%rax,1)
L58:
  movups %xmm0,(%rax,%r9,4)
  movups %xmm0,0x10(%rax,%r9,4)
  movups %xmm0,0x20(%rax,%r9,4)
  movups %xmm0,0x30(%rax,%r9,4)
  movups %xmm3,(%rsi,%r9,1)
  movups %xmm2,(%rcx,%r9,1)
  add    $0x10,%r9
  cmp    %r9,%rdx
  jne    L58
  mov    -0x18(%rsp),%rbx
  mov    %rdx,-0x8(%rsp)
  mov    -0x1c(%rsp),%edx
  lea    (%rax,%rbx,1),%r12
  mov    -0x10(%rsp),%rbx
  lea    (%rsi,%rbx,1),%rbp
  add    %rcx,%rbx
  cmp    %edx,-0x34(%rsp)
  je     L310
  mov    %edx,%r10d
  mov    %edx,%r11d
L269:
  mov    -0x34(%rsp),%r14d
  sub    %r10d,%r14d
  lea    -0x1(%r14),%r9d
  cmp    $0x1,%r9d
  jbe    L329
  mov    %r10,%r9
  shl    $0x4,%r9
  add    %rax,%r9
  movq   %xmm1,(%r9)
  movq   %xmm1,0x8(%r9)
  movq   %xmm1,0x10(%r9)
  movq   %xmm1,0x18(%r9)
  movq   %xmm5,(%rsi,%r10,4)
  movq   %xmm4,(%rcx,%r10,4)
  mov    %r14d,%r10d
  and    $0xfffffffe,%r10d
  mov    %r10d,%r9d
  add    %r10d,%r11d
  mov    %r9,%rdx
  shl    $0x2,%r9
  shl    $0x4,%rdx
  add    %r9,%rbp
  add    %r9,%rbx
  add    %rdx,%r12
  cmp    %r10d,%r14d
  je     L310
L329:
  add    $0x1,%r11d
  movups %xmm0,(%r12)
  movl   $0x37,0x0(%rbp)
  movl   $0x23,(%rbx)
  cmp    %r11d,%edi
  jle    L310
  movups %xmm0,0x10(%r12)
  movl   $0x37,0x4(%rbp)
  movl   $0x23,0x4(%rbx)
L310:
  add    -0x30(%rsp),%rax
  add    %r15,%rsi
  add    %r15,%rcx
L158:
  add    $0x1,%r13d
  cmp    -0x20(%rsp),%r13d
  jl     L264
  movdqa D102(%rip),%xmm0
  xor    %r13d,%r13d
  movq   D102(%rip),%xmm1
  movdqa D134(%rip),%xmm3
  movdqa D154(%rip),%xmm2
  movq   D134(%rip),%xmm5
  movq   D154(%rip),%xmm4
  nopl   0x0(%rax)
L332:
  cmpl   $0x1,-0x38(%rsp)
  jle    L163
  mov    -0x28(%rsp),%rbx
  lea    (%rsi,%r8,1),%r9
  cmp    %r9,%rax
  lea    (%rax,%rbx,1),%r11
  setae  %r10b
  cmp    %r11,%rsi
  setae  %r9b
  or     %r9d,%r10d
  lea    (%rcx,%r8,1),%r9
  cmp    %r9,%rax
  setae  %r9b
  cmp    %r11,%rcx
  setae  %r11b
  or     %r11d,%r9d
  and    %r10d,%r9d
  cmpl   $0x5,-0x38(%rsp)
  setg   %r10b
  test   %r10b,%r9b
  je     L266
  lea    0x4(%rsi),%r10
  mov    %rcx,%r9
  sub    %r10,%r9
  cmp    $0x8,%r9
  jbe    L266
  cmp    $0x3,%edi
  je     L356
  mov    -0x8(%rsp),%rdx
  xor    %r9d,%r9d
  nopl   0x0(%rax,%rax,1)
L97:
  movups %xmm0,(%rax,%r9,4)
  movups %xmm0,0x10(%rax,%r9,4)
  movups %xmm0,0x20(%rax,%r9,4)
  movups %xmm0,0x30(%rax,%r9,4)
  movups %xmm3,(%rsi,%r9,1)
  movups %xmm2,(%rcx,%r9,1)
  add    $0x10,%r9
  cmp    %r9,%rdx
  jne    L97
  mov    -0x10(%rsp),%rbx
  mov    %rdx,-0x8(%rsp)
  mov    -0x18(%rsp),%rdx
  lea    (%rsi,%rbx,1),%rbp
  add    %rcx,%rbx
  lea    (%rax,%rdx,1),%r12
  mov    -0x1c(%rsp),%edx
  cmp    %edx,-0x34(%rsp)
  je     L320
  mov    %edx,%r10d
  mov    %edx,%r11d
L33:
  mov    -0x34(%rsp),%r14d
  sub    %r10d,%r14d
  lea    -0x1(%r14),%r9d
  cmp    $0x1,%r9d
  jbe    L315
  mov    %r10,%r9
  shl    $0x4,%r9
  add    %rax,%r9
  movq   %xmm1,(%r9)
  movq   %xmm1,0x8(%r9)
  movq   %xmm1,0x10(%r9)
  movq   %xmm1,0x18(%r9)
  movq   %xmm5,(%rsi,%r10,4)
  movq   %xmm4,(%rcx,%r10,4)
  mov    %r14d,%r10d
  and    $0xfffffffe,%r10d
  mov    %r10d,%r9d
  add    %r10d,%r11d
  mov    %r9,%rdx
  shl    $0x2,%r9
  shl    $0x4,%rdx
  add    %r9,%rbp
  add    %r9,%rbx
  add    %rdx,%r12
  cmp    %r10d,%r14d
  je     L320
L315:
  add    $0x1,%r11d
  movups %xmm0,(%r12)
  movl   $0xf0,0x0(%rbp)
  movl   $0x6f,(%rbx)
  cmp    %r11d,%edi
  jle    L320
  movups %xmm0,0x10(%r12)
  movl   $0xf0,0x4(%rbp)
  movl   $0x6f,0x4(%rbx)
L320:
  add    -0x30(%rsp),%rax
  add    %r15,%rsi
  add    %r15,%rcx
L163:
  add    $0x1,%r13d
  cmp    -0x20(%rsp),%r13d
  jl     L332
  xor    %r14d,%r14d
  cmpl   $0x1,-0x38(%rsp)
  jle    L386
  movdqa D167(%rip),%xmm0
  movdqa D119(%rip),%xmm1
  movq   D167(%rip),%xmm2
  movq   D119(%rip),%xmm3
  nopl   0x0(%rax)
L410:
  mov    -0x28(%rsp),%rbx
  lea    (%rsi,%r8,1),%r9
  cmp    %r9,%rax
  lea    (%rax,%rbx,1),%r11
  setae  %r10b
  cmp    %rsi,%r11
  setbe  %r9b
  or     %r9d,%r10d
  lea    (%rcx,%r8,1),%r9
  cmp    %r9,%rax
  setae  %r9b
  cmp    %rcx,%r11
  setbe  %r11b
  or     %r11d,%r9d
  and    %r10d,%r9d
  cmpl   $0x5,-0x38(%rsp)
  setg   %r10b
  test   %r10b,%r9b
  je     L164
  lea    0x4(%rsi),%r10
  mov    %rcx,%r9
  sub    %r10,%r9
  cmp    $0x8,%r9
  jbe    L164
  cmp    $0x3,%edi
  je     L194
  mov    -0x8(%rsp),%rdx
  xor    %r9d,%r9d
  nopl   (%rax)
L296:
  movups %xmm0,(%rax,%r9,4)
  movups %xmm0,0x10(%rax,%r9,4)
  movups %xmm0,0x20(%rax,%r9,4)
  movups %xmm0,0x30(%rax,%r9,4)
  movups %xmm1,(%rsi,%r9,1)
  movups %xmm1,(%rcx,%r9,1)
  add    $0x10,%r9
  cmp    %r9,%rdx
  jne    L296
  mov    -0x18(%rsp),%rbx
  mov    %rdx,-0x8(%rsp)
  mov    -0x1c(%rsp),%edx
  lea    (%rax,%rbx,1),%r12
  mov    -0x10(%rsp),%rbx
  lea    (%rsi,%rbx,1),%rbp
  add    %rcx,%rbx
  cmp    %edx,-0x34(%rsp)
  je     L429
  mov    %edx,%r10d
  mov    %edx,%r11d
L146:
  mov    -0x34(%rsp),%r13d
  sub    %r10d,%r13d
  lea    -0x1(%r13),%r9d
  cmp    $0x1,%r9d
  jbe    L72
  mov    %r10,%r9
  shl    $0x4,%r9
  add    %rax,%r9
  movq   %xmm2,(%r9)
  movq   %xmm2,0x8(%r9)
  movq   %xmm2,0x10(%r9)
  movq   %xmm2,0x18(%r9)
  movq   %xmm3,(%rsi,%r10,4)
  movq   %xmm3,(%rcx,%r10,4)
  mov    %r13d,%r10d
  and    $0xfffffffe,%r10d
  mov    %r10d,%r9d
  add    %r10d,%r11d
  mov    %r9,%rdx
  shl    $0x2,%r9
  shl    $0x4,%rdx
  add    %r9,%rbp
  add    %r9,%rbx
  add    %rdx,%r12
  cmp    %r10d,%r13d
  je     L429
L72:
  add    $0x1,%r11d
  movups %xmm0,(%r12)
  movl   $0x80,0x0(%rbp)
  movl   $0x80,(%rbx)
  cmp    %r11d,%edi
  jle    L429
  movups %xmm0,0x10(%r12)
  movl   $0x80,0x4(%rbp)
  movl   $0x80,0x4(%rbx)
L429:
  add    -0x30(%rsp),%rax
  add    %r15,%rsi
  add    %r15,%rcx
  add    $0x1,%r14d
  cmp    -0x20(%rsp),%r14d
  jl     L410
L386:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L164:
  mov    -0x8(%rsp),%rdx
  xor    %r9d,%r9d
  nopl   0x0(%rax,%rax,1)
L95:
  mov    %r9,%r10
  shl    $0x4,%r10
  movups %xmm0,(%rax,%r10,1)
  movl   $0x80,(%rsi,%r9,4)
  movl   $0x80,(%rcx,%r9,4)
  add    $0x1,%r9
  cmp    %r9d,%edi
  jg     L95
  mov    %rdx,-0x8(%rsp)
  jmp    L429
  nopl   0x0(%rax)
L266:
  mov    -0x8(%rsp),%rdx
  xor    %r9d,%r9d
  nopl   0x0(%rax,%rax,1)
L349:
  mov    %r9,%r10
  shl    $0x4,%r10
  movups %xmm0,(%rax,%r10,1)
  movl   $0xf0,(%rsi,%r9,4)
  movl   $0x6f,(%rcx,%r9,4)
  add    $0x1,%r9
  cmp    %r9d,%edi
  jg     L349
  mov    %rdx,-0x8(%rsp)
  jmp    L320
  nop
L317:
  mov    -0x8(%rsp),%rdx
  xor    %r9d,%r9d
  nopl   0x0(%rax,%rax,1)
L111:
  mov    %r9,%r10
  shl    $0x4,%r10
  movups %xmm0,(%rax,%r10,1)
  movl   $0x37,(%rsi,%r9,4)
  movl   $0x23,(%rcx,%r9,4)
  add    $0x1,%r9
  cmp    %r9d,%edi
  jg     L111
  mov    %rdx,-0x8(%rsp)
  jmp    L310
  nop
L108:
  mov    -0x8(%rsp),%rdx
  xor    %r9d,%r9d
  nopl   0x0(%rax,%rax,1)
L180:
  mov    %r9,%r10
  shl    $0x4,%r10
  movups %xmm0,(%rax,%r10,1)
  movl   $0x5b,(%rsi,%r9,4)
  movl   $0xf0,(%rcx,%r9,4)
  add    $0x1,%r9
  cmp    %r9d,%edi
  jg     L180
  mov    %rdx,-0x8(%rsp)
  jmp    L412
L433:
  mov    %rcx,%rbx
  mov    %rsi,%rbp
  mov    %rax,%r12
  xor    %r10d,%r10d
  xor    %r11d,%r11d
  jmp    L269
L34:
  mov    %rcx,%rbx
  mov    %rsi,%rbp
  mov    %rax,%r12
  xor    %r10d,%r10d
  xor    %r11d,%r11d
  jmp    L526
L194:
  mov    %rcx,%rbx
  mov    %rsi,%rbp
  mov    %rax,%r12
  xor    %r10d,%r10d
  xor    %r11d,%r11d
  jmp    L146
L356:
  mov    %rcx,%rbx
  mov    %rsi,%rbp
  mov    %rax,%r12
  xor    %r10d,%r10d
  xor    %r11d,%r11d
  jmp    L33
```

tool_calls: name: disassemble_data
arguments: label: D171
datatype: byte[16]
name: disassemble_data
arguments: label: D132
datatype: byte[16]
name: disassemble_data
arguments: label: D134
datatype: byte[16]
name: disassemble_data
arguments: label: D11
datatype: byte[16]
name: disassemble_data
arguments: label: D61
datatype: byte[16]
name: disassemble_data
arguments: label: D180
datatype: byte[16]
name: disassemble_data
arguments: label: D102
datatype: byte[16]
name: disassemble_data
arguments: label: D154
datatype: byte[16]
name: disassemble_data
arguments: label: D167
datatype: byte[16]
name: disassemble_data
arguments: label: D119
datatype: byte[16]

tool: {"D171": [0x52,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x52,0x00,0x00,0x00,0x52,0x00,0x00,0x00]}

tool: {"D132": [0x5b,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x5b,0x00,0x00,0x00,0x5b,0x00,0x00,0x00]}

tool: {"D134": [0xf0,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xf0,0x00,0x00,0x00]}

tool: {"D11": [0x91,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x91,0x00,0x00,0x00,0x91,0x00,0x00,0x00]}

tool: {"D61": [0x37,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x37,0x00,0x00,0x00,0x37,0x00,0x00,0x00]}

tool: {"D180": [0x23,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x23,0x00,0x00,0x00]}

tool: {"D102": [0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x29,0x00,0x00,0x00]}

tool: {"D154": [0x6f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00,0x6f,0x00,0x00,0x00]}

tool: {"D167": [0xeb,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xeb,0x00,0x00,0x00,0xeb,0x00,0x00,0x00]}

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

assistant: ```c
void FillImage420(unsigned char *image, int width, int height) {
  uint8_t *pY = (uint8_t *)(image);
  uint8_t *pU = (uint8_t *)(image + width * height);
  uint8_t *pV = (uint8_t *)(image + width * height * 5 / 4);
  int y, x;
  for (y = 0; y < height / 8; y++) {
    for (x = 0; x < width / 2; x++) {
      *pY++ = 0x52;
      *pY++ = 0x52;
      *pY++ = 0x52;
      *pY++ = 0x52;
      *pU++ = 0x5b;
      *pV++ = 0xf0;
    }
  }
  for (y = 0; y < height / 8; y++) {
    for (x = 0; x < width / 2; x++) {
      *pY++ = 0x91;
      *pY++ = 0x91;
      *pY++ = 0x91;
      *pY++ = 0x91;
      *pU++ = 0x37;
      *pV++ = 0x23;
    }
  }
  for (y = 0; y < height / 8; y++) {
    for (x = 0; x < width / 2; x++) {
      *pY++ = 0x29;
      *pY++ = 0x29;
      *pY++ = 0x29;
      *pY++ = 0x29;
      *pU++ = 0xf0;
      *pV++ = 0x6f;
    }
  }
  for (y = 0; y < height / 8; y++) {
    for (x = 0; x < width / 2; x++) {
      *pY++ = 0xeb;
      *pY++ = 0xeb;
      *pY++ = 0xeb;
      *pY++ = 0xeb;
      *pU++ = 0x80;
      *pV++ = 0x80;
    }
  }
}
```