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

```asm
<draw_line>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %edi,%ebx
  mov    %esi,%ebp
  mov    %edx,0x8(%rsp)
  test   $0x1,%bh
  jne    L172
L31:
  mov    %ebx,%r14d
  and    $0x200,%r14d
  jne    L144
L74:
  test   $0x4,%bh
  jne    L170
L84:
  mov    %ebx,%r12d
  and    $0x800,%r12d
  jne    L244
L218:
  test   $0x20,%bl
  jne    L163
L281:
  mov    %ebx,%r13d
  and    $0x2,%r13d
  jne    L101
L145:
  test   $0x40,%bl
  jne    L164
L86:
  test   %r14d,%r14d
  jne    L148
L279:
  test   $0x1,%bl
  jne    L16
L94:
  test   %r13d,%r13d
  jne    L29
L214:
  test   $0x4,%bl
  jne    L155
L284:
  mov    %ebx,%r13d
  and    $0x8,%r13d
  jne    L103
L80:
  test   %r12d,%r12d
  jne    L239
L169:
  test   $0x80,%bl
  jne    L4
L217:
  test   %r13d,%r13d
  jne    L112
L89:
  test   $0x10,%bl
  jne    L68
L272:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L172:
  pxor   %xmm0,%xmm0
  cvtsi2ss %esi,%xmm0
  movss  D227(%rip),%xmm1
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%r13d
  pxor   %xmm4,%xmm4
  cvtsi2ss %edx,%xmm4
  movd   %xmm4,%r12d
  movaps %xmm4,%xmm0
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%edi
  movss  D449(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  movd   %r12d,%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%edi
  movss  D449(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  jmp    L31
L144:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%r12d
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movss  D449(%rip),%xmm0
  mov    %r12d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D447(%rip),%xmm0
  mov    %r12d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  jmp    L74
L170:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  pxor   %xmm7,%xmm7
  cvtsi2ssl 0x8(%rsp),%xmm7
  movd   %xmm7,%r12d
  movaps %xmm7,%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%edi
  movss  D447(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  movd   %r12d,%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%edi
  movss  D447(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  jmp    L84
L244:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  movss  D227(%rip),%xmm1
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%r15d
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%r13d
  movss  D447(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D449(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  jmp    L218
L163:
  pxor   %xmm1,%xmm1
  cvtsi2ss %ebp,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movss  %xmm1,0xc(%rsp)
  movaps %xmm1,%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%esi
  movss  D449(%rip),%xmm0
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D35(%rip),%xmm7
  addss  0xc(%rsp),%xmm7
  cvttss2si %xmm7,%esi
  movss  D449(%rip),%xmm0
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  jmp    L281
L101:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  movss  D35(%rip),%xmm1
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%eax
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%r15d
  movss  D449(%rip),%xmm0
  mov    %eax,0xc(%rsp)
  mov    %eax,%esi
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  movss  D447(%rip),%xmm0
  mov    0xc(%rsp),%esi
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  jmp    L145
L164:
  pxor   %xmm2,%xmm2
  cvtsi2ss %ebp,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  movss  D35(%rip),%xmm1
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%r15d
  movss  %xmm2,0xc(%rsp)
  addss  %xmm2,%xmm1
  cvttss2si %xmm1,%esi
  movss  D447(%rip),%xmm0
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  movss  0xc(%rsp),%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%esi
  movss  D447(%rip),%xmm0
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  jmp    L86
L148:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%r15d
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%r14d
  movss  D447(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D449(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  jmp    L279
L16:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%r14d
  pxor   %xmm5,%xmm5
  cvtsi2ssl 0x8(%rsp),%xmm5
  movss  %xmm5,0xc(%rsp)
  movaps %xmm5,%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%edi
  movss  D449(%rip),%xmm0
  mov    %r14d,%esi
  call   <glVertex3f@plt>
  movss  D35(%rip),%xmm3
  addss  0xc(%rsp),%xmm3
  cvttss2si %xmm3,%edi
  movss  D449(%rip),%xmm0
  mov    %r14d,%esi
  call   <glVertex3f@plt>
  jmp    L94
L29:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  movss  D35(%rip),%xmm1
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%r14d
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%r13d
  movss  D449(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D447(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  jmp    L214
L155:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  movss  D35(%rip),%xmm1
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%r13d
  pxor   %xmm6,%xmm6
  cvtsi2ssl 0x8(%rsp),%xmm6
  movss  %xmm6,0xc(%rsp)
  addss  %xmm6,%xmm1
  cvttss2si %xmm1,%edi
  movss  D447(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  movss  0xc(%rsp),%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%edi
  movss  D447(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  jmp    L284
L103:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%r15d
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%r14d
  movss  D447(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D449(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  jmp    L80
L239:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  movss  D227(%rip),%xmm1
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%r12d
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%r14d
  movss  D449(%rip),%xmm0
  mov    %r12d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D447(%rip),%xmm0
  mov    %r12d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  jmp    L169
L4:
  pxor   %xmm2,%xmm2
  cvtsi2ss %ebp,%xmm2
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  movss  D227(%rip),%xmm1
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%r12d
  movss  %xmm2,0xc(%rsp)
  movaps %xmm2,%xmm0
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%esi
  movss  D447(%rip),%xmm0
  mov    %r12d,%edi
  call   <glVertex3f@plt>
  movss  0xc(%rsp),%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%esi
  movss  D447(%rip),%xmm0
  mov    %r12d,%edi
  call   <glVertex3f@plt>
  jmp    L217
L112:
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%r12d
  movss  D447(%rip),%xmm0
  mov    %r13d,%esi
  mov    %r12d,%edi
  call   <glVertex3f@plt>
  movss  D449(%rip),%xmm0
  mov    %r13d,%esi
  mov    %r12d,%edi
  call   <glVertex3f@plt>
  jmp    L89
L68:
  pxor   %xmm4,%xmm4
  cvtsi2ss %ebp,%xmm4
  movd   %xmm4,%ebx
  pxor   %xmm0,%xmm0
  cvtsi2ssl 0x8(%rsp),%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%ebp
  movaps %xmm4,%xmm0
  addss  D35(%rip),%xmm0
  cvttss2si %xmm0,%esi
  movss  D449(%rip),%xmm0
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movd   %ebx,%xmm0
  subss  D227(%rip),%xmm0
  cvttss2si %xmm0,%esi
  movss  D449(%rip),%xmm0
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  jmp    L272
```

