user: 请将以下的汇编代码转换成C语言代码:

```asm
<check_errno>:
  endbr64
  push   %rbp
  xor    %eax,%eax
  lea    D44(%rip),%rbp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x8,%rsp
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  mov    %ebx,%esi
  lea    D67(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  add    $0xffffff80,%ebx
  mov    $0xa,%edi
  call   <putchar@plt>
  cmp    $0x4,%ebx
  ja     L2
  lea    D36(%rip),%rdx
  movslq (%rdx,%rbx,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  nopl   (%rax)
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D49(%rip),%rdi
L51:
  xor    %eax,%eax
  call   <printf@plt>
  add    $0x8,%rsp
  mov    $0xa,%edi
  pop    %rbx
  pop    %rbp
  jmp    1080 <putchar@plt>
  nopl   0x0(%rax)
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D15(%rip),%rdi
  jmp    L51
  nopl   0x0(%rax)
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D46(%rip),%rdi
  jmp    L51
  nopl   0x0(%rax)
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D12(%rip),%rdi
  jmp    L51
  nop
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D18(%rip),%rdi
  jmp    L51
L2:
  xor    %eax,%eax
  call   <show_time@plt>
  xor    %eax,%eax
  call   <pthread_self@plt>
  mov    %rbp,%rdi
  mov    %rax,%rsi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D56(%rip),%rdi
  jmp    L51
```

tool_calls: name: retrieve_data
arguments: tag: D44
type_guessed: string
name: retrieve_data
arguments: tag: D67
type_guessed: string
name: retrieve_data
arguments: tag: D49
type_guessed: string
name: retrieve_data
arguments: tag: D15
type_guessed: string
name: retrieve_data
arguments: tag: D46
type_guessed: string
name: retrieve_data
arguments: tag: D12
type_guessed: string
name: retrieve_data
arguments: tag: D18
type_guessed: string
name: retrieve_data
arguments: tag: D56
type_guessed: string

tool: D44:  -- [%lu]

tool: D67: errno = [%d]

tool: D49: EDEADLK

tool: D15: EAGAIN

tool: D46: ESRCH

tool: D12: EPERM

tool: D18: EINVAL

tool: D56: no such errno

assistant: ```c
void check_errno(int err) {
  do {
    show_time();
    printf(" -- [%lu]", (unsigned long int)pthread_self());
    printf("errno = [%d]", err);
    printf("\n");
  } while (0);
  switch (err) {
  case EDEADLK:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("EDEADLK");
      printf("\n");
    } while (0);
    break;
  case EINVAL:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("EINVAL");
      printf("\n");
    } while (0);
    break;
  case ESRCH:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("ESRCH");
      printf("\n");
    } while (0);
    break;
  case EAGAIN:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("EAGAIN");
      printf("\n");
    } while (0);
    break;
  case EPERM:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("EPERM");
      printf("\n");
    } while (0);
    break;
  default:
    do {
      show_time();
      printf(" -- [%lu]", (unsigned long int)pthread_self());
      printf("no such errno");
      printf("\n");
    } while (0);
  }
}
```