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

```asm
<get_x86_cpu_extended_flags>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xc8,%rsp
  mov    %esi,%r9d
  mov    %rcx,0xb0(%rsp)
  mov    %r8,0xb8(%rsp)
  test   %edi,%edi
  jne    L115
  test   $0x10000000,%esi
  lea    D116(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0xa8(%rsp)
  test   $0x8000000,%esi
  lea    D496(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0xa0(%rsp)
  test   $0x2000000,%esi
  lea    D337(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x98(%rsp)
  test   $0x1000000,%esi
  lea    D668(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x90(%rsp)
  test   $0x800000,%esi
  lea    D203(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x88(%rsp)
  test   $0x400000,%esi
  lea    D683(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x80(%rsp)
  test   $0x200000,%esi
  lea    D465(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x78(%rsp)
  test   $0x80000,%esi
  lea    D368(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x70(%rsp)
  test   $0x20000,%esi
  lea    D318(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x68(%rsp)
  test   $0x10000,%esi
  lea    D409(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x60(%rsp)
  test   $0x8000,%esi
  lea    D195(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x58(%rsp)
  test   $0x2000,%esi
  lea    D134(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x50(%rsp)
  test   $0x1000,%esi
  lea    D53(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x48(%rsp)
  test   $0x800,%esi
  lea    D227(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x40(%rsp)
  test   $0x400,%esi
  lea    D270(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x38(%rsp)
  test   $0x200,%esi
  lea    D95(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x30(%rsp)
  test   $0x100,%esi
  lea    D299(%rip),%rcx
  lea    D521(%rip),%rax
  cmovne %rcx,%rax
  mov    %rax,0x28(%rsp)
  test   $0x80,%sil
  lea    D67(%rip),%rax
  lea    D521(%rip),%rcx
  cmove  %rcx,%rax
  test   $0x40,%sil
  lea    D349(%rip),%rsi
  cmovne %rsi,%rcx
  mov    %rcx,0x8(%rsp)
L133:
  test   $0x20,%r9b
  lea    D681(%rip),%rsi
  lea    D521(%rip),%rcx
  cmove  %rcx,%rsi
  test   %edi,%edi
  jne    L47
  test   $0x10,%r9b
  lea    D703(%rip),%r8
  cmovne %r8,%rcx
  mov    %rcx,0x20(%rsp)
  test   $0x8,%r9b
  lea    D184(%rip),%r8
  lea    D521(%rip),%rcx
  cmovne %r8,%rcx
  mov    %rcx,0x18(%rsp)
  test   $0x4,%r9b
  lea    D262(%rip),%r8
  lea    D521(%rip),%rcx
  cmovne %r8,%rcx
  mov    %rcx,0x10(%rsp)
  test   $0x2,%r9b
  lea    D641(%rip),%r12
  lea    D521(%rip),%rcx
  cmove  %rcx,%r12
  test   $0x1,%r9b
  lea    D564(%rip),%r8
  cmovne %r8,%rcx
  test   %edi,%edi
  sete   %r8b
  test   %edx,%edx
  jns    L67
  test   %r8b,%r8b
  je     L67
  lea    D689(%rip),%rbx
L33:
  mov    $0x1,%r8d
  test   $0x40000000,%edx
  lea    D632(%rip),%r14
  lea    D521(%rip),%rdi
  cmove  %rdi,%r14
L111:
  test   $0x20000000,%edx
  lea    D81(%rip),%rdi
  lea    D521(%rip),%r9
  cmove  %r9,%rdi
  test   $0x8000000,%edx
  lea    D281(%rip),%r10
  cmove  %r9,%r10
  test   $0x4000000,%edx
  lea    D181(%rip),%r11
  cmove  %r9,%r11
  test   %r8b,%r8b
  je     L56
  test   $0x2000000,%edx
  lea    D674(%rip),%r13
  mov    %r9,%r8
  cmove  %r9,%r13
  test   $0x400000,%edx
  lea    D291(%rip),%rbp
  cmove  %r9,%rbp
  test   $0x100000,%edx
  lea    D331(%rip),%r9
  cmove  %r8,%r9
  test   $0x80000,%edx
  lea    D71(%rip),%r8
  lea    D521(%rip),%r15
  cmove  %r15,%r8
L101:
  test   $0x8,%dh
  lea    D55(%rip),%rdx
  lea    D521(%rip),%r15
  cmove  %r15,%rdx
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   0xa8(%rsp)
  push   %rax
  push   0x98(%rsp)
  push   %rsi
  push   0xc0(%rsp)
  push   0xc0(%rsp)
  push   0xc0(%rsp)
  push   %r12
  push   %rcx
  push   %rbx
  push   %r14
  push   %rdi
  push   %r10
  push   %r11
  push   %r13
  push   %rbp
  mov    %rdx,%rcx
  lea    D77(%rip),%rdx
  mov    0x1b8(%rsp),%rsi
  mov    0x1b0(%rsp),%rdi
  call   <snprintf@plt>
  add    $0x1c8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L115:
  lea    D521(%rip),%rax
  mov    %rax,0x28(%rsp)
  mov    %rax,0x30(%rsp)
  mov    %rax,0x38(%rsp)
  mov    %rax,0x40(%rsp)
  mov    %rax,0x48(%rsp)
  mov    %rax,0x50(%rsp)
  mov    %rax,0x58(%rsp)
  mov    %rax,0x60(%rsp)
  mov    %rax,0x68(%rsp)
  mov    %rax,0x70(%rsp)
  mov    %rax,0x78(%rsp)
  mov    %rax,0x80(%rsp)
  mov    %rax,0x88(%rsp)
  mov    %rax,0x90(%rsp)
  mov    %rax,0x98(%rsp)
  mov    %rax,0xa0(%rsp)
  mov    %rax,0xa8(%rsp)
  mov    %rax,0x8(%rsp)
  jmp    L133
L74:
  lea    D521(%rip),%rbx
  jmp    L33
L87:
  mov    $0x0,%r8d
  lea    D521(%rip),%rbx
  lea    D564(%rip),%rcx
  mov    %rbx,%r12
  mov    %rbx,0x10(%rsp)
  mov    %rbx,0x18(%rsp)
  mov    %rbx,0x20(%rsp)
  mov    %rbx,%r14
  jmp    L111
L31:
  lea    D521(%rip),%r9
  mov    %r9,%rbp
  mov    %r9,%r13
  mov    %r9,%r8
  jmp    L101
L56:
  test   $0x100000,%edx
  je     L31
  lea    D331(%rip),%r9
  lea    D521(%rip),%rbp
  mov    %rbp,%r13
  mov    %rbp,%r8
  jmp    L101
L47:
  test   $0x1,%r9b
  jne    L87
  test   %edi,%edi
  sete   %r8b
  lea    D521(%rip),%rcx
  mov    %rcx,%r12
  mov    %rcx,0x10(%rsp)
  mov    %rcx,0x18(%rsp)
  mov    %rcx,0x20(%rsp)
L67:
  test   %r8b,%r8b
  jne    L74
  lea    D521(%rip),%rbx
  mov    %rbx,%r14
  jmp    L111
```

