user: Translate the below assembly code into C programming language:

```asm
<render_lines_2D_WLA>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rcx,-0x28(%rsp)
  mov    %r9,-0x20(%rsp)
  test   %r8d,%r8d
  jle    L643
  movslq %r8d,%rax
  movss  D0(%rip),%xmm0
  mov    %rdi,%r13
  mov    %edx,%r15d
  mov    %rax,-0x18(%rsp)
  movq   $0x0,-0x58(%rsp)
L482:
  mov    -0x58(%rsp),%rbx
  mov    0x40(%rsp),%rdx
  movl   $0x1,-0x5c(%rsp)
  mov    -0x28(%rsp),%rax
  mov    (%rdx,%rbx,4),%esi
  mov    0x50(%rsp),%rdx
  mov    (%rax,%rbx,4),%r12d
  mov    -0x20(%rsp),%rax
  mov    (%rdx,%rbx,4),%ebp
  mov    %esi,%edi
  mov    (%rax,%rbx,4),%eax
  sub    %r12d,%edi
  mov    %ebp,%r9d
  sub    %eax,%r9d
  jns    L21
  movl   $0xffffffff,-0x5c(%rsp)
  mov    %eax,%r9d
  sub    %ebp,%r9d
L21:
  mov    $0x1,%edx
  test   %edi,%edi
  jns    L506
  mov    %r12d,%edi
  mov    $0xffffffff,%edx
  sub    %esi,%edi
L506:
  mov    %eax,%ecx
  imul   %r15d,%ecx
  add    %r12d,%ecx
  movslq %ecx,%rcx
  movss  %xmm0,0x0(%r13,%rcx,4)
  mov    %ebp,%ecx
  imul   %r15d,%ecx
  add    %esi,%ecx
  movslq %ecx,%rcx
  movss  %xmm0,0x0(%r13,%rcx,4)
  cmp    %r9d,%edi
  jle    L234
  lea    -0x1(%rdi),%ecx
  lea    0x0(,%r9,4),%r14d
  mov    %ecx,%ebx
  mov    %ecx,-0xc(%rsp)
  and    $0x3,%ecx
  mov    %r14d,%r10d
  mov    %ecx,-0x10(%rsp)
  lea    (%rdi,%rdi,1),%ecx
  sar    $0x2,%ebx
  sub    %ecx,%r10d
  mov    %ebx,-0x60(%rsp)
  mov    %r14d,-0x30(%rsp)
  mov    %r10d,-0x3c(%rsp)
  js     L647
  mov    %r9d,%ecx
  mov    -0x60(%rsp),%r11d
  sub    %edi,%ecx
  lea    (%rcx,%rcx,1),%ebx
  mov    %ebx,-0x2c(%rsp)
  lea    0x0(,%rcx,4),%ebx
  mov    %ebx,-0x30(%rsp)
  lea    (%rdi,%rbx,1),%ecx
  test   %r11d,%r11d
  jle    L460
  mov    %edx,%edi
  sub    %edx,%esi
  xor    %r10d,%r10d
  mov    %edx,-0x44(%rsp)
  neg    %edi
  sub    %edx,%esi
  mov    %r12d,-0x4(%rsp)
  mov    -0x5c(%rsp),%r14d
  sub    %edx,%edi
  mov    %esi,-0x8(%rsp)
  mov    %esi,%r9d
  mov    %r12d,%r8d
  mov    %edi,-0x50(%rsp)
  lea    (%rdx,%rdx,1),%edi
  mov    %r10d,%r11d
  mov    %edi,-0x40(%rsp)
  jmp    L27
  nop
L316:
  add    %edi,%esi
  lea    (%r14,%r10,1),%eax
  add    %ebx,%edx
  mov    %r12d,%ebp
  movslq %esi,%rsi
  movslq %edx,%rdx
  sub    %r14d,%ebp
  add    -0x30(%rsp),%ecx
  movss  %xmm0,0x0(%r13,%rsi,4)
  mov    %r15d,%esi
  add    $0x1,%r11d
  imul   %eax,%esi
  add    %r8d,%esi
  movslq %esi,%rsi
  movss  %xmm0,0x0(%r13,%rsi,4)
  movss  %xmm0,0x0(%r13,%rdx,4)
  mov    %r15d,%edx
  imul   %ebp,%edx
  add    %r9d,%edx
  add    -0x50(%rsp),%r9d
  movslq %edx,%rdx
  movss  %xmm0,0x0(%r13,%rdx,4)
  cmp    %r11d,-0x60(%rsp)
  je     L570
L27:
  mov    %ebp,%r12d
  mov    -0x44(%rsp),%ebx
  lea    (%r14,%rax,1),%r10d
  mov    %r15d,%edi
  sub    %r14d,%r12d
  imul   %r10d,%edi
  mov    %r12d,%edx
  lea    (%rbx,%r8,1),%esi
  mov    %r12d,-0x48(%rsp)
  add    %r9d,%ebx
  imul   %r15d,%edx
  add    -0x40(%rsp),%r8d
  test   %ecx,%ecx
  jg     L316
  lea    (%r8,%rdi,1),%r12d
  movslq %r12d,%r12
  lea    0x0(%r13,%r12,4),%r12
  mov    %r12,-0x38(%rsp)
  lea    (%rdx,%r9,1),%r12d
  movslq %r12d,%r12
  lea    0x0(%r13,%r12,4),%r12
  cmp    %ecx,-0x2c(%rsp)
  jle    L677
  imul   %r15d,%eax
  imul   %r15d,%ebp
  add    %esi,%eax
  cltq
  add    %ebx,%ebp
  movss  %xmm0,0x0(%r13,%rax,4)
  mov    -0x38(%rsp),%rax
  movslq %ebp,%rbp
  movss  %xmm0,(%rax)
  movss  %xmm0,0x0(%r13,%rbp,4)
L674:
  mov    -0x48(%rsp),%ebp
  add    -0x3c(%rsp),%ecx
  mov    %r10d,%eax
  add    $0x1,%r11d
  movss  %xmm0,(%r12)
  add    -0x50(%rsp),%r9d
  cmp    %r11d,-0x60(%rsp)
  jne    L27
L570:
  mov    -0x44(%rsp),%edx
  mov    -0x60(%rsp),%esi
  mov    -0x4(%rsp),%r12d
  sub    $0x1,%esi
  mov    %edx,%r8d
  imul   %esi,%r8d
  lea    (%r12,%rdx,2),%edi
  imul   -0x50(%rsp),%esi
  add    -0x8(%rsp),%esi
  lea    (%rdi,%r8,2),%r12d
L460:
  mov    -0x10(%rsp),%r10d
  test   %r10d,%r10d
  je     L459
  mov    -0xc(%rsp),%r8d
  lea    (%rdx,%r12,1),%edi
  and    $0x2,%r8d
  test   %ecx,%ecx
  jle    L645
  mov    -0x5c(%rsp),%ebx
  mov    %r15d,%ecx
  add    %ebx,%eax
  imul   %eax,%ecx
  add    %edi,%ecx
  movslq %ecx,%rcx
  movss  %xmm0,0x0(%r13,%rcx,4)
  test   %r8d,%r8d
  je     L107
  add    %ebx,%eax
  imul   %r15d,%eax
L249:
  add    %edx,%edi
  add    %edi,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
L107:
  cmpl   $0x3,-0x10(%rsp)
  jne    L459
L568:
  mov    %ebp,%eax
  sub    -0x5c(%rsp),%eax
L591:
  imul   %r15d,%eax
L602:
  sub    %edx,%esi
  add    %esi,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L459
  nopl   0x0(%rax,%rax,1)
L234:
  lea    -0x1(%r9),%ecx
  lea    0x0(,%rdi,4),%r14d
  mov    %ecx,%ebx
  mov    %ecx,-0x38(%rsp)
  and    $0x3,%ecx
  mov    %r14d,%r8d
  mov    %ecx,-0x3c(%rsp)
  lea    (%r9,%r9,1),%ecx
  sar    $0x2,%ebx
  sub    %ecx,%r8d
  mov    %ebx,-0x60(%rsp)
  mov    %r14d,-0x40(%rsp)
  mov    %r8d,-0x50(%rsp)
  js     L320
  sub    %r9d,%edi
  mov    -0x60(%rsp),%r8d
  mov    %edi,%ecx
  lea    (%rdi,%rdi,1),%edi
  mov    %edi,-0x40(%rsp)
  lea    0x0(,%rcx,4),%edi
  mov    %edi,-0x44(%rsp)
  lea    (%r9,%rdi,1),%ecx
  test   %r8d,%r8d
  jle    L667
  mov    -0x5c(%rsp),%ebx
  mov    %r15d,-0xc(%rsp)
  mov    %ebx,%edi
  add    %ebx,%eax
  imul   %r15d,%edi
  mov    %eax,%r9d
  add    %ebx,%eax
  mov    %eax,%r14d
  imul   %r15d,%r9d
  mov    %eax,-0x10(%rsp)
  imul   %r15d,%r14d
  lea    (%rdi,%rdi,1),%r10d
  mov    %ebx,%edi
  neg    %edi
  sub    %ebx,%edi
  sub    %r9d,%r14d
  mov    %edi,-0x2c(%rsp)
  imul   %r15d,%edi
  mov    %edi,-0x48(%rsp)
  mov    %ebp,%edi
  sub    %ebx,%edi
  mov    %edi,%r8d
  sub    %ebx,%edi
  xor    %ebx,%ebx
  mov    %edi,%ebp
  imul   %r15d,%r8d
  mov    %edi,-0x30(%rsp)
  imul   %r15d,%ebp
  mov    %r10d,%r15d
  sub    %r8d,%ebp
  jmp    L574
  nopw   0x0(%rax,%rax,1)
L468:
  lea    (%r9,%r10,1),%esi
  lea    (%rdx,%r10,1),%r12d
  add    -0x44(%rsp),%ecx
  movslq %esi,%rsi
  add    %r12d,%edi
  movss  %xmm0,0x0(%r13,%rsi,4)
  lea    (%r8,%r11,1),%esi
  movslq %edi,%rdi
  movslq %esi,%rsi
  movss  %xmm0,0x0(%r13,%rdi,4)
  movss  %xmm0,0x0(%r13,%rsi,4)
  mov    %r11d,%esi
  sub    %edx,%esi
  add    %esi,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
L108:
  add    $0x1,%ebx
  add    %r15d,%r9d
  add    -0x48(%rsp),%r8d
  cmp    %ebx,-0x60(%rsp)
  je     L275
L574:
  mov    %esi,%r11d
  lea    (%r14,%r9,1),%edi
  lea    (%r8,%rbp,1),%eax
  lea    (%rdx,%r12,1),%r10d
  sub    %edx,%r11d
  test   %ecx,%ecx
  jg     L468
  add    %r10d,%edi
  add    %r11d,%eax
  movslq %edi,%rdi
  cltq
  lea    0x0(%r13,%rdi,4),%rdi
  lea    0x0(%r13,%rax,4),%rax
  cmp    %ecx,-0x40(%rsp)
  jle    L259
  add    %r9d,%r12d
  add    %r8d,%esi
  movslq %r12d,%r12
  movslq %esi,%rsi
  movss  %xmm0,0x0(%r13,%r12,4)
  movss  %xmm0,(%rdi)
  movss  %xmm0,0x0(%r13,%rsi,4)
L61:
  movss  %xmm0,(%rax)
  add    -0x50(%rsp),%ecx
  mov    %r11d,%esi
  mov    %r10d,%r12d
  jmp    L108
  nopl   (%rax)
L677:
  mov    -0x38(%rsp),%rax
  add    %esi,%edi
  add    %edx,%ebx
  movslq %edi,%rdi
  movslq %ebx,%rbx
  movss  %xmm0,0x0(%r13,%rdi,4)
  movss  %xmm0,(%rax)
  movss  %xmm0,0x0(%r13,%rbx,4)
  jmp    L674
  cs nopw 0x0(%rax,%rax,1)
L259:
  lea    (%r9,%r10,1),%esi
  movslq %esi,%rsi
  movss  %xmm0,0x0(%r13,%rsi,4)
  lea    (%r8,%r11,1),%esi
  movslq %esi,%rsi
  movss  %xmm0,(%rdi)
  movss  %xmm0,0x0(%r13,%rsi,4)
  jmp    L61
  nopw   0x0(%rax,%rax,1)
L275:
  mov    -0x60(%rsp),%edi
  mov    -0x5c(%rsp),%eax
  mov    -0x10(%rsp),%ebx
  mov    -0x30(%rsp),%ebp
  sub    $0x1,%edi
  mov    -0xc(%rsp),%r15d
  imul   %edi,%eax
  imul   -0x2c(%rsp),%edi
  lea    (%rbx,%rax,2),%eax
  add    %edi,%ebp
L667:
  mov    -0x3c(%rsp),%edi
  test   %edi,%edi
  je     L459
  mov    -0x5c(%rsp),%ebx
  mov    -0x38(%rsp),%r8d
  mov    %r15d,%edi
  add    %ebx,%eax
  and    $0x2,%r8d
  imul   %eax,%edi
  test   %ecx,%ecx
  jle    L344
  lea    (%rdx,%r12,1),%ecx
  add    %ecx,%edi
  movslq %edi,%rdi
  movss  %xmm0,0x0(%r13,%rdi,4)
  test   %r8d,%r8d
  jne    L84
L119:
  cmpl   $0x3,-0x3c(%rsp)
  je     L568
  cs nopw 0x0(%rax,%rax,1)
L459:
  addq   $0x1,-0x58(%rsp)
  mov    -0x58(%rsp),%rax
  cmp    %rax,-0x18(%rsp)
  jne    L482
L643:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L647:
  lea    (%r9,%r9,1),%ecx
  sub    %edi,%r14d
  mov    %ecx,-0x38(%rsp)
  mov    %r14d,%r9d
  test   %ebx,%ebx
  jle    L558
  mov    %edx,%ecx
  sub    %edx,%esi
  lea    (%rdx,%rdx,1),%edi
  mov    %r12d,-0x8(%rsp)
  neg    %ecx
  sub    %edx,%esi
  mov    %edi,-0x44(%rsp)
  xor    %r10d,%r10d
  sub    %edx,%ecx
  mov    %r12d,%edi
  mov    %esi,-0x2c(%rsp)
  mov    %r15d,%r12d
  mov    %ecx,-0x48(%rsp)
  mov    %esi,%r8d
  mov    %edx,%r15d
  jmp    L523
L220:
  mov    -0x5c(%rsp),%ebx
  lea    (%rbx,%rax,1),%r11d
  mov    %r11d,%r14d
  imul   %r12d,%r14d
  lea    (%rdi,%r14,1),%esi
  movslq %esi,%rsi
  lea    0x0(%r13,%rsi,4),%rsi
  mov    %rsi,-0x50(%rsp)
  mov    %ebp,%esi
  sub    %ebx,%esi
  mov    %esi,%ebx
  mov    %r12d,%esi
  imul   %ebx,%esi
  mov    %esi,-0x40(%rsp)
  add    %r8d,%esi
  movslq %esi,%rsi
  lea    0x0(%r13,%rsi,4),%rsi
  cmp    %r9d,-0x38(%rsp)
  jle    L713
  imul   %r12d,%eax
  imul   %r12d,%ebp
  add    %ecx,%eax
  cltq
  add    %edx,%ebp
  movss  %xmm0,0x0(%r13,%rax,4)
  mov    -0x50(%rsp),%rax
  movslq %ebp,%rbp
  movss  %xmm0,(%rax)
  movss  %xmm0,0x0(%r13,%rbp,4)
L17:
  movss  %xmm0,(%rsi)
  add    -0x3c(%rsp),%r9d
  mov    %ebx,%ebp
  mov    %r11d,%eax
  add    $0x1,%r10d
  add    -0x48(%rsp),%r8d
  cmp    %r10d,-0x60(%rsp)
  je     L499
L523:
  lea    (%r15,%rdi,1),%ecx
  lea    (%r8,%r15,1),%edx
  add    -0x44(%rsp),%edi
  test   %r9d,%r9d
  jns    L220
  mov    %r12d,%esi
  add    -0x30(%rsp),%r9d
  add    $0x1,%r10d
  imul   %eax,%esi
  add    %esi,%ecx
  add    %edi,%esi
  movslq %ecx,%rcx
  movslq %esi,%rsi
  movss  %xmm0,0x0(%r13,%rcx,4)
  mov    %r12d,%ecx
  imul   %ebp,%ecx
  movss  %xmm0,0x0(%r13,%rsi,4)
  add    %ecx,%edx
  add    %r8d,%ecx
  add    -0x48(%rsp),%r8d
  movslq %edx,%rdx
  movslq %ecx,%rcx
  movss  %xmm0,0x0(%r13,%rdx,4)
  movss  %xmm0,0x0(%r13,%rcx,4)
  cmp    %r10d,-0x60(%rsp)
  jne    L523
L499:
  mov    -0x60(%rsp),%ecx
  mov    %r15d,%edx
  mov    %r12d,%r15d
  mov    -0x8(%rsp),%r12d
  mov    %edx,%edi
  sub    $0x1,%ecx
  lea    (%r12,%rdx,2),%esi
  imul   %ecx,%edi
  imul   -0x48(%rsp),%ecx
  lea    (%rsi,%rdi,2),%r12d
  mov    -0x2c(%rsp),%esi
  add    %ecx,%esi
L558:
  mov    -0x10(%rsp),%ebx
  test   %ebx,%ebx
  je     L459
  mov    -0xc(%rsp),%ecx
  lea    (%rdx,%r12,1),%edi
  and    $0x2,%ecx
  test   %r9d,%r9d
  js     L347
  cmp    %r9d,-0x38(%rsp)
  jle    L62
  mov    %r15d,%r8d
  imul   %eax,%r8d
  add    %edi,%r8d
  movslq %r8d,%r8
  movss  %xmm0,0x0(%r13,%r8,4)
  test   %ecx,%ecx
  jne    L561
  nopl   0x0(%rax)
L624:
  cmpl   $0x3,-0x10(%rsp)
  jne    L459
  mov    %ebp,%eax
  jmp    L591
  nopw   0x0(%rax,%rax,1)
L713:
  mov    -0x50(%rsp),%rax
  add    %r14d,%ecx
  add    -0x40(%rsp),%edx
  movslq %ecx,%rcx
  movslq %edx,%rdx
  movss  %xmm0,0x0(%r13,%rcx,4)
  movss  %xmm0,(%rax)
  movss  %xmm0,0x0(%r13,%rdx,4)
  jmp    L17
  nopl   0x0(%rax)
L320:
  add    %edi,%edi
  sub    %r9d,%r14d
  mov    %edi,-0x44(%rsp)
  mov    %r14d,%r8d
  test   %ebx,%ebx
  jle    L698
  mov    -0x5c(%rsp),%ebx
  mov    %ebp,%r9d
  mov    %r15d,%edi
  mov    %r15d,-0xc(%rsp)
  mov    %ebx,%ecx
  add    %ebx,%eax
  sub    %ebx,%r9d
  imul   %r15d,%ecx
  imul   %eax,%edi
  add    %ebx,%eax
  mov    %eax,-0x30(%rsp)
  imul   %r15d,%eax
  lea    (%rcx,%rcx,1),%r10d
  mov    %ebx,%ecx
  neg    %ecx
  sub    %ebx,%ecx
  sub    %edi,%eax
  mov    %ecx,%r14d
  mov    %ecx,-0x2c(%rsp)
  mov    %r9d,%ecx
  sub    %ebx,%r9d
  mov    %r9d,%ebx
  imul   %r15d,%ecx
  mov    %r9d,-0x10(%rsp)
  xor    %r9d,%r9d
  imul   %r15d,%ebx
  mov    %eax,-0x48(%rsp)
  imul   %r15d,%r14d
  mov    %r10d,%r15d
  sub    %ecx,%ebx
  jmp    L711
  cs nopw 0x0(%rax,%rax,1)
L25:
  lea    (%rdx,%r12,1),%r10d
  add    %r10d,%r11d
  movslq %r11d,%r11
  lea    0x0(%r13,%r11,4),%rbp
  mov    %esi,%r11d
  sub    %edx,%r11d
  add    %r11d,%eax
  cltq
  lea    0x0(%r13,%rax,4),%rax
  cmp    %r8d,-0x44(%rsp)
  jle    L300
  add    %edi,%r12d
  add    %ecx,%esi
  movslq %r12d,%r12
  movslq %esi,%rsi
  movss  %xmm0,0x0(%r13,%r12,4)
  movss  %xmm0,0x0(%rbp)
  movss  %xmm0,0x0(%r13,%rsi,4)
L798:
  movss  %xmm0,(%rax)
  add    -0x50(%rsp),%r8d
  mov    %r11d,%esi
  mov    %r10d,%r12d
L793:
  add    $0x1,%r9d
  add    %r15d,%edi
  add    %r14d,%ecx
  cmp    %r9d,-0x60(%rsp)
  je     L159
L711:
  mov    -0x48(%rsp),%eax
  lea    (%rax,%rdi,1),%r11d
  lea    (%rbx,%rcx,1),%eax
  test   %r8d,%r8d
  jns    L25
  lea    (%r12,%rdi,1),%r10d
  add    %r12d,%r11d
  add    %esi,%eax
  add    -0x40(%rsp),%r8d
  movslq %r10d,%r10
  movslq %r11d,%r11
  cltq
  movss  %xmm0,0x0(%r13,%r10,4)
  lea    (%rsi,%rcx,1),%r10d
  movslq %r10d,%r10
  movss  %xmm0,0x0(%r13,%r11,4)
  movss  %xmm0,0x0(%r13,%r10,4)
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L793
  nopl   0x0(%rax,%rax,1)
L300:
  lea    (%r10,%rdi,1),%esi
  movslq %esi,%rsi
  movss  %xmm0,0x0(%r13,%rsi,4)
  lea    (%r11,%rcx,1),%esi
  movslq %esi,%rsi
  movss  %xmm0,0x0(%rbp)
  movss  %xmm0,0x0(%r13,%rsi,4)
  jmp    L798
  xchg   %ax,%ax
L159:
  mov    -0x60(%rsp),%ecx
  mov    -0x5c(%rsp),%eax
  mov    -0x30(%rsp),%edi
  mov    -0x10(%rsp),%ebp
  sub    $0x1,%ecx
  mov    -0xc(%rsp),%r15d
  imul   %ecx,%eax
  imul   -0x2c(%rsp),%ecx
  lea    (%rdi,%rax,2),%eax
  add    %ecx,%ebp
L698:
  mov    -0x3c(%rsp),%r9d
  test   %r9d,%r9d
  je     L459
  mov    -0x5c(%rsp),%ebx
  mov    -0x38(%rsp),%edi
  mov    %r15d,%ecx
  add    %ebx,%eax
  and    $0x2,%edi
  imul   %eax,%ecx
  test   %r8d,%r8d
  js     L727
  cmp    %r8d,-0x44(%rsp)
  jle    L73
  add    %r12d,%ecx
  movslq %ecx,%rcx
  movss  %xmm0,0x0(%r13,%rcx,4)
  test   %edi,%edi
  jne    L218
  nopl   0x0(%rax,%rax,1)
L632:
  cmpl   $0x3,-0x3c(%rsp)
  jne    L459
  mov    %ebp,%eax
L421:
  sub    -0x5c(%rsp),%eax
L169:
  imul   %r15d,%eax
  add    %esi,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L459
  nopl   (%rax)
L84:
  add    %ebx,%eax
  add    %edx,%ecx
  imul   %r15d,%eax
  add    %ecx,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L119
L727:
  lea    (%r12,%rcx,1),%edx
  movslq %edx,%rdx
  movss  %xmm0,0x0(%r13,%rdx,4)
  test   %edi,%edi
  je     L632
  add    %ebx,%eax
  imul   %r15d,%eax
  add    %r12d,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L632
  cs nopw 0x0(%rax,%rax,1)
L347:
  imul   %r15d,%eax
  lea    (%rdi,%rax,1),%r8d
  movslq %r8d,%r8
  movss  %xmm0,0x0(%r13,%r8,4)
  test   %ecx,%ecx
  je     L624
  add    %edx,%edi
  add    %edi,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L624
  nopl   0x0(%rax)
L344:
  cmp    %ecx,-0x40(%rsp)
  jle    L510
  lea    (%r12,%rdi,1),%ecx
  movslq %ecx,%rcx
  movss  %xmm0,0x0(%r13,%rcx,4)
  test   %r8d,%r8d
  je     L632
L218:
  add    -0x5c(%rsp),%eax
  add    %r12d,%edx
  imul   %r15d,%eax
  add    %edx,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L632
  nopl   0x0(%rax,%rax,1)
L645:
  cmp    %ecx,-0x2c(%rsp)
  jle    L187
  mov    %r15d,%ecx
  imul   %eax,%ecx
  add    %edi,%ecx
  movslq %ecx,%rcx
  movss  %xmm0,0x0(%r13,%rcx,4)
  test   %r8d,%r8d
  je     L624
L561:
  add    -0x5c(%rsp),%eax
  add    %edx,%edi
  imul   %r15d,%eax
  add    %edi,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L624
  nop
L510:
  lea    (%rdx,%r12,1),%r9d
  add    %r9d,%edi
  movslq %edi,%rdi
  movss  %xmm0,0x0(%r13,%rdi,4)
  test   %r8d,%r8d
  je     L451
  add    -0x5c(%rsp),%eax
  imul   %r15d,%eax
  add    %r9d,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
L451:
  cmpl   $0x3,-0x3c(%rsp)
  jne    L459
  mov    %ebp,%eax
  sub    -0x5c(%rsp),%eax
  imul   %r15d,%eax
  cmp    %ecx,-0x40(%rsp)
  jl     L602
  add    %esi,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L459
  nopl   0x0(%rax)
L187:
  add    -0x5c(%rsp),%eax
  imul   %r15d,%eax
  lea    (%rax,%rdi,1),%r9d
  movslq %r9d,%r9
  movss  %xmm0,0x0(%r13,%r9,4)
  test   %r8d,%r8d
  je     L653
  add    %edx,%edi
  add    %eax,%edi
  movslq %edi,%rax
  movss  %xmm0,0x0(%r13,%rax,4)
L653:
  cmpl   $0x3,-0x10(%rsp)
  jne    L459
  sub    %edx,%esi
  mov    %ebp,%eax
  cmp    %ecx,-0x2c(%rsp)
  jge    L169
  jmp    L421
  nopw   0x0(%rax,%rax,1)
L73:
  lea    (%rdx,%r12,1),%r8d
  add    %r8d,%ecx
  movslq %ecx,%rcx
  movss  %xmm0,0x0(%r13,%rcx,4)
  test   %edi,%edi
  je     L119
  add    -0x5c(%rsp),%eax
  imul   %r15d,%eax
  add    %r8d,%eax
  cltq
  movss  %xmm0,0x0(%r13,%rax,4)
  jmp    L119
  nopw   0x0(%rax,%rax,1)
L62:
  add    -0x5c(%rsp),%eax
  imul   %r15d,%eax
  lea    (%rdi,%rax,1),%r8d
  movslq %r8d,%r8
  movss  %xmm0,0x0(%r13,%r8,4)
  test   %ecx,%ecx
  jne    L249
  cmpl   $0x3,-0x10(%rsp)
  jne    L459
  jmp    L568
```

