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    L22
  mov    %ebx,%r15d
  and    $0x200,%r15d
  jne    L76
L67:
  test   $0x4,%bh
  jne    L132
L9:
  mov    %ebx,%r14d
  and    $0x800,%r14d
  jne    L44
L55:
  test   $0x20,%bl
  jne    L103
L235:
  mov    %ebx,%r13d
  and    $0x2,%r13d
  jne    L230
L162:
  test   $0x40,%bl
  jne    L60
L151:
  test   %r15d,%r15d
  jne    L284
L92:
  test   $0x1,%bl
  jne    L105
L52:
  test   %r13d,%r13d
  jne    L47
L187:
  test   $0x4,%bl
  jne    L268
L142:
  mov    %ebx,%r13d
  and    $0x8,%r13d
  jne    L184
L287:
  test   %r14d,%r14d
  jne    L81
L1:
  test   $0x80,%bl
  jne    L191
L275:
  test   %r13d,%r13d
  jne    L68
L33:
  and    $0x10,%ebx
  jne    L171
L84:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  xchg   %ax,%ax
L22:
  pxor   %xmm0,%xmm0
  movss  D378(%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  D423(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  addss  D394(%rip),%xmm1
  mov    %r13d,%esi
  movss  D423(%rip),%xmm0
  cvttss2si %xmm1,%edi
  call   <glVertex3f@plt>
  and    $0x200,%r15d
  je     L67
L76:
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  subss  D378(%rip),%xmm0
  cvttss2si %xmm0,%r14d
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  addss  D394(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movss  D423(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D291(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  test   $0x4,%bh
  je     L9
L132:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  mov    %ebx,%r14d
  cvtsi2ss %ebp,%xmm1
  cvtsi2ss %r12d,%xmm0
  subss  D378(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movaps %xmm1,%xmm0
  addss  D394(%rip),%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%edi
  movss  D291(%rip),%xmm0
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  subss  D378(%rip),%xmm1
  mov    %r13d,%esi
  movss  D291(%rip),%xmm0
  cvttss2si %xmm1,%edi
  call   <glVertex3f@plt>
  and    $0x800,%r14d
  je     L55
L44:
  pxor   %xmm0,%xmm0
  movss  D378(%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  D291(%rip),%xmm0
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D423(%rip),%xmm0
  mov    0x8(%rsp),%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  test   $0x20,%bl
  je     L235
L103:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm1
  cvtsi2ss %ebp,%xmm0
  addss  D394(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movaps %xmm1,%xmm0
  subss  D378(%rip),%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%esi
  movss  D423(%rip),%xmm0
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  addss  D394(%rip),%xmm1
  mov    %r13d,%edi
  movss  D423(%rip),%xmm0
  mov    %ebx,%r13d
  cvttss2si %xmm1,%esi
  call   <glVertex3f@plt>
  and    $0x2,%r13d
  je     L162
L230:
  pxor   %xmm0,%xmm0
  movss  D394(%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  D423(%rip),%xmm0
  mov    %edi,0x8(%rsp)
  call   <glVertex3f@plt>
  mov    0xc(%rsp),%esi
  mov    0x8(%rsp),%edi
  movss  D291(%rip),%xmm0
  call   <glVertex3f@plt>
  test   $0x40,%bl
  je     L151
L60:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  movss  D394(%rip),%xmm2
  cvtsi2ss %r12d,%xmm1
  cvtsi2ss %ebp,%xmm0
  movss  %xmm1,0xc(%rsp)
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm2
  cvttss2si %xmm0,%edi
  movss  D291(%rip),%xmm0
  cvttss2si %xmm2,%esi
  mov    %edi,0x8(%rsp)
  call   <glVertex3f@plt>
  movss  0xc(%rsp),%xmm1
  mov    0x8(%rsp),%edi
  subss  D378(%rip),%xmm1
  movss  D291(%rip),%xmm0
  cvttss2si %xmm1,%esi
  call   <glVertex3f@plt>
  test   %r15d,%r15d
  je     L92
L284:
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  subss  D378(%rip),%xmm0
  cvttss2si %xmm0,%esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  addss  D394(%rip),%xmm0
  cvttss2si %xmm0,%r15d
  movss  D291(%rip),%xmm0
  mov    %esi,0x8(%rsp)
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  movss  D423(%rip),%xmm0
  mov    0x8(%rsp),%esi
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  test   $0x1,%bl
  je     L52
L105:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm1
  cvtsi2ss %r12d,%xmm0
  addss  D394(%rip),%xmm0
  cvttss2si %xmm0,%r15d
  movaps %xmm1,%xmm0
  subss  D378(%rip),%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%edi
  movss  D423(%rip),%xmm0
  mov    %r15d,%esi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  addss  D394(%rip),%xmm1
  mov    %r15d,%esi
  movss  D423(%rip),%xmm0
  cvttss2si %xmm1,%edi
  call   <glVertex3f@plt>
  test   %r13d,%r13d
  je     L187
L47:
  pxor   %xmm0,%xmm0
  movss  D394(%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  D423(%rip),%xmm0
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D291(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  test   $0x4,%bl
  je     L142
L268:
  pxor   %xmm0,%xmm0
  pxor   %xmm1,%xmm1
  movss  D394(%rip),%xmm2
  cvtsi2ss %r12d,%xmm0
  cvtsi2ss %ebp,%xmm1
  addss  %xmm2,%xmm0
  addss  %xmm1,%xmm2
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%r13d
  movss  D291(%rip),%xmm0
  cvttss2si %xmm2,%edi
  mov    %r13d,%esi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  subss  D378(%rip),%xmm1
  mov    %r13d,%esi
  movss  D291(%rip),%xmm0
  mov    %ebx,%r13d
  cvttss2si %xmm1,%edi
  call   <glVertex3f@plt>
  and    $0x8,%r13d
  je     L287
L184:
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  addss  D394(%rip),%xmm0
  cvttss2si %xmm0,%esi
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  subss  D378(%rip),%xmm0
  cvttss2si %xmm0,%r15d
  movss  D291(%rip),%xmm0
  mov    %esi,0x8(%rsp)
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  movss  D423(%rip),%xmm0
  mov    0x8(%rsp),%esi
  mov    %r15d,%edi
  call   <glVertex3f@plt>
  test   %r14d,%r14d
  je     L1
L81:
  pxor   %xmm0,%xmm0
  movss  D378(%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  D423(%rip),%xmm0
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D291(%rip),%xmm0
  mov    %r15d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  test   $0x80,%bl
  je     L275
L191:
  pxor   %xmm0,%xmm0
  movss  D378(%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  D291(%rip),%xmm0
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  addss  D394(%rip),%xmm1
  mov    %r14d,%edi
  movss  D291(%rip),%xmm0
  cvttss2si %xmm1,%esi
  call   <glVertex3f@plt>
  test   %r13d,%r13d
  je     L33
L68:
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm0
  addss  D394(%rip),%xmm0
  cvttss2si %xmm0,%r14d
  pxor   %xmm0,%xmm0
  cvtsi2ss %ebp,%xmm0
  subss  D378(%rip),%xmm0
  cvttss2si %xmm0,%r13d
  movss  D291(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  movss  D423(%rip),%xmm0
  mov    %r14d,%esi
  mov    %r13d,%edi
  call   <glVertex3f@plt>
  and    $0x10,%ebx
  je     L84
L171:
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm1
  cvtsi2ss %ebp,%xmm0
  subss  D378(%rip),%xmm0
  cvttss2si %xmm0,%ebp
  movaps %xmm1,%xmm0
  addss  D394(%rip),%xmm0
  movss  %xmm1,0x8(%rsp)
  cvttss2si %xmm0,%esi
  movss  D423(%rip),%xmm0
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm1
  subss  D378(%rip),%xmm1
  mov    %ebp,%edi
  movss  D423(%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: parse_data
arguments: data_label: D378
type_infered: byte[4]
name: parse_data
arguments: data_label: D423
type_infered: byte[4]
name: parse_data
arguments: data_label: D394
type_infered: byte[4]
name: parse_data
arguments: data_label: D291
type_infered: byte[4]

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

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

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

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