tool_calls: name: parse_data
arguments: data_label: D227
type_guessed: byte[4]
name: parse_data
arguments: data_label: D449
type_guessed: byte[4]
name: parse_data
arguments: data_label: D35
type_guessed: byte[4]
name: parse_data
arguments: data_label: D447
type_guessed: byte[4]

tool: {"D227": [0x0a,0xd7,0x23,0x3c]}

tool: {"D449": [0xec,0x51,0xb8,0x3d]}

tool: {"D35": [0xae,0x47,0x81,0x3f]}

tool: {"D447": [0x29,0x5c,0x4f,0x3f]}

assistant: ```c
void draw_line(int mask, int i, int j) {
  float x = -0.01f, y = 1.01f, z1 = 0.09f, z2 = 0.81f;
  if ((mask & (1 << 8)) == (1 << 8)) {
    glVertex3f(j + x, i + x, z1);
    glVertex3f(j + y, i + x, z1);
  }
  if ((mask & (1 << 9)) == (1 << 9)) {
    glVertex3f(j + y, i + x, z1);
    glVertex3f(j + y, i + x, z2);
  }
  if ((mask & (1 << 10)) == (1 << 10)) {
    glVertex3f(j + y, i + x, z2);
    glVertex3f(j + x, i + x, z2);
  }
  if ((mask & (1 << 11)) == (1 << 11)) {
    glVertex3f(j + x, i + x, z2);
    glVertex3f(j + x, i + x, z1);
  }
  if ((mask & (1 << 5)) == (1 << 5)) {
    glVertex3f(j + y, i + x, z1);
    glVertex3f(j + y, i + y, z1);
  }
  if ((mask & (1 << 1)) == (1 << 1)) {
    glVertex3f(j + y, i + y, z1);
    glVertex3f(j + y, i + y, z2);
  }
  if ((mask & (1 << 6)) == (1 << 6)) {
    glVertex3f(j + y, i + y, z2);
    glVertex3f(j + y, i + x, z2);
  }
  if ((mask & (1 << 9)) == (1 << 9)) {
    glVertex3f(j + y, i + x, z2);
    glVertex3f(j + y, i + x, z1);
  }
  if ((mask & (1 << 0)) == (1 << 0)) {
    glVertex3f(j + x, i + y, z1);
    glVertex3f(j + y, i + y, z1);
  }
  if ((mask & (1 << 1)) == (1 << 1)) {
    glVertex3f(j + y, i + y, z1);
    glVertex3f(j + y, i + y, z2);
  }
  if ((mask & (1 << 2)) == (1 << 2)) {
    glVertex3f(j + y, i + y, z2);
    glVertex3f(j + x, i + y, z2);
  }
  if ((mask & (1 << 3)) == (1 << 3)) {
    glVertex3f(j + x, i + y, z2);
    glVertex3f(j + x, i + y, z1);
  }
  if ((mask & (1 << 11)) == (1 << 11)) {
    glVertex3f(j + x, i + x, z1);
    glVertex3f(j + x, i + x, z2);
  }
  if ((mask & (1 << 7)) == (1 << 7)) {
    glVertex3f(j + x, i + x, z2);
    glVertex3f(j + x, i + y, z2);
  }
  if ((mask & (1 << 3)) == (1 << 3)) {
    glVertex3f(j + x, i + y, z2);
    glVertex3f(j + x, i + y, z1);
  }
  if ((mask & (1 << 4)) == (1 << 4)) {
    glVertex3f(j + x, i + y, z1);
    glVertex3f(j + x, i + x, z1);
  }
}
```