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

```asm
<get_cpuconfig>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    $0x0,%eax
  call   <detect@plt>
  mov    %eax,-0x4(%rbp)
  cmpl   $0x4,-0x4(%rbp)
  je     L39
  cmpl   $0x4,-0x4(%rbp)
  jg     L78
  cmpl   $0x3,-0x4(%rbp)
  je     L155
  cmpl   $0x3,-0x4(%rbp)
  jg     L78
  cmpl   $0x1,-0x4(%rbp)
  je     L59
  cmpl   $0x2,-0x4(%rbp)
  je     L18
  jmp    L78
L155:
  lea    D494(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D342(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D392(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D517(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D450(%rip),%rax
  mov    %rax,%rdi
  call   <get_feature@plt>
  test   %eax,%eax
  je     L57
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L57:
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <get_feature@plt>
  test   %eax,%eax
  je     L139
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L139:
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D455(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D507(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D430(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D238(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D361(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L78
L39:
  lea    D459(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D342(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D392(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D517(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D450(%rip),%rax
  mov    %rax,%rdi
  call   <get_feature@plt>
  test   %eax,%eax
  je     L119
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L119:
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <get_feature@plt>
  test   %eax,%eax
  je     L129
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L129:
  lea    D58(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D455(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D507(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D430(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D238(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D361(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L78
L18:
  lea    D342(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D392(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D517(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D450(%rip),%rax
  mov    %rax,%rdi
  call   <get_feature@plt>
  test   %eax,%eax
  je     L66
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L66:
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <get_feature@plt>
  test   %eax,%eax
  je     L149
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L149:
  lea    D488(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D455(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D430(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D110(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D361(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L78
L59:
  lea    D23(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D392(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D488(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D455(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D22(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D430(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D110(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D361(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  nop
L78:
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D494
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D342
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D392
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D517
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D450
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D46
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D121
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D10
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D58
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D455
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D507
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D430
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D238
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D7
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D361
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D459
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D488
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D22
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D110
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D23
type_guessed: string

tool: D494: #define CORTEXA9


tool: D342: #define ARMV7


tool: D392: #define HAVE_VFP


tool: D517: #define HAVE_VFPV3


tool: D450: neon

tool: D46: #define HAVE_NEON


tool: D121: vfpv4

tool: D10: #define HAVE_VFPV4


tool: D58: #define L1_DATA_SIZE 32768


tool: D455: #define L1_DATA_LINESIZE 32


tool: D507: #define L2_SIZE 1048576


tool: D430: #define L2_LINESIZE 32


tool: D238: #define DTB_DEFAULT_ENTRIES 128


tool: D7: #define DTB_SIZE 4096


tool: D361: #define L2_ASSOCIATIVE 4


tool: D459: #define CORTEXA15


tool: D488: #define L1_DATA_SIZE 65536


tool: D22: #define L2_SIZE 512488


tool: D110: #define DTB_DEFAULT_ENTRIES 64


tool: D23: #define ARMV6


assistant: ```c
void get_cpuconfig(void) {
  int d = detect();
  switch (d) {
  case 3:
    printf("#define CORTEXA9\n");
    printf("#define ARMV7\n");
    printf("#define HAVE_VFP\n");
    printf("#define HAVE_VFPV3\n");
    if (get_feature("neon"))
      printf("#define HAVE_NEON\n");
    if (get_feature("vfpv4"))
      printf("#define HAVE_VFPV4\n");
    printf("#define L1_DATA_SIZE 32768\n");
    printf("#define L1_DATA_LINESIZE 32\n");
    printf("#define L2_SIZE 1048576\n");
    printf("#define L2_LINESIZE 32\n");
    printf("#define DTB_DEFAULT_ENTRIES 128\n");
    printf("#define DTB_SIZE 4096\n");
    printf("#define L2_ASSOCIATIVE 4\n");
    break;
  case 4:
    printf("#define CORTEXA15\n");
    printf("#define ARMV7\n");
    printf("#define HAVE_VFP\n");
    printf("#define HAVE_VFPV3\n");
    if (get_feature("neon"))
      printf("#define HAVE_NEON\n");
    if (get_feature("vfpv4"))
      printf("#define HAVE_VFPV4\n");
    printf("#define L1_DATA_SIZE 32768\n");
    printf("#define L1_DATA_LINESIZE 32\n");
    printf("#define L2_SIZE 1048576\n");
    printf("#define L2_LINESIZE 32\n");
    printf("#define DTB_DEFAULT_ENTRIES 128\n");
    printf("#define DTB_SIZE 4096\n");
    printf("#define L2_ASSOCIATIVE 4\n");
    break;
  case 2:
    printf("#define ARMV7\n");
    printf("#define HAVE_VFP\n");
    printf("#define HAVE_VFPV3\n");
    if (get_feature("neon"))
      printf("#define HAVE_NEON\n");
    if (get_feature("vfpv4"))
      printf("#define HAVE_VFPV4\n");
    printf("#define L1_DATA_SIZE 65536\n");
    printf("#define L1_DATA_LINESIZE 32\n");
    printf("#define L2_SIZE 512488\n");
    printf("#define L2_LINESIZE 32\n");
    printf("#define DTB_DEFAULT_ENTRIES 64\n");
    printf("#define DTB_SIZE 4096\n");
    printf("#define L2_ASSOCIATIVE 4\n");
    break;
  case 1:
    printf("#define ARMV6\n");
    printf("#define HAVE_VFP\n");
    printf("#define L1_DATA_SIZE 65536\n");
    printf("#define L1_DATA_LINESIZE 32\n");
    printf("#define L2_SIZE 512488\n");
    printf("#define L2_LINESIZE 32\n");
    printf("#define DTB_DEFAULT_ENTRIES 64\n");
    printf("#define DTB_SIZE 4096\n");
    printf("#define L2_ASSOCIATIVE 4\n");
    break;
  }
}
```