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

```asm
<dt_binary>:
  endbr64
  push   %r15
  movslq %edx,%r15
  push   %r14
  mov    %ecx,%r14d
  push   %r13
  mov    %rdi,%r13
  mov    %esi,%edi
  push   %r12
  imul   %r15d,%edi
  mov    %r15,%r12
  push   %rbp
  push   %rbx
  mov    %esi,%ebx
  shl    $0x3,%edi
  sub    $0x78,%rsp
  mov    %esi,0x14(%rsp)
  mov    %ecx,0x18(%rsp)
  mov    %r15,0x20(%rsp)
  call   <malloc@plt>
  mov    %rax,%rbp
  test   %ebx,%ebx
  jle    L365
  test   %r15d,%r15d
  jle    L365
  mov    %r15d,%r8d
  mov    %r12d,%r10d
  mov    %rbp,%rdx
  mov    %r13,%rdi
  and    $0xfffffff0,%r8d
  shl    $0x3,%r10
  lea    0x0(,%r15,8),%rax
  movsd  D27(%rip),%xmm7
  lea    0x4(%r8),%ecx
  mov    %rax,0x28(%rsp)
  movslq %r14d,%rax
  lea    0x9(%r8),%esi
  mov    %rax,0x30(%rsp)
  mov    %r15d,%eax
  lea    0x1(%r8),%ebx
  lea    0x2(%r8),%r14d
  mov    %ecx,0x10(%rsp)
  lea    0x5(%r8),%ecx
  shr    $0x4,%eax
  lea    0x3(%r8),%r15d
  mov    %ecx,0x1c(%rsp)
  lea    0x6(%r8),%ecx
  sub    $0x1,%eax
  xor    %r9d,%r9d
  mov    %ecx,0x48(%rsp)
  lea    0x7(%r8),%ecx
  add    $0x1,%rax
  movapd D27(%rip),%xmm3
  mov    %ecx,0x50(%rsp)
  lea    0x8(%r8),%ecx
  shl    $0x4,%rax
  mov    %ecx,0x54(%rsp)
  lea    0xa(%r8),%ecx
  mov    %esi,0x58(%rsp)
  lea    0xb(%r8),%esi
  mov    %ecx,0x5c(%rsp)
  lea    0xc(%r8),%ecx
  mov    %esi,0x60(%rsp)
  lea    0xd(%r8),%esi
  mov    %r10,0x38(%rsp)
  mov    %rax,0x40(%rsp)
  mov    %ecx,0x64(%rsp)
  lea    0xe(%r8),%ecx
  mov    %esi,0x68(%rsp)
  lea    -0x1(%r12),%esi
  mov    %ecx,0x6c(%rsp)
  xor    %ecx,%ecx
  mov    %esi,0x4c(%rsp)
  xor    %esi,%esi
  nopw   0x0(%rax,%rax,1)
L84:
  mov    0x20(%rsp),%r10
  mov    0x28(%rsp),%r11
  mov    %rdx,%rax
  add    %rdi,%r10
  cmp    %r10,%rdx
  lea    (%rdx,%r11,1),%r10
  setae  0xf(%rsp)
  cmp    %r10,%rdi
  setae  %r11b
  or     0xf(%rsp),%r11b
  je     L247
  cmpl   $0xe,0x4c(%rsp)
  jbe    L247
  mov    0x40(%rsp),%rdx
  pxor   %xmm5,%xmm5
  pxor   %xmm6,%xmm6
  pxor   %xmm4,%xmm4
  lea    (%rdx,%rdi,1),%r11
  mov    %rdi,%rdx
  nopl   0x0(%rax)
L406:
  movdqu (%rdx),%xmm0
  movdqa %xmm5,%xmm2
  movdqa %xmm6,%xmm9
  movdqa %xmm4,%xmm10
  movdqa %xmm4,%xmm11
  movdqa %xmm4,%xmm13
  add    $0x10,%rdx
  sub    $0xffffffffffffff80,%rax
  pcmpeqb %xmm5,%xmm0
  pcmpeqb %xmm5,%xmm0
  pcmpgtb %xmm0,%xmm2
  movdqa %xmm0,%xmm1
  punpcklbw %xmm2,%xmm1
  punpckhbw %xmm2,%xmm0
  movdqa %xmm6,%xmm2
  pcmpgtw %xmm1,%xmm2
  pcmpgtw %xmm0,%xmm9
  movdqa %xmm1,%xmm8
  punpcklwd %xmm2,%xmm8
  punpckhwd %xmm2,%xmm1
  movdqa %xmm0,%xmm2
  pcmpgtd %xmm8,%xmm10
  pcmpgtd %xmm1,%xmm11
  punpcklwd %xmm9,%xmm2
  punpckhwd %xmm9,%xmm0
  movdqa %xmm8,%xmm9
  movdqa %xmm2,%xmm12
  pcmpgtd %xmm0,%xmm13
  punpckldq %xmm10,%xmm9
  punpckhdq %xmm10,%xmm8
  movdqa %xmm1,%xmm10
  punpckldq %xmm11,%xmm10
  punpckhdq %xmm11,%xmm1
  movdqa %xmm4,%xmm11
  pcmpgtd %xmm2,%xmm11
  andpd  %xmm3,%xmm9
  andpd  %xmm3,%xmm8
  andpd  %xmm3,%xmm10
  andpd  %xmm3,%xmm1
  movups %xmm9,-0x80(%rax)
  movups %xmm8,-0x70(%rax)
  punpckldq %xmm11,%xmm12
  punpckhdq %xmm11,%xmm2
  movdqa %xmm0,%xmm11
  movups %xmm1,-0x50(%rax)
  punpckldq %xmm13,%xmm11
  punpckhdq %xmm13,%xmm0
  andpd  %xmm3,%xmm12
  movups %xmm10,-0x60(%rax)
  andpd  %xmm3,%xmm2
  andpd  %xmm3,%xmm11
  andpd  %xmm3,%xmm0
  movups %xmm12,-0x40(%rax)
  movups %xmm2,-0x30(%rax)
  movups %xmm11,-0x20(%rax)
  movups %xmm0,-0x10(%rax)
  cmp    %r11,%rdx
  jne    L406
  cmp    %r12d,%r8d
  je     L391
  lea    (%rsi,%r8,1),%eax
  movapd %xmm7,%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L159
  pxor   %xmm0,%xmm0
L159:
  lea    (%rcx,%r8,1),%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  cmp    %r12d,%ebx
  jge    L391
  lea    (%rbx,%rsi,1),%eax
  movapd %xmm7,%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L127
  pxor   %xmm0,%xmm0
L127:
  lea    (%rbx,%rcx,1),%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  cmp    %r12d,%r14d
  jge    L391
  lea    (%r14,%rsi,1),%eax
  movapd %xmm7,%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L310
  pxor   %xmm0,%xmm0
L310:
  lea    (%r14,%rcx,1),%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  cmp    %r15d,%r12d
  jle    L391
  lea    (%rsi,%r15,1),%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L93
  pxor   %xmm0,%xmm0
L93:
  lea    (%rcx,%r15,1),%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x10(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L241
  pxor   %xmm0,%xmm0
L241:
  mov    0x10(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x1c(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L287
  pxor   %xmm0,%xmm0
L287:
  mov    0x1c(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x48(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L262
  pxor   %xmm0,%xmm0
L262:
  mov    0x48(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x50(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L67
  pxor   %xmm0,%xmm0
L67:
  mov    0x50(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x54(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L277
  pxor   %xmm0,%xmm0
L277:
  mov    0x54(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x58(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L305
  pxor   %xmm0,%xmm0
L305:
  mov    0x58(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x5c(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L36
  pxor   %xmm0,%xmm0
L36:
  mov    0x5c(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x60(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L401
  pxor   %xmm0,%xmm0
L401:
  mov    0x60(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x64(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L345
  pxor   %xmm0,%xmm0
L345:
  mov    0x64(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x68(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L79
  pxor   %xmm0,%xmm0
L79:
  mov    0x68(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  mov    0x6c(%rsp),%eax
  cmp    %eax,%r12d
  jle    L391
  add    %esi,%eax
  movsd  D27(%rip),%xmm0
  cltq
  cmpb   $0x0,0x0(%r13,%rax,1)
  jne    L215
  pxor   %xmm0,%xmm0
L215:
  mov    0x6c(%rsp),%eax
  add    %ecx,%eax
  cltq
  movsd  %xmm0,0x0(%rbp,%rax,8)
  nopl   0x0(%rax)
L391:
  add    $0x1,%r9d
  mov    %r10,%rdx
  add    0x30(%rsp),%rdi
  add    %r12d,%ecx
  add    0x18(%rsp),%esi
  cmp    0x14(%rsp),%r9d
  jne    L84
L365:
  mov    0x14(%rsp),%ebx
  mov    %r12d,%edx
  mov    %rbp,%rdi
  mov    %ebx,%esi
  call   <dt@plt>
  mov    %ebx,%esi
  mov    %rbp,%rdi
  imul   %r12d,%esi
  call   <sqrt_m@plt>
  mov    0x18(%rsp),%r8d
  mov    %rbp,%rdi
  mov    %r13,%rcx
  mov    %r12d,%edx
  mov    %ebx,%esi
  call   <double_to_image@plt>
  add    $0x78,%rsp
  mov    %rbp,%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <free@plt>
  nopl   0x0(%rax,%rax,1)
L247:
  mov    0x38(%rsp),%rax
  mov    %rdi,%r11
  add    %rdx,%rax
L384:
  cmpb   $0x0,(%r11)
  je     L162
L119:
  movsd  %xmm7,(%rdx)
  add    $0x8,%rdx
  add    $0x1,%r11
  cmp    %rax,%rdx
  je     L391
  cmpb   $0x0,(%r11)
  jne    L119
L162:
  movq   $0x0,(%rdx)
  add    $0x8,%rdx
  add    $0x1,%r11
  cmp    %rax,%rdx
  jne    L384
  jmp    L391
```

tool_calls: name: disassemble_data
arguments: label: D27
data_type: f64[2]

tool: {"D27": [1e20,1e20]}

assistant: ```c
void dt_binary(unsigned char *bimg, int rows, int cols, int step) {
  double *m = (double *)malloc(sizeof(m[0]) * rows * cols);
  int i, j;
  for (i = 0; i < rows; ++i) {
    for (j = 0; j < cols; ++j) {
      m[i * cols + j] = bimg[i * step + j] > 0 ? +1E20 : 0.0;
    }
  }
  dt(m, rows, cols);
  sqrt_m(m, rows * cols);
  double_to_image(m, rows, cols, bimg, step);
  free(m);
}
```