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

```asm
<asg_pstep3d>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x178,%rsp
  mov    0x1d0(%rsp),%rax
  mov    %rsi,0xd0(%rsp)
  mov    %rcx,0xc8(%rsp)
  mov    0x8(%rax),%esi
  mov    0x1d8(%rsp),%rax
  mov    %rdi,0xf8(%rsp)
  mov    %rdx,0xd8(%rsp)
  mov    0x8(%rax),%ecx
  mov    0x1e0(%rsp),%rax
  mov    %r8,0x108(%rsp)
  mov    %r9,0x110(%rsp)
  mov    (%rax),%eax
  mov    %esi,0x12c(%rsp)
  mov    %ecx,0x130(%rsp)
  mov    %eax,0x14c(%rsp)
  cmp    %ecx,%esi
  jg     L26
  mov    0x1d0(%rsp),%rax
  mov    0x4(%rax),%edi
  mov    0x1d8(%rsp),%rax
  mov    0x4(%rax),%ebx
  mov    %edi,0x134(%rsp)
  mov    %ebx,0x148(%rsp)
  cmp    %edi,%ebx
  jl     L180
  movslq %esi,%rax
  lea    0x0(,%rax,8),%r15
  mov    %rax,0x138(%rsp)
  mov    %rax,%rdx
  mov    %r15,0xa0(%rsp)
  lea    0x1(%rax),%r15
  mov    %ecx,%eax
  sub    %esi,%eax
  mov    0x1b0(%rsp),%rsi
  mov    %r15,0x150(%rsp)
  add    %r15,%rax
  shl    $0x3,%rax
  mov    %rax,0x160(%rsp)
  movslq %edi,%rax
  mov    %rax,0x140(%rsp)
  shl    $0x3,%rax
  sub    %rax,%rsi
  mov    %rax,0x158(%rsp)
  lea    0x1(%rbx),%eax
  mov    %eax,0xe4(%rsp)
  mov    0x1f0(%rsp),%eax
  mov    %rsi,0x168(%rsp)
  sub    $0x1,%eax
  mov    %eax,0x128(%rsp)
L105:
  mov    0x1d0(%rsp),%rax
  mov    (%rax),%ecx
  mov    0x1d8(%rsp),%rax
  mov    (%rax),%esi
  lea    0x0(,%rdx,4),%rax
  mov    %ecx,0xe0(%rsp)
  mov    %rax,0xf0(%rsp)
  mov    0xa0(%rsp),%rax
  mov    %esi,0xb4(%rsp)
  add    0x168(%rsp),%rax
  sub    %ecx,%esi
  mov    %rax,0x60(%rsp)
  mov    %esi,%eax
  lea    0x4(,%rax,4),%rdi
  mov    %esi,0x20(%rsp)
  add    $0x1,%esi
  mov    %rdi,0xe8(%rsp)
  movslq %ecx,%rdi
  lea    0x1(%rax,%rdi,1),%rax
  lea    0x0(,%rdi,4),%rbx
  mov    %esi,0x2c(%rsp)
  shl    $0x2,%rax
  mov    %rbx,0x78(%rsp)
  add    0x1c8(%rsp),%rbx
  mov    %rax,0x88(%rsp)
  mov    %esi,%eax
  mov    %rbx,%r15
  and    $0xfffffffc,%esi
  shr    $0x2,%eax
  mov    0x1b0(%rsp),%rbx
  add    %esi,%ecx
  mov    %rdi,0x30(%rsp)
  sub    $0x1,%eax
  mov    %esi,0x98(%rsp)
  add    $0x1,%rax
  lea    (%rbx,%rdx,8),%rdx
  mov    %ecx,0x9c(%rsp)
  shl    $0x4,%rax
  mov    %rdx,0x118(%rsp)
  mov    %rax,0x80(%rsp)
  mov    0x140(%rsp),%rax
  mov    %rax,0xa8(%rsp)
  mov    0x158(%rsp),%rax
  mov    %rax,0x38(%rsp)
  mov    0x134(%rsp),%eax
  mov    %eax,0xb0(%rsp)
  lea    -0x4(,%rdi,8),%rax
  mov    %rax,0x90(%rsp)
  nopl   0x0(%rax)
L28:
  mov    0xe0(%rsp),%esi
  cmp    %esi,0xb4(%rsp)
  jl     L524
  mov    0xe8(%rsp),%rdx
  xor    %esi,%esi
  mov    %r15,%rdi
  call   <memset@plt>
  mov    0x1f0(%rsp),%eax
  test   %eax,%eax
  jle    L555
  cmpl   $0x2,0x1f0(%rsp)
  jle    L696
  mov    0x38(%rsp),%rax
  mov    0xa0(%rsp),%rcx
  movq   $0x4,0x68(%rsp)
  xor    %edx,%edx
  movl   $0x1,0x18(%rsp)
  mov    0x1c8(%rsp),%rdi
  xor    %r14d,%r14d
  lea    0x8(%rax),%rsi
  mov    %r15,0x120(%rsp)
  mov    %rsi,0xb8(%rsp)
  mov    %rsi,0x70(%rsp)
  lea    -0x10(%rax),%rsi
  mov    %rsi,0x10(%rsp)
  mov    0x1f8(%rsp),%rsi
  mov    (%rsi),%rsi
  mov    %rsi,0x58(%rsp)
  mov    0x108(%rsp),%rsi
  mov    (%rsi,%rcx,1),%rsi
  mov    %rsi,0x100(%rsp)
  mov    (%rsi,%rax,1),%rsi
  mov    0x1f8(%rsp),%rax
  mov    0x8(%rax),%rax
  mov    %rax,0x48(%rsp)
  mov    0x110(%rsp),%rax
  mov    (%rax,%rcx,1),%rax
  mov    %rax,0x50(%rsp)
  mov    0x1f8(%rsp),%rax
  mov    0x10(%rax),%rax
  mov    %rax,0x40(%rsp)
L760:
  mov    0x50(%rsp),%rcx
  mov    0x10(%rsp),%rax
  mov    0x38(%rsp),%r8
  mov    0x58(%rsp),%rbx
  mov    0x8(%rcx,%rax,1),%r10
  mov    0x70(%rsp),%r11
  movss  (%rbx,%r14,1),%xmm7
  mov    0x48(%rsp),%r9
  mov    -0x8(%rcx,%r11,1),%r15
  mov    (%rcx,%r11,1),%rbp
  mov    %r10,0x8(%rsp)
  mov    0x40(%rsp),%r10
  movss  (%r9,%r14,1),%xmm6
  movss  (%r10,%r14,1),%xmm5
  mov    0x118(%rsp),%r10
  mov    (%r10,%r14,2),%rax
  mov    (%rax,%r8,1),%r13
  mov    -0x8(%r10,%rdx,2),%rax
  mov    (%rax,%r8,1),%r12
  mov    0x68(%rsp),%rax
  movss  (%rbx,%rax,1),%xmm4
  mov    0x10(%rsp),%rbx
  movss  (%r9,%rax,1),%xmm3
  lea    (%rsi,%r14,1),%r9
  mov    (%rcx,%rbx,1),%rbx
  mov    0x40(%rsp),%rcx
  movss  (%rcx,%rax,1),%xmm2
  mov    (%r10,%rax,2),%rax
  lea    -0x8(%rdx),%rcx
  mov    %rcx,0xc0(%rsp)
  add    %rsi,%rcx
  mov    (%rax,%r8,1),%r11
  mov    -0x10(%r10,%rdx,2),%rax
  mov    (%rax,%r8,1),%r10
  mov    0x78(%rsp),%rax
  lea    (%rsi,%rdx,1),%r8
  nopl   0x0(%rax)
L798:
  lea    (%rsi,%rax,1),%rdx
  movss  0x0(%rbp,%rax,1),%xmm1
  subss  (%rbx,%rax,1),%xmm1
  movss  0x4(%r14,%rdx,1),%xmm0
  subss  (%rcx,%rax,1),%xmm0
  mov    0x8(%rsp),%rdx
  movss  (%r15,%rax,1),%xmm8
  mulss  %xmm3,%xmm1
  mulss  %xmm4,%xmm0
  subss  (%rdx,%rax,1),%xmm8
  mulss  %xmm6,%xmm8
  addss  %xmm1,%xmm0
  movss  (%r11,%rax,1),%xmm1
  subss  (%r10,%rax,1),%xmm1
  mulss  %xmm2,%xmm1
  addss  %xmm1,%xmm0
  movss  (%r9,%rax,1),%xmm1
  subss  -0x4(%r8,%rax,1),%xmm1
  mulss  %xmm7,%xmm1
  addss  %xmm8,%xmm1
  movss  0x0(%r13,%rax,1),%xmm8
  subss  (%r12,%rax,1),%xmm8
  mulss  %xmm5,%xmm8
  addss  %xmm8,%xmm1
  addss  (%rdi,%rax,1),%xmm1
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rdi,%rax,1)
  add    $0x4,%rax
  cmp    0x88(%rsp),%rax
  jne    L798
  mov    0x18(%rsp),%eax
  addq   $0x8,0x68(%rsp)
  add    $0x8,%r14
  addq   $0x10,0x70(%rsp)
  lea    0x1(%rax),%ecx
  add    $0x2,%eax
  subq   $0x10,0x10(%rsp)
  mov    %eax,0x18(%rsp)
  cmp    %eax,0x128(%rsp)
  jle    L360
  mov    0xc0(%rsp),%rdx
  jmp    L760
L360:
  mov    0x120(%rsp),%r15
L229:
  mov    0xa8(%rsp),%rsi
  movslq %ecx,%rcx
  mov    0x38(%rsp),%rdi
  mov    %rsi,%rax
  sub    %rcx,%rax
  lea    -0x8(,%rax,8),%rax
  mov    %rax,0x8(%rsp)
  mov    0x30(%rsp),%rax
  add    %rcx,%rax
  shl    $0x2,%rax
  mov    %rax,0x10(%rsp)
  mov    0x100(%rsp),%rax
  mov    (%rax,%rdi,1),%rdx
  mov    %rsi,%rax
  mov    0xa0(%rsp),%rsi
  shl    $0x4,%rax
  sub    $0x8,%rax
  mov    %rax,0x70(%rsp)
  mov    0x1b0(%rsp),%rax
  add    %rsi,%rax
  mov    %rax,0x68(%rsp)
L691:
  mov    0x58(%rsp),%rax
  mov    0x8(%rsp),%rdi
  mov    %ecx,%esi
  mov    0x50(%rsp),%rbx
  movss  (%rax,%rcx,4),%xmm4
  mov    0x48(%rsp),%rax
  mov    (%rbx,%rdi,1),%r9
  movss  (%rax,%rcx,4),%xmm3
  mov    0x70(%rsp),%rax
  sub    %rdi,%rax
  cmpl   $0x2,0x20(%rsp)
  mov    (%rbx,%rax,1),%r10
  mov    0x40(%rsp),%rax
  mov    0x38(%rsp),%rbx
  movss  (%rax,%rcx,4),%xmm2
  mov    0x68(%rsp),%rax
  mov    (%rax,%rcx,8),%rax
  mov    (%rax,%rbx,1),%r8
  mov    0x60(%rsp),%rax
  mov    (%rax,%rdi,1),%rax
  mov    (%rax,%rbx,1),%rdi
  jbe    L671
  mov    0x10(%rsp),%rax
  mov    %rdx,0x18(%rsp)
  movaps %xmm4,%xmm7
  movaps %xmm3,%xmm6
  mov    0x90(%rsp),%r11
  movaps %xmm2,%xmm5
  shufps $0x0,%xmm7,%xmm7
  shufps $0x0,%xmm6,%xmm6
  lea    (%rdx,%rax,1),%r14
  shufps $0x0,%xmm5,%xmm5
  sub    %rax,%r11
  mov    0x78(%rsp),%rax
  add    %rdx,%r11
  mov    0x80(%rsp),%rdx
  lea    (%r10,%rax,1),%r13
  lea    (%r9,%rax,1),%r12
  lea    (%r8,%rax,1),%rbp
  lea    (%rdi,%rax,1),%rbx
  xor    %eax,%eax
  nopl   0x0(%rax)
L298:
  movups (%r12,%rax,1),%xmm1
  movups 0x0(%r13,%rax,1),%xmm0
  movups (%r11,%rax,1),%xmm9
  movups (%rbx,%rax,1),%xmm10
  subps  %xmm1,%xmm0
  movups (%r14,%rax,1),%xmm1
  subps  %xmm9,%xmm1
  mulps  %xmm6,%xmm0
  mulps  %xmm7,%xmm1
  addps  %xmm1,%xmm0
  movups 0x0(%rbp,%rax,1),%xmm1
  subps  %xmm10,%xmm1
  mulps  %xmm5,%xmm1
  addps  %xmm1,%xmm0
  movups (%r15,%rax,1),%xmm1
  addps  %xmm1,%xmm0
  movups %xmm0,(%r15,%rax,1)
  add    $0x10,%rax
  cmp    %rdx,%rax
  jne    L298
  mov    0x98(%rsp),%eax
  mov    0x2c(%rsp),%ebx
  mov    0x18(%rsp),%rdx
  cmp    %ebx,%eax
  je     L29
  mov    %eax,%ebx
  mov    0x9c(%rsp),%eax
L209:
  mov    0x2c(%rsp),%r13d
  sub    %ebx,%r13d
  cmp    %ebx,0x20(%rsp)
  je     L305
  mov    0x30(%rsp),%r14
  mov    0x1c8(%rsp),%rbp
  lea    (%r14,%rbx,1),%r11
  sub    %rcx,%r14
  lea    0x0(%rbp,%r11,4),%r12
  lea    (%r11,%rcx,1),%rbp
  movq   (%r9,%r11,4),%xmm5
  movq   (%rdx,%rbp,4),%xmm0
  mov    %r14,%rbp
  add    %rbx,%rbp
  movq   -0x4(%rdx,%rbp,4),%xmm1
  subps  %xmm1,%xmm0
  movaps %xmm4,%xmm1
  shufps $0xe0,%xmm1,%xmm1
  mulps  %xmm1,%xmm0
  movq   (%r10,%r11,4),%xmm1
  subps  %xmm5,%xmm1
  movaps %xmm3,%xmm5
  shufps $0xe0,%xmm5,%xmm5
  mulps  %xmm5,%xmm1
  movq   (%rdi,%r11,4),%xmm5
  addps  %xmm1,%xmm0
  movq   (%r8,%r11,4),%xmm1
  mov    %r13d,%r11d
  and    $0xfffffffe,%r11d
  subps  %xmm5,%xmm1
  movaps %xmm2,%xmm5
  add    %r11d,%eax
  shufps $0xe0,%xmm5,%xmm5
  mulps  %xmm5,%xmm1
  addps  %xmm1,%xmm0
  movq   (%r12),%xmm1
  addps  %xmm1,%xmm0
  movlps %xmm0,(%r12)
  cmp    %r13d,%r11d
  je     L29
L305:
  mov    0x1c8(%rsp),%rbx
  movslq %eax,%r11
  movss  (%r10,%r11,4),%xmm1
  subss  (%r9,%r11,4),%xmm1
  lea    (%rbx,%r11,4),%rbp
  lea    (%rax,%rsi,1),%ebx
  sub    %esi,%eax
  movslq %ebx,%rbx
  cltq
  movss  (%rdx,%rbx,4),%xmm0
  subss  -0x4(%rdx,%rax,4),%xmm0
  mulss  %xmm3,%xmm1
  mulss  %xmm4,%xmm0
  addss  %xmm1,%xmm0
  movss  (%r8,%r11,4),%xmm1
  subss  (%rdi,%r11,4),%xmm1
  mulss  %xmm2,%xmm1
  addss  %xmm1,%xmm0
  addss  0x0(%rbp),%xmm0
  movss  %xmm0,0x0(%rbp)
L29:
  subq   $0x8,0x8(%rsp)
  add    $0x1,%rcx
  addq   $0x4,0x10(%rsp)
  cmp    %ecx,0x1f0(%rsp)
  jg     L691
L413:
  mov    0xa0(%rsp),%rcx
  mov    0xd0(%rsp),%rax
  mov    0x38(%rsp),%r9
  mov    0xb4(%rsp),%r12d
  mov    (%rax,%rcx,1),%rax
  mov    0x1c8(%rsp),%r13
  mov    (%rax,%r9,1),%rdi
  mov    0x1b8(%rsp),%rax
  mov    (%rax),%rbx
  mov    0xf8(%rsp),%rax
  mov    (%rax,%rcx,1),%rax
  mov    (%rax,%r9,1),%rdx
  mov    0x1c0(%rsp),%rax
  mov    (%rax),%r11
  mov    0xd8(%rsp),%rax
  mov    (%rax,%rcx,1),%rax
  mov    (%rax,%r9,1),%rsi
  mov    0xa8(%rsp),%rax
  lea    0x0(,%rax,4),%r8
  mov    0x1b8(%rsp),%rax
  mov    0x8(%rax),%r10
  mov    0x1c0(%rsp),%rax
  add    %r8,%r10
  add    0x8(%rax),%r8
  mov    0xc8(%rsp),%rax
  mov    (%rax,%rcx,1),%rax
  mov    (%rax,%r9,1),%rcx
  mov    0x1b8(%rsp),%r9
  mov    0xf0(%rsp),%rax
  mov    0x10(%r9),%rbp
  mov    0x1c0(%rsp),%r9
  add    %rax,%rbp
  add    0x10(%r9),%rax
  mov    %rax,%r9
  mov    0x30(%rsp),%rax
  nopw   0x0(%rax,%rax,1)
L301:
  movss  (%rdx,%rax,4),%xmm2
  movss  0x0(%r13,%rax,4),%xmm1
  movss  (%rdi,%rax,4),%xmm0
  mulss  (%rbx,%rax,4),%xmm0
  mulss  %xmm1,%xmm2
  subss  %xmm2,%xmm0
  mulss  (%r11,%rax,4),%xmm0
  movss  %xmm0,(%rdi,%rax,4)
  movss  (%rdx,%rax,4),%xmm2
  movss  (%rsi,%rax,4),%xmm0
  mulss  (%r10),%xmm0
  mulss  %xmm1,%xmm2
  subss  %xmm2,%xmm0
  mulss  (%r8),%xmm0
  movss  %xmm0,(%rsi,%rax,4)
  mulss  (%rdx,%rax,4),%xmm1
  movss  (%rcx,%rax,4),%xmm0
  mulss  0x0(%rbp),%xmm0
  subss  %xmm1,%xmm0
  mulss  (%r9),%xmm0
  movss  %xmm0,(%rcx,%rax,4)
  add    $0x1,%rax
  cmp    %eax,%r12d
  jge    L301
L317:
  mov    0xb8(%rsp),%rsi
  subq   $0x8,0x60(%rsp)
  addl   $0x1,0xb0(%rsp)
  mov    0xb0(%rsp),%eax
  addq   $0x1,0xa8(%rsp)
  mov    %rsi,0x38(%rsp)
  cmp    0xe4(%rsp),%eax
  jne    L28
  mov    0x150(%rsp),%rsi
  addq   $0x8,0xa0(%rsp)
  mov    0xa0(%rsp),%rax
  mov    %rsi,%rdx
  cmp    0x160(%rsp),%rax
  je     L103
  lea    0x1(%rsi),%rax
  mov    %rax,0x150(%rsp)
  jmp    L105
L671:
  mov    0xe0(%rsp),%eax
  xor    %ebx,%ebx
  jmp    L209
L524:
  mov    0x38(%rsp),%rax
  add    $0x8,%rax
  mov    %rax,0xb8(%rsp)
  jmp    L317
L555:
  mov    0x38(%rsp),%rax
  add    $0x8,%rax
  mov    %rax,0xb8(%rsp)
  jmp    L413
L696:
  mov    0x1f8(%rsp),%rax
  mov    0x108(%rsp),%rsi
  xor    %ecx,%ecx
  mov    (%rax),%rax
  mov    %rax,0x58(%rsp)
  mov    0xa0(%rsp),%rax
  mov    (%rsi,%rax,1),%rsi
  mov    %rsi,0x100(%rsp)
  mov    0x1f8(%rsp),%rsi
  mov    0x8(%rsi),%rsi
  mov    %rsi,0x48(%rsp)
  mov    0x110(%rsp),%rsi
  mov    (%rsi,%rax,1),%rax
  mov    %rax,0x50(%rsp)
  mov    0x1f8(%rsp),%rax
  mov    0x10(%rax),%rax
  mov    %rax,0x40(%rsp)
  mov    0x38(%rsp),%rax
  add    $0x8,%rax
  mov    %rax,0xb8(%rsp)
  jmp    L229
L103:
  mov    0x14c(%rsp),%esi
  test   %esi,%esi
  jne    L678
L651:
  mov    0x1e8(%rsp),%rax
  mov    (%rax),%edi
  test   %edi,%edi
  je     L496
  mov    0x1d8(%rsp),%rax
  mov    0x4(%rax),%esi
  mov    0x1d0(%rsp),%rax
  movslq 0x4(%rax),%rax
  mov    %esi,0x148(%rsp)
  mov    %eax,0x134(%rsp)
  cmp    %eax,%esi
  jl     L479
  movslq 0x12c(%rsp),%rsi
  mov    %rax,0x140(%rsp)
  mov    0x1f0(%rsp),%eax
  mov    %rsi,0x138(%rsp)
  lea    -0x1(%rax),%edi
  lea    -0x2(%rax),%esi
L576:
  mov    0x1d8(%rsp),%rax
  mov    %edi,%r11d
  movss  D58(%rip),%xmm3
  mov    0x138(%rsp),%r15
  movaps D4(%rip),%xmm1
  movaps %xmm3,%xmm2
  movslq (%rax),%rcx
  mov    %edi,%eax
  lea    0x4(,%rcx,4),%r8
  mov    %ecx,%r9d
  lea    -0x4(%r8),%rdx
  lea    0x4(%r8),%rbx
  mov    %rdx,0x50(%rsp)
  mov    %rax,%rdx
  lea    0x2(%rcx,%rax,1),%rax
  lea    -0x10(%r8),%r13
  neg    %rdx
  shl    $0x2,%rax
  lea    (%r8,%rdx,4),%rdx
  cmp    %rax,%rdx
  setge  %dl
  cmp    %r8,%rbx
  setge  %al
  or     %edx,%eax
  cmp    $0x2,%esi
  seta   %dl
  and    $0xfffffffc,%r11d
  add    %rcx,%rsi
  and    %edx,%eax
  mov    0x140(%rsp),%rdx
  mov    %rsi,0x40(%rsp)
  mov    %al,0x48(%rsp)
  lea    0x0(,%rdx,8),%rax
  mov    %rax,0x58(%rsp)
  mov    0x148(%rsp),%eax
  sub    0x134(%rsp),%eax
  lea    (%rax,%rdx,1),%r14
  mov    %edi,%eax
  lea    0x1(%r11),%edx
  shr    $0x2,%eax
  sub    %edx,%r9d
  sub    $0x1,%eax
  mov    %rax,0x8(%rsp)
  lea    0x1(%r9),%eax
  cltq
  lea    0x0(,%rax,4),%rbp
  lea    (%r9,%rdx,2),%eax
  cltq
  lea    0x2(%r11),%r9d
  lea    0x4(,%rax,4),%rdx
  mov    %r9d,0x10(%rsp)
  mov    %rdx,0x20(%rsp)
  mov    %ecx,%edx
  sub    %r9d,%edx
  lea    0x1(%rdx),%eax
  cltq
  lea    0x0(,%rax,4),%r12
  lea    (%rdx,%r9,2),%eax
  cltq
  lea    0x3(%r11),%r9d
  lea    0x4(,%rax,4),%rdx
  mov    %r9d,0x2c(%rsp)
  mov    %rdx,0x18(%rsp)
  mov    %ecx,%edx
  lea    0x8(,%r14,8),%rcx
  sub    %r9d,%edx
  mov    %rcx,0x60(%rsp)
  lea    0x1(%rdx),%eax
  cltq
  lea    0x0(,%rax,4),%r10
  lea    (%rdx,%r9,2),%eax
  cltq
  mov    %r10,0x38(%rsp)
  mov    0x1f0(%rsp),%r10d
  lea    0x4(,%rax,4),%rdx
  mov    0x8(%rsp),%rax
  mov    %rdx,0x30(%rsp)
  add    $0x1,%rax
  shl    $0x4,%rax
  mov    %rax,%r14
L503:
  mov    0xd0(%rsp),%rax
  mov    0x58(%rsp),%rsi
  mov    (%rax,%r15,8),%rax
  lea    (%rax,%rsi,1),%r9
  add    0x60(%rsp),%rax
  cmpb   $0x0,0x48(%rsp)
  mov    %rax,0x8(%rsp)
  je     L596
L48:
  mov    (%r9),%rcx
  lea    (%rcx,%rbx,1),%rax
  movl   $0x0,(%rcx,%r8,1)
  lea    (%rcx,%r13,1),%rdx
  lea    (%r14,%rax,1),%rsi
  cmp    $0x1,%r10d
  jle    L260
  nop
L599:
  movups (%rdx),%xmm0
  add    $0x10,%rax
  sub    $0x10,%rdx
  shufps $0x1b,%xmm0,%xmm0
  xorps  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rsi,%rax
  jne    L599
  cmp    %edi,%r11d
  je     L260
  movss  (%rcx,%rbp,1),%xmm0
  mov    0x20(%rsp),%rax
  xorps  %xmm3,%xmm0
  movss  %xmm0,(%rcx,%rax,1)
  cmp    0x10(%rsp),%r10d
  jle    L260
  movss  (%rcx,%r12,1),%xmm0
  mov    0x18(%rsp),%rax
  xorps  %xmm3,%xmm0
  movss  %xmm0,(%rcx,%rax,1)
  cmp    0x2c(%rsp),%r10d
  jle    L260
  mov    0x38(%rsp),%rax
  movss  (%rcx,%rax,1),%xmm0
  mov    0x30(%rsp),%rax
  xorps  %xmm3,%xmm0
  movss  %xmm0,(%rcx,%rax,1)
L260:
  add    $0x8,%r9
  cmp    0x8(%rsp),%r9
  jne    L48
  add    $0x1,%r15
  cmp    %r15d,0x130(%rsp)
  jge    L503
L479:
  mov    0x1e0(%rsp),%rax
  mov    0x4(%rax),%ebx
  test   %ebx,%ebx
  jne    L323
L316:
  mov    0x1e8(%rsp),%rax
  mov    0x4(%rax),%r12d
  test   %r12d,%r12d
  jne    L300
L153:
  mov    0x1e8(%rsp),%rax
  mov    0x8(%rax),%r13d
  mov    0x1e0(%rsp),%rax
  mov    0x8(%rax),%r14d
  test   %r14d,%r14d
  je     L322
  mov    0x1d0(%rsp),%rax
  mov    0x4(%rax),%edx
  mov    0x1d8(%rsp),%rax
  mov    0x4(%rax),%ebx
  cmp    %ebx,%edx
  jg     L373
  movslq 0x12c(%rsp),%rcx
  mov    0xc8(%rsp),%r9
  mov    %ebx,%r8d
  movslq %edx,%r10
  mov    0x1d0(%rsp),%rax
  sub    %edx,%r8d
  lea    0x0(,%r10,8),%rdi
  movss  D58(%rip),%xmm1
  lea    0x0(,%rcx,8),%rsi
  lea    0x1(%r8,%r10,1),%rdx
  mov    -0x8(%r9,%rsi,1),%rbp
  lea    (%r9,%rsi,1),%r14
  movslq (%rax),%rax
  lea    0x8(%r9),%r12
  mov    0x1f0(%rsp),%esi
  lea    0x0(,%rdx,8),%r15
  shl    $0x2,%rax
  lea    -0x2(%rsi),%edx
  mov    %rdx,%rsi
  add    %rcx,%rdx
  lea    (%r12,%rdx,8),%r11
L406:
  mov    0x0(%rbp,%rdi,1),%rdx
  cmpl   $0x1,0x1f0(%rsp)
  mov    %r14,%rcx
  movl   $0x0,(%rdx,%rax,1)
  mov    %r14,%rdx
  jle    L359
L208:
  mov    (%rdx),%r9
  mov    -0x10(%rcx),%r8
  add    $0x8,%rdx
  sub    $0x8,%rcx
  mov    (%r9,%rdi,1),%r9
  mov    (%r8,%rdi,1),%r8
  movss  (%r9,%rax,1),%xmm0
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%r8,%rax,1)
  cmp    %rdx,%r11
  jne    L208
L359:
  add    $0x8,%rdi
  cmp    %rdi,%r15
  jne    L406
  test   %r13d,%r13d
  je     L373
L432:
  movslq 0x130(%rsp),%rcx
  mov    0xc8(%rsp),%rdi
  movss  D58(%rip),%xmm1
  lea    0x1(%rcx),%rdx
  mov    (%rdi,%rdx,8),%r9
  lea    -0x8(%rdi,%rdx,8),%r11
  mov    %esi,%edx
  add    %rcx,%rdx
  lea    (%r12,%rdx,8),%rbp
L501:
  mov    (%r9,%r10,8),%rdx
  cmpl   $0x1,0x1f0(%rsp)
  lea    0x0(,%r10,8),%rsi
  mov    %r11,%rcx
  movl   $0x0,(%rdx,%rax,1)
  mov    %r11,%rdx
  jle    L677
L265:
  mov    (%rcx),%r8
  mov    0x10(%rdx),%rdi
  add    $0x8,%rdx
  sub    $0x8,%rcx
  mov    (%r8,%rsi,1),%r8
  mov    (%rdi,%rsi,1),%rdi
  movss  (%r8,%rax,1),%xmm0
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%rdi,%rax,1)
  cmp    %rdx,%rbp
  jne    L265
L677:
  add    $0x1,%r10
  cmp    %r10d,%ebx
  jge    L501
L373:
  add    $0x178,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L678:
  mov    0xd0(%rsp),%rsi
  mov    0x138(%rsp),%rcx
  movss  D58(%rip),%xmm3
  movaps D4(%rip),%xmm1
  mov    0x1f0(%rsp),%r10d
  movaps %xmm3,%xmm2
  lea    (%rsi,%rcx,8),%rax
  mov    %rax,0x8(%rsp)
  mov    0x130(%rsp),%eax
  sub    0x12c(%rsp),%eax
  add    %rcx,%rax
  mov    0x140(%rsp),%rcx
  lea    0x8(%rsi,%rax,8),%rax
  mov    %rax,0x58(%rsp)
  mov    0x1d0(%rsp),%rax
  movslq (%rax),%r9
  mov    0x1f0(%rsp),%eax
  lea    -0x2(%rax),%esi
  sub    $0x1,%eax
  lea    0x0(,%r9,4),%r8
  mov    %rax,%rdx
  mov    %rax,%rdi
  add    %r9,%rax
  mov    %esi,0x68(%rsp)
  not    %rdx
  shl    $0x2,%rax
  lea    -0x4(%r8),%rbx
  mov    %edi,%ebp
  lea    (%r8,%rdx,4),%rdx
  lea    -0x14(%r8),%r14
  cmp    %rax,%rdx
  setge  %dl
  cmp    %rbx,%r8
  setge  %al
  or     %edx,%eax
  cmp    $0x2,%esi
  seta   %dl
  and    $0xfffffffc,%ebp
  and    %edx,%eax
  lea    0x1(%rbp),%edx
  mov    %al,0x40(%rsp)
  lea    0x0(,%rcx,8),%rax
  mov    %rax,0x50(%rsp)
  mov    0x148(%rsp),%eax
  sub    0x134(%rsp),%eax
  lea    (%rax,%rcx,1),%r11
  mov    %edi,%eax
  shr    $0x2,%eax
  sub    $0x1,%eax
  shl    $0x4,%rax
  mov    %rax,%r15
  lea    (%rdx,%r9,1),%eax
  add    %edx,%edx
  movslq %eax,%rcx
  sub    %edx,%eax
  cltq
  lea    -0x4(,%rcx,4),%r12
  lea    0x2(%rbp),%ecx
  lea    -0x4(,%rax,4),%rax
  mov    %ecx,0x2c(%rsp)
  mov    %rax,0x18(%rsp)
  lea    (%r9,%rcx,1),%eax
  movslq %eax,%rdx
  lea    -0x4(,%rdx,4),%r13
  lea    (%rcx,%rcx,1),%edx
  sub    %edx,%eax
  lea    0x3(%rbp),%ecx
  cltq
  mov    %ecx,0x20(%rsp)
  lea    -0x4(,%rax,4),%rax
  mov    %rax,0x10(%rsp)
  lea    (%r9,%rcx,1),%eax
  movslq %eax,%rdx
  lea    -0x4(,%rdx,4),%rdx
  mov    %rdx,0x38(%rsp)
  lea    (%rcx,%rcx,1),%edx
  sub    %edx,%eax
  cltq
  lea    -0x4(,%rax,4),%rax
  mov    %rax,0x30(%rsp)
  mov    %esi,%eax
  add    %r9,%rax
  mov    %rax,0x48(%rsp)
  lea    0x8(,%r11,8),%rax
  mov    %rax,0x60(%rsp)
  mov    $0xfffffffffffffff0,%rax
  sub    %r15,%rax
  mov    %rax,%r15
L443:
  mov    0x8(%rsp),%rax
  mov    (%rax),%r11
  mov    0x50(%rsp),%rax
  lea    (%r11,%rax,1),%r9
  add    0x60(%rsp),%r11
  cmpb   $0x0,0x40(%rsp)
  je     L21
L474:
  mov    (%r9),%rcx
  lea    (%rcx,%r14,1),%rax
  movl   $0x0,(%rcx,%rbx,1)
  lea    (%rcx,%r8,1),%rdx
  lea    (%r15,%rax,1),%rsi
  cmp    $0x1,%r10d
  jle    L375
  nopl   0x0(%rax)
L287:
  movups (%rdx),%xmm0
  sub    $0x10,%rax
  add    $0x10,%rdx
  xorps  %xmm1,%xmm0
  shufps $0x1b,%xmm0,%xmm0
  movups %xmm0,0x10(%rax)
  cmp    %rsi,%rax
  jne    L287
  cmp    %edi,%ebp
  je     L375
  movss  (%rcx,%r12,1),%xmm0
  mov    0x18(%rsp),%rax
  xorps  %xmm3,%xmm0
  movss  %xmm0,(%rcx,%rax,1)
  cmp    0x2c(%rsp),%r10d
  jle    L375
  movss  (%rcx,%r13,1),%xmm0
  mov    0x10(%rsp),%rax
  xorps  %xmm3,%xmm0
  movss  %xmm0,(%rcx,%rax,1)
  cmp    0x20(%rsp),%r10d
  jle    L375
  mov    0x38(%rsp),%rax
  movss  (%rcx,%rax,1),%xmm0
  mov    0x30(%rsp),%rax
  xorps  %xmm3,%xmm0
  movss  %xmm0,(%rcx,%rax,1)
L375:
  add    $0x8,%r9
  cmp    %r11,%r9
  jne    L474
L191:
  addq   $0x8,0x8(%rsp)
  mov    0x8(%rsp),%rax
  cmp    0x58(%rsp),%rax
  jne    L443
  mov    0x1e8(%rsp),%rax
  mov    0x68(%rsp),%esi
  mov    (%rax),%r9d
  test   %r9d,%r9d
  jne    L576
L453:
  mov    0x1e0(%rsp),%rax
  mov    0x4(%rax),%r10d
  test   %r10d,%r10d
  je     L429
L374:
  mov    0x1d0(%rsp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,0x134(%rsp)
L323:
  movslq 0x12c(%rsp),%rsi
  mov    0x1d0(%rsp),%rax
  movss  D58(%rip),%xmm1
  movslq 0x134(%rsp),%rdx
  mov    0xd8(%rsp),%r12
  mov    %rsi,0x138(%rsp)
  mov    %rsi,%r10
  movslq (%rax),%rax
  mov    0x1f0(%rsp),%esi
  lea    0x0(,%rdx,8),%r11
  lea    -0x8(%r11),%rbx
  shl    $0x2,%rax
  lea    -0x2(%rsi),%ecx
  lea    0x1(%rdx,%rcx,1),%rdx
  mov    %rcx,%rsi
  lea    0x0(,%rdx,8),%rbp
L38:
  mov    (%r12,%r10,8),%r9
  mov    (%r9,%rbx,1),%rdx
  movl   $0x0,(%rdx,%rax,1)
  lea    (%r9,%r11,1),%rdx
  add    %rbp,%r9
  cmpl   $0x1,0x1f0(%rsp)
  mov    %rdx,%rcx
  jle    L411
L173:
  mov    (%rdx),%r8
  mov    -0x10(%rcx),%rdi
  add    $0x8,%rdx
  sub    $0x8,%rcx
  movss  (%r8,%rax,1),%xmm0
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%rdi,%rax,1)
  cmp    %rdx,%r9
  jne    L173
L411:
  add    $0x1,%r10
  cmp    %r10d,0x130(%rsp)
  jge    L38
  mov    0x1e8(%rsp),%rcx
  mov    0x4(%rcx),%ebp
  test   %ebp,%ebp
  je     L153
L500:
  mov    0x1d8(%rsp),%rcx
  mov    0x138(%rsp),%r8
  movss  D58(%rip),%xmm1
  mov    0xd8(%rsp),%rbp
  movslq 0x4(%rcx),%rdx
  lea    0x8(,%rdx,8),%r10
  lea    0x0(,%rdx,8),%r11
  lea    0x1(%rdx,%rsi,1),%rdx
  lea    0x0(,%rdx,8),%rbx
L512:
  mov    0x0(%rbp,%r8,8),%r9
  mov    (%r9,%r10,1),%rdx
  lea    (%r9,%r11,1),%rcx
  add    %rbx,%r9
  cmpl   $0x1,0x1f0(%rsp)
  movl   $0x0,(%rdx,%rax,1)
  mov    %rcx,%rdx
  jle    L467
L468:
  mov    (%rcx),%rdi
  mov    0x10(%rdx),%rsi
  add    $0x8,%rdx
  sub    $0x8,%rcx
  movss  (%rdi,%rax,1),%xmm0
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%rsi,%rax,1)
  cmp    %rdx,%r9
  jne    L468
L467:
  add    $0x1,%r8
  cmp    %r8d,0x130(%rsp)
  jge    L512
  jmp    L153
L21:
  mov    0x48(%rsp),%rax
  lea    0x4(,%rax,4),%rsi
L338:
  mov    (%r9),%rcx
  movl   $0x0,(%rcx,%rbx,1)
  cmp    $0x1,%r10d
  jle    L829
  lea    (%rcx,%r8,1),%rax
  add    %rsi,%rcx
  mov    %rax,%rdx
  nopw   0x0(%rax,%rax,1)
L525:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  sub    $0x4,%rdx
  xorps  %xmm2,%xmm0
  movss  %xmm0,-0x4(%rdx)
  cmp    %rcx,%rax
  jne    L525
L829:
  add    $0x8,%r9
  cmp    %r11,%r9
  jne    L338
  jmp    L191
L322:
  test   %r13d,%r13d
  je     L373
  mov    0x1d0(%rsp),%rax
  mov    0x4(%rax),%edx
  mov    0x1d8(%rsp),%rax
  mov    0x4(%rax),%ebx
  cmp    %ebx,%edx
  jg     L373
  mov    0x1f0(%rsp),%ecx
  mov    0x1d0(%rsp),%rax
  movslq %edx,%r10
  movslq (%rax),%rax
  lea    -0x2(%rcx),%esi
  mov    0xc8(%rsp),%rcx
  shl    $0x2,%rax
  lea    0x8(%rcx),%r12
  jmp    L432
L596:
  mov    0x40(%rsp),%rax
  lea    0x4(,%rax,4),%rsi
L344:
  mov    (%r9),%rcx
  movl   $0x0,(%rcx,%r8,1)
  cmp    $0x1,%r10d
  jle    L627
  mov    0x50(%rsp),%rax
  lea    (%rcx,%rax,1),%rdx
  add    %rsi,%rcx
  mov    %rdx,%rax
  nopl   0x0(%rax,%rax,1)
L30:
  movss  (%rdx),%xmm0
  add    $0x4,%rax
  sub    $0x4,%rdx
  xorps  %xmm2,%xmm0
  movss  %xmm0,0x4(%rax)
  cmp    %rcx,%rax
  jne    L30
L627:
  add    $0x8,%r9
  cmp    0x8(%rsp),%r9
  jne    L344
  add    $0x1,%r15
  cmp    %r15d,0x130(%rsp)
  jge    L503
  jmp    L479
L496:
  mov    0x1e0(%rsp),%rax
  mov    0x4(%rax),%edx
  test   %edx,%edx
  je     L316
  jmp    L374
L26:
  mov    0x1e8(%rsp),%rax
  mov    (%rax),%r15d
  test   %r15d,%r15d
  jne    L153
  mov    0x1e0(%rsp),%rax
  mov    0x4(%rax),%eax
  test   %eax,%eax
  jne    L153
  jmp    L316
L180:
  mov    0x14c(%rsp),%r11d
  test   %r11d,%r11d
  je     L651
  mov    0x1e8(%rsp),%rax
  mov    (%rax),%r8d
  test   %r8d,%r8d
  jne    L479
  jmp    L453
L429:
  mov    0x1e8(%rsp),%rax
  mov    0x4(%rax),%ecx
  test   %ecx,%ecx
  je     L153
L17:
  movslq 0x12c(%rsp),%rcx
  mov    0x1d0(%rsp),%rax
  mov    %rcx,0x138(%rsp)
  movslq (%rax),%rax
  mov    0x1f0(%rsp),%ecx
  shl    $0x2,%rax
  lea    -0x2(%rcx),%esi
  jmp    L500
L300:
  mov    0x130(%rsp),%esi
  cmp    %esi,0x12c(%rsp)
  jle    L17
  jmp    L153
```

