user: 请将以下的汇编代码转换成C语言代码:

```asm
<render_lines_2D_WLA>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edx,-0x3c(%rsp)
  mov    %rcx,-0x20(%rsp)
  mov    %r9,-0x18(%rsp)
  test   %r8d,%r8d
  jle    L84
  movslq %r8d,%rax
  movss  D3(%rip),%xmm0
  mov    %rdi,%r14
  movq   $0x0,-0x50(%rsp)
  mov    %rax,-0x10(%rsp)
  nopl   0x0(%rax)
L884:
  mov    -0x50(%rsp),%rax
  mov    -0x20(%rsp),%rdi
  mov    $0x1,%r15d
  mov    -0x18(%rsp),%rbx
  mov    0x50(%rsp),%rsi
  mov    (%rdi,%rax,4),%edx
  mov    %rax,%rdi
  mov    (%rbx,%rax,4),%eax
  mov    0x40(%rsp),%rbx
  mov    %edx,-0x60(%rsp)
  mov    (%rbx,%rdi,4),%ecx
  mov    (%rsi,%rdi,4),%ebx
  mov    %ecx,%esi
  mov    %ebx,%r8d
  mov    %ebx,-0x58(%rsp)
  sub    %edx,%esi
  sub    %eax,%r8d
  jns    L458
  mov    %eax,%r8d
  mov    $0xffffffff,%r15d
  sub    %ebx,%r8d
L458:
  mov    $0x1,%r13d
  test   %esi,%esi
  jns    L192
  mov    -0x60(%rsp),%esi
  mov    $0xffffffff,%r13d
  sub    %ecx,%esi
L192:
  mov    -0x3c(%rsp),%r12d
  mov    -0x60(%rsp),%r9d
  mov    -0x58(%rsp),%ebp
  mov    %r12d,%edx
  imul   %eax,%edx
  add    %r9d,%edx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rdx,4)
  mov    %ebp,%edx
  imul   %r12d,%edx
  add    %ecx,%edx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rdx,4)
  cmp    %r8d,%esi
  jle    L670
  lea    -0x1(%rsi),%edx
  lea    0x0(,%r8,4),%ebx
  mov    %edx,%edi
  mov    %edx,-0x8(%rsp)
  and    $0x3,%edx
  mov    %ebx,%r11d
  mov    %edx,-0x24(%rsp)
  lea    (%rsi,%rsi,1),%edx
  sar    $0x2,%edi
  sub    %edx,%r11d
  mov    %edi,-0x64(%rsp)
  mov    %ebx,-0x28(%rsp)
  mov    %r11d,-0x30(%rsp)
  js     L479
  mov    %r8d,%edx
  mov    -0x64(%rsp),%r10d
  sub    %esi,%edx
  lea    (%rdx,%rdx,1),%edi
  mov    %edi,-0x28(%rsp)
  lea    0x0(,%rdx,4),%edi
  mov    %edi,-0x2c(%rsp)
  lea    (%rsi,%rdi,1),%edx
  test   %r10d,%r10d
  jle    L894
  mov    %r13d,%esi
  sub    %r13d,%ecx
  lea    0x0(%r13,%r13,1),%edi
  xor    %r9d,%r9d
  neg    %esi
  sub    %r13d,%ecx
  mov    %edi,-0x40(%rsp)
  mov    %r12d,%r11d
  sub    %r13d,%esi
  mov    %r13d,-0x44(%rsp)
  mov    -0x60(%rsp),%edi
  mov    %r9d,%r13d
  mov    %esi,-0x48(%rsp)
  mov    -0x58(%rsp),%r9d
  mov    %ecx,%r8d
  mov    %ecx,-0x4(%rsp)
  jmp    L677
L515:
  add    %ebp,%esi
  lea    (%r15,%r10,1),%eax
  add    %ebx,%ecx
  mov    %r12d,%r9d
  movslq %esi,%rsi
  movslq %ecx,%rcx
  sub    %r15d,%r9d
  add    -0x2c(%rsp),%edx
  movss  %xmm0,(%r14,%rsi,4)
  mov    %r11d,%esi
  add    $0x1,%r13d
  imul   %eax,%esi
  add    %edi,%esi
  movslq %esi,%rsi
  movss  %xmm0,(%r14,%rsi,4)
  movss  %xmm0,(%r14,%rcx,4)
  mov    %r11d,%ecx
  imul   %r9d,%ecx
  add    %r8d,%ecx
  add    -0x48(%rsp),%r8d
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%rcx,4)
  cmp    %r13d,-0x64(%rsp)
  je     L793
L677:
  mov    %r9d,%r12d
  mov    -0x44(%rsp),%ebx
  lea    (%r15,%rax,1),%r10d
  mov    %r11d,%esi
  sub    %r15d,%r12d
  imul   %r10d,%esi
  mov    %r12d,%ecx
  lea    (%rdi,%rbx,1),%ebp
  mov    %r12d,-0x58(%rsp)
  add    %r8d,%ebx
  imul   %r11d,%ecx
  add    -0x40(%rsp),%edi
  test   %edx,%edx
  jg     L515
  lea    (%rdi,%rsi,1),%r12d
  movslq %r12d,%r12
  lea    (%r14,%r12,4),%r12
  mov    %r12,-0x38(%rsp)
  lea    (%rcx,%r8,1),%r12d
  movslq %r12d,%r12
  lea    (%r14,%r12,4),%r12
  cmp    %edx,-0x28(%rsp)
  jle    L602
  imul   %r11d,%eax
  imul   %r11d,%r9d
  add    %ebp,%eax
  cltq
  add    %ebx,%r9d
  movss  %xmm0,(%r14,%rax,4)
  mov    -0x38(%rsp),%rax
  movslq %r9d,%r9
  movss  %xmm0,(%rax)
  movss  %xmm0,(%r14,%r9,4)
L259:
  mov    -0x58(%rsp),%r9d
  add    -0x30(%rsp),%edx
  mov    %r10d,%eax
  add    $0x1,%r13d
  movss  %xmm0,(%r12)
  add    -0x48(%rsp),%r8d
  cmp    %r13d,-0x64(%rsp)
  jne    L677
L793:
  mov    -0x60(%rsp),%edi
  mov    -0x44(%rsp),%r13d
  mov    %r9d,-0x58(%rsp)
  mov    -0x64(%rsp),%ecx
  lea    (%rdi,%r13,2),%esi
  mov    %r13d,%edi
  sub    $0x1,%ecx
  imul   %ecx,%edi
  imul   -0x48(%rsp),%ecx
  add    -0x4(%rsp),%ecx
  lea    (%rsi,%rdi,2),%edi
  mov    %edi,-0x60(%rsp)
L894:
  mov    -0x24(%rsp),%r9d
  test   %r9d,%r9d
  je     L533
  mov    -0x8(%rsp),%edi
  mov    -0x60(%rsp),%esi
  and    $0x2,%edi
  add    %r13d,%esi
  test   %edx,%edx
  jle    L898
  mov    -0x3c(%rsp),%ebx
  add    %r15d,%eax
  mov    %ebx,%edx
  imul   %eax,%edx
  add    %esi,%edx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rdx,4)
  test   %edi,%edi
  je     L892
  add    %r15d,%eax
  imul   %ebx,%eax
L467:
  add    %r13d,%esi
  add    %esi,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
L892:
  cmpl   $0x3,-0x24(%rsp)
  jne    L533
L176:
  mov    -0x58(%rsp),%eax
  sub    %r15d,%eax
L65:
  imul   -0x3c(%rsp),%eax
L449:
  sub    %r13d,%ecx
  add    %ecx,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L533
  nopl   0x0(%rax,%rax,1)
L670:
  lea    -0x1(%r8),%edi
  lea    (%r8,%r8,1),%edx
  mov    %edi,%r12d
  mov    %edi,-0x28(%rsp)
  and    $0x3,%edi
  mov    %edi,-0x38(%rsp)
  lea    0x0(,%rsi,4),%edi
  sar    $0x2,%r12d
  mov    %edi,%ebx
  mov    %edi,-0x2c(%rsp)
  sub    %edx,%ebx
  mov    %ebx,-0x64(%rsp)
  js     L737
  mov    %esi,%edx
  sub    %r8d,%edx
  lea    (%rdx,%rdx,1),%edi
  mov    %edi,-0x30(%rsp)
  lea    0x0(,%rdx,4),%edi
  mov    %edi,-0x40(%rsp)
  lea    (%r8,%rdi,1),%edx
  test   %r12d,%r12d
  jle    L265
  cmpl   $0x1,-0x3c(%rsp)
  jne    L863
  mov    %r15d,%esi
  mov    %ebp,%r8d
  lea    (%r15,%r15,1),%ebx
  mov    %r9d,%edi
  neg    %esi
  sub    %r15d,%r8d
  mov    %ebx,-0x48(%rsp)
  mov    %eax,%r9d
  sub    %r15d,%esi
  mov    %eax,-0x2c(%rsp)
  sub    %r15d,%r8d
  xor    %ebx,%ebx
  mov    %esi,-0x44(%rsp)
  jmp    L644
  nopl   (%rax)
L900:
  lea    0x0(%r13,%r10,1),%edi
  add    %r10d,%esi
  add    %r11d,%eax
  add    $0x1,%ebx
  lea    (%r9,%rdi,1),%ecx
  movslq %esi,%rsi
  cltq
  add    -0x40(%rsp),%edx
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%rsi,4)
  movss  %xmm0,(%r14,%rcx,4)
  mov    %r11d,%ecx
  sub    %r13d,%ecx
  movss  %xmm0,(%r14,%rax,4)
  lea    (%rcx,%r8,1),%eax
  add    -0x44(%rsp),%r8d
  cltq
  movss  %xmm0,(%r14,%rax,4)
  cmp    %ebx,%r12d
  je     L446
L644:
  mov    %ecx,%r11d
  lea    (%r15,%r9,1),%esi
  lea    (%r15,%r8,1),%eax
  add    -0x48(%rsp),%r9d
  lea    0x0(%r13,%rdi,1),%r10d
  sub    %r13d,%r11d
  test   %edx,%edx
  jg     L900
  lea    (%r9,%r10,1),%ebp
  movslq %ebp,%rbp
  lea    (%r14,%rbp,4),%rbp
  mov    %rbp,-0x60(%rsp)
  lea    (%r11,%r8,1),%ebp
  movslq %ebp,%rbp
  lea    (%r14,%rbp,4),%rbp
  cmp    %edx,-0x30(%rsp)
  jle    L72
  add    %esi,%edi
  add    %eax,%ecx
  movslq %edi,%rdi
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%rdi,4)
  mov    -0x60(%rsp),%rdi
  movss  %xmm0,(%rdi)
  movss  %xmm0,(%r14,%rcx,4)
L0:
  add    $0x1,%ebx
  movss  %xmm0,0x0(%rbp)
  add    -0x64(%rsp),%edx
  mov    %r11d,%ecx
  mov    %r10d,%edi
  add    -0x44(%rsp),%r8d
  cmp    %ebx,%r12d
  jne    L644
L446:
  mov    -0x2c(%rsp),%eax
  mov    %edi,-0x60(%rsp)
  lea    (%r15,%rax,1),%ebp
L595:
  lea    -0x1(%r12),%edi
  mov    %r15d,%esi
  lea    0x0(%rbp,%r15,1),%eax
  mov    -0x58(%rsp),%r8d
  imul   %edi,%esi
  sub    %r15d,%r8d
  sub    %r15d,%r8d
  lea    (%rax,%rsi,2),%eax
  mov    %r15d,%esi
  neg    %esi
  sub    %r15d,%esi
  imul   %edi,%esi
  lea    (%rsi,%r8,1),%edi
  mov    %edi,-0x58(%rsp)
L265:
  mov    -0x38(%rsp),%esi
  test   %esi,%esi
  je     L533
  mov    -0x3c(%rsp),%ebx
  mov    -0x28(%rsp),%edi
  add    %r15d,%eax
  mov    %ebx,%esi
  and    $0x2,%edi
  imul   %eax,%esi
  test   %edx,%edx
  jle    L792
  mov    -0x60(%rsp),%edx
  add    %r13d,%edx
  add    %edx,%esi
  movslq %esi,%rsi
  movss  %xmm0,(%r14,%rsi,4)
  test   %edi,%edi
  jne    L549
L939:
  cmpl   $0x3,-0x38(%rsp)
  je     L176
  nopl   (%rax)
L533:
  addq   $0x1,-0x50(%rsp)
  mov    -0x50(%rsp),%rax
  cmp    %rax,-0x10(%rsp)
  jne    L884
L84:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L602:
  mov    -0x38(%rsp),%rax
  add    %esi,%ebp
  add    %ecx,%ebx
  movslq %ebp,%rbp
  movslq %ebx,%rbx
  movss  %xmm0,(%r14,%rbp,4)
  movss  %xmm0,(%rax)
  movss  %xmm0,(%r14,%rbx,4)
  jmp    L259
  nopl   0x0(%rax)
L72:
  mov    -0x60(%rsp),%rdi
  add    %r10d,%esi
  add    %r11d,%eax
  movslq %esi,%rsi
  cltq
  movss  %xmm0,(%r14,%rsi,4)
  movss  %xmm0,(%rdi)
  movss  %xmm0,(%r14,%rax,4)
  jmp    L0
  nopl   (%rax)
L479:
  lea    (%r8,%r8,1),%edx
  sub    %esi,%ebx
  mov    %edx,-0x2c(%rsp)
  mov    %ebx,%r8d
  test   %edi,%edi
  jle    L285
  mov    %r13d,%edx
  sub    %r13d,%ecx
  lea    0x0(%r13,%r13,1),%ebx
  mov    %r9d,%esi
  neg    %edx
  sub    %r13d,%ecx
  mov    %ebx,-0x44(%rsp)
  xor    %r9d,%r9d
  sub    %r13d,%edx
  mov    %ecx,-0x4(%rsp)
  mov    %ecx,%edi
  mov    %edx,-0x48(%rsp)
  jmp    L717
  nopl   0x0(%rax)
L794:
  lea    (%r15,%rax,1),%r11d
  mov    %r12d,%ebx
  imul   %r11d,%ebx
  lea    (%rsi,%rbx,1),%r10d
  mov    %ebx,-0x40(%rsp)
  movslq %r10d,%r10
  lea    (%r14,%r10,4),%rbx
  mov    %r12d,%r10d
  mov    %rbx,-0x58(%rsp)
  mov    %ebp,%ebx
  sub    %r15d,%ebx
  imul   %ebx,%r10d
  mov    %r10d,-0x38(%rsp)
  add    %edi,%r10d
  movslq %r10d,%r10
  lea    (%r14,%r10,4),%r10
  cmp    %r8d,-0x2c(%rsp)
  jle    L364
  imul   %r12d,%eax
  add    %ecx,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  mov    -0x58(%rsp),%rax
  movss  %xmm0,(%rax)
  mov    %ebp,%eax
  imul   %r12d,%eax
  add    %edx,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
L378:
  movss  %xmm0,(%r10)
  add    -0x30(%rsp),%r8d
  mov    %ebx,%ebp
  mov    %r11d,%eax
  add    $0x1,%r9d
  add    -0x48(%rsp),%edi
  cmp    %r9d,-0x64(%rsp)
  je     L329
L717:
  lea    (%rsi,%r13,1),%ecx
  lea    (%rdi,%r13,1),%edx
  add    -0x44(%rsp),%esi
  test   %r8d,%r8d
  jns    L794
  mov    %r12d,%r10d
  add    -0x28(%rsp),%r8d
  add    $0x1,%r9d
  imul   %eax,%r10d
  add    %r10d,%ecx
  add    %esi,%r10d
  movslq %ecx,%rcx
  movslq %r10d,%r10
  movss  %xmm0,(%r14,%rcx,4)
  mov    %r12d,%ecx
  imul   %ebp,%ecx
  movss  %xmm0,(%r14,%r10,4)
  add    %ecx,%edx
  add    %edi,%ecx
  add    -0x48(%rsp),%edi
  movslq %edx,%rdx
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%rdx,4)
  movss  %xmm0,(%r14,%rcx,4)
  cmp    %r9d,-0x64(%rsp)
  jne    L717
L329:
  mov    -0x64(%rsp),%edx
  mov    %r13d,%esi
  mov    -0x60(%rsp),%edi
  mov    %ebp,-0x58(%rsp)
  sub    $0x1,%edx
  lea    (%rdi,%r13,2),%ecx
  imul   %edx,%esi
  imul   -0x48(%rsp),%edx
  lea    (%rcx,%rsi,2),%edi
  mov    -0x4(%rsp),%ecx
  mov    %edi,-0x60(%rsp)
  add    %edx,%ecx
L285:
  mov    -0x24(%rsp),%r11d
  test   %r11d,%r11d
  je     L533
  mov    -0x8(%rsp),%edx
  mov    -0x60(%rsp),%esi
  and    $0x2,%edx
  add    %r13d,%esi
  test   %r8d,%r8d
  js     L377
  cmp    %r8d,-0x2c(%rsp)
  jle    L24
  mov    -0x3c(%rsp),%ebx
  mov    %ebx,%edi
  imul   %eax,%edi
  add    %esi,%edi
  movslq %edi,%rdi
  movss  %xmm0,(%r14,%rdi,4)
  test   %edx,%edx
  jne    L834
  nopl   (%rax)
L514:
  cmpl   $0x3,-0x24(%rsp)
  jne    L533
  mov    -0x58(%rsp),%eax
  jmp    L65
  nopl   0x0(%rax)
L364:
  mov    -0x58(%rsp),%rax
  add    -0x40(%rsp),%ecx
  add    -0x38(%rsp),%edx
  movslq %ecx,%rcx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rcx,4)
  movss  %xmm0,(%rax)
  movss  %xmm0,(%r14,%rdx,4)
  jmp    L378
  nopl   0x0(%rax,%rax,1)
L737:
  lea    (%rsi,%rsi,1),%ebx
  sub    %r8d,%edi
  mov    %ebx,-0x30(%rsp)
  test   %r12d,%r12d
  jle    L724
  cmpl   $0x1,-0x3c(%rsp)
  mov    %ebp,%r8d
  jne    L657
  mov    %r15d,%edx
  sub    %r15d,%r8d
  mov    %r9d,%esi
  mov    %eax,-0x24(%rsp)
  neg    %edx
  mov    %r12d,-0x48(%rsp)
  sub    %r15d,%r8d
  mov    %eax,%r9d
  sub    %r15d,%edx
  xor    %r10d,%r10d
  mov    %edx,-0x40(%rsp)
  lea    (%r15,%r15,1),%edx
  mov    %edx,-0x44(%rsp)
  jmp    L142
  nop
L808:
  lea    0x0(%r13,%rsi,1),%ebx
  mov    %ecx,%ebp
  lea    (%r9,%rbx,1),%r11d
  sub    %r13d,%ebp
  movslq %r11d,%r11
  lea    (%r14,%r11,4),%r12
  lea    0x0(%rbp,%r8,1),%r11d
  movslq %r11d,%r11
  lea    (%r14,%r11,4),%r11
  cmp    %edi,-0x30(%rsp)
  jle    L855
  add    %edx,%esi
  add    %eax,%ecx
  movslq %esi,%rsi
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%rsi,4)
  movss  %xmm0,(%r12)
  movss  %xmm0,(%r14,%rcx,4)
L388:
  movss  %xmm0,(%r11)
  add    -0x64(%rsp),%edi
  mov    %ebp,%ecx
  mov    %ebx,%esi
  add    $0x1,%r10d
  add    -0x40(%rsp),%r8d
  cmp    %r10d,-0x48(%rsp)
  je     L791
L142:
  lea    (%r15,%r9,1),%edx
  lea    (%r8,%r15,1),%eax
  add    -0x44(%rsp),%r9d
  test   %edi,%edi
  jns    L808
  add    %esi,%edx
  add    %ecx,%eax
  add    -0x2c(%rsp),%edi
  add    $0x1,%r10d
  movslq %edx,%rdx
  cltq
  movss  %xmm0,(%r14,%rdx,4)
  lea    (%r9,%rsi,1),%edx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rdx,4)
  movss  %xmm0,(%r14,%rax,4)
  lea    (%r8,%rcx,1),%eax
  add    -0x40(%rsp),%r8d
  cltq
  movss  %xmm0,(%r14,%rax,4)
  cmp    %r10d,-0x48(%rsp)
  jne    L142
L791:
  mov    -0x24(%rsp),%eax
  mov    -0x48(%rsp),%r12d
  mov    %esi,-0x60(%rsp)
  lea    (%r15,%rax,1),%ebp
L889:
  lea    -0x1(%r12),%esi
  mov    %r15d,%edx
  lea    0x0(%rbp,%r15,1),%eax
  mov    -0x58(%rsp),%r8d
  imul   %esi,%edx
  sub    %r15d,%r8d
  sub    %r15d,%r8d
  lea    (%rax,%rdx,2),%eax
  mov    %r15d,%edx
  neg    %edx
  sub    %r15d,%edx
  imul   %esi,%edx
  lea    (%rdx,%r8,1),%ebx
  mov    %ebx,-0x58(%rsp)
L724:
  mov    -0x38(%rsp),%r8d
  test   %r8d,%r8d
  je     L533
  mov    -0x3c(%rsp),%ebx
  mov    -0x28(%rsp),%esi
  add    %r15d,%eax
  mov    %ebx,%edx
  and    $0x2,%esi
  imul   %eax,%edx
  test   %edi,%edi
  js     L278
  cmp    %edi,-0x30(%rsp)
  mov    -0x60(%rsp),%edi
  jle    L269
  add    %edi,%edx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rdx,4)
  test   %esi,%esi
  jne    L118
  nopl   0x0(%rax,%rax,1)
L924:
  cmpl   $0x3,-0x38(%rsp)
  jne    L533
  mov    -0x58(%rsp),%eax
L439:
  sub    %r15d,%eax
L804:
  imul   -0x3c(%rsp),%eax
  add    %ecx,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L533
  xchg   %ax,%ax
L855:
  add    %ebx,%edx
  add    %ebp,%eax
  movslq %edx,%rdx
  cltq
  movss  %xmm0,(%r14,%rdx,4)
  movss  %xmm0,(%r12)
  movss  %xmm0,(%r14,%rax,4)
  jmp    L388
L549:
  add    %r15d,%eax
  add    %r13d,%edx
  imul   %ebx,%eax
  add    %edx,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L939
  nopl   0x0(%rax,%rax,1)
L377:
  imul   -0x3c(%rsp),%eax
  lea    (%rax,%rsi,1),%edi
  movslq %edi,%rdi
  movss  %xmm0,(%r14,%rdi,4)
  test   %edx,%edx
  je     L514
  add    %r13d,%esi
  add    %esi,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L514
  nopl   0x0(%rax,%rax,1)
L278:
  mov    -0x60(%rsp),%edi
  add    %edi,%edx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rdx,4)
  test   %esi,%esi
  je     L924
  add    %r15d,%eax
  imul   %ebx,%eax
  add    %edi,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L924
  nopl   0x0(%rax)
L898:
  cmp    %edx,-0x28(%rsp)
  jle    L659
  mov    -0x3c(%rsp),%ebx
  mov    %ebx,%edx
  imul   %eax,%edx
  add    %esi,%edx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rdx,4)
  test   %edi,%edi
  je     L514
L834:
  add    %r15d,%eax
  add    %r13d,%esi
  imul   %ebx,%eax
  add    %esi,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L514
  xchg   %ax,%ax
L792:
  cmp    %edx,-0x30(%rsp)
  jle    L177
  mov    -0x60(%rsp),%ebx
  lea    (%rbx,%rsi,1),%edx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rdx,4)
  test   %edi,%edi
  je     L924
  add    %r15d,%eax
  imul   -0x3c(%rsp),%eax
  mov    %ebx,%edx
  add    %r13d,%edx
  add    %edx,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L924
  xchg   %ax,%ax
L863:
  lea    (%r15,%rax,1),%ebp
  mov    %r15d,%eax
  mov    -0x3c(%rsp),%r11d
  mov    %r15d,-0x2c(%rsp)
  neg    %eax
  mov    %ebp,-0x24(%rsp)
  sub    %r15d,%eax
  mov    %r11d,%esi
  mov    %r11d,%edi
  mov    %r11d,%r8d
  imul   %r11d,%eax
  imul   %r15d,%esi
  imul   %ebp,%r8d
  mov    %eax,%ebx
  mov    -0x58(%rsp),%eax
  lea    (%rsi,%rsi,1),%r9d
  lea    (%r15,%rbp,1),%esi
  sub    %r15d,%eax
  imul   %r11d,%esi
  imul   %eax,%edi
  sub    %r15d,%eax
  mov    %r9d,%r15d
  mov    -0x60(%rsp),%r9d
  imul   %r11d,%eax
  xor    %r11d,%r11d
  sub    %r8d,%esi
  mov    %esi,-0x44(%rsp)
  sub    %edi,%eax
  mov    %eax,-0x48(%rsp)
  jmp    L627
  nopl   0x0(%rax,%rax,1)
L77:
  lea    (%r8,%r10,1),%ecx
  lea    0x0(%r13,%r10,1),%r9d
  add    $0x1,%r11d
  add    %r15d,%r8d
  movslq %ecx,%rcx
  add    %r9d,%esi
  add    -0x40(%rsp),%edx
  movss  %xmm0,(%r14,%rcx,4)
  lea    (%rdi,%rbp,1),%ecx
  movslq %esi,%rsi
  add    %ebx,%edi
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%rsi,4)
  movss  %xmm0,(%r14,%rcx,4)
  mov    %ebp,%ecx
  sub    %r13d,%ecx
  add    %ecx,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  cmp    %r11d,%r12d
  je     L799
L627:
  mov    -0x44(%rsp),%eax
  mov    %ecx,%ebp
  lea    0x0(%r13,%r9,1),%r10d
  sub    %r13d,%ebp
  lea    (%rax,%r8,1),%esi
  mov    -0x48(%rsp),%eax
  add    %edi,%eax
  test   %edx,%edx
  jg     L77
  add    %r10d,%esi
  add    %ebp,%eax
  movslq %esi,%rsi
  cltq
  lea    (%r14,%rsi,4),%rsi
  lea    (%r14,%rax,4),%rax
  cmp    %edx,-0x30(%rsp)
  jle    L215
  add    %r8d,%r9d
  add    %edi,%ecx
  movslq %r9d,%r9
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%r9,4)
  movss  %xmm0,(%rsi)
  movss  %xmm0,(%r14,%rcx,4)
L244:
  add    $0x1,%r11d
  movss  %xmm0,(%rax)
  add    -0x64(%rsp),%edx
  mov    %ebp,%ecx
  mov    %r10d,%r9d
  add    %r15d,%r8d
  add    %ebx,%edi
  cmp    %r11d,%r12d
  jne    L627
L799:
  mov    -0x2c(%rsp),%r15d
  mov    -0x24(%rsp),%ebp
  mov    %r9d,-0x60(%rsp)
  jmp    L595
  nopl   0x0(%rax,%rax,1)
L215:
  lea    (%r8,%r10,1),%ecx
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%rcx,4)
  lea    (%rdi,%rbp,1),%ecx
  movslq %ecx,%rcx
  movss  %xmm0,(%rsi)
  movss  %xmm0,(%r14,%rcx,4)
  jmp    L244
  nop
L657:
  mov    -0x3c(%rsp),%ebx
  lea    (%r15,%rax,1),%ebp
  mov    %r15d,%eax
  sub    %r15d,%r8d
  neg    %eax
  mov    %r15d,-0x40(%rsp)
  mov    %ebx,%edx
  sub    %r15d,%eax
  mov    %ebx,%esi
  mov    %ebp,-0x24(%rsp)
  imul   %r15d,%edx
  imul   %ebx,%eax
  imul   %ebp,%esi
  lea    (%rdx,%rdx,1),%r9d
  mov    %ebx,%edx
  imul   %r8d,%edx
  mov    %eax,%r11d
  lea    (%r15,%rbp,1),%eax
  sub    %r15d,%r8d
  imul   %ebx,%eax
  mov    %r9d,%r15d
  imul   %ebx,%r8d
  xor    %ebx,%ebx
  sub    %esi,%eax
  sub    %edx,%r8d
  mov    %eax,-0x44(%rsp)
  mov    %r8d,-0x48(%rsp)
  mov    -0x60(%rsp),%r8d
  jmp    L628
  nop
L822:
  lea    0x0(%r13,%r8,1),%r9d
  add    %r9d,%r10d
  movslq %r10d,%r10
  lea    (%r14,%r10,4),%rbp
  mov    %ecx,%r10d
  sub    %r13d,%r10d
  add    %r10d,%eax
  cltq
  lea    (%r14,%rax,4),%rax
  cmp    %edi,-0x30(%rsp)
  jle    L851
  add    %esi,%r8d
  add    %edx,%ecx
  movslq %r8d,%r8
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%r8,4)
  movss  %xmm0,0x0(%rbp)
  movss  %xmm0,(%r14,%rcx,4)
L887:
  add    $0x1,%ebx
  movss  %xmm0,(%rax)
  add    -0x64(%rsp),%edi
  mov    %r10d,%ecx
  mov    %r9d,%r8d
  add    %r15d,%esi
  add    %r11d,%edx
  cmp    %ebx,%r12d
  je     L154
L628:
  mov    -0x44(%rsp),%eax
  lea    (%rax,%rsi,1),%r10d
  mov    -0x48(%rsp),%eax
  add    %edx,%eax
  test   %edi,%edi
  jns    L822
  lea    (%r8,%rsi,1),%r9d
  add    %r8d,%r10d
  add    %ecx,%eax
  add    $0x1,%ebx
  movslq %r9d,%r9
  movslq %r10d,%r10
  cltq
  add    -0x2c(%rsp),%edi
  movss  %xmm0,(%r14,%r9,4)
  lea    (%rcx,%rdx,1),%r9d
  add    %r15d,%esi
  add    %r11d,%edx
  movslq %r9d,%r9
  movss  %xmm0,(%r14,%r10,4)
  movss  %xmm0,(%r14,%r9,4)
  movss  %xmm0,(%r14,%rax,4)
  cmp    %ebx,%r12d
  jne    L628
L154:
  mov    -0x40(%rsp),%r15d
  mov    -0x24(%rsp),%ebp
  mov    %r8d,-0x60(%rsp)
  jmp    L889
  nopw   0x0(%rax,%rax,1)
L851:
  lea    (%r9,%rsi,1),%ecx
  movslq %ecx,%rcx
  movss  %xmm0,(%r14,%rcx,4)
  lea    (%r10,%rdx,1),%ecx
  movslq %ecx,%rcx
  movss  %xmm0,0x0(%rbp)
  movss  %xmm0,(%r14,%rcx,4)
  jmp    L887
  nopl   0x0(%rax)
L659:
  add    %r15d,%eax
  imul   -0x3c(%rsp),%eax
  lea    (%rax,%rsi,1),%r8d
  movslq %r8d,%r8
  movss  %xmm0,(%r14,%r8,4)
  test   %edi,%edi
  je     L705
  add    %r13d,%esi
  add    %eax,%esi
  movslq %esi,%rax
  movss  %xmm0,(%r14,%rax,4)
L705:
  cmpl   $0x3,-0x24(%rsp)
  jne    L533
  mov    -0x58(%rsp),%eax
  sub    %r13d,%ecx
  cmp    %edx,-0x28(%rsp)
  jge    L804
  jmp    L439
L24:
  add    %r15d,%eax
  imul   -0x3c(%rsp),%eax
  lea    (%rax,%rsi,1),%edi
  movslq %edi,%rdi
  movss  %xmm0,(%r14,%rdi,4)
  test   %edx,%edx
  jne    L467
  cmpl   $0x3,-0x24(%rsp)
  jne    L533
  jmp    L176
  nopl   0x0(%rax)
L269:
  add    %r13d,%edi
  add    %edi,%edx
  movslq %edx,%rdx
  movss  %xmm0,(%r14,%rdx,4)
  test   %esi,%esi
  je     L939
  add    %r15d,%eax
  imul   -0x3c(%rsp),%eax
  add    %edi,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L939
  nopl   (%rax)
L177:
  mov    -0x60(%rsp),%r8d
  add    %r13d,%r8d
  add    %r8d,%esi
  movslq %esi,%rsi
  movss  %xmm0,(%r14,%rsi,4)
  test   %edi,%edi
  je     L274
  add    %r15d,%eax
  imul   -0x3c(%rsp),%eax
  add    %r8d,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
L274:
  cmpl   $0x3,-0x38(%rsp)
  jne    L533
  mov    -0x58(%rsp),%eax
  sub    %r15d,%eax
  imul   -0x3c(%rsp),%eax
  cmp    %edx,-0x30(%rsp)
  jl     L449
  add    %ecx,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L533
L118:
  add    %r15d,%eax
  imul   -0x3c(%rsp),%eax
  add    %r13d,%edi
  add    %edi,%eax
  cltq
  movss  %xmm0,(%r14,%rax,4)
  jmp    L924
```

tool_calls: name: parse_data
arguments: data_tag: D3
data_type: byte[4]

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