user: Demonstrate the C code that generates the assembly output below:

```asm
<main>:
  endbr64
  push   %rbx
  mov    %rsi,%rbx
  lea    D100(%rip),%rdi
  call   <puts@plt>
  lea    D56(%rip),%rdi
  call   <puts@plt>
  mov    (%rbx),%rsi
  lea    D14(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x927c0,%edx
  mov    $0x3e8,%esi
  lea    D101(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_int@plt>
  mov    $0x0,%eax
  call   <calc_add_int@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_add_int@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm2
  subsd  %xmm2,%xmm0
  lea    D133(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_mul_int@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm3
  subsd  %xmm3,%xmm0
  lea    D48(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_div_int@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm4
  subsd  %xmm4,%xmm0
  lea    D61(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_float@plt>
  mov    $0x0,%eax
  call   <calc_add_float@plt>
  mov    $0x0,%eax
  call   <set_value_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_add_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm5
  subsd  %xmm5,%xmm0
  movq   %xmm0,%rbx
  mov    $0x1,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D143(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_mul_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm6
  subsd  %xmm6,%xmm0
  movq   %xmm0,%rbx
  mov    $0x1,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D22(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_div_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm7
  subsd  %xmm7,%xmm0
  movq   %xmm0,%rbx
  mov    $0x1,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D163(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_mul_add_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm2
  subsd  %xmm2,%xmm0
  movq   %xmm0,%rbx
  mov    $0x2,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D97(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_exp_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm3
  subsd  %xmm3,%xmm0
  lea    D136(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_sum_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm4
  subsd  %xmm4,%xmm0
  movq   %xmm0,%rbx
  mov    $0x1,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D169(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_cadd_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm5
  subsd  %xmm5,%xmm0
  movq   %xmm0,%rbx
  mov    $0x1,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D10(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_cmp_float@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm6
  subsd  %xmm6,%xmm0
  movq   %xmm0,%rbx
  mov    $0x3,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D138(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_double@plt>
  mov    $0x0,%eax
  call   <calc_add_double@plt>
  mov    $0x0,%eax
  call   <set_value_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_add_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm7
  subsd  %xmm7,%xmm0
  movq   %xmm0,%rbx
  mov    $0x1,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D171(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_mul_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm2
  subsd  %xmm2,%xmm0
  movq   %xmm0,%rbx
  mov    $0x1,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D15(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_div_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm3
  subsd  %xmm3,%xmm0
  movq   %xmm0,%rbx
  mov    $0x1,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D158(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_mul_add_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm4
  subsd  %xmm4,%xmm0
  movq   %xmm0,%rbx
  mov    $0x2,%edi
  call   <get_mflops@plt>
  movapd %xmm0,%xmm1
  movq   %rbx,%xmm0
  lea    D8(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  call   <set_value_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %xmm0,%rbx
  mov    $0x0,%eax
  call   <calc_exp_double@plt>
  mov    $0x0,%eax
  call   <get_time@plt>
  movq   %rbx,%xmm5
  subsd  %xmm5,%xmm0
  lea    D157(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  pop    %rbx
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D100
data_type: string
name: unpack_data
arguments: data_label: D56
data_type: string
name: unpack_data
arguments: data_label: D14
data_type: string
name: unpack_data
arguments: data_label: D101
data_type: string
name: unpack_data
arguments: data_label: D133
data_type: string
name: unpack_data
arguments: data_label: D48
data_type: string
name: unpack_data
arguments: data_label: D61
data_type: string
name: unpack_data
arguments: data_label: D143
data_type: string
name: unpack_data
arguments: data_label: D22
data_type: string
name: unpack_data
arguments: data_label: D163
data_type: string
name: unpack_data
arguments: data_label: D97
data_type: string
name: unpack_data
arguments: data_label: D136
data_type: string
name: unpack_data
arguments: data_label: D169
data_type: string
name: unpack_data
arguments: data_label: D10
data_type: string
name: unpack_data
arguments: data_label: D138
data_type: string
name: unpack_data
arguments: data_label: D171
data_type: string
name: unpack_data
arguments: data_label: D15
data_type: string
name: unpack_data
arguments: data_label: D158
data_type: string
name: unpack_data
arguments: data_label: D8
data_type: string
name: unpack_data
arguments: data_label: D157
data_type: string

tool: D100: /********************** SIMPLE BECHMARKS ***********************/

tool: D56:                                            by nebula 20141124  


tool: D14: [%s]


tool: D101: calc num = %d * %d


tool: D133: add(int)		: %8.2f [msec]


tool: D48: mul(int)		: %8.2f [msec]


tool: D61: div(int)		: %8.2f [msec]


tool: D143: add(float)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D22: mul(float)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D163: div(float)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D97: mul+add(float)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D136: exp(float)		: %8.2f [msec]


tool: D169: sum(float)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D10: cadd(float)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D138: cmp(float)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D171: add(double)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D15: mul(double)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D158: div(double)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D8: mul+add(double)		: %8.2f [msec] = %8.2f [MFLOPS]


tool: D157: exp(double)		: %8.2f [msec]


assistant: ```c
int main(int argc, char **argv) {
  double t_start;
  double time_add_int, time_mul_int, time_div_int;
  double time_add_float, time_mul_float, time_div_float, time_exp_float, time_mul_add_float;
  double time_sum_float, time_cadd_float, time_cmp_float;
  double time_add_double, time_mul_double, time_div_double, time_exp_double, time_mul_add_double;
  printf("/********************** SIMPLE BECHMARKS ***********************/\n");
  printf("                                           by nebula 20141124  \n\n");
  printf("[%s]\n", argv[0]);
  printf("calc num = %d * %d\n", 1000, 600000);
  set_value_int();
  calc_add_int();
  t_start = get_time();
  calc_add_int();
  time_add_int = (get_time() - t_start);
  printf("add(int)\t\t: %8.2f [msec]\n", time_add_int);
  t_start = get_time();
  calc_mul_int();
  time_mul_int = (get_time() - t_start);
  printf("mul(int)\t\t: %8.2f [msec]\n", time_mul_int);
  t_start = get_time();
  calc_div_int();
  time_div_int = (get_time() - t_start);
  printf("div(int)\t\t: %8.2f [msec]\n", time_div_int);
  set_value_float();
  calc_add_float();
  set_value_float();
  t_start = get_time();
  ;
  calc_add_float();
  ;
  time_add_float = (get_time() - t_start);
  printf("add(float)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_add_float, get_mflops(time_add_float, 1));
  set_value_float();
  t_start = get_time();
  ;
  calc_mul_float();
  ;
  time_mul_float = (get_time() - t_start);
  printf("mul(float)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_mul_float, get_mflops(time_mul_float, 1));
  set_value_float();
  t_start = get_time();
  ;
  calc_div_float();
  ;
  time_div_float = (get_time() - t_start);
  printf("div(float)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_div_float, get_mflops(time_div_float, 1));
  set_value_float();
  t_start = get_time();
  ;
  calc_mul_add_float();
  ;
  time_mul_add_float = (get_time() - t_start);
  printf("mul+add(float)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_mul_add_float, get_mflops(time_mul_add_float, 2));
  set_value_float();
  t_start = get_time();
  ;
  calc_exp_float();
  ;
  time_exp_float = (get_time() - t_start);
  printf("exp(float)\t\t: %8.2f [msec]\n", time_exp_float);
  set_value_float();
  t_start = get_time();
  ;
  calc_sum_float();
  ;
  time_sum_float = (get_time() - t_start);
  printf("sum(float)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_sum_float, get_mflops(time_sum_float, 1));
  set_value_float();
  t_start = get_time();
  ;
  calc_cadd_float();
  ;
  time_cadd_float = (get_time() - t_start);
  printf("cadd(float)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_cadd_float, get_mflops(time_cadd_float, 1));
  set_value_float();
  t_start = get_time();
  ;
  calc_cmp_float();
  ;
  time_cmp_float = (get_time() - t_start);
  printf("cmp(float)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_cmp_float, get_mflops(time_cmp_float, 3));
  set_value_double();
  calc_add_double();
  set_value_double();
  t_start = get_time();
  ;
  calc_add_double();
  ;
  time_add_double = (get_time() - t_start);
  printf("add(double)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_add_double, get_mflops(time_add_double, 1));
  set_value_double();
  t_start = get_time();
  ;
  calc_mul_double();
  ;
  time_mul_double = (get_time() - t_start);
  printf("mul(double)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_mul_double, get_mflops(time_mul_double, 1));
  set_value_double();
  t_start = get_time();
  ;
  calc_div_double();
  ;
  time_div_double = (get_time() - t_start);
  printf("div(double)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_div_double, get_mflops(time_div_double, 1));
  set_value_double();
  t_start = get_time();
  ;
  calc_mul_add_double();
  ;
  time_mul_add_double = (get_time() - t_start);
  printf("mul+add(double)\t\t: %8.2f [msec] = %8.2f [MFLOPS]\n", time_mul_add_double, get_mflops(time_mul_add_double, 2));
  set_value_double();
  t_start = get_time();
  ;
  calc_exp_double();
  ;
  time_exp_double = (get_time() - t_start);
  printf("exp(double)\t\t: %8.2f [msec]\n", time_exp_double);
  return (0);
}
```