user: What would the C source look like for the assembly code provided here:

```asm
<render_line_3D_BLA>:
  endbr64
  push   %r15
  mov    %edx,%esi
  mov    %rdi,%r10
  mov    %ecx,%edi
  push   %r14
  imul   %ecx,%esi
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0x40(%rsp),%ebp
  mov    0x38(%rsp),%edx
  mov    0x48(%rsp),%r13d
  mov    0x50(%rsp),%r12d
  mov    %ebp,%r14d
  movl   $0x1,-0x8(%rsp)
  sub    %r9d,%r13d
  sub    %edx,%r12d
  sub    %r8d,%r14d
  jns    L64
  movl   $0xffffffff,-0x8(%rsp)
  mov    %r8d,%r14d
  sub    %ebp,%r14d
L64:
  movl   $0x1,-0xc(%rsp)
  test   %r13d,%r13d
  jns    L141
  movl   $0xffffffff,-0xc(%rsp)
  mov    %r9d,%r13d
  sub    0x48(%rsp),%r13d
L141:
  movl   $0x1,-0x10(%rsp)
  test   %r12d,%r12d
  jns    L3
  movl   $0xffffffff,-0x10(%rsp)
  mov    %edx,%r12d
  sub    0x50(%rsp),%r12d
L3:
  lea    (%r14,%r14,1),%eax
  mov    %esi,%ecx
  lea    0x0(%r13,%r13,1),%r15d
  mov    %r12d,%r11d
  mov    %eax,-0x4(%rsp)
  mov    %edi,%eax
  imul   %edx,%ecx
  lea    (%r12,%r12,1),%ebx
  imul   %r9d,%eax
  cmp    %r12d,%r13d
  cmovge %r13d,%r11d
  cmp    %r11d,%r14d
  jl     L313
  mov    %r15d,%r13d
  mov    %ebx,%r12d
  sub    %r14d,%r13d
  sub    %r14d,%r12d
  cmp    %r8d,%ebp
  je     L314
  cmpl   $0x1,-0x8(%rsp)
  mov    -0x4(%rsp),%r11d
  jne    L277
  nopl   0x0(%rax,%rax,1)
L39:
  mov    %edx,%ecx
  mov    %edi,%eax
  imul   %esi,%ecx
  imul   %r9d,%eax
  lea    (%rax,%rcx,1),%r14d
  add    %r8d,%r14d
  movslq %r14d,%r14
  lea    (%r10,%r14,4),%r14
  movss  (%r14),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,(%r14)
  test   %r13d,%r13d
  js     L140
  add    -0xc(%rsp),%r9d
  sub    %r11d,%r13d
  mov    %r9d,%eax
  imul   %edi,%eax
L140:
  test   %r12d,%r12d
  js     L320
  add    -0x10(%rsp),%edx
  sub    %r11d,%r12d
  mov    %edx,%ecx
  imul   %esi,%ecx
L320:
  add    $0x1,%r8d
  add    %r15d,%r13d
  add    %ebx,%r12d
  cmp    %r8d,%ebp
  jne    L39
L314:
  add    %ecx,%eax
  add    %ebp,%eax
  cltq
  lea    (%r10,%rax,4),%rax
  addss  (%rax),%xmm0
  movss  %xmm0,(%rax)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L313:
  cmp    %r12d,%r14d
  mov    -0x4(%rsp),%r11d
  cmovl  %r12d,%r14d
  cmp    %r14d,%r13d
  jl     L316
  sub    %r13d,%r11d
  mov    %ebx,%r12d
  mov    %r11d,%ebp
  sub    %r13d,%r12d
  cmp    %r9d,0x48(%rsp)
  je     L253
  mov    -0x4(%rsp),%r11d
  cmp    $0x1,%edi
  jne    L149
  nopw   0x0(%rax,%rax,1)
L246:
  mov    %esi,%ecx
  imul   %edx,%ecx
  lea    (%rax,%rcx,1),%r9d
  add    %r8d,%r9d
  movslq %r9d,%r9
  lea    (%r10,%r9,4),%r9
  movss  (%r9),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,(%r9)
  test   %ebp,%ebp
  js     L287
  add    -0x8(%rsp),%r8d
  sub    %r15d,%ebp
L287:
  test   %r12d,%r12d
  js     L250
  add    -0x10(%rsp),%edx
  mov    %esi,%ecx
  sub    %r15d,%r12d
  imul   %edx,%ecx
L250:
  add    %r11d,%ebp
  add    %ebx,%r12d
  add    -0xc(%rsp),%eax
  cmp    %eax,0x48(%rsp)
  jne    L246
L262:
  imul   %edi,%eax
  add    %ecx,%eax
L216:
  add    %r8d,%eax
  cltq
  lea    (%r10,%rax,4),%rax
  addss  (%rax),%xmm0
  movss  %xmm0,(%rax)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
L277:
  mov    %esi,%ecx
  mov    %edi,%eax
  imul   %edx,%ecx
  imul   %r9d,%eax
  lea    (%rcx,%rax,1),%r14d
  add    %r8d,%r14d
  movslq %r14d,%r14
  lea    (%r10,%r14,4),%r14
  movss  (%r14),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,(%r14)
  test   %r13d,%r13d
  js     L144
  add    -0xc(%rsp),%r9d
  mov    %edi,%eax
  sub    %r11d,%r13d
  imul   %r9d,%eax
L144:
  test   %r12d,%r12d
  js     L196
  add    -0x10(%rsp),%edx
  mov    %esi,%ecx
  sub    %r11d,%r12d
  imul   %edx,%ecx
L196:
  add    -0x8(%rsp),%r8d
  add    %r15d,%r13d
  add    %ebx,%r12d
  cmp    %r8d,%ebp
  jne    L277
  jmp    L314
L316:
  sub    %r12d,%r11d
  mov    %r15d,%ebp
  mov    %r11d,%r13d
  sub    %r12d,%ebp
  cmp    %edx,0x50(%rsp)
  je     L309
  cmp    $0x1,%edi
  jne    L82
  mov    -0x10(%rsp),%r9d
  mov    -0x4(%rsp),%r11d
  imul   %esi,%r9d
  nopl   0x0(%rax)
L47:
  lea    (%rcx,%rax,1),%edi
  add    %r8d,%edi
  movslq %edi,%rdi
  lea    (%r10,%rdi,4),%rdi
  movss  (%rdi),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,(%rdi)
  test   %r13d,%r13d
  js     L207
  add    -0x8(%rsp),%r8d
  sub    %ebx,%r13d
L207:
  test   %ebp,%ebp
  js     L51
  add    -0xc(%rsp),%eax
  sub    %ebx,%ebp
L51:
  add    %r11d,%r13d
  add    %r15d,%ebp
  add    -0x10(%rsp),%edx
  add    %r9d,%ecx
  cmp    %edx,0x50(%rsp)
  jne    L47
L309:
  imul   %edx,%esi
  add    %esi,%eax
  jmp    L216
L149:
  mov    -0xc(%rsp),%r14d
  mov    -0x4(%rsp),%r11d
  mov    %eax,%r13d
  mov    %r9d,%eax
  imul   %edi,%r14d
  nopl   0x0(%rax)
L315:
  mov    %esi,%ecx
  imul   %edx,%ecx
  lea    0x0(%r13,%rcx,1),%r9d
  add    %r8d,%r9d
  movslq %r9d,%r9
  lea    (%r10,%r9,4),%r9
  movss  (%r9),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,(%r9)
  test   %ebp,%ebp
  js     L257
  add    -0x8(%rsp),%r8d
  sub    %r15d,%ebp
L257:
  test   %r12d,%r12d
  js     L44
  add    -0x10(%rsp),%edx
  mov    %esi,%ecx
  sub    %r15d,%r12d
  imul   %edx,%ecx
L44:
  add    %r11d,%ebp
  add    %ebx,%r12d
  add    -0xc(%rsp),%eax
  add    %r14d,%r13d
  cmp    %eax,0x48(%rsp)
  jne    L315
  jmp    L262
L82:
  mov    -0x10(%rsp),%r14d
  mov    -0x4(%rsp),%r11d
  mov    %ecx,%r12d
  imul   %esi,%r14d
L100:
  mov    %edi,%eax
  imul   %r9d,%eax
  lea    (%r12,%rax,1),%ecx
  add    %r8d,%ecx
  movslq %ecx,%rcx
  lea    (%r10,%rcx,4),%rcx
  movss  (%rcx),%xmm1
  addss  %xmm0,%xmm1
  movss  %xmm1,(%rcx)
  test   %r13d,%r13d
  js     L139
  add    -0x8(%rsp),%r8d
  sub    %ebx,%r13d
L139:
  test   %ebp,%ebp
  js     L163
  add    -0xc(%rsp),%r9d
  mov    %edi,%eax
  sub    %ebx,%ebp
  imul   %r9d,%eax
L163:
  add    %r11d,%r13d
  add    %r15d,%ebp
  add    -0x10(%rsp),%edx
  add    %r14d,%r12d
  cmp    %edx,0x50(%rsp)
  jne    L100
  jmp    L309
L253:
  mov    0x48(%rsp),%eax
  jmp    L262
```

