user: Demonstrate the C code that generates the assembly output below:

```asm
<asg_vstep3d>:
  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    L120
L608:
  mov    0x30(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L594
L188:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L293
L426:
  mov    0x28(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L293:
  mov    0x38(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L426
  movl   $0x0,-0x4(%rbp)
  jmp    L378
L44:
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L104
L306:
  mov    0x28(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    0x78(%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    -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),%ecx
  mov    -0x4(%rbp),%eax
  add    %ecx,%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    -0x10(%rbp),%eax
  sub    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm3
  subss  %xmm3,%xmm0
  mulss  %xmm2,%xmm0
  mov    0x28(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L104:
  mov    0x38(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L306
  addl   $0x1,-0x4(%rbp)
L378:
  mov    -0x4(%rbp),%eax
  cmp    0x70(%rbp),%eax
  jl     L44
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L697
L96:
  mov    0x20(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  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
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    0x18(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  cvtss2sd %xmm0,%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),%xmm3
  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
  add    $0x1,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  addss  %xmm3,%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm2,%xmm3
  movsd  D12(%rip),%xmm2
  mulsd  %xmm2,%xmm3
  mov    0x28(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  cvtss2sd %xmm2,%xmm2
  mulsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%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
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L697:
  mov    0x38(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L96
  addl   $0x1,-0xc(%rbp)
L594:
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L188
  addl   $0x1,-0x8(%rbp)
L120:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L608
  mov    0x40(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L198
L596:
  mov    0x40(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L334
L84:
  mov    0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L660
L327:
  mov    0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L660:
  mov    0x48(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L327
  movl   $0x0,-0x4(%rbp)
  jmp    L383
L385:
  mov    0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L121
L5:
  mov    0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    0x78(%rbp),%rax
  add    $0x8,%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    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%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  (%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
  sub    -0x4(%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),%xmm3
  subss  %xmm3,%xmm0
  mulss  %xmm2,%xmm0
  mov    0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L121:
  mov    0x48(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L5
  addl   $0x1,-0x4(%rbp)
L383:
  mov    -0x4(%rbp),%eax
  cmp    0x70(%rbp),%eax
  jl     L385
  mov    0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L710
L393:
  mov    0x20(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%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    0x18(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  mulss  %xmm2,%xmm0
  cvtss2sd %xmm0,%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),%xmm3
  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
  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),%xmm2
  addss  %xmm3,%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm2,%xmm3
  movsd  D12(%rip),%xmm2
  mulsd  %xmm2,%xmm3
  mov    0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  cvtss2sd %xmm2,%xmm2
  mulsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%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
  cltq
  shl    $0x3,%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L710:
  mov    0x48(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L393
  addl   $0x1,-0xc(%rbp)
L334:
  mov    0x48(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L84
  addl   $0x1,-0x8(%rbp)
L198:
  mov    0x48(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L596
  mov    0x50(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L449
L260:
  mov    0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L386
L48:
  mov    0x50(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L548
L403:
  mov    0x28(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  pxor   %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L548:
  mov    0x58(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L403
  movl   $0x0,-0x4(%rbp)
  jmp    L358
L95:
  mov    0x50(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L425
L384:
  mov    0x28(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm1
  mov    0x78(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  mov    -0x8(%rbp),%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  (%rax),%xmm0
  mov    -0x8(%rbp),%eax
  sub    -0x4(%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),%xmm3
  subss  %xmm3,%xmm0
  mulss  %xmm2,%xmm0
  mov    0x28(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  addss  %xmm1,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L425:
  mov    0x58(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L384
  addl   $0x1,-0x4(%rbp)
L358:
  mov    -0x4(%rbp),%eax
  cmp    0x70(%rbp),%eax
  jl     L95
  mov    0x50(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L352
L135:
  mov    0x20(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x8(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  mov    -0x8(%rbp),%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),%xmm2
  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  %xmm2,%xmm0
  cvtss2sd %xmm0,%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),%xmm3
  mov    -0x8(%rbp),%eax
  cltq
  add    $0x1,%rax
  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
  addss  %xmm3,%xmm2
  pxor   %xmm3,%xmm3
  cvtss2sd %xmm2,%xmm3
  movsd  D12(%rip),%xmm2
  mulsd  %xmm2,%xmm3
  mov    0x28(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rdx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movss  (%rax),%xmm2
  cvtss2sd %xmm2,%xmm2
  mulsd  %xmm3,%xmm2
  subsd  %xmm2,%xmm0
  mulsd  %xmm1,%xmm0
  mov    -0x8(%rbp),%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
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x10(%rbp)
L352:
  mov    0x58(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L135
  addl   $0x1,-0xc(%rbp)
L386:
  mov    0x58(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L48
  addl   $0x1,-0x8(%rbp)
L449:
  mov    0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L260
  mov    0x60(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L642
  mov    0x30(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L755
L259:
  mov    0x30(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L61
L545:
  movl   $0x1,-0x4(%rbp)
  jmp    L715
L304:
  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    0x30(%rbp),%rax
  mov    (%rax),%ecx
  mov    -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  shl    $0x2,%rax
  sub    $0x4,%rax
  add    %rax,%rdx
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x38(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    0x30(%rbp),%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L715:
  mov    -0x4(%rbp),%eax
  cmp    0x70(%rbp),%eax
  jl     L304
  addl   $0x1,-0xc(%rbp)
L61:
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L545
  addl   $0x1,-0x8(%rbp)
L755:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L259
L642:
  mov    0x68(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L205
  mov    0x30(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L273
L442:
  mov    0x30(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L192
L270:
  movl   $0x1,-0x4(%rbp)
  jmp    L720
L758:
  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    0x38(%rbp),%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  add    $0x1,%rax
  shl    $0x2,%rax
  add    %rax,%rdx
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x38(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    0x38(%rbp),%rax
  mov    (%rax),%esi
  mov    -0x4(%rbp),%eax
  add    %esi,%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L720:
  mov    -0x4(%rbp),%eax
  cmp    0x70(%rbp),%eax
  jl     L758
  addl   $0x1,-0xc(%rbp)
L192:
  mov    0x38(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L270
  addl   $0x1,-0x8(%rbp)
L273:
  mov    0x38(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L442
L205:
  mov    0x60(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L39
  mov    0x40(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L575
L512:
  mov    0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L467
L200:
  movl   $0x1,-0x4(%rbp)
  jmp    L191
L142:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x40(%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    %rax,%rdx
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x40(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    0x40(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L191:
  mov    -0x4(%rbp),%eax
  cmp    0x70(%rbp),%eax
  jl     L142
  addl   $0x1,-0x10(%rbp)
L467:
  mov    0x48(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L200
  addl   $0x1,-0x8(%rbp)
L575:
  mov    0x48(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L512
L39:
  mov    0x68(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L734
  mov    0x40(%rbp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,-0x8(%rbp)
  jmp    L503
L320:
  mov    0x40(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L234
L770:
  movl   $0x1,-0x4(%rbp)
  jmp    L472
L619:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x48(%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    %rax,%rdx
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x40(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    0x48(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%esi
  mov    -0x4(%rbp),%eax
  add    %esi,%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L472:
  mov    -0x4(%rbp),%eax
  cmp    0x70(%rbp),%eax
  jl     L619
  addl   $0x1,-0x10(%rbp)
L234:
  mov    0x48(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L770
  addl   $0x1,-0x8(%rbp)
L503:
  mov    0x48(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x8(%rbp)
  jle    L320
L734:
  mov    0x60(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L283
  mov    0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L380
L288:
  mov    0x50(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L305
L45:
  movl   $0x1,-0x4(%rbp)
  jmp    L409
L212:
  mov    0x50(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%edx
  mov    -0x4(%rbp),%eax
  add    %edx,%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    %rax,%rdx
  mov    0x50(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L409:
  mov    -0x4(%rbp),%eax
  cmp    0x70(%rbp),%eax
  jl     L212
  addl   $0x1,-0x10(%rbp)
L305:
  mov    0x58(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L45
  addl   $0x1,-0xc(%rbp)
L380:
  mov    0x58(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L288
L283:
  mov    0x68(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L78
  mov    0x50(%rbp),%rax
  mov    0x4(%rax),%eax
  mov    %eax,-0xc(%rbp)
  jmp    L50
L501:
  mov    0x50(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,-0x10(%rbp)
  jmp    L522
L739:
  movl   $0x1,-0x4(%rbp)
  jmp    L759
L99:
  mov    0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%eax
  sub    -0x4(%rbp),%eax
  cltq
  add    $0x1,%rax
  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    %rax,%rdx
  mov    0x58(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%ecx
  mov    -0x4(%rbp),%eax
  add    %ecx,%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    0x10(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x3,%rax
  add    %rcx,%rax
  mov    (%rax),%rcx
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x4(%rbp)
L759:
  mov    -0x4(%rbp),%eax
  cmp    0x70(%rbp),%eax
  jl     L99
  addl   $0x1,-0x10(%rbp)
L522:
  mov    0x58(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L739
  addl   $0x1,-0xc(%rbp)
L50:
  mov    0x58(%rbp),%rax
  add    $0x4,%rax
  mov    (%rax),%eax
  cmp    %eax,-0xc(%rbp)
  jle    L501
L78:
  nop
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: data_label: D12
type_guessed: f64

tool: D12: 0.5

assistant: ```c
void asg_vstep3d(float ***restrict buoy, float ***restrict p0, float ***restrict p1, float ***restrict p2, float ***restrict v0, float ***restrict v1, float ***restrict v2, float **restrict ev, float **restrict evp, float **restrict gradp, int *gsc_v0, int *gec_v0, int *gsc_v1, int *gec_v1, int *gsc_v2, int *gec_v2, int *lbc, int *rbc, int maxoff, float **restrict c) {
  int i0, i1, i2;
  int ioff;
  for (i2 = gsc_v0[2]; i2 <= gec_v0[2]; i2++) {
    for (i1 = gsc_v0[1]; i1 <= gec_v0[1]; i1++) {
      for (i0 = gsc_v0[0]; i0 <= gec_v0[0]; i0++)
        gradp[0][i0] = 0;
      for (ioff = 0; ioff < maxoff; ioff++) {
        for (i0 = gsc_v0[0]; i0 <= gec_v0[0]; i0++)
          gradp[0][i0] += c[0][ioff] * (p0[i2][i1][i0 + ioff + 1] - p0[i2][i1][i0 - ioff]);
      }
      for (i0 = gsc_v0[0]; i0 <= gec_v0[0]; i0++)
        v0[i2][i1][i0] = evp[0][i0] * (v0[i2][i1][i0] * ev[0][i0] - 0.5 * (buoy[i2][i1][i0] + buoy[i2][i1][i0 + 1]) * gradp[0][i0]);
    }
  }
  for (i2 = gsc_v1[2]; i2 <= gec_v1[2]; i2++) {
    for (i1 = gsc_v1[1]; i1 <= gec_v1[1]; i1++) {
      for (i0 = gsc_v1[0]; i0 <= gec_v1[0]; i0++)
        gradp[1][i0] = 0;
      for (ioff = 0; ioff < maxoff; ioff++) {
        for (i0 = gsc_v1[0]; i0 <= gec_v1[0]; i0++)
          gradp[1][i0] += c[1][ioff] * (p1[i2][i1 + ioff + 1][i0] - p1[i2][i1 - ioff][i0]);
      }
      for (i0 = gsc_v1[0]; i0 <= gec_v1[0]; i0++)
        v1[i2][i1][i0] = evp[1][i1] * (v1[i2][i1][i0] * ev[1][i1] - 0.5 * (buoy[i2][i1][i0] + buoy[i2][i1 + 1][i0]) * gradp[1][i0]);
    }
  }
  for (i2 = gsc_v2[2]; i2 <= gec_v2[2]; i2++) {
    for (i1 = gsc_v2[1]; i1 <= gec_v2[1]; i1++) {
      for (i0 = gsc_v2[0]; i0 <= gec_v2[0]; i0++)
        gradp[2][i0] = 0;
      for (ioff = 0; ioff < maxoff; ioff++) {
        for (i0 = gsc_v2[0]; i0 <= gec_v2[0]; i0++)
          gradp[2][i0] += c[2][ioff] * (p2[i2 + ioff + 1][i1][i0] - p2[i2 - ioff][i1][i0]);
      }
      for (i0 = gsc_v2[0]; i0 <= gec_v2[0]; i0++)
        v2[i2][i1][i0] = evp[2][i2] * (v2[i2][i1][i0] * ev[2][i2] - 0.5 * (buoy[i2][i1][i0] + buoy[i2 + 1][i1][i0]) * gradp[2][i0]);
    }
  }
  if (lbc[0]) {
    for (i2 = gsc_v0[2]; i2 <= gec_v0[2]; i2++) {
      for (i1 = gsc_v0[1]; i1 <= gec_v0[1]; i1++) {
        for (ioff = 1; ioff < maxoff; ioff++) {
          v0[i2][i1][gsc_v0[0] - ioff] = v0[i2][i1][gsc_v0[0] + ioff - 1];
        }
      }
    }
  }
  if (rbc[0]) {
    for (i2 = gsc_v0[2]; i2 <= gec_v0[2]; i2++) {
      for (i1 = gsc_v0[1]; i1 <= gec_v0[1]; i1++) {
        for (ioff = 1; ioff < maxoff; ioff++) {
          v0[i2][i1][gec_v0[0] + ioff] = v0[i2][i1][gec_v0[0] - ioff + 1];
        }
      }
    }
  }
  if (lbc[1]) {
    for (i2 = gsc_v1[2]; i2 <= gec_v1[2]; i2++) {
      for (i0 = gsc_v1[0]; i0 <= gec_v1[0]; i0++) {
        for (ioff = 1; ioff < maxoff; ioff++) {
          v1[i2][gsc_v1[1] - ioff][i0] = v1[i2][gsc_v1[1] + ioff - 1][i0];
        }
      }
    }
  }
  if (rbc[1]) {
    for (i2 = gsc_v1[2]; i2 <= gec_v1[2]; i2++) {
      for (i0 = gsc_v1[0]; i0 <= gec_v1[0]; i0++) {
        for (ioff = 1; ioff < maxoff; ioff++) {
          v1[i2][gec_v1[1] + ioff][i0] = v1[i2][gec_v1[1] - ioff + 1][i0];
        }
      }
    }
  }
  if (lbc[2]) {
    for (i1 = gsc_v2[1]; i1 <= gec_v2[1]; i1++) {
      for (i0 = gsc_v2[0]; i0 <= gec_v2[0]; i0++) {
        for (ioff = 1; ioff < maxoff; ioff++) {
          v2[gsc_v2[2] - ioff][i1][i0] = v2[gsc_v2[2] + ioff - 1][i1][i0];
        }
      }
    }
  }
  if (rbc[2]) {
    for (i1 = gsc_v2[1]; i1 <= gec_v2[1]; i1++) {
      for (i0 = gsc_v2[0]; i0 <= gec_v2[0]; i0++) {
        for (ioff = 1; ioff < maxoff; ioff++) {
          v2[gec_v2[2] + ioff][i1][i0] = v2[gec_v2[2] - ioff + 1][i1][i0];
        }
      }
    }
  }
}
```