user: 下面的汇编指令对应的C源代码是什么：

```asm
<createLineMtr>:
  endbr64
  push   %r15
  movaps %xmm2,%xmm5
  push   %r14
  subss  %xmm0,%xmm5
  push   %rbp
  movd   %xmm3,%ebp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x28,%rsp
  movss  %xmm1,0xc(%rsp)
  movaps %xmm2,%xmm1
  movss  %xmm5,0x14(%rsp)
  movss  %xmm2,0x10(%rsp)
  movss  %xmm0,0x8(%rsp)
  call   <fmax@plt>
  movd   %ebp,%xmm1
  movd   %xmm0,%r14d
  movss  0xc(%rsp),%xmm0
  call   <fmax@plt>
  movss  0x10(%rsp),%xmm2
  movss  0x8(%rsp),%xmm4
  movd   %xmm0,%r15d
  movaps %xmm2,%xmm1
  movaps %xmm4,%xmm0
  movss  %xmm4,0x10(%rsp)
  call   <fmin@plt>
  movd   %ebp,%xmm1
  movss  %xmm0,0x8(%rsp)
  movss  0xc(%rsp),%xmm0
  call   <fmin@plt>
  movss  0x14(%rsp),%xmm5
  movss  0x8(%rsp),%xmm2
  movaps %xmm0,%xmm1
  pxor   %xmm0,%xmm0
  movss  0x10(%rsp),%xmm4
  ucomiss %xmm0,%xmm5
  jp     L5
  je     L17
L5:
  movd   %ebp,%xmm3
  subss  0xc(%rsp),%xmm3
  ucomiss %xmm0,%xmm3
  jp     L114
  jne    L114
  movd   %r14d,%xmm5
  movss  D25(%rip),%xmm6
  comiss %xmm2,%xmm5
  movss  %xmm6,0x8(%rsp)
  jbe    L2
  nopl   0x0(%rax,%rax,1)
L57:
  movss  0xc(%rsp),%xmm1
  movaps %xmm2,%xmm0
  mov    %ebx,%edi
  movss  %xmm2,0x10(%rsp)
  call   <putPixelMtr@plt>
  movss  0x10(%rsp),%xmm2
  movd   %r14d,%xmm6
  addss  0x8(%rsp),%xmm2
  comiss %xmm2,%xmm6
  ja     L57
L2:
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r14
  pop    %r15
  ret
  nop
L114:
  movaps %xmm3,%xmm6
  movaps %xmm5,%xmm0
  movss  %xmm1,0x18(%rsp)
  divss  %xmm5,%xmm6
  movss  %xmm2,0x1c(%rsp)
  movss  %xmm3,0x8(%rsp)
  mulss  %xmm6,%xmm4
  movss  %xmm6,0x10(%rsp)
  movss  0xc(%rsp),%xmm6
  movss  %xmm5,0xc(%rsp)
  subss  %xmm4,%xmm6
  movss  %xmm6,0x14(%rsp)
  call   <abs@plt>
  movss  0x8(%rsp),%xmm3
  mov    %rax,%rbp
  movaps %xmm3,%xmm0
  call   <abs@plt>
  movss  0x8(%rsp),%xmm3
  movss  0xc(%rsp),%xmm5
  cmp    %rax,%rbp
  movss  0x18(%rsp),%xmm1
  jl     L36
  movss  0x1c(%rsp),%xmm2
  movd   %r14d,%xmm7
  movss  D25(%rip),%xmm3
  comiss %xmm2,%xmm7
  movss  %xmm3,0x8(%rsp)
  jbe    L2
  nop
L112:
  movss  0x10(%rsp),%xmm1
  movaps %xmm2,%xmm0
  mov    %ebx,%edi
  movss  %xmm2,0xc(%rsp)
  mulss  %xmm2,%xmm1
  addss  0x14(%rsp),%xmm1
  call   <putPixelMtr@plt>
  movss  0xc(%rsp),%xmm2
  movd   %r14d,%xmm7
  addss  0x8(%rsp),%xmm2
  comiss %xmm2,%xmm7
  ja     L112
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L17:
  movd   %r15d,%xmm3
  movss  D25(%rip),%xmm5
  comiss %xmm1,%xmm3
  movss  %xmm5,0x8(%rsp)
  jbe    L2
  nopl   0x0(%rax)
L147:
  movaps %xmm4,%xmm0
  mov    %ebx,%edi
  movss  %xmm1,0x10(%rsp)
  movss  %xmm4,0xc(%rsp)
  call   <putPixelMtr@plt>
  movss  0x10(%rsp),%xmm1
  movd   %r15d,%xmm7
  addss  0x8(%rsp),%xmm1
  movss  0xc(%rsp),%xmm4
  comiss %xmm1,%xmm7
  ja     L147
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L36:
  movaps %xmm5,%xmm0
  movss  %xmm3,0x8(%rsp)
  movss  %xmm1,0xc(%rsp)
  call   <abs@plt>
  movss  0x8(%rsp),%xmm3
  mov    %rax,%rbp
  movaps %xmm3,%xmm0
  call   <abs@plt>
  cmp    %rax,%rbp
  jge    L2
  movss  0xc(%rsp),%xmm1
  movd   %r15d,%xmm7
  movss  D25(%rip),%xmm3
  comiss %xmm1,%xmm7
  movss  %xmm3,0x8(%rsp)
  jbe    L2
  nopl   0x0(%rax,%rax,1)
L108:
  mov    %ebx,%edi
  movaps %xmm1,%xmm0
  movss  %xmm1,0xc(%rsp)
  subss  0x14(%rsp),%xmm0
  divss  0x10(%rsp),%xmm0
  call   <putPixelMtr@plt>
  movd   %r15d,%xmm7
  movss  0xc(%rsp),%xmm1
  addss  0x8(%rsp),%xmm1
  comiss %xmm1,%xmm7
  ja     L108
  jmp    L2
```

tool_calls: name: disassemble_data
arguments: tag: D25
type_infered: byte[4]

tool: {"D25": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void createLineMtr(float x1, float y1, float x2, float y2, int idColor) {
  float x = 0, y = 0;
  float dx = x2 - x1, dy = y2 - y1;
  float xmax = fmax(x1, x2), ymax = fmax(y1, y2);
  float xmin = fmin(x1, x2), ymin = fmin(y1, y2);
  if (dx == 0) {
    x = x1;
    for (y = ymin; y < ymax; y++) {
      putPixelMtr(x, y, idColor);
    }
    return;
  }
  if (dy == 0) {
    y = y1;
    for (x = xmin; x < xmax; x++) {
      putPixelMtr(x, y, idColor);
    }
    return;
  }
  float m = (float)dy / dx;
  float b = y1 - (m * x1);
  if (abs(dx) >= abs(dy)) {
    for (x = xmin; x < xmax; x++) {
      y = m * x + b;
      putPixelMtr(x, y, idColor);
    }
    return;
  } else if (abs(dx) < abs(dy)) {
    for (y = ymin; y < ymax; y++) {
      x = (y - b) / m;
      putPixelMtr(x, y, idColor);
    }
    return;
  } else {
    return;
  }
}
```