user: 请显示与下面列出的汇编代码相匹配的C语言实现:

```asm
<double_to_fixed>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  movsd  %xmm0,-0x8(%rbp)
  mov    %rdi,-0x10(%rbp)
  mov    %rsi,-0x18(%rbp)
  movsd  D73(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L42
  mov    -0x18(%rbp),%rax
  movl   $0xf,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D11(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L42:
  movsd  D8(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L8
  mov    -0x18(%rbp),%rax
  movl   $0xe,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D105(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L8:
  movsd  D293(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L236
  mov    -0x18(%rbp),%rax
  movl   $0xd,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D179(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L236:
  movsd  D108(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L237
  mov    -0x18(%rbp),%rax
  movl   $0xc,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D249(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L237:
  movsd  D45(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L169
  mov    -0x18(%rbp),%rax
  movl   $0xb,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D86(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L169:
  movsd  D153(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L318
  mov    -0x18(%rbp),%rax
  movl   $0xa,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D7(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L318:
  movsd  D238(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L204
  mov    -0x18(%rbp),%rax
  movl   $0x9,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D109(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L204:
  movsd  D52(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L289
  mov    -0x18(%rbp),%rax
  movl   $0x8,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D21(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L289:
  movsd  D21(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L0
  mov    -0x18(%rbp),%rax
  movl   $0x7,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D52(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L0:
  movsd  D109(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L249
  mov    -0x18(%rbp),%rax
  movl   $0x6,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D238(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L249:
  movsd  D7(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L19
  mov    -0x18(%rbp),%rax
  movl   $0x5,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D153(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L19:
  movsd  D86(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L251
  mov    -0x18(%rbp),%rax
  movl   $0x4,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D45(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L251:
  movsd  D249(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L93
  mov    -0x18(%rbp),%rax
  movl   $0x3,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D108(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L93:
  movsd  D56(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L112
  mov    -0x18(%rbp),%rax
  movl   $0x2,(%rax)
  movsd  -0x8(%rbp),%xmm1
  movsd  D293(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L112:
  movsd  D105(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  jbe    L97
  mov    -0x18(%rbp),%rax
  movl   $0x1,(%rax)
  movsd  -0x8(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L315
L97:
  movsd  D11(%rip),%xmm0
  comisd -0x8(%rbp),%xmm0
  ja     L52
  jmp    L315
L52:
  mov    -0x18(%rbp),%rax
  movl   $0x0,(%rax)
  movsd  -0x8(%rbp),%xmm0
  cvttsd2si %xmm0,%edx
  mov    -0x10(%rbp),%rax
  mov    %edx,(%rax)
L315:
  nop
  pop    %rbp
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D73
type: f64
name: disassemble_data
arguments: tag: D11
type: f64
name: disassemble_data
arguments: tag: D8
type: f64
name: disassemble_data
arguments: tag: D105
type: f64
name: disassemble_data
arguments: tag: D293
type: f64
name: disassemble_data
arguments: tag: D179
type: f64
name: disassemble_data
arguments: tag: D108
type: f64
name: disassemble_data
arguments: tag: D249
type: f64
name: disassemble_data
arguments: tag: D45
type: f64
name: disassemble_data
arguments: tag: D86
type: f64
name: disassemble_data
arguments: tag: D153
type: f64
name: disassemble_data
arguments: tag: D7
type: f64
name: disassemble_data
arguments: tag: D238
type: f64
name: disassemble_data
arguments: tag: D109
type: f64
name: disassemble_data
arguments: tag: D52
type: f64
name: disassemble_data
arguments: tag: D21
type: f64
name: disassemble_data
arguments: tag: D56
type: f64

tool: D73: 1

tool: D11: 32768

tool: D8: 2

tool: D105: 16384

tool: D293: 4

tool: D179: 8192

tool: D108: 8

tool: D249: 4096

tool: D45: 16

tool: D86: 2048

tool: D153: 32

tool: D7: 1024

tool: D238: 64

tool: D109: 512

tool: D52: 128

tool: D21: 256

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