user: What would the C source look like for the assembly code provided here?

```asm
<equals>:
  endbr64
  mov    %rdi,%rcx
  lea    -0x1(%rdx),%rdi
  test   %rdx,%rdx
  je     L165
  cmp    $0xe,%rdi
  jbe    L4
  mov    %rdx,%r8
  pcmpeqd %xmm3,%xmm3
  pxor   %xmm4,%xmm4
  xor    %eax,%eax
  movdqa D4(%rip),%xmm6
  and    $0xfffffffffffffff0,%r8
  pxor   %xmm2,%xmm2
  nopl   0x0(%rax,%rax,1)
L27:
  movdqu (%rcx,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm7
  add    $0x10,%rax
  pcmpeqb %xmm7,%xmm0
  pand   %xmm6,%xmm0
  movdqa %xmm0,%xmm1
  punpckhbw %xmm4,%xmm0
  movdqa %xmm0,%xmm5
  punpcklbw %xmm4,%xmm1
  punpckhwd %xmm2,%xmm0
  punpcklwd %xmm2,%xmm5
  pand   %xmm5,%xmm0
  movdqa %xmm1,%xmm5
  punpckhwd %xmm2,%xmm1
  punpcklwd %xmm2,%xmm5
  pand   %xmm5,%xmm1
  pand   %xmm1,%xmm0
  pand   %xmm0,%xmm3
  cmp    %r8,%rax
  jne    L27
  movdqa %xmm3,%xmm0
  mov    %rdx,%r8
  psrldq $0x8,%xmm0
  and    $0xfffffffffffffff0,%r8
  pand   %xmm0,%xmm3
  add    %r8,%rcx
  add    %r8,%rsi
  sub    %r8,%rdi
  movdqa %xmm3,%xmm0
  psrldq $0x4,%xmm0
  pand   %xmm0,%xmm3
  movd   %xmm3,%eax
  and    $0x1,%eax
  cmp    %r8,%rdx
  je     L32
L14:
  movzbl (%rsi),%edx
  cmp    %dl,(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  test   %rdi,%rdi
  je     L147
  movzbl 0x1(%rsi),%edx
  cmp    %dl,0x1(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0x1,%rdi
  je     L147
  movzbl 0x2(%rsi),%edx
  cmp    %dl,0x2(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0x2,%rdi
  je     L147
  movzbl 0x3(%rsi),%edx
  cmp    %dl,0x3(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0x3,%rdi
  je     L147
  movzbl 0x4(%rsi),%edx
  cmp    %dl,0x4(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0x4,%rdi
  je     L147
  movzbl 0x5(%rsi),%edx
  cmp    %dl,0x5(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0x5,%rdi
  je     L147
  movzbl 0x6(%rsi),%edx
  cmp    %dl,0x6(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0x6,%rdi
  je     L147
  movzbl 0x7(%rsi),%edx
  cmp    %dl,0x7(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0x7,%rdi
  je     L147
  movzbl 0x8(%rsi),%edx
  cmp    %dl,0x8(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0x8,%rdi
  je     L147
  movzbl 0x9(%rsi),%edx
  cmp    %dl,0x9(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0x9,%rdi
  je     L147
  movzbl 0xa(%rsi),%edx
  cmp    %dl,0xa(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0xa,%rdi
  je     L147
  movzbl 0xb(%rsi),%edx
  cmp    %dl,0xb(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0xb,%rdi
  je     L147
  movzbl 0xc(%rsi),%edx
  cmp    %dl,0xc(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0xc,%rdi
  je     L147
  movzbl 0xd(%rsi),%edx
  cmp    %dl,0xd(%rcx)
  sete   %dl
  movzbl %dl,%edx
  and    %edx,%eax
  cmp    $0xd,%rdi
  je     L147
  movzbl 0xe(%rcx),%edi
  xor    %edx,%edx
  cmp    %dil,0xe(%rsi)
  sete   %dl
  and    %edx,%eax
  ret
L165:
  mov    $0x1,%eax
L147:
  ret
L4:
  mov    $0x1,%eax
  jmp    L14
L32:
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D4
type: byte[16]

tool: {"D4": [0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01]}

assistant: ```c
int equals(unsigned char *a, unsigned char *b, size_t len) {
  int result = 1;
  while (len--) {
    result &= (*a++ == *b++);
  }
  return result;
}
```