user: Converte this assembly snippet into its equivalent C code:

```asm
<printUsage>:
  endbr64
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbx
  mov    %rsi,%rbp
  mov    %rdi,%rcx
  mov    $0x25,%edx
  mov    $0x1,%esi
  lea    D297(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbx,%rcx
  mov    $0x32,%edx
  mov    $0x1,%esi
  lea    D306(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x31,%edx
  mov    $0x1,%esi
  lea    D162(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x3e,%edx
  mov    $0x1,%esi
  lea    D121(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x3b,%edx
  mov    $0x1,%esi
  lea    D48(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x33,%edx
  mov    $0x1,%esi
  lea    D111(%rip),%rdi
  call   <fwrite@plt>
  test   %rbp,%rbp
  je     L7
  mov    %rbp,%rdx
  lea    D274(%rip),%rsi
  mov    %rbx,%rdi
  mov    $0x0,%eax
  call   <fprintf@plt>
L7:
  mov    %rbx,%rcx
  mov    $0x16,%edx
  mov    $0x1,%esi
  lea    D137(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x1d,%edx
  mov    $0x1,%esi
  lea    D324(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x34,%edx
  mov    $0x1,%esi
  lea    D70(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbx,%rcx
  mov    $0x15,%edx
  mov    $0x1,%esi
  lea    D273(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x14,%edx
  mov    $0x1,%esi
  lea    D223(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x22,%edx
  mov    $0x1,%esi
  lea    D114(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x10,%edx
  mov    $0x1,%esi
  lea    D193(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x10,%edx
  mov    $0x1,%esi
  lea    D187(%rip),%rbp
  mov    %rbp,%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x9,%edx
  mov    $0x1,%esi
  lea    D90(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xe,%edx
  mov    $0x1,%esi
  lea    D212(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xc,%edx
  mov    $0x1,%esi
  lea    D115(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xc,%edx
  mov    $0x1,%esi
  lea    D144(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xa,%edx
  mov    $0x1,%esi
  lea    D55(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D161(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xf,%edx
  mov    $0x1,%esi
  lea    D66(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xc,%edx
  mov    $0x1,%esi
  lea    D252(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xd,%edx
  mov    $0x1,%esi
  lea    D88(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rsi
  mov    $0xa,%edi
  call   <fputc@plt>
  mov    %rbx,%rcx
  mov    $0x9,%edx
  mov    $0x1,%esi
  lea    D165(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x10,%edx
  mov    $0x1,%esi
  mov    %rbp,%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D168(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x12,%edx
  mov    $0x1,%esi
  lea    D253(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xb,%edx
  mov    $0x1,%esi
  lea    D135(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x15,%edx
  mov    $0x1,%esi
  lea    D151(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x9,%edx
  mov    $0x1,%esi
  lea    D202(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0x9,%edx
  mov    $0x1,%esi
  lea    D31(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xe,%edx
  mov    $0x1,%esi
  lea    D87(%rip),%rdi
  call   <fwrite@plt>
  mov    %rbx,%rcx
  mov    $0xc,%edx
  mov    $0x1,%esi
  lea    D317(%rip),%rdi
  call   <fwrite@plt>
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: tag: D297
type: string
name: parse_data
arguments: tag: D306
type: string
name: parse_data
arguments: tag: D162
type: string
name: parse_data
arguments: tag: D121
type: string
name: parse_data
arguments: tag: D48
type: string
name: parse_data
arguments: tag: D111
type: string
name: parse_data
arguments: tag: D274
type: string
name: parse_data
arguments: tag: D137
type: string
name: parse_data
arguments: tag: D324
type: string
name: parse_data
arguments: tag: D70
type: string
name: parse_data
arguments: tag: D273
type: string
name: parse_data
arguments: tag: D223
type: string
name: parse_data
arguments: tag: D114
type: string
name: parse_data
arguments: tag: D193
type: string
name: parse_data
arguments: tag: D187
type: string
name: parse_data
arguments: tag: D90
type: string
name: parse_data
arguments: tag: D212
type: string
name: parse_data
arguments: tag: D115
type: string
name: parse_data
arguments: tag: D144
type: string
name: parse_data
arguments: tag: D55
type: string
name: parse_data
arguments: tag: D161
type: string
name: parse_data
arguments: tag: D66
type: string
name: parse_data
arguments: tag: D252
type: string
name: parse_data
arguments: tag: D88
type: string
name: parse_data
arguments: tag: D165
type: string
name: parse_data
arguments: tag: D168
type: string
name: parse_data
arguments: tag: D253
type: string
name: parse_data
arguments: tag: D135
type: string
name: parse_data
arguments: tag: D151
type: string
name: parse_data
arguments: tag: D202
type: string
name: parse_data
arguments: tag: D31
type: string
name: parse_data
arguments: tag: D87
type: string
name: parse_data
arguments: tag: D317
type: string

tool: D297: speedtest ; a CPU speed test utility


tool: D306: Copyright (C) 2013 David Harper at obliquity.com



tool: D162: This program comes with ABSOLUTELY NO WARRANTY.



tool: D121: This is free software, and you are welcome to redistribute it


tool: D48: under certain conditions.  Please refer to the GNU General


tool: D111: Public License V3 [http://www.gnu.org/licenses/].



tool: D274: An error occurred: %s



tool: D137: MANDATORY PARAMETERS:


tool: D324: -nsize		Size of data vectors


tool: D70: -niters		Number of iterations over the data vectors


tool: D273: OPTIONAL PARAMETERS:


tool: D223: -mode		Mode to test


tool: D114: -quiet		Keep output to a minimum



tool: D193: 	FLOATING POINT


tool: D187: 	Mode	Operation


tool: D90: 	  1	ADD


tool: D212: 	  2	MULTIPLY


tool: D115: 	  3	DIVIDE


tool: D144: 	  4	COSINE


tool: D55: 	  5	SQRT


tool: D161: 	  6	ATAN2


tool: D66: 	  7	Y LOG2(X)


tool: D252: 	  8	SINCOS


tool: D88: 	  9	2^X - 1


tool: D165: 	INTEGER


tool: D168: 	 11	FETCH


tool: D253: 	 12	RANDOM FETCH


tool: D135: 	 13	STORE


tool: D151: 	 14	FETCH AND STORE


tool: D202: 	 15	ADD


tool: D31: 	 16	SUM


tool: D87: 	 17	MULTIPLY


tool: D317: 	 18	DIVIDE


assistant: ```c
void printUsage(FILE *fp, char *message) {
  fprintf(fp, "speedtest ; a CPU speed test utility\n");
  fprintf(fp, "\n");
  fprintf(fp, "Copyright (C) 2013 David Harper at obliquity.com\n\n");
  fprintf(fp, "This program comes with ABSOLUTELY NO WARRANTY.\n\n");
  fprintf(fp, "This is free software, and you are welcome to redistribute it\n");
  fprintf(fp, "under certain conditions.  Please refer to the GNU General\n");
  fprintf(fp, "Public License V3 [http://www.gnu.org/licenses/].\n\n");
  if (message)
    fprintf(fp, "An error occurred: %s\n\n", message);
  fprintf(fp, "MANDATORY PARAMETERS:\n");
  fprintf(fp, "-nsize\t\tSize of data vectors\n");
  fprintf(fp, "-niters\t\tNumber of iterations over the data vectors\n");
  fprintf(fp, "\n");
  fprintf(fp, "OPTIONAL PARAMETERS:\n");
  fprintf(fp, "-mode\t\tMode to test\n");
  fprintf(fp, "-quiet\t\tKeep output to a minimum\n\n");
  fprintf(fp, "\tFLOATING POINT\n");
  fprintf(fp, "\tMode\tOperation\n");
  fprintf(fp, "\t  1\tADD\n");
  fprintf(fp, "\t  2\tMULTIPLY\n");
  fprintf(fp, "\t  3\tDIVIDE\n");
  fprintf(fp, "\t  4\tCOSINE\n");
  fprintf(fp, "\t  5\tSQRT\n");
  fprintf(fp, "\t  6\tATAN2\n");
  fprintf(fp, "\t  7\tY LOG2(X)\n");
  fprintf(fp, "\t  8\tSINCOS\n");
  fprintf(fp, "\t  9\t2^X - 1\n");
  fprintf(fp, "\n");
  fprintf(fp, "\tINTEGER\n");
  fprintf(fp, "\tMode\tOperation\n");
  fprintf(fp, "\t 11\tFETCH\n");
  fprintf(fp, "\t 12\tRANDOM FETCH\n");
  fprintf(fp, "\t 13\tSTORE\n");
  fprintf(fp, "\t 14\tFETCH AND STORE\n");
  fprintf(fp, "\t 15\tADD\n");
  fprintf(fp, "\t 16\tSUM\n");
  fprintf(fp, "\t 17\tMULTIPLY\n");
  fprintf(fp, "\t 18\tDIVIDE\n");
}
```