tool_calls: name: unpack_data
arguments: data_tag: D0
type_infered: byte[4]

tool: {"D0": [0x00,0x00,0x80,0x3f]}

assistant: ```c
void render_lines_2D_WLA(float *mat, int wy, int wx, int *X1, int nx1, int *Y1, int ny1, int *X2, int nx2, int *Y2, int ny2) {
  int dx, dy, stepx, stepy, n;
  int length, extras, incr2, incr1, c, d, i;
  int x1, y1, x2, y2;
  float val = 1.0f;
  for (n = 0; n < nx1; ++n) {
    x1 = X1[n];
    y1 = Y1[n];
    x2 = X2[n];
    y2 = Y2[n];
    dy = y2 - y1;
    dx = x2 - x1;
    if (dy < 0) {
      dy = -dy;
      stepy = -1;
    } else {
      stepy = 1;
    }
    if (dx < 0) {
      dx = -dx;
      stepx = -1;
    } else {
      stepx = 1;
    }
    mat[y1 * wx + x1] = val;
    mat[y2 * wx + x2] = val;
    if (dx > dy) {
      length = (dx - 1) >> 2;
      extras = (dx - 1) & 3;
      incr2 = (dy << 2) - (dx << 1);
      if (incr2 < 0) {
        c = dy << 1;
        incr1 = c << 1;
        d = incr1 - dx;
        for (i = 0; i < length; i++) {
          x1 = x1 + stepx;
          x2 = x2 - stepx;
          if (d < 0) {
            mat[y1 * wx + x1] = val;
            x1 = x1 + stepx;
            mat[y1 * wx + x1] = val;
            mat[y2 * wx + x2] = val;
            x2 = x2 - stepx;
            mat[y2 * wx + x2] = val;
            d += incr1;
          } else {
            if (d < c) {
              mat[y1 * wx + x1] = val;
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
              mat[y2 * wx + x2] = val;
              x2 = x2 - stepx;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            } else {
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
              x1 = x1 + stepx;
              mat[y1 * wx + x1] = val;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
              x2 = x2 - stepx;
              mat[y2 * wx + x2] = val;
            }
            d += incr2;
          }
        }
        if (extras > 0) {
          if (d < 0) {
            x1 = x1 + stepx;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              x1 = x1 + stepx;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              x2 = x2 - stepx;
              mat[y2 * wx + x2] = val;
            }
          } else if (d < c) {
            x1 = x1 + stepx;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              x2 = x2 - stepx;
              mat[y2 * wx + x2] = val;
            }
          } else {
            x1 = x1 + stepx;
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              x1 = x1 + stepx;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              x2 = x2 - stepx;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            }
          }
        }
      } else {
        c = (dy - dx) << 1;
        incr1 = c << 1;
        d = incr1 + dx;
        for (i = 0; i < length; i++) {
          x1 = x1 + stepx;
          x2 = x2 - stepx;
          if (d > 0) {
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            x1 = x1 + stepx;
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            y2 = y2 - stepy;
            mat[y2 * wx + x2] = val;
            x2 = x2 - stepx;
            y2 = y2 - stepy;
            mat[y2 * wx + x2] = val;
            d += incr1;
          } else {
            if (d < c) {
              mat[y1 * wx + x1] = val;
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
              mat[y2 * wx + x2] = val;
              x2 = x2 - stepx;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            } else {
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
              x1 = x1 + stepx;
              mat[y1 * wx + x1] = val;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
              x2 = x2 - stepx;
              mat[y2 * wx + x2] = val;
            }
            d += incr2;
          }
        }
        if (extras > 0) {
          if (d > 0) {
            x1 = x1 + stepx;
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              x2 = x2 - stepx;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            }
          } else if (d < c) {
            x1 = x1 + stepx;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              x2 = x2 - stepx;
              mat[y2 * wx + x2] = val;
            }
          } else {
            x1 = x1 + stepx;
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              x1 = x1 + stepx;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              if (d > c) {
                x2 = x2 - stepx;
                y2 = y2 - stepy;
                mat[y2 * wx + x2] = val;
              } else {
                x2 = x2 - stepx;
                mat[y2 * wx + x2] = val;
              }
            }
          }
        }
      }
    } else {
      length = (dy - 1) >> 2;
      extras = (dy - 1) & 3;
      incr2 = (dx << 2) - (dy << 1);
      if (incr2 < 0) {
        c = dx << 1;
        incr1 = c << 1;
        d = incr1 - dy;
        for (i = 0; i < length; i++) {
          y1 = y1 + stepy;
          y2 = y2 - stepy;
          if (d < 0) {
            mat[y1 * wx + x1] = val;
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            mat[y2 * wx + x2] = val;
            y2 = y2 - stepy;
            mat[y2 * wx + x2] = val;
            d += incr1;
          } else {
            if (d < c) {
              mat[y1 * wx + x1] = val;
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
              mat[y2 * wx + x2] = val;
              x2 = x2 - stepx;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            } else {
              x1 = x1 + stepx;
              mat[y1 * wx + x1] = val;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
              x2 = x2 - stepx;
              mat[y2 * wx + x2] = val;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            }
            d += incr2;
          }
        }
        if (extras > 0) {
          if (d < 0) {
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            }
          } else if (d < c) {
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            }
          } else {
            x1 = x1 + stepx;
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              x2 = x2 - stepx;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            }
          }
        }
      } else {
        c = (dx - dy) << 1;
        incr1 = c << 1;
        d = incr1 + dy;
        for (i = 0; i < length; i++) {
          y1 = y1 + stepy;
          y2 = y2 - stepy;
          if (d > 0) {
            x1 = x1 + stepx;
            mat[y1 * wx + x1] = val;
            x1 = x1 + stepx;
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            x2 = x2 - stepx;
            mat[y2 * wx + x2] = val;
            x2 = x2 - stepx;
            y2 = y2 - stepy;
            mat[y2 * wx + x2] = val;
            d += incr1;
          } else {
            if (d < c) {
              mat[y1 * wx + x1] = val;
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
              mat[y2 * wx + x2] = val;
              x2 = x2 - stepx;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            } else {
              x1 = x1 + stepx;
              mat[y1 * wx + x1] = val;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
              x2 = x2 - stepx;
              mat[y2 * wx + x2] = val;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            }
            d += incr2;
          }
        }
        if (extras > 0) {
          if (d > 0) {
            x1 = x1 + stepx;
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              x2 = x2 - stepx;
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            }
          } else if (d < c) {
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              x1 = x1 + stepx;
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              y2 = y2 - stepy;
              mat[y2 * wx + x2] = val;
            }
          } else {
            x1 = x1 + stepx;
            y1 = y1 + stepy;
            mat[y1 * wx + x1] = val;
            if (extras > 1) {
              y1 = y1 + stepy;
              mat[y1 * wx + x1] = val;
            }
            if (extras > 2) {
              if (d > c) {
                x2 = x2 - stepx;
                y2 = y2 - stepy;
                mat[y2 * wx + x2] = val;
              } else {
                y2 = y2 - stepy;
                mat[y2 * wx + x2] = val;
              }
            }
          }
        }
      }
    }
  }
}
```