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

```asm
<draw_line>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %esi,%r12d
  push   %rbp
  mov    %edx,%ebp
  push   %rbx
  mov    %edi,%ebx
  sub    $0x18,%rsp
  test   $0x1,%bh
  jne    L54
  mov    %ebx,%r15d
  and    $0x200,%r15d
  jne    L258
L42:
  test   $0x4,%bh
  jne    L224
L132:
  mov    %ebx,%r14d
  and    $0x800,%r14d
  jne    L111
L136:
  test   $0x20,%bl
  jne    L157
L274:
  mov    %ebx,%r13d
  and    $0x2,%r13d
  jne    L141
L306:
  test   $0x40,%bl
  jne    L261
L219:
  test   %r15d,%r15d
  jne    L96
L213:
  test   $0x1,%bl
  jne    L23
L171:
  test   %r13d,%r13d
  jne    L149
L153:
  test   $0x4,%bl
  jne    L187
L44:
  mov    %ebx,%r13d
  and    $0x8,%r13d
  jne    L250
L116:
  test   %r14d,%r14d
  jne    L289
L38:
  test   $0x80,%bl
  jne    L167
L19:
  test   %r13d,%r13d
  jne    L229
L101:
  and    $0x10,%ebx
  jne    L242
L159:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L54:
  pxor   %xmm0,%xmm0
  movss  D67(%rip),%xmm2
  pxor   %xmm1,%xmm1
  mov    %ebx,%r15d
  cvtsi2ss %esi,%xmm0
  cvtsi2ss %edx,%xmm1
  subss  %xmm2,%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%r13d
  movaps %xmm1,%xmm0
  subss  %xmm2,%xmm0
  cvttss2si %xmm0,%edi
  movss  D513(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  addss  D459(%rip),%xmm1
  mov    %r13d,%esi
  movss  D513(%rip),%xmm0
  cvttss2si %xmm1,%edi
  call   <glVertex3f@plt>
  and    $0x200,%r15d
  je     L42
L258:
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  subss  D67(%rip),%xmm0
  cvttss2si %xmm0,%r14d
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  addss  D459(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movss  D513(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D286(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  test   $0x4,%bh
  je     L132
L224:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  mov    %ebx,%r14d
  cvtsi2ss %ebp,%xmm1
  cvtsi2ss %r12d,%xmm0
  subss  D67(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movaps %xmm1,%xmm0
  addss  D459(%rip),%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%edi
  movss  D286(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  subss  D67(%rip),%xmm1
  mov    %r13d,%esi
  movss  D286(%rip),%xmm0
  cvttss2si %xmm1,%edi
  call   <glVertex3f@plt>
  and    $0x800,%r14d
  je     L136
L111:
  pxor   %xmm0,%xmm0
  movss  D67(%rip),%xmm1
  cvtsi2ss %r12d,%xmm0
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  mov    %esi,0x8(%rsp)
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%r13d
  movss  D286(%rip),%xmm0
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D513(%rip),%xmm0
  mov    0x8(%rsp),%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  test   $0x20,%bl
  je     L274
L157:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm1
  cvtsi2ss %ebp,%xmm0
  addss  D459(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movaps %xmm1,%xmm0
  subss  D67(%rip),%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%esi
  movss  D513(%rip),%xmm0
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  addss  D459(%rip),%xmm1
  mov    %r13d,%edi
  movss  D513(%rip),%xmm0
  mov    %ebx,%r13d
  cvttss2si %xmm1,%esi
  call   <glVertex3f@plt>
  and    $0x2,%r13d
  je     L306
L141:
  pxor   %xmm0,%xmm0
  movss  D459(%rip),%xmm1
  cvtsi2ss %r12d,%xmm0
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  mov    %esi,0xc(%rsp)
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%edi
  movss  D513(%rip),%xmm0
  mov    %edi,0x8(%rsp)
  call   <glVertex3f@plt>
  mov    0xc(%rsp),%esi
  mov    0x8(%rsp),%edi
  movss  D286(%rip),%xmm0
  call   <glVertex3f@plt>
  test   $0x40,%bl
  je     L219
L261:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  movss  D459(%rip),%xmm2
  cvtsi2ss %r12d,%xmm1
  cvtsi2ss %ebp,%xmm0
  movss  %xmm1,0xc(%rsp)
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm2
  cvttss2si %xmm0,%edi
  movss  D286(%rip),%xmm0
  cvttss2si %xmm2,%esi
  mov    %edi,0x8(%rsp)
  call   <glVertex3f@plt>
  movss  0xc(%rsp),%xmm1
  mov    0x8(%rsp),%edi
  subss  D67(%rip),%xmm1
  movss  D286(%rip),%xmm0
  cvttss2si %xmm1,%esi
  call   <glVertex3f@plt>
  test   %r15d,%r15d
  je     L213
L96:
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  subss  D67(%rip),%xmm0
  cvttss2si %xmm0,%esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  addss  D459(%rip),%xmm0
  cvttss2si %xmm0,%r15d
  movss  D286(%rip),%xmm0
  mov    %esi,0x8(%rsp)
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  movss  D513(%rip),%xmm0
  mov    0x8(%rsp),%esi
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  test   $0x1,%bl
  je     L171
L23:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm1
  cvtsi2ss %r12d,%xmm0
  addss  D459(%rip),%xmm0
  cvttss2si %xmm0,%r15d
  movaps %xmm1,%xmm0
  subss  D67(%rip),%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%edi
  movss  D513(%rip),%xmm0
  mov    %r15d,%esi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  addss  D459(%rip),%xmm1
  mov    %r15d,%esi
  movss  D513(%rip),%xmm0
  cvttss2si %xmm1,%edi
  call   <glVertex3f@plt>
  test   %r13d,%r13d
  je     L153
L149:
  pxor   %xmm0,%xmm0
  movss  D459(%rip),%xmm1
  cvtsi2ss %r12d,%xmm0
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%r15d
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  mov    %r15d,%esi
  addss  %xmm1,%xmm0
  cvttss2si %xmm0,%r13d
  movss  D513(%rip),%xmm0
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D286(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  test   $0x4,%bl
  je     L44
L187:
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  movss  D459(%rip),%xmm2
  cvtsi2ss %r12d,%xmm0
  cvtsi2ss %ebp,%xmm1
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm2
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%r13d
  movss  D286(%rip),%xmm0
  cvttss2si %xmm2,%edi
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  subss  D67(%rip),%xmm1
  mov    %r13d,%esi
  movss  D286(%rip),%xmm0
  mov    %ebx,%r13d
  cvttss2si %xmm1,%edi
  call   <glVertex3f@plt>
  and    $0x8,%r13d
  je     L116
L250:
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  addss  D459(%rip),%xmm0
  cvttss2si %xmm0,%esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  subss  D67(%rip),%xmm0
  cvttss2si %xmm0,%r15d
  movss  D286(%rip),%xmm0
  mov    %esi,0x8(%rsp)
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  movss  D513(%rip),%xmm0
  mov    0x8(%rsp),%esi
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  test   %r14d,%r14d
  je     L38
L289:
  pxor   %xmm0,%xmm0
  movss  D67(%rip),%xmm1
  cvtsi2ss %r12d,%xmm0
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%r15d
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  mov    %r15d,%esi
  subss  %xmm1,%xmm0
  cvttss2si %xmm0,%r14d
  movss  D513(%rip),%xmm0
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D286(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  test   $0x80,%bl
  je     L19
L167:
  pxor   %xmm0,%xmm0
  movss  D67(%rip),%xmm2
  pxor   %xmm1,%xmm1
  cvtsi2ss %ebp,%xmm0
  cvtsi2ss %r12d,%xmm1
  subss  %xmm2,%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%r14d
  movaps %xmm1,%xmm0
  subss  %xmm2,%xmm0
  cvttss2si %xmm0,%esi
  movss  D286(%rip),%xmm0
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  addss  D459(%rip),%xmm1
  mov    %r14d,%edi
  movss  D286(%rip),%xmm0
  cvttss2si %xmm1,%esi
  call   <glVertex3f@plt>
  test   %r13d,%r13d
  je     L101
L229:
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  addss  D459(%rip),%xmm0
  cvttss2si %xmm0,%r14d
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  subss  D67(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movss  D286(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D513(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  and    $0x10,%ebx
  je     L159
L242:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm1
  cvtsi2ss %ebp,%xmm0
  subss  D67(%rip),%xmm0
  cvttss2si %xmm0,%ebp
  movaps %xmm1,%xmm0
  addss  D459(%rip),%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%esi
  movss  D513(%rip),%xmm0
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  subss  D67(%rip),%xmm1
  mov    %ebp,%edi
  movss  D513(%rip),%xmm0
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  cvttss2si %xmm1,%esi
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1050 <glVertex3f@plt>
```

tool_calls: name: unpack_data
arguments: tag: D67
type_guessed: byte[4]
name: unpack_data
arguments: tag: D513
type_guessed: byte[4]
name: unpack_data
arguments: tag: D459
type_guessed: byte[4]
name: unpack_data
arguments: tag: D286
type_guessed: byte[4]

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

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

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

tool: {"D286": [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);
  }
}
```