user: Converte this assembly snippet into its equivalent C code:

```asm
<test_grisu3_print_double>:
  endbr64
  push   %r15
  lea    D75(%rip),%r15
  mov    $0xfffffffe,%ecx
  push   %r14
  lea    D10(%rip),%r14
  mov    %r15,%rdx
  push   %r13
  mov    %r14,%rsi
  push   %r12
  lea    D26(%rip),%r12
  push   %rbp
  push   %rbx
  sub    $0x418,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x408(%rsp)
  xor    %eax,%eax
  lea    0x10(%rsp),%rbp
  lea    0x8(%rsp),%r13
  movl   $0x0,0x4(%rsp)
  mov    %rbp,%rdi
  lea    0x4(%rsp),%rbx
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x19b,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffd,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  lea    D51(%rip),%r15
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x19c,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffe,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x19f,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffd,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  lea    D19(%rip),%r15
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1a0,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffe,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1a2,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffd,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1a3,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1a5,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffff6,%edi
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1a6,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffff6,%edi
  call   <check_double@plt>
  xor    %ecx,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1a7,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffffff,%edi
  call   <check_double@plt>
  mov    $0xffffffff,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1a8,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffe,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1a9,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffd,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1aa,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffc,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  lea    D89(%rip),%r15
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1ab,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1ad,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffff88,%edi
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1ae,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffff88,%edi
  call   <check_double@plt>
  xor    %ecx,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1af,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffff4,%edi
  call   <check_double@plt>
  mov    $0xffffffff,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1b0,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffffff,%edi
  call   <check_double@plt>
  mov    $0xfffffffe,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1b1,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffd,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1b2,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffc,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  lea    D17(%rip),%r15
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1b3,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1b5,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffb32,%edi
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1b6,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffb32,%edi
  call   <check_double@plt>
  xor    %ecx,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1b7,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffff85,%edi
  call   <check_double@plt>
  mov    $0xffffffff,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1b8,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffff4,%edi
  call   <check_double@plt>
  mov    $0xfffffffe,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1b9,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffffff,%edi
  call   <check_double@plt>
  mov    $0xfffffffd,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1ba,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffc,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  lea    D15(%rip),%r15
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1bb,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1bd,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffcfcc,%edi
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1be,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffcfcc,%edi
  call   <check_double@plt>
  xor    %ecx,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1bf,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffb2e,%edi
  call   <check_double@plt>
  mov    $0xffffffff,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1c0,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffff85,%edi
  call   <check_double@plt>
  mov    $0xfffffffe,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1c1,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffff4,%edi
  call   <check_double@plt>
  mov    $0xfffffffd,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1c2,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffffff,%edi
  call   <check_double@plt>
  mov    $0xfffffffc,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  lea    D72(%rip),%r15
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1c3,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1c5,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffe1dc6,%edi
  call   <check_double@plt>
  mov    $0x1,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1c6,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffe1dc6,%edi
  call   <check_double@plt>
  xor    %ecx,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1c7,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffcfc7,%edi
  call   <check_double@plt>
  mov    $0xffffffff,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1c8,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffb2e,%edi
  call   <check_double@plt>
  mov    $0xfffffffe,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1c9,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffff85,%edi
  call   <check_double@plt>
  mov    $0xfffffffd,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1ca,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xfffffff4,%edi
  call   <check_double@plt>
  mov    $0xfffffffc,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  mov    %rbx,%r8
  mov    $0x1cb,%ecx
  mov    %r12,%rdx
  cvttsd2si 0x8(%rsp),%esi
  mov    $0xffffffff,%edi
  call   <check_double@plt>
  mov    $0xfffffffb,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1cd,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffffa,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1ce,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffff9,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1cf,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffff8,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1d0,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffff7,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1d1,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    $0xfffffff6,%ecx
  mov    %r15,%rdx
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <strlen@plt>
  mov    %r13,%rdx
  mov    %rbp,%rdi
  mov    %eax,%esi
  call   <grisu3_parse_double@plt>
  cvttsd2si 0x8(%rsp),%esi
  mov    %rbx,%r8
  xor    %edi,%edi
  mov    $0x1d2,%ecx
  mov    %r12,%rdx
  call   <check_double@plt>
  mov    0x4(%rsp),%eax
  mov    0x408(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L9
  add    $0x418,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L9:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: read_data
arguments: label: D75
datatype: string
name: read_data
arguments: label: D10
datatype: string
name: read_data
arguments: label: D26
datatype: string
name: read_data
arguments: label: D51
datatype: string
name: read_data
arguments: label: D19
datatype: string
name: read_data
arguments: label: D89
datatype: string
name: read_data
arguments: label: D17
datatype: string
name: read_data
arguments: label: D15
datatype: string
name: read_data
arguments: label: D72
datatype: string

tool: D75: 13

tool: D10: %se%d

tool: D26: grisu3_print_double

tool: D51: -13

tool: D19: -1

tool: D89: -12

tool: D17: -123

tool: D15: -1234

tool: D72: -12345

assistant: ```c
int test_grisu3_print_double() {
  int fail = 0;
  char *id = "grisu3_print_double";
  double v;
  char *vector;
  char buf[1001];
  vector = "13";
  check_double((13e-2), ((sprintf(buf, "%se%d", vector, -2), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 411, &fail);
  check_double((13e-3), ((sprintf(buf, "%se%d", vector, -3), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 412, &fail);
  vector = "-13";
  check_double((-13e-2), ((sprintf(buf, "%se%d", vector, -2), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 415, &fail);
  check_double((-13e-3), ((sprintf(buf, "%se%d", vector, -3), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 416, &fail);
  vector = "-1";
  check_double((-1e-2), ((sprintf(buf, "%se%d", vector, -2), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 418, &fail);
  check_double((-1e-3), ((sprintf(buf, "%se%d", vector, -3), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 419, &fail);
  check_double((-1e1), ((sprintf(buf, "%se%d", "-1", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 421, &fail);
  check_double((-1e+1), ((sprintf(buf, "%se%d", "-1", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 422, &fail);
  check_double((-1e-0), ((sprintf(buf, "%se%d", "-1", -0), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 423, &fail);
  check_double((-1e-1), ((sprintf(buf, "%se%d", "-1", -1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 424, &fail);
  check_double((-1e-2), ((sprintf(buf, "%se%d", "-1", -2), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 425, &fail);
  check_double((-1e-3), ((sprintf(buf, "%se%d", "-1", -3), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 426, &fail);
  check_double((-1e-4), ((sprintf(buf, "%se%d", "-1", -4), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 427, &fail);
  check_double((-12e1), ((sprintf(buf, "%se%d", "-12", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 429, &fail);
  check_double((-12e+1), ((sprintf(buf, "%se%d", "-12", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 430, &fail);
  check_double((-12e-0), ((sprintf(buf, "%se%d", "-12", -0), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 431, &fail);
  check_double((-12e-1), ((sprintf(buf, "%se%d", "-12", -1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 432, &fail);
  check_double((-12e-2), ((sprintf(buf, "%se%d", "-12", -2), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 433, &fail);
  check_double((-12e-3), ((sprintf(buf, "%se%d", "-12", -3), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 434, &fail);
  check_double((-12e-4), ((sprintf(buf, "%se%d", "-12", -4), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 435, &fail);
  check_double((-123e1), ((sprintf(buf, "%se%d", "-123", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 437, &fail);
  check_double((-123e+1), ((sprintf(buf, "%se%d", "-123", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 438, &fail);
  check_double((-123e-0), ((sprintf(buf, "%se%d", "-123", -0), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 439, &fail);
  check_double((-123e-1), ((sprintf(buf, "%se%d", "-123", -1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 440, &fail);
  check_double((-123e-2), ((sprintf(buf, "%se%d", "-123", -2), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 441, &fail);
  check_double((-123e-3), ((sprintf(buf, "%se%d", "-123", -3), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 442, &fail);
  check_double((-123e-4), ((sprintf(buf, "%se%d", "-123", -4), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 443, &fail);
  check_double((-1234e1), ((sprintf(buf, "%se%d", "-1234", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 445, &fail);
  check_double((-1234e+1), ((sprintf(buf, "%se%d", "-1234", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 446, &fail);
  check_double((-1234e-0), ((sprintf(buf, "%se%d", "-1234", -0), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 447, &fail);
  check_double((-1234e-1), ((sprintf(buf, "%se%d", "-1234", -1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 448, &fail);
  check_double((-1234e-2), ((sprintf(buf, "%se%d", "-1234", -2), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 449, &fail);
  check_double((-1234e-3), ((sprintf(buf, "%se%d", "-1234", -3), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 450, &fail);
  check_double((-1234e-4), ((sprintf(buf, "%se%d", "-1234", -4), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 451, &fail);
  check_double((-12345e1), ((sprintf(buf, "%se%d", "-12345", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 453, &fail);
  check_double((-12345e+1), ((sprintf(buf, "%se%d", "-12345", 1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 454, &fail);
  check_double((-12345e-0), ((sprintf(buf, "%se%d", "-12345", -0), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 455, &fail);
  check_double((-12345e-1), ((sprintf(buf, "%se%d", "-12345", -1), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 456, &fail);
  check_double((-12345e-2), ((sprintf(buf, "%se%d", "-12345", -2), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 457, &fail);
  check_double((-12345e-3), ((sprintf(buf, "%se%d", "-12345", -3), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 458, &fail);
  check_double((-12345e-4), ((sprintf(buf, "%se%d", "-12345", -4), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 459, &fail);
  check_double((-12345e-5), ((sprintf(buf, "%se%d", "-12345", -5), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 461, &fail);
  check_double((-12345e-6), ((sprintf(buf, "%se%d", "-12345", -6), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 462, &fail);
  check_double((-12345e-7), ((sprintf(buf, "%se%d", "-12345", -7), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 463, &fail);
  check_double((-12345e-8), ((sprintf(buf, "%se%d", "-12345", -8), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 464, &fail);
  check_double((-12345e-9), ((sprintf(buf, "%se%d", "-12345", -9), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 465, &fail);
  check_double((-12345e-10), ((sprintf(buf, "%se%d", "-12345", -10), grisu3_parse_double(buf, strlen(buf), &v), v)), id, 466, &fail);
  return fail;
}
```