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

```asm
<asg_pstep3d>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8,-0x38(%rbp)
  mov    %r9,-0x40(%rbp)
  mov    0x30(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L528
L165:
  mov    0x30(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L303
L78:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L7
L376:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L7:
  mov    0x38(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L376
  movl   $0x0,-0x4(%rbp)
  jmp    L491
L469:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L157
L92:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    0x58(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%ecx
  mov    -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  sub    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  sub    $0x4,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm3
  subss  %xmm3,%xmm0
  mulss  %xmm0,%xmm2
  mov    0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm3
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%ecx
  mov    -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  sub    -0x4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  sub    $0x8,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm4
  subss  %xmm4,%xmm0
  mulss  %xmm3,%xmm0
  addss  %xmm0,%xmm2
  mov    0x58(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm3
  mov    -0x8(%rbp),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  sub    -0x4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm4
  subss  %xmm4,%xmm0
  mulss  %xmm3,%xmm0
  addss  %xmm2,%xmm0
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L157:
  mov    0x38(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L92
  addl   $0x1,-0x4(%rbp)
L491:
  mov    -0x4(%rbp),%eax
  cmp    0x50(%rbp),%eax
  jl     L469
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L235
L398:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    0x18(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  %xmm1,%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    0x20(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    0x18(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  %xmm1,%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    0x20(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    0x18(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x8(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm1,%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x28(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mulss  %xmm1,%xmm2
  movaps %xmm0,%xmm1
  subss  %xmm2,%xmm1
  mov    0x20(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x8(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mulss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L235:
  mov    0x38(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L398
  addl   $0x1,-0xc(%rbp)
L303:
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L78
  addl   $0x1,-0x8(%rbp)
L528:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L165
  mov    0x40(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L391
  mov    0x30(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L124
L36:
  mov    0x30(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L39
L164:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  cltq
  shl    $0x2,%rax
  sub    $0x4,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  movl   $0x1,-0x4(%rbp)
  jmp    L532
L496:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x30(%rbp),%rax
  mov    (%rax),%ecx
  mov    -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  shl    $0x2,%rax
  sub    $0x4,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  sub    $0x4,%rax
  add    %rdx,%rax
  movss  D59(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L532:
  mov    -0x4(%rbp),%eax
  cmp    0x50(%rbp),%eax
  jl     L496
  addl   $0x1,-0xc(%rbp)
L39:
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L164
  addl   $0x1,-0x8(%rbp)
L124:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L36
L391:
  mov    0x48(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L198
  mov    0x30(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L173
L139:
  mov    0x30(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L12
L286:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x38(%rbp),%rax
  mov    (%rax),%eax
  cltq
  add    $0x1,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  movl   $0x1,-0x4(%rbp)
  jmp    L378
L110:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x38(%rbp),%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  add    $0x1,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x38(%rbp),%rax
  mov    (%rax),%ecx
  mov    -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  add    $0x1,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  D59(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L378:
  mov    -0x4(%rbp),%eax
  cmp    0x50(%rbp),%eax
  jl     L110
  addl   $0x1,-0xc(%rbp)
L12:
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L286
  addl   $0x1,-0x8(%rbp)
L173:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L139
L198:
  mov    0x40(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L355
  mov    0x30(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L163
L481:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L247
L524:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cltq
  shl    $0x3,%rax
  sub    $0x8,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  movl   $0x1,-0x4(%rbp)
  jmp    L149
L489:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%ecx
  mov    -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  shl    $0x3,%rax
  sub    $0x8,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x30(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  sub    $0x8,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  D59(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L149:
  mov    -0x4(%rbp),%eax
  cmp    0x50(%rbp),%eax
  jl     L489
  addl   $0x1,-0x10(%rbp)
L247:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L524
  addl   $0x1,-0x8(%rbp)
L163:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L481
L355:
  mov    0x48(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L436
  mov    0x30(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L383
L467:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L409
L522:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cltq
  add    $0x1,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  movl   $0x1,-0x4(%rbp)
  jmp    L1
L91:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  add    $0x1,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%ecx
  mov    -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  add    $0x1,%rax
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  D59(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L1:
  mov    -0x4(%rbp),%eax
  cmp    0x50(%rbp),%eax
  jl     L91
  addl   $0x1,-0x10(%rbp)
L409:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L522
  addl   $0x1,-0x8(%rbp)
L383:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L467
L436:
  mov    0x40(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L26
  mov    0x30(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L353
L368:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L241
L451:
  mov    0x30(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  movl   $0x1,-0x4(%rbp)
  jmp    L419
L430:
  mov    0x30(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    0x30(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  D59(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L419:
  mov    -0x4(%rbp),%eax
  cmp    0x50(%rbp),%eax
  jl     L430
  addl   $0x1,-0x10(%rbp)
L241:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L451
  addl   $0x1,-0xc(%rbp)
L353:
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L368
L26:
  mov    0x48(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L160
  mov    0x30(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L200
L48:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L79
L503:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  movl   $0x1,-0x4(%rbp)
  jmp    L137
L252:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  D59(%rip),%xmm1
  xorps  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L137:
  mov    -0x4(%rbp),%eax
  cmp    0x50(%rbp),%eax
  jl     L252
  addl   $0x1,-0x10(%rbp)
L79:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L503
  addl   $0x1,-0xc(%rbp)
L200:
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L48
L160:
  nop
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D59
type_guessed: byte[4]

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