assistant: ```c
void render_line_3D_BLA(float *mat, int wz, int wy, int wx, int x1, int y1, int z1, int x2, int y2, int z2, float val) {
  int x, y, z;
  int dx, dy, dz;
  int xinc, yinc, zinc;
  int balance1, balance2;
  int step = wx * wy;
  dx = x2 - x1;
  dy = y2 - y1;
  dz = z2 - z1;
  if (dx < 0) {
    xinc = -1;
    dx = -dx;
  } else {
    xinc = 1;
  }
  if (dy < 0) {
    yinc = -1;
    dy = -dy;
  } else {
    yinc = 1;
  }
  if (dz < 0) {
    zinc = -1;
    dz = -dz;
  } else {
    zinc = 1;
  }
  x = x1;
  y = y1;
  z = z1;
  if (dx >= dy && dx >= dz) {
    dy <<= 1;
    dz <<= 1;
    balance1 = dy - dx;
    balance2 = dz - dx;
    dx <<= 1;
    while (x != x2) {
      mat[z * step + y * wx + x] += val;
      if (balance1 >= 0) {
        y = y + yinc;
        balance1 = balance1 - dx;
      }
      if (balance2 >= 0) {
        z = z + zinc;
        balance2 = balance2 - dx;
      }
      balance1 = balance1 + dy;
      balance2 = balance2 + dz;
      x = x + xinc;
    }
    mat[z * step + y * wx + x] += val;
  } else {
    if (dy >= dx && dy >= dz) {
      dx <<= 1;
      dz <<= 1;
      balance1 = dx - dy;
      balance2 = dz - dy;
      dy <<= 1;
      while (y != y2) {
        mat[z * step + y * wx + x] += val;
        if (balance1 >= 0) {
          x = x + xinc;
          balance1 = balance1 - dy;
        }
        if (balance2 >= 0) {
          z = z + zinc;
          balance2 = balance2 - dy;
        }
        balance1 = balance1 + dx;
        balance2 = balance2 + dz;
        y = y + yinc;
      }
      mat[z * step + y * wx + x] += val;
    } else {
      dx <<= 1;
      dy <<= 1;
      balance1 = dx - dz;
      balance2 = dy - dz;
      dz <<= 1;
      while (z != z2) {
        mat[z * step + y * wx + x] += val;
        if (balance1 >= 0) {
          x = x + xinc;
          balance1 = balance1 - dz;
        }
        if (balance2 >= 0) {
          y = y + yinc;
          balance2 = balance2 - dz;
        }
        balance1 = balance1 + dx;
        balance2 = balance2 + dy;
        z = z + zinc;
      }
      mat[z * step + y * wx + x] += val;
    }
  }
}
```