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

```asm
<fun_F>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %edi,-0x4(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x5(%rax),%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x4(%rbp),%eax
  and    $0xf8,%eax
  add    $0xffffff80,%eax
  cmp    $0x78,%eax
  ja     L167
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D25(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D25(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x0,%eax
  jmp    L400
  mov    $0xffffffff,%eax
  jmp    L400
  mov    $0x1,%eax
  jmp    L400
  mov    $0xfffffffe,%eax
  jmp    L400
  mov    $0x2,%eax
  jmp    L400
  mov    $0xfffffffd,%eax
  jmp    L400
  mov    $0x3,%eax
  jmp    L400
  mov    $0xfffffffc,%eax
  jmp    L400
  mov    $0x4,%eax
  jmp    L400
  mov    $0xfffffffb,%eax
  jmp    L400
  mov    $0x5,%eax
  jmp    L400
  mov    $0xfffffffa,%eax
  jmp    L400
  mov    $0x6,%eax
  jmp    L400
  mov    $0xfffffff9,%eax
  jmp    L400
  mov    $0x7,%eax
  jmp    L400
  mov    $0xfffffff8,%eax
  jmp    L400
L167:
  mov    -0x10(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x1(%rax),%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x4(%rbp),%eax
  and    $0xfc,%eax
  sub    $0x40,%eax
  cmp    $0x3c,%eax
  ja     L356
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D13(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D13(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x8,%eax
  jmp    L400
  mov    $0xfffffff7,%eax
  jmp    L400
  mov    $0x9,%eax
  jmp    L400
  mov    $0xfffffff6,%eax
  jmp    L400
  mov    $0xa,%eax
  jmp    L400
  mov    $0xfffffff5,%eax
  jmp    L400
  mov    $0xb,%eax
  jmp    L400
  mov    $0xfffffff4,%eax
  jmp    L400
  mov    $0xc,%eax
  jmp    L400
  mov    $0xfffffff3,%eax
  jmp    L400
  mov    $0xd,%eax
  jmp    L400
  mov    $0xfffffff2,%eax
  jmp    L400
  mov    $0xe,%eax
  jmp    L400
  mov    $0xfffffff1,%eax
  jmp    L400
  mov    $0xf,%eax
  jmp    L400
  mov    $0xfffffff0,%eax
  jmp    L400
L356:
  mov    -0x10(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x1(%rax),%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x4(%rbp),%eax
  and    $0xfe,%eax
  sub    $0x20,%eax
  cmp    $0xc,%eax
  ja     L308
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D23(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D23(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  mov    $0x10,%eax
  jmp    L400
  mov    $0xffffffef,%eax
  jmp    L400
  mov    $0x11,%eax
  jmp    L400
  mov    $0xffffffee,%eax
  jmp    L400
  mov    $0x12,%eax
  jmp    L400
  mov    $0xffffffed,%eax
  jmp    L400
  mov    $0x13,%eax
  jmp    L400
L308:
  mov    -0x10(%rbp),%rax
  mov    (%rax),%eax
  lea    0x7(%rax),%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  mov    $0xff,%eax
L400:
  pop    %rbp
  ret
```

assistant: ```c
int fun_F(int cur_byte, int *bitfill) {
  *bitfill -= 5;
  switch (cur_byte & 0xf8) {
  case 0x80:
    return 0;
  case 0x88:
    return -1;
  case 0x90:
    return 1;
  case 0x98:
    return -2;
  case 0xa0:
    return 2;
  case 0xa8:
    return -3;
  case 0xb0:
    return 3;
  case 0xb8:
    return -4;
  case 0xc0:
    return 4;
  case 0xc8:
    return -5;
  case 0xd0:
    return 5;
  case 0xd8:
    return -6;
  case 0xe0:
    return 6;
  case 0xe8:
    return -7;
  case 0xf0:
    return 7;
  case 0xf8:
    return -8;
  }
  *bitfill -= 1;
  switch (cur_byte & 0xfc) {
  case 0x40:
    return 8;
  case 0x44:
    return -9;
  case 0x48:
    return 9;
  case 0x4c:
    return -10;
  case 0x50:
    return 10;
  case 0x54:
    return -11;
  case 0x58:
    return 11;
  case 0x5c:
    return -12;
  case 0x60:
    return 12;
  case 0x64:
    return -13;
  case 0x68:
    return 13;
  case 0x6c:
    return -14;
  case 0x70:
    return 14;
  case 0x74:
    return -15;
  case 0x78:
    return 15;
  case 0x7c:
    return -16;
  }
  *bitfill -= 1;
  switch (cur_byte & 0xfe) {
  case 0x20:
    return 16;
  case 0x22:
    return -17;
  case 0x24:
    return 17;
  case 0x26:
    return -18;
  case 0x28:
    return 18;
  case 0x2a:
    return -19;
  case 0x2c:
    return 19;
  }
  *bitfill += 7;
  return 0xff;
}
```