tool_calls: name: extract_symbolic_data
arguments: tag: D116
data_type: string
name: extract_symbolic_data
arguments: tag: D521
data_type: string
name: extract_symbolic_data
arguments: tag: D496
data_type: string
name: extract_symbolic_data
arguments: tag: D337
data_type: string
name: extract_symbolic_data
arguments: tag: D668
data_type: string
name: extract_symbolic_data
arguments: tag: D203
data_type: string
name: extract_symbolic_data
arguments: tag: D683
data_type: string
name: extract_symbolic_data
arguments: tag: D465
data_type: string
name: extract_symbolic_data
arguments: tag: D368
data_type: string
name: extract_symbolic_data
arguments: tag: D318
data_type: string
name: extract_symbolic_data
arguments: tag: D409
data_type: string
name: extract_symbolic_data
arguments: tag: D195
data_type: string
name: extract_symbolic_data
arguments: tag: D134
data_type: string
name: extract_symbolic_data
arguments: tag: D53
data_type: string
name: extract_symbolic_data
arguments: tag: D227
data_type: string
name: extract_symbolic_data
arguments: tag: D270
data_type: string
name: extract_symbolic_data
arguments: tag: D95
data_type: string
name: extract_symbolic_data
arguments: tag: D299
data_type: string
name: extract_symbolic_data
arguments: tag: D67
data_type: string
name: extract_symbolic_data
arguments: tag: D349
data_type: string
name: extract_symbolic_data
arguments: tag: D681
data_type: string
name: extract_symbolic_data
arguments: tag: D703
data_type: string
name: extract_symbolic_data
arguments: tag: D184
data_type: string
name: extract_symbolic_data
arguments: tag: D262
data_type: string
name: extract_symbolic_data
arguments: tag: D641
data_type: string
name: extract_symbolic_data
arguments: tag: D564
data_type: string
name: extract_symbolic_data
arguments: tag: D689
data_type: string
name: extract_symbolic_data
arguments: tag: D632
data_type: string
name: extract_symbolic_data
arguments: tag: D81
data_type: string
name: extract_symbolic_data
arguments: tag: D281
data_type: string
name: extract_symbolic_data
arguments: tag: D181
data_type: string
name: extract_symbolic_data
arguments: tag: D674
data_type: string
name: extract_symbolic_data
arguments: tag: D291
data_type: string
name: extract_symbolic_data
arguments: tag: D331
data_type: string
name: extract_symbolic_data
arguments: tag: D71
data_type: string
name: extract_symbolic_data
arguments: tag: D55
data_type: string
name: extract_symbolic_data
arguments: tag: D77
data_type: string

tool: D116: pcx_l2i 

tool: 

tool: D496: perftsc 

tool: D337: dbx 

tool: D668: perfctr_nb 

tool: D203: perfctr_core 

tool: D683: topoext 

tool: D465: tbm 

tool: D368: nodeid_msr 

tool: D318: tce 

tool: D409: fma4 

tool: D195: lwp 

tool: D134: wdt 

tool: D53: skinit 

tool: D227: xop 

tool: D270: ibs 

tool: D95: osvw 

tool: D299: 3dnowprefetch 

tool: D67: misalignsse 

tool: D349: sse4a 

tool: D681: lzcnt 

tool: D703: cr8_legacy 

tool: D184: extapic 

tool: D262: svm 

tool: D641: cmp_legacy 

tool: D564: lahf_lm 

tool: D689: 3dnow 

tool: D632: 3dnowext 

tool: D81: lm 

tool: D281: rdtscp 

tool: D181: pdpe1gb 

tool: D674: fxsr_opt 

tool: D291: mmxext 

tool: D331: nx 

tool: D71: mp 

tool: D55: syscall 

tool: D77: %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 " : ""));
}
```