user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<por_write_double_to_buffer>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x38,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x28(%rsp)
  xor    %eax,%eax
  movsd  %xmm0,(%rsp)
  call   <isnan@plt>
  movsd  (%rsp),%xmm1
  test   %rax,%rax
  je     L37
  mov    $0x2e2a,%eax
  mov    $0x2,%r8d
  mov    %ax,(%rbx)
  mov    $0x2,%eax
L291:
  movb   $0x0,(%rbx,%rax,1)
L225:
  mov    0x28(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L168
  add    $0x38,%rsp
  mov    %r8d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L37:
  movapd %xmm1,%xmm0
  movsd  %xmm1,(%rsp)
  call   <isinf@plt>
  movsd  (%rsp),%xmm1
  test   %rax,%rax
  mov    %rax,%r14
  je     L129
  pxor   %xmm0,%xmm0
  comisd %xmm1,%xmm0
  ja     L18
  mov    %rbx,%r9
  mov    $0x5,%eax
  mov    $0x5,%r8d
  mov    $0x4,%edx
  mov    $0x3,%ecx
  mov    $0x2,%esi
  mov    $0x1,%edi
L234:
  movb   $0x31,(%r9)
  movb   $0x2b,(%rbx,%rdi,1)
  movb   $0x54,(%rbx,%rsi,1)
  movb   $0x54,(%rbx,%rcx,1)
  movb   $0x2f,(%rbx,%rdx,1)
  jmp    L291
L18:
  movb   $0x2d,(%rbx)
  lea    0x1(%rbx),%r9
  mov    $0x6,%eax
  mov    $0x6,%r8d
  mov    $0x5,%edx
  mov    $0x4,%ecx
  mov    $0x3,%esi
  mov    $0x2,%edi
  jmp    L234
  nopl   0x0(%rax,%rax,1)
L129:
  movapd %xmm1,%xmm0
  lea    0x20(%rsp),%r15
  movsd  %xmm1,(%rsp)
  andpd  D7(%rip),%xmm0
  mov    %r15,%rdi
  call   <modf@plt>
  movsd  (%rsp),%xmm1
  pxor   %xmm3,%xmm3
  cvttsd2si 0x20(%rsp),%edx
  comisd %xmm1,%xmm3
  ja     L24
  mov    %rbx,%rdi
  mov    $0x2,%r8d
  xor    %ebp,%ebp
  mov    $0x1,%esi
  xor    %ecx,%ecx
L238:
  test   %edx,%edx
  je     L224
  pxor   %xmm4,%xmm4
  ucomisd %xmm4,%xmm0
  jp     L148
  jne    L148
  movslq %edx,%rax
  mov    %edx,%r8d
  mov    %edx,%r10d
  imul   $0xffffffff88888889,%rax,%rsi
  sar    $0x1f,%r8d
  shr    $0x20,%rsi
  add    %edx,%esi
  sar    $0x4,%esi
  sub    %r8d,%esi
  imul   $0x1e,%esi,%esi
  sub    %esi,%r10d
  mov    %r10d,0x1c(%rsp)
  je     L91
L148:
  movl   $0x0,0x1c(%rsp)
  cs nopw 0x0(%rax,%rax,1)
L166:
  mov    %r13,%rsi
  movsd  %xmm0,(%rsp)
  sub    %rcx,%rsi
  call   <por_write_base30_integer@plt>
  movsd  (%rsp),%xmm0
  pxor   %xmm6,%xmm6
  movslq %eax,%r14
  mov    %r14,%r8
  add    %ebp,%r8d
  movslq %r8d,%rsi
  add    $0x1,%r8d
  ucomisd %xmm6,%xmm0
  lea    (%rbx,%rsi,1),%rax
  jp     L155
  je     L185
L155:
  movb   $0x2e,(%rax)
  cmp    %r12,%r14
  jge    L296
  lea    0x1(%r8),%eax
  movslq %r8d,%r8
  mov    %r14,%rbp
  sub    %r14,%r8
  mov    %eax,0xc(%rsp)
  lea    (%rbx,%r8,1),%rax
  mov    %rax,0x10(%rsp)
  jmp    L150
  nopl   0x0(%rax)
L164:
  mov    0xc(%rsp),%eax
  movsd  %xmm0,(%rsp)
  sub    %r14d,%eax
  add    %ebp,%eax
  mov    %eax,0x18(%rsp)
  call   <por_encode_base30_digit@plt>
  mov    0x10(%rsp),%rcx
  movsd  (%rsp),%xmm0
  pxor   %xmm2,%xmm2
  mov    %al,(%rcx,%rbp,1)
  add    $0x1,%rbp
  ucomisd %xmm2,%xmm0
  mov    $0x1,%ecx
  setp   %al
  cmovne %ecx,%eax
  test   %al,%al
  je     L60
  cmp    %rbp,%r12
  jle    L60
L150:
  mulsd  D4(%rip),%xmm0
  mov    %r15,%rdi
  call   <modf@plt>
  cvttsd2si 0x20(%rsp),%edi
  test   %edi,%edi
  jns    L164
  mov    $0xffffffff,%r8d
  jmp    L225
  nopl   0x0(%rax)
L177:
  imul   $0xeeeeeeef,%eax,%eax
  add    $0x8888888,%eax
  ror    %eax
  cmp    $0x8888888,%eax
  ja     L166
  movslq %edx,%rax
L91:
  imul   $0xffffffff88888889,%rax,%rax
  mov    %edx,%esi
  addl   $0x1,0x1c(%rsp)
  sar    $0x1f,%esi
  shr    $0x20,%rax
  add    %edx,%eax
  sar    $0x4,%eax
  sub    %esi,%eax
  mov    %eax,%edx
  jne    L177
  jmp    L166
L224:
  pxor   %xmm5,%xmm5
  movb   $0x30,(%rdi)
  lea    (%rbx,%rsi,1),%rax
  ucomisd %xmm5,%xmm0
  jp     L29
  jne    L29
L116:
  movb   $0x2f,(%rbx,%rsi,1)
  movslq %r8d,%rax
  jmp    L291
  nop
L60:
  movslq 0x18(%rsp),%rsi
  lea    0x1(%rsi),%r8d
L185:
  mov    0x1c(%rsp),%edx
  test   %edx,%edx
  je     L116
  movb   $0x2b,(%rbx,%rsi,1)
  movslq %r8d,%rdi
  mov    %r13,%rsi
  sub    %rdi,%rsi
  add    %rbx,%rdi
  mov    %r8d,(%rsp)
  call   <por_write_base30_integer@plt>
  mov    (%rsp),%r8d
  add    %r8d,%eax
  movslq %eax,%rsi
  lea    0x1(%rax),%r8d
  jmp    L116
  nopw   0x0(%rax,%rax,1)
L29:
  movl   $0x0,0x1c(%rsp)
  jmp    L155
  nopl   (%rax)
L24:
  movb   $0x2d,(%rbx)
  lea    0x1(%rbx),%rdi
  mov    $0x3,%r8d
  mov    $0x1,%ebp
  mov    $0x2,%esi
  mov    $0x1,%ecx
  jmp    L238
L168:
  call   <__stack_chk_fail@plt>
L296:
  movslq %r8d,%rsi
  add    $0x1,%r8d
  jmp    L185
```

tool_calls: name: read_data
arguments: data_tag: D7
type_guessed: qword[2]
name: read_data
arguments: data_tag: D4
type_guessed: f32[2]

tool: {"D7": [0x7fffffffffffffff,0x0000000000000000]}

tool: {"D4": [0.0,2.96875]}

assistant: ```c
ssize_t por_write_double_to_buffer(char *string, size_t buffer_len, double value, long precision) {
  int offset = 0;
  if (isnan(value)) {
    string[offset++] = '*';
    string[offset++] = '.';
  } else if (isinf(value)) {
    if (value < 0.0) {
      string[offset++] = '-';
    }
    string[offset++] = '1';
    string[offset++] = '+';
    string[offset++] = 'T';
    string[offset++] = 'T';
    string[offset++] = '/';
  } else {
    long integers_printed = 0;
    double integer_part;
    double fraction = modf(fabs(value), &integer_part);
    int64_t integer = integer_part;
    int64_t exponent = 0;
    if (value < 0.0) {
      string[offset++] = '-';
    }
    if (integer == 0) {
      string[offset++] = '0';
    } else {
      while (fraction == 0 && integer != 0 && (integer % 30) == 0) {
        integer /= 30;
        exponent++;
      }
      integers_printed = por_write_base30_integer(&string[offset], buffer_len - offset, integer);
      offset += integers_printed;
    }
    if (fraction) {
      string[offset++] = '.';
    }
    while (fraction && integers_printed < precision) {
      fraction = modf(fraction * 30, &integer_part);
      integer = integer_part;
      if (integer < 0) {
        return -1;
      } else {
        string[offset++] = por_encode_base30_digit(integer);
      }
      integers_printed++;
    }
    if (exponent) {
      string[offset++] = '+';
      offset += por_write_base30_integer(&string[offset], buffer_len - offset, exponent);
    }
    string[offset++] = '/';
  }
  string[offset] = '\0';
  return offset;
}
```