user: Please show me the C implementation that matches the assembly code listed below:

```asm
<krocllvm_typestr>:
  endbr64
  sub    $0x8,%rsp
  test   %edi,%edi
  je     L76
  test   $0x1000,%edi
  jne    L104
  test   $0x2000,%edi
  je     L105
  mov    %edi,%eax
  and    $0xfff,%eax
  cmp    $0x20,%eax
  je     L88
  cmp    $0x40,%eax
  je     L68
  cmp    $0x80,%eax
  je     L69
  mov    %edi,%ecx
  mov    $0x1c2,%edx
  lea    D1(%rip),%rsi
  lea    D97(%rip),%rdi
  call   <nocc_pinternal@plt>
  jmp    L28
L76:
  movslq D13(%rip),%rax
  lea    D124(%rip),%rdx
  add    %rdx,%rax
  movl   $0x64696f76,(%rax)
  movb   $0x0,0x4(%rax)
L28:
  mov    D13(%rip),%eax
  mov    $0x8,%edx
  sub    %eax,%edx
  mov    %edx,D9(%rip)
  cltq
  lea    D124(%rip),%rdx
  add    %rdx,%rax
  add    $0x8,%rsp
  ret
L104:
  mov    %edi,%edx
  and    $0xfff,%edx
  movslq D9(%rip),%rdi
  lea    D124(%rip),%rax
  add    %rax,%rdi
  lea    D9(%rip),%rsi
  mov    $0x0,%eax
  call   <sprintf@plt>
  jmp    L28
L88:
  movslq D9(%rip),%rax
  lea    D124(%rip),%rdx
  add    %rdx,%rax
  movl   $0x616f6c66,(%rax)
  movw   $0x74,0x4(%rax)
  jmp    L28
L68:
  movslq D9(%rip),%rax
  lea    D124(%rip),%rdx
  add    %rdx,%rax
  movl   $0x62756f64,(%rax)
  movw   $0x656c,0x4(%rax)
  movb   $0x0,0x6(%rax)
  jmp    L28
L69:
  movslq D9(%rip),%rax
  lea    D124(%rip),%rdx
  add    %rdx,%rax
  movl   $0x32317066,(%rax)
  movw   $0x38,0x4(%rax)
  jmp    L28
L105:
  mov    %edi,%ecx
  mov    $0x1c5,%edx
  lea    D1(%rip),%rsi
  lea    D148(%rip),%rdi
  call   <nocc_pinternal@plt>
  jmp    L28
```

tool_calls: name: parse_data
arguments: tag: D1
data_type: string
name: parse_data
arguments: tag: D97
data_type: string
name: parse_data
arguments: tag: D9
data_type: string
name: parse_data
arguments: tag: D148
data_type: string

tool: D1: /scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/concurrency/nocc/refs/heads/master/backend/krocllvm.c

tool: D97: krocllvm_typestr(): invalid FP type 0x%8.8x


tool: D9: i%d

tool: D148: krocllvm_typestr(): invalid type 0x%8.8x


assistant: ```c
char *krocllvm_typestr(const int type) {
  static char buf[16];
  static int boffs = 0;
  int thisoff;
  if (type == 0x00000000) {
    sprintf(&buf[boffs], "void");
  } else if (type & 0x00001000) {
    sprintf(&buf[boffs], "i%d", type & 0xfff);
  } else if (type & 0x00002000) {
    if ((type & 0xfff) == 32) {
      sprintf(&buf[boffs], "float");
    } else if ((type & 0xfff) == 64) {
      sprintf(&buf[boffs], "double");
    } else if ((type & 0xfff) == 128) {
      sprintf(&buf[boffs], "fp128");
    } else {
      nocc_pinternal(("krocllvm_typestr(): invalid FP type 0x%8.8x\n"), "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/concurrency/nocc/refs/heads/master/backend/krocllvm.c", 450, (unsigned int)type);
    }
  } else {
    nocc_pinternal(("krocllvm_typestr(): invalid type 0x%8.8x\n"), "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/concurrency/nocc/refs/heads/master/backend/krocllvm.c", 453, (unsigned int)type);
  }
  thisoff = boffs;
  boffs = 8 - boffs;
  return &buf[thisoff];
}
```