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

```asm
<c_constTimeEq>:
  endbr64
  mov    %rdi,%rcx
  test   %edx,%edx
  jle    L45
  lea    -0x1(%rdx),%eax
  cmp    $0xe,%eax
  jbe    L151
  mov    %edx,%edi
  pxor   %xmm2,%xmm2
  pxor   %xmm6,%xmm6
  xor    %eax,%eax
  shr    $0x4,%edi
  pxor   %xmm4,%xmm4
  shl    $0x4,%rdi
  nopw   0x0(%rax,%rax,1)
L185:
  movdqu (%rcx,%rax,1),%xmm0
  movdqu (%rsi,%rax,1),%xmm7
  movdqa %xmm6,%xmm3
  add    $0x10,%rax
  pxor   %xmm7,%xmm0
  pcmpgtb %xmm0,%xmm3
  movdqa %xmm0,%xmm1
  punpcklbw %xmm3,%xmm1
  punpckhbw %xmm3,%xmm0
  movdqa %xmm4,%xmm3
  pcmpgtw %xmm0,%xmm3
  movdqa %xmm0,%xmm5
  punpcklwd %xmm3,%xmm5
  punpckhwd %xmm3,%xmm0
  movdqa %xmm4,%xmm3
  pcmpgtw %xmm1,%xmm3
  por    %xmm5,%xmm0
  movdqa %xmm1,%xmm5
  punpcklwd %xmm3,%xmm5
  punpckhwd %xmm3,%xmm1
  por    %xmm5,%xmm1
  por    %xmm1,%xmm0
  por    %xmm0,%xmm2
  cmp    %rdi,%rax
  jne    L185
  movdqa %xmm2,%xmm0
  mov    %edx,%edi
  psrldq $0x8,%xmm0
  and    $0xfffffff0,%edi
  por    %xmm0,%xmm2
  movdqa %xmm2,%xmm0
  psrldq $0x4,%xmm0
  por    %xmm0,%xmm2
  movd   %xmm2,%eax
  test   $0xf,%dl
  je     L91
L136:
  movslq %edi,%r9
  movzbl (%rcx,%r9,1),%r8d
  xor    (%rsi,%r9,1),%r8b
  movsbl %r8b,%r8d
  or     %r8d,%eax
  lea    0x1(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0x2(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0x3(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0x4(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0x5(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0x6(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0x7(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0x8(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0x9(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0xa(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0xb(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0xc(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  lea    0xd(%rdi),%r8d
  cmp    %r8d,%edx
  jle    L183
  movslq %r8d,%r8
  add    $0xe,%edi
  movzbl (%rcx,%r8,1),%r9d
  xor    (%rsi,%r8,1),%r9b
  movsbl %r9b,%r8d
  or     %r8d,%eax
  cmp    %edi,%edx
  jle    L183
  movslq %edi,%rdi
  movzbl (%rsi,%rdi,1),%edx
  xor    (%rcx,%rdi,1),%dl
  movsbl %dl,%edx
  or     %edx,%eax
  ret
  nopl   (%rax)
L45:
  xor    %eax,%eax
L183:
  ret
L151:
  xor    %edi,%edi
  xor    %eax,%eax
  jmp    L136
L91:
  ret
```

assistant: ```c
int c_constTimeEq(char *x, char *y, int length) {
  int ret = 0, i;
  for (i = 0; i < length; i++)
    ret = ret | x[i] ^ y[i];
  return ret;
}
```