user: What is the c source code of the assembly code below?

```asm
<get_x86_cpu_extended_flags>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0xe8,%rsp
  mov    %edi,-0x34(%rbp)
  mov    %esi,-0x38(%rbp)
  mov    %edx,-0x3c(%rbp)
  mov    %rcx,-0x48(%rbp)
  mov    %r8,-0x50(%rbp)
  cmpl   $0x0,-0x34(%rbp)
  jne    L673
  mov    -0x38(%rbp),%eax
  and    $0x10000000,%eax
  test   %eax,%eax
  je     L97
  lea    D193(%rip),%rax
  mov    %rax,-0x58(%rbp)
  jmp    L634
L97:
  lea    D7(%rip),%rax
  mov    %rax,-0x58(%rbp)
  jmp    L634
L673:
  lea    D7(%rip),%rax
  mov    %rax,-0x58(%rbp)
L634:
  cmpl   $0x0,-0x34(%rbp)
  jne    L1127
  mov    -0x38(%rbp),%eax
  and    $0x8000000,%eax
  test   %eax,%eax
  je     L985
  lea    D445(%rip),%rax
  mov    %rax,-0x60(%rbp)
  jmp    L439
L985:
  lea    D7(%rip),%rax
  mov    %rax,-0x60(%rbp)
  jmp    L439
L1127:
  lea    D7(%rip),%rax
  mov    %rax,-0x60(%rbp)
L439:
  cmpl   $0x0,-0x34(%rbp)
  jne    L409
  mov    -0x38(%rbp),%eax
  and    $0x2000000,%eax
  test   %eax,%eax
  je     L201
  lea    D172(%rip),%rax
  mov    %rax,-0x68(%rbp)
  jmp    L1104
L201:
  lea    D7(%rip),%rax
  mov    %rax,-0x68(%rbp)
  jmp    L1104
L409:
  lea    D7(%rip),%rax
  mov    %rax,-0x68(%rbp)
L1104:
  cmpl   $0x0,-0x34(%rbp)
  jne    L468
  mov    -0x38(%rbp),%eax
  and    $0x1000000,%eax
  test   %eax,%eax
  je     L867
  lea    D822(%rip),%rax
  mov    %rax,-0x70(%rbp)
  jmp    L342
L867:
  lea    D7(%rip),%rax
  mov    %rax,-0x70(%rbp)
  jmp    L342
L468:
  lea    D7(%rip),%rax
  mov    %rax,-0x70(%rbp)
L342:
  cmpl   $0x0,-0x34(%rbp)
  jne    L1130
  mov    -0x38(%rbp),%eax
  and    $0x800000,%eax
  test   %eax,%eax
  je     L300
  lea    D357(%rip),%rax
  mov    %rax,-0x78(%rbp)
  jmp    L558
L300:
  lea    D7(%rip),%rax
  mov    %rax,-0x78(%rbp)
  jmp    L558
L1130:
  lea    D7(%rip),%rax
  mov    %rax,-0x78(%rbp)
L558:
  cmpl   $0x0,-0x34(%rbp)
  jne    L1153
  mov    -0x38(%rbp),%eax
  and    $0x400000,%eax
  test   %eax,%eax
  je     L587
  lea    D810(%rip),%rax
  mov    %rax,-0x80(%rbp)
  jmp    L473
L587:
  lea    D7(%rip),%rax
  mov    %rax,-0x80(%rbp)
  jmp    L473
L1153:
  lea    D7(%rip),%rax
  mov    %rax,-0x80(%rbp)
L473:
  cmpl   $0x0,-0x34(%rbp)
  jne    L568
  mov    -0x38(%rbp),%eax
  and    $0x200000,%eax
  test   %eax,%eax
  je     L506
  lea    D286(%rip),%rax
  mov    %rax,-0x88(%rbp)
  jmp    L1144
L506:
  lea    D7(%rip),%rax
  mov    %rax,-0x88(%rbp)
  jmp    L1144
L568:
  lea    D7(%rip),%rax
  mov    %rax,-0x88(%rbp)
L1144:
  cmpl   $0x0,-0x34(%rbp)
  jne    L304
  mov    -0x38(%rbp),%eax
  and    $0x80000,%eax
  test   %eax,%eax
  je     L1141
  lea    D157(%rip),%rax
  mov    %rax,-0x90(%rbp)
  jmp    L555
L1141:
  lea    D7(%rip),%rax
  mov    %rax,-0x90(%rbp)
  jmp    L555
L304:
  lea    D7(%rip),%rax
  mov    %rax,-0x90(%rbp)
L555:
  cmpl   $0x0,-0x34(%rbp)
  jne    L152
  mov    -0x38(%rbp),%eax
  and    $0x20000,%eax
  test   %eax,%eax
  je     L17
  lea    D199(%rip),%rax
  mov    %rax,-0x98(%rbp)
  jmp    L553
L17:
  lea    D7(%rip),%rax
  mov    %rax,-0x98(%rbp)
  jmp    L553
L152:
  lea    D7(%rip),%rax
  mov    %rax,-0x98(%rbp)
L553:
  cmpl   $0x0,-0x34(%rbp)
  jne    L1131
  mov    -0x38(%rbp),%eax
  and    $0x10000,%eax
  test   %eax,%eax
  je     L930
  lea    D580(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  jmp    L1071
L930:
  lea    D7(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  jmp    L1071
L1131:
  lea    D7(%rip),%rax
  mov    %rax,-0xa0(%rbp)
L1071:
  cmpl   $0x0,-0x34(%rbp)
  jne    L187
  mov    -0x38(%rbp),%eax
  and    $0x8000,%eax
  test   %eax,%eax
  je     L166
  lea    D783(%rip),%rax
  mov    %rax,-0xa8(%rbp)
  jmp    L969
L166:
  lea    D7(%rip),%rax
  mov    %rax,-0xa8(%rbp)
  jmp    L969
L187:
  lea    D7(%rip),%rax
  mov    %rax,-0xa8(%rbp)
L969:
  cmpl   $0x0,-0x34(%rbp)
  jne    L135
  mov    -0x38(%rbp),%eax
  and    $0x2000,%eax
  test   %eax,%eax
  je     L817
  lea    D624(%rip),%rax
  mov    %rax,-0xb0(%rbp)
  jmp    L277
L817:
  lea    D7(%rip),%rax
  mov    %rax,-0xb0(%rbp)
  jmp    L277
L135:
  lea    D7(%rip),%rax
  mov    %rax,-0xb0(%rbp)
L277:
  cmpl   $0x0,-0x34(%rbp)
  jne    L472
  mov    -0x38(%rbp),%eax
  and    $0x1000,%eax
  test   %eax,%eax
  je     L478
  lea    D590(%rip),%rax
  mov    %rax,-0xb8(%rbp)
  jmp    L1006
L478:
  lea    D7(%rip),%rax
  mov    %rax,-0xb8(%rbp)
  jmp    L1006
L472:
  lea    D7(%rip),%rax
  mov    %rax,-0xb8(%rbp)
L1006:
  cmpl   $0x0,-0x34(%rbp)
  jne    L1169
  mov    -0x38(%rbp),%eax
  and    $0x800,%eax
  test   %eax,%eax
  je     L1132
  lea    D661(%rip),%rax
  mov    %rax,-0xc0(%rbp)
  jmp    L5
L1132:
  lea    D7(%rip),%rax
  mov    %rax,-0xc0(%rbp)
  jmp    L5
L1169:
  lea    D7(%rip),%rax
  mov    %rax,-0xc0(%rbp)
L5:
  cmpl   $0x0,-0x34(%rbp)
  jne    L1007
  mov    -0x38(%rbp),%eax
  and    $0x400,%eax
  test   %eax,%eax
  je     L581
  lea    D691(%rip),%rax
  mov    %rax,-0xc8(%rbp)
  jmp    L746
L581:
  lea    D7(%rip),%rax
  mov    %rax,-0xc8(%rbp)
  jmp    L746
L1007:
  lea    D7(%rip),%rax
  mov    %rax,-0xc8(%rbp)
L746:
  cmpl   $0x0,-0x34(%rbp)
  jne    L825
  mov    -0x38(%rbp),%eax
  and    $0x200,%eax
  test   %eax,%eax
  je     L142
  lea    D818(%rip),%rax
  mov    %rax,-0xd0(%rbp)
  jmp    L104
L142:
  lea    D7(%rip),%rax
  mov    %rax,-0xd0(%rbp)
  jmp    L104
L825:
  lea    D7(%rip),%rax
  mov    %rax,-0xd0(%rbp)
L104:
  cmpl   $0x0,-0x34(%rbp)
  jne    L225
  mov    -0x38(%rbp),%eax
  and    $0x100,%eax
  test   %eax,%eax
  je     L887
  lea    D600(%rip),%rax
  mov    %rax,-0xd8(%rbp)
  jmp    L412
L887:
  lea    D7(%rip),%rax
  mov    %rax,-0xd8(%rbp)
  jmp    L412
L225:
  lea    D7(%rip),%rax
  mov    %rax,-0xd8(%rbp)
L412:
  cmpl   $0x0,-0x34(%rbp)
  jne    L95
  mov    -0x38(%rbp),%eax
  and    $0x80,%eax
  test   %eax,%eax
  je     L1183
  lea    D728(%rip),%rax
  mov    %rax,-0xe0(%rbp)
  jmp    L1103
L1183:
  lea    D7(%rip),%rax
  mov    %rax,-0xe0(%rbp)
  jmp    L1103
L95:
  lea    D7(%rip),%rax
  mov    %rax,-0xe0(%rbp)
L1103:
  cmpl   $0x0,-0x34(%rbp)
  jne    L745
  mov    -0x38(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L635
  lea    D6(%rip),%rax
  mov    %rax,-0xe8(%rbp)
  jmp    L266
L635:
  lea    D7(%rip),%rax
  mov    %rax,-0xe8(%rbp)
  jmp    L266
L745:
  lea    D7(%rip),%rax
  mov    %rax,-0xe8(%rbp)
L266:
  mov    -0x38(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L660
  lea    D271(%rip),%rax
  mov    %rax,-0xf8(%rbp)
  jmp    L630
L660:
  lea    D7(%rip),%rax
  mov    %rax,-0xf8(%rbp)
L630:
  cmpl   $0x0,-0x34(%rbp)
  jne    L184
  mov    -0x38(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L1235
  lea    D892(%rip),%rax
  mov    %rax,-0xf0(%rbp)
  jmp    L567
L1235:
  lea    D7(%rip),%rax
  mov    %rax,-0xf0(%rbp)
  jmp    L567
L184:
  lea    D7(%rip),%rax
  mov    %rax,-0xf0(%rbp)
L567:
  cmpl   $0x0,-0x34(%rbp)
  jne    L1179
  mov    -0x38(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L1197
  lea    D290(%rip),%r14
  jmp    L453
L1197:
  lea    D7(%rip),%r14
  jmp    L453
L1179:
  lea    D7(%rip),%r14
L453:
  cmpl   $0x0,-0x34(%rbp)
  jne    L185
  mov    -0x38(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L179
  lea    D683(%rip),%r12
  jmp    L1024
L179:
  lea    D7(%rip),%r12
  jmp    L1024
L185:
  lea    D7(%rip),%r12
L1024:
  cmpl   $0x0,-0x34(%rbp)
  jne    L1147
  mov    -0x38(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L441
  lea    D46(%rip),%rbx
  jmp    L274
L441:
  lea    D7(%rip),%rbx
  jmp    L274
L1147:
  lea    D7(%rip),%rbx
L274:
  mov    -0x38(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L548
  lea    D621(%rip),%rax
  mov    %rax,-0x100(%rbp)
  jmp    L1134
L548:
  lea    D7(%rip),%rax
  mov    %rax,-0x100(%rbp)
L1134:
  cmpl   $0x0,-0x34(%rbp)
  jne    L1128
  cmpl   $0x0,-0x3c(%rbp)
  jns    L518
  lea    D389(%rip),%r11
  jmp    L1112
L518:
  lea    D7(%rip),%r11
  jmp    L1112
L1128:
  lea    D7(%rip),%r11
L1112:
  cmpl   $0x0,-0x34(%rbp)
  jne    L796
  mov    -0x3c(%rbp),%eax
  and    $0x40000000,%eax
  test   %eax,%eax
  je     L559
  lea    D641(%rip),%r10
  jmp    L918
L559:
  lea    D7(%rip),%r10
  jmp    L918
L796:
  lea    D7(%rip),%r10
L918:
  mov    -0x3c(%rbp),%eax
  and    $0x20000000,%eax
  test   %eax,%eax
  je     L1206
  lea    D348(%rip),%rax
  mov    %rax,-0x108(%rbp)
  jmp    L276
L1206:
  lea    D7(%rip),%rax
  mov    %rax,-0x108(%rbp)
L276:
  mov    -0x3c(%rbp),%eax
  and    $0x8000000,%eax
  test   %eax,%eax
  je     L702
  lea    D703(%rip),%r15
  jmp    L681
L702:
  lea    D7(%rip),%r15
L681:
  mov    -0x3c(%rbp),%eax
  and    $0x4000000,%eax
  test   %eax,%eax
  je     L234
  lea    D338(%rip),%r13
  jmp    L663
L234:
  lea    D7(%rip),%r13
L663:
  cmpl   $0x0,-0x34(%rbp)
  jne    L40
  mov    -0x3c(%rbp),%eax
  and    $0x2000000,%eax
  test   %eax,%eax
  je     L442
  lea    D341(%rip),%r8
  jmp    L394
L442:
  lea    D7(%rip),%r8
  jmp    L394
L40:
  lea    D7(%rip),%r8
L394:
  cmpl   $0x0,-0x34(%rbp)
  jne    L154
  mov    -0x3c(%rbp),%eax
  and    $0x400000,%eax
  test   %eax,%eax
  je     L734
  lea    D633(%rip),%rcx
  jmp    L1189
L734:
  lea    D7(%rip),%rcx
  jmp    L1189
L154:
  lea    D7(%rip),%rcx
L1189:
  mov    -0x3c(%rbp),%eax
  and    $0x100000,%eax
  test   %eax,%eax
  je     L871
  lea    D594(%rip),%r9
  jmp    L1126
L871:
  lea    D7(%rip),%r9
L1126:
  cmpl   $0x0,-0x34(%rbp)
  jne    L476
  mov    -0x3c(%rbp),%eax
  and    $0x80000,%eax
  test   %eax,%eax
  je     L1222
  lea    D606(%rip),%rdx
  jmp    L556
L1222:
  lea    D7(%rip),%rdx
  jmp    L556
L476:
  lea    D7(%rip),%rdx
L556:
  mov    -0x3c(%rbp),%eax
  and    $0x800,%eax
  test   %eax,%eax
  je     L1182
  lea    D846(%rip),%rax
  jmp    L350
L1182:
  lea    D7(%rip),%rax
L350:
  mov    -0x50(%rbp),%rsi
  mov    -0x48(%rbp),%rdi
  push   -0x58(%rbp)
  push   -0x60(%rbp)
  push   -0x68(%rbp)
  push   -0x70(%rbp)
  push   -0x78(%rbp)
  push   -0x80(%rbp)
  push   -0x88(%rbp)
  push   -0x90(%rbp)
  push   -0x98(%rbp)
  push   -0xa0(%rbp)
  push   -0xa8(%rbp)
  push   -0xb0(%rbp)
  push   -0xb8(%rbp)
  push   -0xc0(%rbp)
  push   -0xc8(%rbp)
  push   -0xd0(%rbp)
  push   -0xd8(%rbp)
  push   -0xe0(%rbp)
  push   -0xe8(%rbp)
  push   -0xf8(%rbp)
  push   -0xf0(%rbp)
  push   %r14
  push   %r12
  push   %rbx
  push   -0x100(%rbp)
  push   %r11
  push   %r10
  push   -0x108(%rbp)
  push   %r15
  push   %r13
  push   %r8
  push   %rcx
  mov    %rdx,%r8
  mov    %rax,%rcx
  lea    D382(%rip),%rax
  mov    %rax,%rdx
  call   <snprintf@plt>
  add    $0x100,%rsp
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D193
type_infered: string
name: retrieve_data
arguments: data_label: D7
type_infered: string
name: retrieve_data
arguments: data_label: D445
type_infered: string
name: retrieve_data
arguments: data_label: D172
type_infered: string
name: retrieve_data
arguments: data_label: D822
type_infered: string
name: retrieve_data
arguments: data_label: D357
type_infered: string
name: retrieve_data
arguments: data_label: D810
type_infered: string
name: retrieve_data
arguments: data_label: D286
type_infered: string
name: retrieve_data
arguments: data_label: D157
type_infered: string
name: retrieve_data
arguments: data_label: D199
type_infered: string
name: retrieve_data
arguments: data_label: D580
type_infered: string
name: retrieve_data
arguments: data_label: D783
type_infered: string
name: retrieve_data
arguments: data_label: D624
type_infered: string
name: retrieve_data
arguments: data_label: D590
type_infered: string
name: retrieve_data
arguments: data_label: D661
type_infered: string
name: retrieve_data
arguments: data_label: D691
type_infered: string
name: retrieve_data
arguments: data_label: D818
type_infered: string
name: retrieve_data
arguments: data_label: D600
type_infered: string
name: retrieve_data
arguments: data_label: D728
type_infered: string
name: retrieve_data
arguments: data_label: D6
type_infered: string
name: retrieve_data
arguments: data_label: D271
type_infered: string
name: retrieve_data
arguments: data_label: D892
type_infered: string
name: retrieve_data
arguments: data_label: D290
type_infered: string
name: retrieve_data
arguments: data_label: D683
type_infered: string
name: retrieve_data
arguments: data_label: D46
type_infered: string
name: retrieve_data
arguments: data_label: D621
type_infered: string
name: retrieve_data
arguments: data_label: D389
type_infered: string
name: retrieve_data
arguments: data_label: D641
type_infered: string
name: retrieve_data
arguments: data_label: D348
type_infered: string
name: retrieve_data
arguments: data_label: D703
type_infered: string
name: retrieve_data
arguments: data_label: D338
type_infered: string
name: retrieve_data
arguments: data_label: D341
type_infered: string
name: retrieve_data
arguments: data_label: D633
type_infered: string
name: retrieve_data
arguments: data_label: D594
type_infered: string
name: retrieve_data
arguments: data_label: D606
type_infered: string
name: retrieve_data
arguments: data_label: D846
type_infered: string
name: retrieve_data
arguments: data_label: D382
type_infered: string

tool: D193: pcx_l2i 

tool: 

tool: D445: perftsc 

tool: D172: dbx 

tool: D822: perfctr_nb 

tool: D357: perfctr_core 

tool: D810: topoext 

tool: D286: tbm 

tool: D157: nodeid_msr 

tool: D199: tce 

tool: D580: fma4 

tool: D783: lwp 

tool: D624: wdt 

tool: D590: skinit 

tool: D661: xop 

tool: D691: ibs 

tool: D818: osvw 

tool: D600: 3dnowprefetch 

tool: D728: misalignsse 

tool: D6: sse4a 

tool: D271: lzcnt 

tool: D892: cr8_legacy 

tool: D290: extapic 

tool: D683: svm 

tool: D46: cmp_legacy 

tool: D621: lahf_lm 

tool: D389: 3dnow 

tool: D641: 3dnowext 

tool: D348: lm 

tool: D703: rdtscp 

tool: D338: pdpe1gb 

tool: D341: fxsr_opt 

tool: D633: mmxext 

tool: D594: nx 

tool: D606: mp 

tool: D846: syscall 

tool: D382: %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s

assistant: ```c
int get_x86_cpu_extended_flags(int intel, uint32_t ecx, uint32_t edx, char *flags, size_t len) {
  return snprintf(flags, len,
                  ""
                  ""
                  "%s"
                  ""
                  "%s"
                  "%s%s"
                  "%s%s%s"
                  "%s%s%s"
                  "%s%s%s%s"
                  "%s%s%s%s"
                  "%s%s%s%s"
                  "%s%s%s"
                  "%s%s%s"
                  "%s%s%s"
                  "%s%s%s"
                  "%s",
                  edx & 0x00000800 ? "syscall " : "", intel ? "" : (edx & 0x00080000 ? "mp " : ""), edx & 0x00100000 ? "nx " : "", intel ? "" : (edx & 0x00400000 ? "mmxext " : ""), intel ? "" : (edx & 0x02000000 ? "fxsr_opt " : ""), edx & 0x04000000 ? "pdpe1gb " : "", edx & 0x08000000 ? "rdtscp " : "", edx & 0x20000000 ? "lm " : "", intel ? "" : (edx & 0x40000000 ? "3dnowext " : ""), intel ? "" : (edx & 0x80000000 ? "3dnow " : ""), ecx & 0x00000001 ? "lahf_lm " : "", intel ? "" : (ecx & 0x00000002 ? "cmp_legacy " : ""), intel ? "" : (ecx & 0x00000004 ? "svm " : ""), intel ? "" : (ecx & 0x00000008 ? "extapic " : ""), intel ? "" : (ecx & 0x00000010 ? "cr8_legacy " : ""), ecx & 0x00000020 ? "lzcnt " : "", intel ? "" : (ecx & 0x00000040 ? "sse4a " : ""), intel ? "" : (ecx & 0x00000080 ? "misalignsse " : ""), intel ? "" : (ecx & 0x00000100 ? "3dnowprefetch " : ""), intel ? "" : (ecx & 0x00000200 ? "osvw " : ""), intel ? "" : (ecx & 0x00000400 ? "ibs " : ""), intel ? "" : (ecx & 0x00000800 ? "xop " : ""), intel ? "" : (ecx & 0x00001000 ? "skinit " : ""), intel ? "" : (ecx & 0x00002000 ? "wdt " : ""), intel ? "" : (ecx & 0x00008000 ? "lwp " : ""), intel ? "" : (ecx & 0x00010000 ? "fma4 " : ""), intel ? "" : (ecx & 0x00020000 ? "tce " : ""), intel ? "" : (ecx & 0x00080000 ? "nodeid_msr " : ""), intel ? "" : (ecx & 0x00200000 ? "tbm " : ""), intel ? "" : (ecx & 0x00400000 ? "topoext " : ""), intel ? "" : (ecx & 0x00800000 ? "perfctr_core " : ""), intel ? "" : (ecx & 0x01000000 ? "perfctr_nb " : ""), intel ? "" : (ecx & 0x02000000 ? "dbx " : ""), intel ? "" : (ecx & 0x08000000 ? "perftsc " : ""), intel ? "" : (ecx & 0x10000000 ? "pcx_l2i " : ""));
}
```