user: Converte this assembly snippet into its equivalent C code:

```asm
<binarize>:
  endbr64
  mov    %edi,%edx
  mov    %rsi,%rcx
  test   %edi,%edi
  jle    L88
  lea    -0x1(%rdi),%eax
  cmp    $0xe,%eax
  jbe    L40
  mov    %rsi,%rax
  mov    %edi,%esi
  movdqa D9(%rip),%xmm2
  pxor   %xmm1,%xmm1
  shr    $0x4,%esi
  sub    $0x1,%esi
  shl    $0x4,%rsi
  lea    0x10(%rcx,%rsi,1),%rsi
  nopl   (%rax)
L102:
  movdqu (%rax),%xmm0
  add    $0x10,%rax
  psubusb %xmm2,%xmm0
  pcmpeqb %xmm1,%xmm0
  pcmpeqb %xmm1,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rsi,%rax
  jne    L102
  mov    %edx,%eax
  and    $0xfffffff0,%eax
  test   $0xf,%dl
  je     L98
L129:
  movslq %eax,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0x1(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0x2(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0x3(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0x4(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0x5(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0x6(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0x7(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0x8(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0x9(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0xa(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0xb(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0xc(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  neg    %edi
  mov    %dil,(%rsi)
  lea    0xd(%rax),%esi
  cmp    %esi,%edx
  jle    L88
  movslq %esi,%rsi
  add    %rcx,%rsi
  cmpb   $0xe1,(%rsi)
  seta   %dil
  add    $0xe,%eax
  neg    %edi
  mov    %dil,(%rsi)
  cmp    %eax,%edx
  jle    L88
  cltq
  add    %rax,%rcx
  cmpb   $0xe1,(%rcx)
  seta   %al
  neg    %eax
  mov    %al,(%rcx)
L88:
  ret
L40:
  xor    %eax,%eax
  jmp    L129
L98:
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D9
type: byte[16]

tool: {"D9": [0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1,0xe1]}

assistant: ```c
void binarize(int npixels, unsigned char *b) {
  int i;
  for (i = 0; i < npixels; i++)
    b[i] = (b[i] > 225 ? 0xff : 0);
}
```