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

```asm
<double_to_fixed>:
  endbr64
  movsd  D50(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L2
  movsd  D235(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L143
  mulsd  D114(%rip),%xmm0
  movl   $0xe,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   (%rax)
L143:
  movsd  D152(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L132
  movsd  D194(%rip),%xmm2
  comisd %xmm0,%xmm2
  jbe    L95
  mulsd  D112(%rip),%xmm0
  movl   $0xc,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   0x0(%rax)
L2:
  mulsd  D101(%rip),%xmm0
  movl   $0xf,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   (%rax)
L132:
  mulsd  D158(%rip),%xmm0
  movl   $0xd,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   (%rax)
L95:
  movsd  D75(%rip),%xmm3
  comisd %xmm0,%xmm3
  ja     L49
  movsd  D222(%rip),%xmm4
  comisd %xmm0,%xmm4
  jbe    L159
  mulsd  D212(%rip),%xmm0
  movl   $0xa,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   0x0(%rax)
L49:
  mulsd  D234(%rip),%xmm0
  movl   $0xb,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   (%rax)
L159:
  movsd  D92(%rip),%xmm5
  comisd %xmm0,%xmm5
  jbe    L158
  mulsd  D146(%rip),%xmm0
  movl   $0x9,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
L158:
  movsd  D24(%rip),%xmm6
  comisd %xmm0,%xmm6
  jbe    L119
  mulsd  D70(%rip),%xmm0
  movl   $0x8,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
L119:
  movsd  D70(%rip),%xmm7
  comisd %xmm0,%xmm7
  jbe    L30
  mulsd  %xmm0,%xmm6
  movl   $0x7,(%rsi)
  cvttsd2si %xmm6,%eax
  mov    %eax,(%rdi)
  ret
L30:
  movsd  D146(%rip),%xmm6
  comisd %xmm0,%xmm6
  jbe    L78
  mulsd  %xmm0,%xmm5
  movl   $0x6,(%rsi)
  cvttsd2si %xmm5,%eax
  mov    %eax,(%rdi)
  ret
L78:
  movsd  D212(%rip),%xmm5
  comisd %xmm0,%xmm5
  jbe    L68
  mulsd  %xmm0,%xmm4
  movl   $0x5,(%rsi)
  cvttsd2si %xmm4,%eax
  mov    %eax,(%rdi)
  ret
L68:
  movsd  D234(%rip),%xmm4
  comisd %xmm0,%xmm4
  jbe    L48
  mulsd  %xmm0,%xmm3
  movl   $0x4,(%rsi)
  cvttsd2si %xmm3,%eax
  mov    %eax,(%rdi)
  ret
L48:
  movsd  D112(%rip),%xmm3
  comisd %xmm0,%xmm3
  jbe    L55
  mulsd  %xmm0,%xmm2
  movl   $0x3,(%rsi)
  cvttsd2si %xmm2,%eax
  mov    %eax,(%rdi)
  ret
L55:
  movsd  D4(%rip),%xmm2
  comisd %xmm0,%xmm2
  jbe    L54
  mulsd  %xmm0,%xmm1
  movl   $0x2,(%rsi)
  cvttsd2si %xmm1,%eax
  mov    %eax,(%rdi)
  ret
L54:
  movsd  D114(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L137
  addsd  %xmm0,%xmm0
  movl   $0x1,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
L137:
  movsd  D101(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L0
  cvttsd2si %xmm0,%eax
  movl   $0x0,(%rsi)
  mov    %eax,(%rdi)
L0:
  ret
```

tool_calls: name: parse_data
arguments: label: D50
data_type: f64
name: parse_data
arguments: label: D235
data_type: f64
name: parse_data
arguments: label: D114
data_type: f64
name: parse_data
arguments: label: D152
data_type: f64
name: parse_data
arguments: label: D194
data_type: f64
name: parse_data
arguments: label: D112
data_type: f64
name: parse_data
arguments: label: D101
data_type: f64
name: parse_data
arguments: label: D158
data_type: f64
name: parse_data
arguments: label: D75
data_type: f64
name: parse_data
arguments: label: D222
data_type: f64
name: parse_data
arguments: label: D212
data_type: f64
name: parse_data
arguments: label: D234
data_type: f64
name: parse_data
arguments: label: D92
data_type: f64
name: parse_data
arguments: label: D146
data_type: f64
name: parse_data
arguments: label: D24
data_type: f64
name: parse_data
arguments: label: D70
data_type: f64
name: parse_data
arguments: label: D4
data_type: f64

tool: D50: 1

tool: D235: 2

tool: D114: 16384

tool: D152: 4

tool: D194: 8

tool: D112: 4096

tool: D101: 32768

tool: D158: 8192

tool: D75: 16

tool: D222: 32

tool: D212: 1024

tool: D234: 2048

tool: D92: 64

tool: D146: 512

tool: D24: 128

tool: D70: 256

tool: D4: 81928

assistant: ```c
void double_to_fixed(double f_input, int32_t *pValue, int32_t *pBase) {
  if (f_input < 1.0) {
    (*pBase) = 15;
    (*pValue) = (int32_t)(32768.0 * f_input);
  } else if (f_input < 2.0) {
    (*pBase) = 14;
    (*pValue) = (int32_t)(16384.0 * f_input);
  } else if (f_input < 4.0) {
    (*pBase) = 13;
    (*pValue) = (int32_t)(8192.0 * f_input);
  } else if (f_input < 8.0) {
    (*pBase) = 12;
    (*pValue) = (int32_t)(4096.0 * f_input);
  } else if (f_input < 16.0) {
    (*pBase) = 11;
    (*pValue) = (int32_t)(2048.0 * f_input);
  } else if (f_input < 32.0) {
    (*pBase) = 10;
    (*pValue) = (int32_t)(1024.0 * f_input);
  } else if (f_input < 64.0) {
    (*pBase) = 9;
    (*pValue) = (int32_t)(512.0 * f_input);
  } else if (f_input < 128.0) {
    (*pBase) = 8;
    (*pValue) = (int32_t)(256.0 * f_input);
  } else if (f_input < 256.0) {
    (*pBase) = 7;
    (*pValue) = (int32_t)(128.0 * f_input);
  } else if (f_input < 512.0) {
    (*pBase) = 6;
    (*pValue) = (int32_t)(64.0 * f_input);
  } else if (f_input < 1024.0) {
    (*pBase) = 5;
    (*pValue) = (int32_t)(32.0 * f_input);
  } else if (f_input < 2048.0) {
    (*pBase) = 4;
    (*pValue) = (int32_t)(16.0 * f_input);
  } else if (f_input < 4096.0) {
    (*pBase) = 3;
    (*pValue) = (int32_t)(8.0 * f_input);
  } else if (f_input < 81928.0) {
    (*pBase) = 2;
    (*pValue) = (int32_t)(4.0 * f_input);
  } else if (f_input < 16384.0) {
    (*pBase) = 1;
    (*pValue) = (int32_t)(2.0 * f_input);
  } else if (f_input < 32768.0) {
    (*pBase) = 0;
    (*pValue) = (int32_t)(1.0 * f_input);
  }
}
```