user: Please show me the C implementation that matches the assembly code listed below:

```asm
<draw_block>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  mov    %edi,%r12d
  push   %rbp
  mov    %esi,%ebp
  sub    $0x18,%rsp
  movss  0x8(%rdx),%xmm2
  movss  0x4(%rdx),%xmm1
  movss  (%rdx),%xmm0
  call   <glColor3f@plt>
  pxor   %xmm1,%xmm1
  pxor   %xmm0,%xmm0
  cvtsi2ss %r12d,%xmm1
  movaps %xmm1,%xmm2
  movss  %xmm1,0xc(%rsp)
  addss  %xmm0,%xmm2
  cvttss2si %xmm2,%r13d
  pxor   %xmm2,%xmm2
  cvtsi2ss %ebp,%xmm2
  mov    %r13d,%esi
  addss  %xmm2,%xmm0
  movss  %xmm2,0x8(%rsp)
  cvttss2si %xmm0,%ebp
  movss  D165(%rip),%xmm0
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  0x8(%rsp),%xmm2
  addss  D99(%rip),%xmm2
  mov    %r13d,%esi
  movss  D165(%rip),%xmm0
  cvttss2si %xmm2,%r14d
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  0xc(%rsp),%xmm1
  addss  D99(%rip),%xmm1
  mov    %r14d,%edi
  movss  D165(%rip),%xmm0
  cvttss2si %xmm1,%r12d
  mov    %r12d,%esi
  call   <glVertex3f@plt>
  movss  D165(%rip),%xmm0
  mov    %r12d,%esi
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  D14(%rip),%xmm0
  mov    %r13d,%esi
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  D14(%rip),%xmm0
  mov    %r13d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D165(%rip),%xmm0
  mov    %r13d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D165(%rip),%xmm0
  mov    %r13d,%esi
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  D14(%rip),%xmm0
  mov    %r13d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D14(%rip),%xmm0
  mov    %r12d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D165(%rip),%xmm0
  mov    %r12d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D165(%rip),%xmm0
  mov    %r13d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D14(%rip),%xmm0
  mov    %r12d,%esi
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  D14(%rip),%xmm0
  mov    %r12d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D165(%rip),%xmm0
  mov    %r12d,%esi
  mov    %r14d,%edi
  call   <glVertex3f@plt>
  movss  D165(%rip),%xmm0
  mov    %r12d,%esi
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  D14(%rip),%xmm0
  mov    %r13d,%esi
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  D165(%rip),%xmm0
  mov    %r13d,%esi
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  D165(%rip),%xmm0
  mov    %r12d,%esi
  mov    %ebp,%edi
  call   <glVertex3f@plt>
  movss  D14(%rip),%xmm0
  add    $0x18,%rsp
  mov    %r12d,%esi
  mov    %ebp,%edi
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  jmp    1070 <glVertex3f@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D165
type_guessed: byte[4]
name: disassemble_data
arguments: data_label: D99
type_guessed: f32
name: disassemble_data
arguments: data_label: D14
type_guessed: byte[4]

tool: {"D165": [0xcd,0xcc,0x4c,0x3f]}

tool: D99: 1

tool: {"D14": [0xcd,0xcc,0xcc,0x3d]}

assistant: ```c
void draw_block(int i, int j, float color[3]) {
  float x = 0, y = 1, z1 = 0.1f, z2 = 0.8f;
  glColor3f(color[0], color[1], color[2]);
  glVertex3f(j + x, i + x, z2);
  glVertex3f(j + y, i + x, z2);
  glVertex3f(j + y, i + y, z2);
  glVertex3f(j + x, i + y, z2);
  glVertex3f(j + x, i + x, z1);
  glVertex3f(j + y, i + x, z1);
  glVertex3f(j + y, i + x, z2);
  glVertex3f(j + x, i + x, z2);
  glVertex3f(j + y, i + x, z1);
  glVertex3f(j + y, i + y, z1);
  glVertex3f(j + y, i + y, z2);
  glVertex3f(j + y, i + x, z2);
  glVertex3f(j + x, i + y, z1);
  glVertex3f(j + y, i + y, z1);
  glVertex3f(j + y, i + y, z2);
  glVertex3f(j + x, i + y, z2);
  glVertex3f(j + x, i + x, z1);
  glVertex3f(j + x, i + x, z2);
  glVertex3f(j + x, i + y, z2);
  glVertex3f(j + x, i + y, z1);
}
```