user: 下面的汇编指令对应的C源代码是什么：

```asm
<rl_internal_bitpos>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x48(%rbp)
  mov    %rsi,-0x50(%rbp)
  mov    %edx,-0x54(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x18(%rbp)
  cmpl   $0x0,-0x54(%rbp)
  jne    L100
  mov    D19(%rip),%rax
  mov    (%rax),%rax
  jmp    L6
L100:
  mov    $0x0,%eax
L6:
  mov    %rax,-0x8(%rbp)
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  jmp    L20
L196:
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  cmp    %rax,-0x8(%rbp)
  jne    L37
  addq   $0x1,-0x30(%rbp)
  subq   $0x1,-0x50(%rbp)
  addq   $0x8,-0x18(%rbp)
L20:
  mov    -0x30(%rbp),%rax
  and    $0x7,%eax
  test   %rax,%rax
  je     L157
  cmpq   $0x0,-0x50(%rbp)
  jne    L196
  jmp    L157
L37:
  nop
L157:
  cmpl   $0x0,-0x54(%rbp)
  jne    L145
  mov    D16(%rip),%rax
  mov    (%rax),%rax
  jmp    L223
L145:
  mov    $0x0,%eax
L223:
  mov    %rax,-0x8(%rbp)
  mov    -0x30(%rbp),%rax
  mov    %rax,-0x38(%rbp)
  jmp    L213
L200:
  mov    -0x38(%rbp),%rax
  mov    (%rax),%rax
  cmp    %rax,-0x8(%rbp)
  jne    L202
  addq   $0x8,-0x38(%rbp)
  subq   $0x8,-0x50(%rbp)
  mov    -0x18(%rbp),%rax
  add    $0x40,%rax
  mov    %rax,-0x18(%rbp)
L213:
  cmpq   $0x7,-0x50(%rbp)
  ja     L200
  jmp    L32
L202:
  nop
L32:
  mov    -0x38(%rbp),%rax
  mov    %rax,-0x30(%rbp)
  movq   $0x0,-0x10(%rbp)
  jmp    L120
L82:
  shlq   $0x8,-0x28(%rbp)
  cmpq   $0x0,-0x50(%rbp)
  je     L217
  mov    -0x30(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  or     %rax,-0x28(%rbp)
  addq   $0x1,-0x30(%rbp)
  subq   $0x1,-0x50(%rbp)
L217:
  addq   $0x1,-0x10(%rbp)
L120:
  cmpq   $0x7,-0x10(%rbp)
  jbe    L82
  cmpl   $0x1,-0x54(%rbp)
  jne    L55
  cmpq   $0x0,-0x28(%rbp)
  jne    L55
  mov    $0xffffffffffffffff,%rax
  jmp    L51
L55:
  mov    D16(%rip),%rax
  mov    (%rax),%rax
  mov    %rax,-0x20(%rbp)
  shrq   -0x20(%rbp)
  notq   -0x20(%rbp)
  jmp    L7
L215:
  mov    -0x20(%rbp),%rax
  and    -0x28(%rbp),%rax
  test   %rax,%rax
  setne  %al
  movzbl %al,%eax
  cmp    %eax,-0x54(%rbp)
  jne    L129
  mov    -0x18(%rbp),%rax
  jmp    L51
L129:
  addq   $0x1,-0x18(%rbp)
  shrq   -0x20(%rbp)
L7:
  cmpq   $0x0,-0x20(%rbp)
  jne    L215
  mov    $0xfffffffffffffffe,%rax
L51:
  pop    %rbp
  ret
```

assistant: ```c
long rl_internal_bitpos(void *s, unsigned long count, int bit) {
  unsigned long *l;
  unsigned char *c;
  unsigned long skipval, word = 0, one;
  long pos = 0;
  unsigned long j;
  skipval = bit ? 0 : UCHAR_MAX;
  c = (unsigned char *)s;
  while ((unsigned long)c & (sizeof(*l) - 1) && count) {
    if (*c != skipval)
      break;
    c++;
    count--;
    pos += 8;
  }
  skipval = bit ? 0 : ULONG_MAX;
  l = (unsigned long *)c;
  while (count >= sizeof(*l)) {
    if (*l != skipval)
      break;
    l++;
    count -= sizeof(*l);
    pos += sizeof(*l) * 8;
  }
  c = (unsigned char *)l;
  for (j = 0; j < sizeof(*l); j++) {
    word <<= 8;
    if (count) {
      word |= *c;
      c++;
      count--;
    }
  }
  if (bit == 1 && word == 0)
    return -1;
  one = ULONG_MAX;
  one >>= 1;
  one = ~one;
  while (one) {
    if (((one & word) != 0) == bit)
      return pos;
    pos++;
    one >>= 1;
  }
  return -2;
}
```