user: 下面的汇编指令对应的C源代码是什么:

```asm
<main>:
  endbr64
  push   %rbx
  lea    D187(%rip),%rdi
  mov    %rsi,%rbx
  sub    $0x10,%rsp
  call   <puts@plt>
  lea    D114(%rip),%rdi
  call   <puts@plt>
  mov    (%rbx),%rsi
  lea    D188(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0x927c0,%edx
  mov    $0x3e8,%esi
  xor    %eax,%eax
  lea    D40(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_int@plt>
  xor    %eax,%eax
  call   <calc_add_int@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_add_int@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D42(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_mul_int@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D166(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_div_int@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D190(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_float@plt>
  xor    %eax,%eax
  call   <calc_add_float@plt>
  xor    %eax,%eax
  call   <set_value_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_add_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x1,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D98(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_mul_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x1,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D196(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_div_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x1,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D181(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_mul_add_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x2,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D137(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_exp_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D165(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_sum_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x1,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D25(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_cadd_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x1,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D150(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_cmp_float@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x3,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D43(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_double@plt>
  xor    %eax,%eax
  call   <calc_add_double@plt>
  xor    %eax,%eax
  call   <set_value_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_add_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x1,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D173(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_mul_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x1,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D4(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_div_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x1,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D184(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_mul_add_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  mov    $0x2,%edi
  movapd %xmm0,%xmm2
  subsd  0x8(%rsp),%xmm2
  movapd %xmm2,%xmm0
  movsd  %xmm2,0x8(%rsp)
  call   <get_mflops@plt>
  movsd  0x8(%rsp),%xmm2
  mov    $0x2,%eax
  lea    D15(%rip),%rdi
  movapd %xmm0,%xmm1
  movapd %xmm2,%xmm0
  call   <printf@plt>
  xor    %eax,%eax
  call   <set_value_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  xor    %eax,%eax
  movsd  %xmm0,0x8(%rsp)
  call   <calc_exp_double@plt>
  xor    %eax,%eax
  call   <get_time@plt>
  subsd  0x8(%rsp),%xmm0
  mov    $0x1,%eax
  lea    D87(%rip),%rdi
  call   <printf@plt>
  add    $0x10,%rsp
  xor    %eax,%eax
  pop    %rbx
  ret
```

tool_calls: name: read_data
arguments: data_label: D187
type: string
name: read_data
arguments: data_label: D114
type: string
name: read_data
arguments: data_label: D188
type: string
name: read_data
arguments: data_label: D40
type: string
name: read_data
arguments: data_label: D42
type: string
name: read_data
arguments: data_label: D166
type: string
name: read_data
arguments: data_label: D190
type: string
name: read_data
arguments: data_label: D98
type: string
name: read_data
arguments: data_label: D196
type: string
name: read_data
arguments: data_label: D181
type: string
name: read_data
arguments: data_label: D137
type: string
name: read_data
arguments: data_label: D165
type: string
name: read_data
arguments: data_label: D25
type: string
name: read_data
arguments: data_label: D150
type: string
name: read_data
arguments: data_label: D43
type: string
name: read_data
arguments: data_label: D173
type: string
name: read_data
arguments: data_label: D4
type: string
name: read_data
arguments: data_label: D184
type: string
name: read_data
arguments: data_label: D15
type: string
name: read_data
arguments: data_label: D87
type: string

tool: D187: /********************** SIMPLE BECHMARKS ***********************/

tool: D114:                                            by nebula 20141124  


tool: D188: [%s]


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


tool: D87: 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);
}
```