tool_calls: name: retrieve_data
arguments: data_tag: D58
type_infered: byte[4]
name: retrieve_data
arguments: data_tag: D4
type_infered: byte[16]

tool: {"D58": [0x00,0x00,0x00,0x80]}

tool: {"D4": [0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80]}

assistant: ```c
void asg_pstep3d(float ***restrict bulk, float ***restrict p0, float ***restrict p1, float ***restrict p2, float ***restrict v0, float ***restrict v1, float ***restrict v2, float **restrict ep, float **restrict epp, float *restrict sdiv, int *gsc, int *gec, int *lbc, int *rbc, int maxoff, float **restrict c) {
  int i0, i1, i2;
  int ioff;
  for (i2 = gsc[2]; i2 <= gec[2]; i2++) {
    for (i1 = gsc[1]; i1 <= gec[1]; i1++) {
      for (i0 = gsc[0]; i0 <= gec[0]; i0++)
        sdiv[i0] = 0.0f;
      for (ioff = 0; ioff < maxoff; ioff++) {
        for (i0 = gsc[0]; i0 <= gec[0]; i0++) {
          sdiv[i0] += (c[0][ioff] * (v0[i2][i1][i0 + ioff] - v0[i2][i1][i0 - ioff - 1]) + c[1][ioff] * (v1[i2][i1 + ioff][i0] - v1[i2][i1 - ioff - 1][i0]) + c[2][ioff] * (v2[i2 + ioff][i1][i0] - v2[i2 - ioff - 1][i1][i0]));
        }
      }
      for (i0 = gsc[0]; i0 <= gec[0]; i0++) {
        p0[i2][i1][i0] = (p0[i2][i1][i0] * ep[0][i0] - bulk[i2][i1][i0] * sdiv[i0]) * epp[0][i0];
        p1[i2][i1][i0] = (p1[i2][i1][i0] * ep[1][i1] - bulk[i2][i1][i0] * sdiv[i0]) * epp[1][i1];
        p2[i2][i1][i0] = (p2[i2][i1][i0] * ep[2][i2] - bulk[i2][i1][i0] * sdiv[i0]) * epp[2][i2];
      }
    }
  }
  if (lbc[0]) {
    for (i2 = gsc[2]; i2 <= gec[2]; i2++) {
      for (i1 = gsc[1]; i1 <= gec[1]; i1++) {
        p0[i2][i1][gsc[0] - 1] = 0.0f;
        for (ioff = 1; ioff < maxoff; ioff++) {
          p0[i2][i1][gsc[0] - ioff - 1] = -p0[i2][i1][gsc[0] + ioff - 1];
        }
      }
    }
  }
  if (rbc[0]) {
    for (i2 = gsc[2]; i2 <= gec[2]; i2++) {
      for (i1 = gsc[1]; i1 <= gec[1]; i1++) {
        p0[i2][i1][gec[0] + 1] = 0.0f;
        for (ioff = 1; ioff < maxoff; ioff++) {
          p0[i2][i1][gec[0] + ioff + 1] = -p0[i2][i1][gec[0] - ioff + 1];
        }
      }
    }
  }
  if (lbc[1]) {
    for (i2 = gsc[2]; i2 <= gec[2]; i2++) {
      for (i0 = gsc[0]; i0 <= gsc[0]; i0++) {
        p1[i2][gsc[1] - 1][i0] = 0.0f;
        for (ioff = 1; ioff < maxoff; ioff++) {
          p1[i2][gsc[1] - ioff - 1][i0] = -p1[i2][gsc[1] + ioff - 1][i0];
        }
      }
    }
  }
  if (rbc[1]) {
    for (i2 = gsc[2]; i2 <= gec[2]; i2++) {
      for (i0 = gsc[0]; i0 <= gsc[0]; i0++) {
        p1[i2][gec[1] + 1][i0] = 0.0f;
        for (ioff = 1; ioff < maxoff; ioff++) {
          p1[i2][gec[1] + ioff + 1][i0] = -p1[i2][gec[1] - ioff + 1][i0];
        }
      }
    }
  }
  if (lbc[2]) {
    for (i1 = gsc[1]; i1 <= gec[1]; i1++) {
      for (i0 = gsc[0]; i0 <= gsc[0]; i0++) {
        p2[gsc[2] - 1][i1][i0] = 0.0f;
        for (ioff = 1; ioff < maxoff; ioff++) {
          p2[gsc[2] - ioff - 1][i1][i0] = -p2[gsc[2] + ioff - 1][i1][i0];
        }
      }
    }
  }
  if (rbc[2]) {
    for (i1 = gsc[1]; i1 <= gec[1]; i1++) {
      for (i0 = gsc[0]; i0 <= gsc[0]; i0++) {
        p2[gec[2] + 1][i1][i0] = 0.0f;
        for (ioff = 1; ioff < maxoff; ioff++) {
          p2[gec[2] + ioff + 1][i1][i0] = -p2[gec[2] - ioff + 1][i1][i0];
        }
      }
    }
  }
}
```