user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<ILLutil_linked_radixsort>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x60,%rsp
  mov    %rdi,-0x1048(%rbp)
  mov    %rsi,-0x1050(%rbp)
  mov    %rdx,-0x1058(%rbp)
  mov    %ecx,-0x105c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x1048(%rbp),%rdx
  mov    -0x1050(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,-0x1020(%rbp)
  mov    -0x1048(%rbp),%rdx
  mov    -0x1058(%rbp),%rax
  sub    %rdx,%rax
  mov    %rax,-0x1018(%rbp)
  mov    -0x105c(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x1038(%rbp)
  jmp    L87
L96:
  movl   $0x0,-0x103c(%rbp)
  jmp    L24
L64:
  mov    -0x103c(%rbp),%eax
  cltq
  movq   $0x0,-0x1010(%rbp,%rax,8)
  lea    -0x1010(%rbp),%rdx
  mov    -0x103c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rax,%rdx
  mov    -0x103c(%rbp),%eax
  cltq
  mov    %rdx,-0x810(%rbp,%rax,8)
  addl   $0x1,-0x103c(%rbp)
L24:
  cmpl   $0xff,-0x103c(%rbp)
  jle    L64
  mov    -0x1048(%rbp),%rax
  mov    %rax,-0x1030(%rbp)
  jmp    L82
L89:
  mov    -0x1038(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x1018(%rbp),%rax
  add    %rax,%rdx
  mov    -0x1030(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movzbl %al,%eax
  mov    %eax,-0x1034(%rbp)
  mov    -0x1034(%rbp),%eax
  cltq
  mov    -0x810(%rbp,%rax,8),%rax
  mov    -0x1030(%rbp),%rdx
  mov    %rdx,(%rax)
  mov    -0x1030(%rbp),%rdx
  mov    -0x1020(%rbp),%rax
  add    %rax,%rdx
  mov    -0x1034(%rbp),%eax
  cltq
  mov    %rdx,-0x810(%rbp,%rax,8)
  mov    -0x1030(%rbp),%rdx
  mov    -0x1020(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,-0x1030(%rbp)
L82:
  cmpq   $0x0,-0x1030(%rbp)
  jne    L89
  lea    -0x1048(%rbp),%rax
  mov    %rax,-0x1028(%rbp)
  movl   $0x0,-0x103c(%rbp)
  jmp    L1
L32:
  mov    -0x103c(%rbp),%eax
  cltq
  mov    -0x1010(%rbp,%rax,8),%rax
  test   %rax,%rax
  je     L54
  mov    -0x103c(%rbp),%eax
  cltq
  mov    -0x1010(%rbp,%rax,8),%rdx
  mov    -0x1028(%rbp),%rax
  mov    %rdx,(%rax)
  mov    -0x103c(%rbp),%eax
  cltq
  mov    -0x810(%rbp,%rax,8),%rax
  mov    %rax,-0x1028(%rbp)
L54:
  addl   $0x1,-0x103c(%rbp)
L1:
  cmpl   $0xff,-0x103c(%rbp)
  jle    L32
  mov    -0x1028(%rbp),%rax
  movq   $0x0,(%rax)
  subl   $0x1,-0x1038(%rbp)
L87:
  cmpl   $0x0,-0x1038(%rbp)
  jns    L96
  mov    -0x1048(%rbp),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L49
  call   <__stack_chk_fail@plt>
L49:
  leave
  ret
```

assistant: ```c
char *ILLutil_linked_radixsort(char *data, char *datanext, char *dataval, int valsize) {
  size_t nextoff = datanext - data;
  size_t valoff = dataval - data;
  int i;
  char *head[(1 << (8))];
  char **tail[(1 << (8))];
  char *p;
  char **last;
  int j;
  int v;
  for (j = valsize - 1; j >= 0; j--) {
    for (i = 0; i < (1 << (8)); i++) {
      head[i] = (char *)NULL;
      tail[i] = &head[i];
    }
    for (p = data; p; p = *(char **)(p + nextoff)) {
      v = (unsigned char)p[valoff + j];
      *tail[v] = p;
      tail[v] = (char **)(p + nextoff);
    }
    last = &data;
    for (i = 0; i < (1 << (8)); i++) {
      if (head[i]) {
        *last = head[i];
        last = tail[i];
      }
    }
    *last = (char *)NULL;
  }
  return data;
}
```