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

```asm
<double_to_fixed>:
  endbr64
  movsd  D187(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L28
  movsd  D218(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L108
  mulsd  D43(%rip),%xmm0
  movl   $0xe,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   (%rax)
L108:
  movsd  D27(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L123
  movsd  D188(%rip),%xmm2
  comisd %xmm0,%xmm2
  jbe    L120
  mulsd  D109(%rip),%xmm0
  movl   $0xc,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   0x0(%rax)
L28:
  mulsd  D75(%rip),%xmm0
  movl   $0xf,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   (%rax)
L123:
  mulsd  D232(%rip),%xmm0
  movl   $0xd,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   (%rax)
L120:
  movsd  D78(%rip),%xmm3
  comisd %xmm0,%xmm3
  ja     L139
  movsd  D46(%rip),%xmm4
  comisd %xmm0,%xmm4
  jbe    L26
  mulsd  D125(%rip),%xmm0
  movl   $0xa,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   0x0(%rax)
L139:
  mulsd  D207(%rip),%xmm0
  movl   $0xb,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
  nopl   (%rax)
L26:
  movsd  D216(%rip),%xmm5
  comisd %xmm0,%xmm5
  jbe    L103
  mulsd  D94(%rip),%xmm0
  movl   $0x9,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
L103:
  movsd  D13(%rip),%xmm6
  comisd %xmm0,%xmm6
  jbe    L125
  mulsd  D148(%rip),%xmm0
  movl   $0x8,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
L125:
  movsd  D148(%rip),%xmm7
  comisd %xmm0,%xmm7
  jbe    L105
  mulsd  %xmm0,%xmm6
  movl   $0x7,(%rsi)
  cvttsd2si %xmm6,%eax
  mov    %eax,(%rdi)
  ret
L105:
  movsd  D94(%rip),%xmm6
  comisd %xmm0,%xmm6
  jbe    L133
  mulsd  %xmm0,%xmm5
  movl   $0x6,(%rsi)
  cvttsd2si %xmm5,%eax
  mov    %eax,(%rdi)
  ret
L133:
  movsd  D125(%rip),%xmm5
  comisd %xmm0,%xmm5
  jbe    L130
  mulsd  %xmm0,%xmm4
  movl   $0x5,(%rsi)
  cvttsd2si %xmm4,%eax
  mov    %eax,(%rdi)
  ret
L130:
  movsd  D207(%rip),%xmm4
  comisd %xmm0,%xmm4
  jbe    L147
  mulsd  %xmm0,%xmm3
  movl   $0x4,(%rsi)
  cvttsd2si %xmm3,%eax
  mov    %eax,(%rdi)
  ret
L147:
  movsd  D109(%rip),%xmm3
  comisd %xmm0,%xmm3
  jbe    L127
  mulsd  %xmm0,%xmm2
  movl   $0x3,(%rsi)
  cvttsd2si %xmm2,%eax
  mov    %eax,(%rdi)
  ret
L127:
  movsd  D230(%rip),%xmm2
  comisd %xmm0,%xmm2
  jbe    L128
  mulsd  %xmm0,%xmm1
  movl   $0x2,(%rsi)
  cvttsd2si %xmm1,%eax
  mov    %eax,(%rdi)
  ret
L128:
  movsd  D43(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L93
  addsd  %xmm0,%xmm0
  movl   $0x1,(%rsi)
  cvttsd2si %xmm0,%eax
  mov    %eax,(%rdi)
  ret
L93:
  movsd  D75(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L41
  cvttsd2si %xmm0,%eax
  movl   $0x0,(%rsi)
  mov    %eax,(%rdi)
L41:
  ret
```

tool_calls: name: read_data
arguments: tag: D187
type: f64
name: read_data
arguments: tag: D218
type: f64
name: read_data
arguments: tag: D43
type: f64
name: read_data
arguments: tag: D27
type: f64
name: read_data
arguments: tag: D188
type: f64
name: read_data
arguments: tag: D109
type: f64
name: read_data
arguments: tag: D75
type: f64
name: read_data
arguments: tag: D232
type: f64
name: read_data
arguments: tag: D78
type: f64
name: read_data
arguments: tag: D46
type: f64
name: read_data
arguments: tag: D125
type: f64
name: read_data
arguments: tag: D207
type: f64
name: read_data
arguments: tag: D216
type: f64
name: read_data
arguments: tag: D94
type: f64
name: read_data
arguments: tag: D13
type: f64
name: read_data
arguments: tag: D148
type: f64
name: read_data
arguments: tag: D230
type: f64

tool: D187: 1

tool: D218: 2

tool: D43: 16384

tool: D27: 4

tool: D188: 8

tool: D109: 4096

tool: D75: 32768

tool: D232: 8192

tool: D78: 16

tool: D46: 32

tool: D125: 1024

tool: D207: 2048

tool: D216: 64

tool: D94: 512

tool: D13: 128

tool: D148: 256

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