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

```asm
<GB_ADDR>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,%eax
  mov    %al,-0x1c(%rbp)
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  js     L180
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x1f,%al
  ja     L346
  mov    -0x18(%rbp),%rax
  movb   $0x20,(%rax)
L346:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  sub    $0x20,%eax
  cltq
  mov    %rax,-0x8(%rbp)
  cmpb   $0x8,-0x1c(%rbp)
  jne    L79
  shlq   $0x3,-0x8(%rbp)
  jmp    L260
L79:
  cmpb   $0xc,-0x1c(%rbp)
  jne    L170
  mov    -0x8(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L260
L170:
  cmpb   $0x10,-0x1c(%rbp)
  jne    L325
  mov    -0x8(%rbp),%rax
  shl    $0x4,%rax
  add    $0x1a7fcc,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L260
L325:
  cmpb   $0x18,-0x1c(%rbp)
  jne    L40
  mov    -0x8(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  add    $0x1dff00,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L260
L40:
  cmpb   $0x20,-0x1c(%rbp)
  jne    L260
  mov    -0x8(%rbp),%rax
  shl    $0x6,%rax
  add    $0x1e5a50,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L260
L180:
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x9(%rbp)
  mov    -0x18(%rbp),%rax
  movzbl 0x1(%rax),%eax
  mov    %al,-0xa(%rbp)
  cmpb   $0xa0,-0x9(%rbp)
  jbe    L239
  cmpb   $0xab,-0x9(%rbp)
  ja     L239
  cmpb   $0xa0,-0xa(%rbp)
  ja     L216
L239:
  cmpb   $0xa7,-0x9(%rbp)
  jbe    L396
  cmpb   $0xa9,-0x9(%rbp)
  ja     L396
  cmpb   $0xa0,-0xa(%rbp)
  ja     L396
L216:
  cmpb   $0xa0,-0x9(%rbp)
  jbe    L432
  cmpb   $0xab,-0x9(%rbp)
  ja     L432
  cmpb   $0xa0,-0xa(%rbp)
  jbe    L432
  movzbl -0x9(%rbp),%eax
  sub    $0xa1,%eax
  imul   $0x5e,%eax,%edx
  movzbl -0xa(%rbp),%eax
  sub    $0xa1,%eax
  add    %edx,%eax
  cltq
  mov    %rax,-0x8(%rbp)
  jmp    L1
L432:
  movzbl -0xa(%rbp),%eax
  test   %al,%al
  jns    L95
  movzbl -0xa(%rbp),%eax
  sub    $0x1,%eax
  mov    %al,-0xa(%rbp)
L95:
  movzbl -0x9(%rbp),%eax
  lea    -0xa8(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x5,%eax
  mov    %eax,%edx
  movzbl -0xa(%rbp),%eax
  sub    $0x40,%eax
  add    %edx,%eax
  add    $0x34e,%eax
  cltq
  mov    %rax,-0x8(%rbp)
L1:
  cmpb   $0xc,-0x1c(%rbp)
  jne    L417
  mov    -0x8(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  jmp    L193
L417:
  cmpb   $0x10,-0x1c(%rbp)
  jne    L117
  mov    -0x8(%rbp),%rax
  add    $0x2fa6,%rax
  shl    $0x5,%rax
  jmp    L193
L117:
  cmpb   $0x18,-0x1c(%rbp)
  jne    L173
  mov    -0x8(%rbp),%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    $0xde5c0,%rax
  jmp    L193
L173:
  cmpb   $0x20,-0x1c(%rbp)
  jne    L195
  mov    -0x8(%rbp),%rax
  add    $0x1dbe,%rax
  shl    $0x7,%rax
  jmp    L193
L195:
  mov    $0x0,%eax
  jmp    L193
L396:
  cmpb   $0xaf,-0x9(%rbp)
  jbe    L76
  cmpb   $0xf7,-0x9(%rbp)
  ja     L76
  cmpb   $0xa0,-0xa(%rbp)
  jbe    L76
  movzbl -0x9(%rbp),%eax
  sub    $0xb0,%eax
  imul   $0x5e,%eax,%edx
  movzbl -0xa(%rbp),%eax
  sub    $0xa1,%eax
  add    %edx,%eax
  cltq
  mov    %rax,-0x8(%rbp)
L76:
  cmpb   $0xc,-0x1c(%rbp)
  jne    L218
  mov    -0x8(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    $0x3e10,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L260
L218:
  cmpb   $0x10,-0x1c(%rbp)
  jne    L151
  mov    -0x8(%rbp),%rax
  add    $0x323c,%rax
  shl    $0x5,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L260
L151:
  cmpb   $0x18,-0x1c(%rbp)
  jne    L103
  mov    -0x8(%rbp),%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    $0xe9ff0,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L260
L103:
  cmpb   $0x20,-0x1c(%rbp)
  jne    L9
  mov    -0x8(%rbp),%rax
  add    $0x2054,%rax
  shl    $0x7,%rax
  mov    %rax,-0x8(%rbp)
  jmp    L260
L9:
  mov    $0x0,%eax
  jmp    L193
L260:
  mov    -0x8(%rbp),%rax
L193:
  pop    %rbp
  ret
```

assistant: ```c
unsigned long GB_ADDR(unsigned char *HZ, unsigned char HZ_type) {
  unsigned long temp;
  unsigned char c1, c2;
  if (HZ[0] < 0x80) {
    if (HZ[0] < ' ')
      HZ[0] = ' ';
    temp = HZ[0] - ' ';
    if (HZ_type == 8)
      temp = temp * 8 + 0x00;
    else if (HZ_type == 12)
      temp = temp * 12 + 0x00;
    else if (HZ_type == 16)
      temp = temp * 16 + 0x1A7FCC;
    else if (HZ_type == 24)
      temp = temp * 48 + 0x1DFF00;
    else if (HZ_type == 32)
      temp = temp * 64 + 0x1E5A50;
  } else {
    c1 = HZ[0];
    c2 = HZ[1];
    if ((c1 >= 0xA1 && c1 <= 0xAB && c2 >= 0xa1) || (c1 >= 0xa8 && c1 <= 0xa9 && c2 < 0xa1)) {
      if (c1 >= 0xA1 && c1 <= 0xAB && c2 >= 0xa1)
        temp = (c1 - 0xA1) * 94 + (c2 - 0xA1);
      else {
        if (c2 > 0x7f)
          c2--;
        temp = (c1 - 0xa8) * 96 + (c2 - 0x40) + 846;
      }
      if (HZ_type == 12)
        return (temp * 24 + 0x0000);
      else if (HZ_type == 16)
        return (temp * 32 + 0x5F4C0);
      else if (HZ_type == 24)
        return (temp * 72 + 0xDE5C0);
      else if (HZ_type == 32)
        return (temp * 128 + 0xEDF00);
      else
        return (0x00);
    } else if (c1 >= 0xb0 && c1 <= 0xf7 && c2 >= 0xa1) {
      temp = (c1 - 0xB0) * 94 + (c2 - 0xA1);
    }
    if (HZ_type == 12)
      temp = (temp + 846 - 184) * 24 + 0x0000;
    else if (HZ_type == 16)
      temp = (temp + 846 - 184) * 32 + 0x5F4C0;
    else if (HZ_type == 24)
      temp = (temp + 846 - 184) * 72 + 0xDE5C0;
    else if (HZ_type == 32)
      temp = (temp + 846 - 184) * 128 + 0xEDF00;
    else
      return (0x00);
  }
  return temp;
}
```