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

```asm
<out_u16be>:
  endbr64
  mov    %rsi,%rax
  test   %edx,%edx
  je     L48
  mov    %edx,%r9d
  mov    %edx,%r8d
  lea    -0x1(%rdx),%r11d
  push   %rbx
  lea    (%rdi,%r9,4),%rdx
  cmp    %rdx,%rsi
  lea    (%rsi,%r9,2),%rsi
  setae  %dl
  cmp    %rsi,%rdi
  setae  %sil
  or     %sil,%dl
  je     L85
  cmp    $0xe,%r11d
  jbe    L85
  mov    %r8d,%r10d
  movslq %ecx,%rbx
  mov    %rdi,%rdx
  mov    %rax,%rsi
  shr    $0x4,%r10d
  movdqa D13(%rip),%xmm4
  movq   %rbx,%xmm5
  movdqa D16(%rip),%xmm3
  sub    $0x1,%r10d
  shl    $0x6,%r10
  lea    0x40(%rdi,%r10,1),%r10
  nopl   0x0(%rax)
L143:
  movdqu (%rdx),%xmm0
  movdqu 0x10(%rdx),%xmm1
  add    $0x40,%rdx
  add    $0x20,%rsi
  psrad  %xmm5,%xmm1
  psrad  %xmm5,%xmm0
  movdqa %xmm0,%xmm2
  punpcklwd %xmm1,%xmm0
  punpckhwd %xmm1,%xmm2
  movdqa %xmm0,%xmm1
  punpckhwd %xmm2,%xmm1
  punpcklwd %xmm2,%xmm0
  movdqu -0x10(%rdx),%xmm2
  punpcklwd %xmm1,%xmm0
  movdqu -0x20(%rdx),%xmm1
  psrad  %xmm5,%xmm2
  paddw  %xmm4,%xmm0
  psrad  %xmm5,%xmm1
  movdqa %xmm1,%xmm6
  punpcklwd %xmm2,%xmm1
  punpckhwd %xmm2,%xmm6
  movdqa %xmm1,%xmm2
  punpckhwd %xmm6,%xmm2
  punpcklwd %xmm6,%xmm1
  punpcklwd %xmm2,%xmm1
  movdqa %xmm0,%xmm2
  pand   %xmm3,%xmm0
  paddw  %xmm4,%xmm1
  psraw  $0x8,%xmm2
  movdqa %xmm1,%xmm6
  pand   %xmm3,%xmm2
  pand   %xmm3,%xmm1
  psraw  $0x8,%xmm6
  packuswb %xmm1,%xmm0
  pand   %xmm3,%xmm6
  packuswb %xmm6,%xmm2
  movdqa %xmm2,%xmm1
  punpckhbw %xmm0,%xmm2
  punpcklbw %xmm0,%xmm1
  movups %xmm2,-0x10(%rsi)
  movups %xmm1,-0x20(%rsi)
  cmp    %rdx,%r10
  jne    L143
  mov    %r8d,%r10d
  and    $0xfffffff0,%r10d
  mov    %r10d,%edx
  lea    (%rdi,%rdx,4),%rdi
  lea    (%rax,%rdx,2),%rsi
  mov    %r11d,%edx
  sub    %r10d,%edx
  cmp    %r10d,%r8d
  je     L91
  mov    (%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,(%rsi)
  test   %edx,%edx
  je     L91
  mov    0x4(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x2(%rsi)
  cmp    $0x1,%edx
  je     L91
  mov    0x8(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x4(%rsi)
  cmp    $0x2,%edx
  je     L91
  mov    0xc(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x6(%rsi)
  cmp    $0x3,%edx
  je     L91
  mov    0x10(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x8(%rsi)
  cmp    $0x4,%edx
  je     L91
  mov    0x14(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0xa(%rsi)
  cmp    $0x5,%edx
  je     L91
  mov    0x18(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0xc(%rsi)
  cmp    $0x6,%edx
  je     L91
  mov    0x1c(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0xe(%rsi)
  cmp    $0x7,%edx
  je     L91
  mov    0x20(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x10(%rsi)
  cmp    $0x8,%edx
  je     L91
  mov    0x24(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x12(%rsi)
  cmp    $0x9,%edx
  je     L91
  mov    0x28(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x14(%rsi)
  cmp    $0xa,%edx
  je     L91
  mov    0x2c(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x16(%rsi)
  cmp    $0xb,%edx
  je     L91
  mov    0x30(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x18(%rsi)
  cmp    $0xc,%edx
  je     L91
  mov    0x34(%rdi),%r8d
  sar    %cl,%r8d
  add    $0x8000,%r8d
  rol    $0x8,%r8w
  mov    %r8w,0x1a(%rsi)
  cmp    $0xd,%edx
  je     L91
  mov    0x38(%rdi),%edx
  sar    %cl,%edx
  add    $0x8000,%edx
  rol    $0x8,%dx
  mov    %dx,0x1c(%rsi)
L91:
  lea    (%rax,%r9,2),%rax
  pop    %rbx
  ret
  nop
L85:
  xor    %esi,%esi
  nopw   0x0(%rax,%rax,1)
L186:
  mov    (%rdi,%rsi,4),%edx
  sar    %cl,%edx
  add    $0x8000,%edx
  mov    %dh,(%rax,%rsi,2)
  mov    %dl,0x1(%rax,%rsi,2)
  add    $0x1,%rsi
  cmp    %rsi,%r9
  jne    L186
  lea    (%rax,%r9,2),%rax
  pop    %rbx
  ret
  nopl   0x0(%rax)
L48:
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D13
type: byte[16]
name: disassemble_data
arguments: data_label: D16
type: byte[16]

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

tool: {"D16": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

assistant: ```c
unsigned char *out_u16be(int *src, unsigned char *dst, unsigned n, unsigned shift) {
  while (n--) {
    int val = (*src++ >> shift) + 0x8000;
    *dst++ = (val >> 8) & 0xFF;
    *dst++ = val & 0xFF;
  }
  return dst;
}
```