user: Demonstrate the C code that generates the assembly output below:

```asm
<utils_dtofixstr>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  mov    %esi,%ebx
  lea    0x1(%rbp),%r13
  sub    $0x10,%rsp
  ucomisd %xmm0,%xmm0
  movsd  %xmm0,0x8(%rsp)
  setnp  %dil
  movzbl %dil,%edi
  call   <assert@plt>
  movsd  0x8(%rsp),%xmm0
  xor    %edi,%edi
  movapd %xmm0,%xmm1
  andpd  D16(%rip),%xmm1
  ucomisd D4(%rip),%xmm1
  setbe  %dil
  call   <assert@plt>
  movsd  0x8(%rsp),%xmm0
  mov    %r12d,%edi
  call   <utils_roundd@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  call   <utils_dtostr@plt>
  cmpb   $0x0,0x1(%rbp)
  mov    %r13,%rcx
  mov    $0x1,%eax
  je     L60
  sub    %r13d,%eax
  nopl   (%rax)
L11:
  lea    (%rax,%rcx,1),%edx
  add    $0x1,%rcx
  cmpb   $0x0,(%rcx)
  jne    L11
  lea    0x1(%rdx),%eax
  cmp    %edx,%ebx
  jl     L36
L43:
  add    $0x1,%ebx
  mov    %rcx,%rdi
  mov    $0x30,%esi
  mov    %ebx,%r14d
  sub    %eax,%r14d
  add    $0x1,%r14
  cmp    %eax,%ebx
  mov    $0x1,%eax
  cmovl  %rax,%r14
  mov    %r14,%rdx
  call   <memset@plt>
  mov    %rax,%rcx
  add    %r14,%rcx
L63:
  movb   $0x0,(%rcx)
  cmpb   $0x2d,0x0(%rbp)
  je     L59
  mov    $0x1,%esi
  mov    %rbp,%rdi
  call   <_shift_right_nstr@plt>
  movb   $0x20,0x0(%rbp)
L59:
  mov    $0x2e,%esi
  mov    %r13,%rdi
  call   <strchr@plt>
  mov    %rax,%rdx
  test   %rax,%rax
  je     L106
  cmpb   $0x0,0x1(%rdx)
  lea    0x1(%rax),%rax
  je     L5
  mov    $0x1,%edx
  sub    %eax,%edx
  nopl   (%rax)
L62:
  lea    (%rdx,%rax,1),%ecx
  add    $0x1,%rax
  cmpb   $0x0,(%rax)
  jne    L62
L6:
  mov    %ecx,%esi
  sub    %r12d,%esi
  test   %esi,%esi
  jle    L28
  mov    %r13,%rdi
  call   <_shift_right_nstr@plt>
L106:
  movslq %ebx,%rbx
  movb   $0x0,0x1(%rbp,%rbx,1)
  add    $0x10,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopw   0x0(%rax,%rax,1)
L28:
  je     L106
  mov    %r12d,%esi
  mov    %r13,%rdi
  sub    %ecx,%esi
  call   <_shift_left_nstr@plt>
  jmp    L106
  nopl   0x0(%rax)
L60:
  xor    %edx,%edx
  cmp    %edx,%ebx
  jge    L43
  nopw   0x0(%rax,%rax,1)
L36:
  add    $0x1,%ebx
  jmp    L63
L5:
  xor    %ecx,%ecx
  jmp    L6
```

tool_calls: name: read_data
arguments: data_label: D16
type_infered: byte[16]
name: read_data
arguments: data_label: D4
type_infered: byte[8]

tool: {"D16": [0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D4": [0xff,0xff,0xff,0xff,0xff,0xff,0xef,0x7f]}

assistant: ```c
void utils_dtofixstr(char *buff, int digits, int dplaces, double value) {
  assert(!isnan(value));
  assert(!isinf(value));
  value = utils_roundd(value, dplaces);
  utils_dtostr(buff, digits, value);
  char *out = buff;
  int i = 0;
  while (*++out)
    i++;
  while (i++ <= digits)
    *out++ = '0';
  *out = 0;
  out = buff;
  if (*out++ != '-') {
    _shift_right_nstr(buff, 1);
    *buff = ' ';
  }
  char *dp = strchr(out, '.');
  i = 0;
  if (!dp) {
    i = dplaces;
  } else {
    while (*++dp)
      i++;
  }
  int shift = i - dplaces;
  if (shift > 0) {
    _shift_right_nstr(out, shift);
  } else if (shift < 0) {
    _shift_left_nstr(out, -1 * shift);
  }
  out[digits + 1] = 0;
}
```