user: What is the c source code of the assembly code below:

```asm
<__memchr>:
  endbr64
  mov    %rdi,%rax
  mov    %esi,%ecx
  test   %rdx,%rdx
  je     L280
  test   $0x7,%al
  je     L156
L261:
  cmp    %cl,(%rax)
  je     L215
  add    $0x1,%rax
  sub    $0x1,%rdx
  je     L173
  test   $0x7,%al
  jne    L261
L156:
  movzbl %sil,%esi
  mov    %esi,%edi
  shl    $0x8,%edi
  or     %edi,%esi
  movslq %esi,%rsi
  mov    %rsi,%r10
  shl    $0x10,%r10
  or     %rsi,%r10
  mov    D7(%rip),%rsi
  mov    (%rsi),%r8d
  sar    %r8d
  and    $0xfefefeff,%r8d
  cmp    $0x7,%rdx
  ja     L112
L42:
  test   %rdx,%rdx
  je     L143
  add    %rax,%rdx
  mov    %rax,%r9
L25:
  cmp    %cl,(%r9)
  je     L125
  add    $0x1,%r9
  cmp    %rdx,%r9
  jne    L25
  mov    $0x0,%r9d
  jmp    L125
L107:
  lea    -0x7(%rax),%r9
  jmp    L125
L146:
  lea    -0x6(%rax),%r9
  jmp    L125
L233:
  lea    -0x5(%rax),%r9
  jmp    L125
L2:
  lea    -0x4(%rax),%r9
  jmp    L125
L45:
  lea    -0x3(%rax),%r9
  jmp    L125
L147:
  lea    -0x2(%rax),%r9
  jmp    L125
L120:
  sub    $0x8,%rdx
  cmp    $0x7,%rdx
  jbe    L42
L112:
  mov    %rax,%r9
  add    $0x8,%rax
  mov    %r10,%rdi
  xor    -0x8(%rax),%rdi
  lea    (%r8,%rdi,1),%rsi
  xor    %rdi,%rsi
  or     %r8,%rsi
  cmp    $0xffffffffffffffff,%rsi
  je     L120
  cmp    %cl,-0x8(%rax)
  je     L125
  cmp    %cl,-0x7(%rax)
  je     L107
  cmp    %cl,-0x6(%rax)
  je     L146
  cmp    %cl,-0x5(%rax)
  je     L233
  cmp    %cl,-0x4(%rax)
  je     L2
  cmp    %cl,-0x3(%rax)
  je     L45
  cmp    %cl,-0x2(%rax)
  je     L147
  cmp    %cl,-0x1(%rax)
  jne    L120
  lea    -0x1(%rax),%r9
  jmp    L125
L280:
  mov    $0x0,%r9d
  jmp    L125
L215:
  mov    %rax,%r9
L125:
  mov    %r9,%rax
  ret
L173:
  mov    $0x0,%r9d
  jmp    L125
L143:
  mov    $0x0,%r9d
  jmp    L125
```

assistant: ```c
void *__memchr(void const *s, int c_in, size_t n) {
  const unsigned char *char_ptr;
  const unsigned long int *longword_ptr;
  unsigned long int longword, magic_bits, charmask;
  unsigned char c;
  int i;
  c = (unsigned char)c_in;
  for (char_ptr = (const unsigned char *)s; n > 0 && (size_t)char_ptr % sizeof longword != 0; --n, ++char_ptr)
    if (*char_ptr == c)
      return (void *)char_ptr;
  longword_ptr = (const unsigned long int *)char_ptr;
  magic_bits = 0xfefefefe;
  charmask = c | (c << 8);
  charmask |= charmask << 16;
  magic_bits = (ULONG_MAX >> 1) & (magic_bits | 1);
  while (n >= sizeof longword) {
    longword = *longword_ptr++ ^ charmask;
    if ((((longword + magic_bits) ^ ~longword) & ~magic_bits) != 0) {
      const unsigned char *cp = (const unsigned char *)(longword_ptr - 1);
      if (cp[0] == c)
        return (void *)cp;
      if (cp[1] == c)
        return (void *)&cp[1];
      if (cp[2] == c)
        return (void *)&cp[2];
      if (cp[3] == c)
        return (void *)&cp[3];
      if (4 < sizeof longword && cp[4] == c)
        return (void *)&cp[4];
      if (5 < sizeof longword && cp[5] == c)
        return (void *)&cp[5];
      if (6 < sizeof longword && cp[6] == c)
        return (void *)&cp[6];
      if (7 < sizeof longword && cp[7] == c)
        return (void *)&cp[7];
      if (8 < sizeof longword)
        for (i = 8; i < sizeof longword; i++)
          if (cp[i] == c)
            return (void *)&cp[i];
    }
    n -= sizeof longword;
  }
  char_ptr = (const unsigned char *)longword_ptr;
  while (n-- > 0) {
    if (*char_ptr == c)
      return (void *)char_ptr;
    else
      ++char_ptr;
  }
  return 0;
}
```