user: What would the C source look like for the assembly code provided here?

```asm
<asg_vstep3d>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rdx,%r12
  push   %rbp
  push   %rbx
  sub    $0x98,%rsp
  mov    0xf0(%rsp),%rax
  mov    0xf8(%rsp),%rbx
  mov    %rdi,0x18(%rsp)
  mov    %rcx,0x88(%rsp)
  mov    0xe8(%rsp),%rbp
  mov    0x8(%rax),%eax
  mov    0x8(%rbx),%ebx
  mov    %r8,0x28(%rsp)
  mov    %r9,0x30(%rsp)
  mov    %eax,0x68(%rsp)
  mov    %ebx,0x5c(%rsp)
  cmp    %ebx,%eax
  jg     L459
  mov    0xf0(%rsp),%rax
  mov    %rsi,%r14
  mov    %r12,0x60(%rsp)
  mov    %r14,%r8
  movslq 0x68(%rsp),%r15
  mov    %rbp,%r14
  movsd  D4(%rip),%xmm2
  mov    0x4(%rax),%ebx
  mov    0xf8(%rsp),%rax
  mov    0x130(%rsp),%ebp
  mov    0x4(%rax),%esi
  movslq %ebx,%rax
  mov    %ebx,0x50(%rsp)
  lea    0x0(,%rax,8),%rcx
  mov    %esi,%edx
  mov    %esi,0x58(%rsp)
  sub    %ebx,%edx
  mov    %rcx,0x48(%rsp)
  lea    0x1(%rax,%rdx,1),%rax
  shl    $0x3,%rax
  mov    %rax,0x20(%rsp)
L840:
  mov    0x58(%rsp),%ebx
  cmp    %ebx,0x50(%rsp)
  jg     L571
  mov    0xf0(%rsp),%rax
  mov    0x48(%rsp),%r12
  mov    (%rax),%r13d
  mov    0xf8(%rsp),%rax
  mov    (%rax),%ebx
  mov    %ebx,%eax
  sub    %r13d,%eax
  lea    0x4(,%rax,4),%rax
  mov    %rax,0x38(%rsp)
  movslq %r13d,%rax
  mov    %rax,0x8(%rsp)
  shl    $0x2,%rax
  mov    %rax,0x40(%rsp)
  nopw   0x0(%rax,%rax,1)
L689:
  cmp    %ebx,%r13d
  jg     L455
  mov    0x38(%rsp),%rdx
  mov    0x40(%rsp),%rdi
  xor    %esi,%esi
  mov    %r8,0x10(%rsp)
  add    (%r14),%rdi
  call   <memset@plt>
  mov    D4(%rip),%rax
  mov    0x10(%rsp),%r8
  movq   %rax,%xmm2
L455:
  xor    %r11d,%r11d
  xor    %r9d,%r9d
  xor    %r10d,%r10d
  test   %ebp,%ebp
  jle    L732
  nopl   0x0(%rax)
L66:
  cmp    %ebx,%r13d
  jg     L734
  mov    0x138(%rsp),%rax
  mov    (%r14),%rdx
  mov    (%rax),%rdi
  mov    (%r8,%r15,8),%rax
  mov    (%rax,%r12,1),%rcx
  mov    0x8(%rsp),%rax
  add    %r9,%rdi
  lea    (%rcx,%r9,1),%rsi
  add    %r11,%rcx
  nopw   0x0(%rax,%rax,1)
L830:
  movss  0x4(%rsi,%rax,4),%xmm0
  subss  (%rcx,%rax,4),%xmm0
  mulss  (%rdi),%xmm0
  addss  (%rdx,%rax,4),%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %eax,%ebx
  jge    L830
L734:
  add    $0x1,%r10d
  add    $0x4,%r9
  sub    $0x4,%r11
  cmp    %r10d,%ebp
  jne    L66
L732:
  cmp    %ebx,%r13d
  jg     L323
  mov    0xe0(%rsp),%rax
  mov    (%r14),%rsi
  mov    (%rax),%r9
  mov    0x28(%rsp),%rax
  mov    (%rax,%r15,8),%rax
  mov    (%rax,%r12,1),%rcx
  mov    0xd8(%rsp),%rax
  mov    (%rax),%rdi
  mov    0x18(%rsp),%rax
  mov    (%rax,%r15,8),%rax
  mov    (%rax,%r12,1),%rdx
  mov    0x8(%rsp),%rax
  nopl   0x0(%rax,%rax,1)
L64:
  movss  (%rdx,%rax,4),%xmm1
  addss  0x4(%rdx,%rax,4),%xmm1
  pxor   %xmm3,%xmm3
  movss  (%rcx,%rax,4),%xmm0
  cvtss2sd (%rsi,%rax,4),%xmm3
  mulss  (%rdi,%rax,4),%xmm0
  cvtss2sd %xmm1,%xmm1
  mulsd  %xmm2,%xmm1
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm3,%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%r9,%rax,4),%xmm1
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rcx,%rax,4)
  add    $0x1,%rax
  cmp    %eax,%ebx
  jge    L64
L323:
  add    $0x8,%r12
  cmp    %r12,0x20(%rsp)
  jne    L689
L571:
  add    $0x1,%r15
  cmp    %r15d,0x5c(%rsp)
  jge    L840
  mov    0x60(%rsp),%r12
  mov    %r14,%rbp
L459:
  mov    0x100(%rsp),%rax
  mov    0x108(%rsp),%rbx
  mov    0x8(%rax),%eax
  mov    0x8(%rbx),%ebx
  mov    %eax,0x60(%rsp)
  mov    %ebx,0x58(%rsp)
  cmp    %ebx,%eax
  jg     L163
  mov    0x100(%rsp),%rax
  mov    0x108(%rsp),%rbx
  movslq 0x60(%rsp),%r15
  movsd  D4(%rip),%xmm2
  movslq 0x4(%rax),%rax
  mov    0x4(%rbx),%ebx
  mov    0x138(%rsp),%r14
  mov    %eax,0x50(%rsp)
  shl    $0x2,%rax
  mov    %ebx,0x6c(%rsp)
  mov    %rax,0x70(%rsp)
L857:
  mov    0x6c(%rsp),%ebx
  cmp    %ebx,0x50(%rsp)
  jg     L544
  mov    0x100(%rsp),%rax
  mov    (%rax),%r13d
  mov    0x108(%rsp),%rax
  mov    (%rax),%ebx
  mov    0x6c(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x38(%rsp)
  mov    %ebx,%eax
  sub    %r13d,%eax
  lea    0x4(,%rax,4),%rax
  mov    %rax,0x40(%rsp)
  movslq %r13d,%rax
  mov    %rax,0x8(%rsp)
  shl    $0x2,%rax
  mov    %rax,0x48(%rsp)
  mov    0x70(%rsp),%rax
  mov    %rax,0x20(%rsp)
  mov    0x50(%rsp),%eax
  mov    %eax,0x10(%rsp)
  nopl   (%rax)
L221:
  cmp    %ebx,%r13d
  jg     L435
  mov    0x40(%rsp),%rdx
  mov    0x48(%rsp),%rdi
  xor    %esi,%esi
  add    0x8(%rbp),%rdi
  call   <memset@plt>
  mov    0x130(%rsp),%eax
  test   %eax,%eax
  mov    D4(%rip),%rax
  movq   %rax,%xmm2
  jle    L227
L423:
  mov    0x10(%rsp),%eax
  mov    0x130(%rsp),%esi
  xor    %r9d,%r9d
  lea    (%rax,%rax,1),%r11d
  mov    %eax,%r8d
  lea    (%rax,%rsi,1),%r10d
  nopw   0x0(%rax,%rax,1)
L110:
  cmp    %ebx,%r13d
  jg     L527
  mov    (%r12,%r15,8),%rcx
  movslq %r8d,%rax
  mov    0x8(%r14),%rdi
  mov    0x8(%rbp),%rdx
  mov    0x8(%rcx,%rax,8),%rsi
  mov    %r11d,%eax
  add    %r9,%rdi
  sub    %r8d,%eax
  cltq
  mov    (%rcx,%rax,8),%rcx
  mov    0x8(%rsp),%rax
  nopl   (%rax)
L139:
  movss  (%rsi,%rax,4),%xmm0
  subss  (%rcx,%rax,4),%xmm0
  mulss  (%rdi),%xmm0
  addss  (%rdx,%rax,4),%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %eax,%ebx
  jge    L139
L527:
  add    $0x1,%r8d
  add    $0x4,%r9
  cmp    %r8d,%r10d
  jne    L110
  cmp    %ebx,%r13d
  jg     L668
L227:
  mov    0xe0(%rsp),%rax
  mov    0x20(%rsp),%rsi
  mov    0x8(%rbp),%rcx
  mov    0x8(%rax),%r9
  mov    0x30(%rsp),%rax
  mov    (%rax,%r15,8),%rax
  add    %rsi,%r9
  mov    (%rax,%rsi,2),%rdx
  mov    0xd8(%rsp),%rax
  mov    0x8(%rax),%r8
  mov    0x18(%rsp),%rax
  mov    (%rax,%r15,8),%rax
  add    %rsi,%r8
  mov    (%rax,%rsi,2),%rdi
  mov    0x8(%rax,%rsi,2),%rsi
  mov    0x8(%rsp),%rax
  nopl   0x0(%rax)
L183:
  movss  (%rdi,%rax,4),%xmm1
  addss  (%rsi,%rax,4),%xmm1
  pxor   %xmm3,%xmm3
  movss  (%rdx,%rax,4),%xmm0
  cvtss2sd (%rcx,%rax,4),%xmm3
  mulss  (%r8),%xmm0
  cvtss2sd %xmm1,%xmm1
  mulsd  %xmm2,%xmm1
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm3,%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%r9),%xmm1
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %eax,%ebx
  jge    L183
L668:
  addl   $0x1,0x10(%rsp)
  mov    0x10(%rsp),%eax
  addq   $0x4,0x20(%rsp)
  cmp    %eax,0x38(%rsp)
  jne    L221
L544:
  add    $0x1,%r15
  cmp    %r15d,0x58(%rsp)
  jge    L857
L163:
  mov    0x110(%rsp),%rax
  mov    0x118(%rsp),%rbx
  mov    0x8(%rax),%eax
  mov    0x8(%rbx),%ebx
  mov    %eax,0x6c(%rsp)
  mov    %ebx,0x70(%rsp)
  cmp    %ebx,%eax
  jg     L318
  mov    0x110(%rsp),%rax
  movslq 0x6c(%rsp),%r8
  movsd  D4(%rip),%xmm2
  mov    0x88(%rsp),%r13
  mov    0x4(%rax),%ebx
  mov    0x118(%rsp),%rax
  mov    %r8,0x10(%rsp)
  mov    0x138(%rsp),%r8
  mov    0x4(%rax),%esi
  movslq %ebx,%rax
  mov    %ebx,0x80(%rsp)
  lea    0x0(,%rax,8),%rcx
  mov    %esi,%edx
  mov    %esi,0x84(%rsp)
  sub    %ebx,%edx
  mov    %rcx,0x78(%rsp)
  lea    0x1(%rax,%rdx,1),%rax
  shl    $0x3,%rax
  mov    %rax,0x20(%rsp)
L206:
  mov    0x84(%rsp),%ebx
  cmp    %ebx,0x80(%rsp)
  jg     L296
  mov    0x110(%rsp),%rax
  mov    0x10(%rsp),%rsi
  mov    0x78(%rsp),%r12
  movslq (%rax),%r15
  mov    0x118(%rsp),%rax
  mov    %esi,0x38(%rsp)
  mov    (%rax),%ebx
  lea    0x0(,%rsi,4),%rax
  mov    %r15,%r14
  mov    %rax,0x40(%rsp)
  mov    %ebx,%eax
  sub    %r15d,%eax
  lea    0x4(,%rax,4),%rax
  mov    %rax,0x50(%rsp)
  lea    0x0(,%r15,4),%rax
  mov    %rax,0x48(%rsp)
  mov    %esi,%eax
  add    %eax,%eax
  mov    %eax,0x8(%rsp)
  nopl   0x0(%rax,%rax,1)
L55:
  cmp    %ebx,%r14d
  jg     L458
  mov    0x50(%rsp),%rdx
  mov    0x48(%rsp),%rdi
  xor    %esi,%esi
  mov    %r8,0x138(%rsp)
  add    0x10(%rbp),%rdi
  call   <memset@plt>
  mov    0x130(%rsp),%eax
  mov    0x138(%rsp),%r8
  test   %eax,%eax
  mov    D4(%rip),%rax
  movq   %rax,%xmm2
  jle    L35
L341:
  mov    0x38(%rsp),%eax
  mov    0x130(%rsp),%esi
  xor    %r10d,%r10d
  mov    %eax,%r9d
  lea    (%rax,%rsi,1),%r11d
  xchg   %ax,%ax
L726:
  cmp    %ebx,%r14d
  jg     L457
  movslq %r9d,%rax
  mov    0x10(%r8),%rdi
  mov    0x10(%rbp),%rdx
  mov    0x8(%r13,%rax,8),%rax
  add    %r10,%rdi
  mov    (%rax,%r12,1),%rsi
  mov    0x8(%rsp),%eax
  sub    %r9d,%eax
  cltq
  mov    0x0(%r13,%rax,8),%rax
  mov    (%rax,%r12,1),%rcx
  mov    %r15,%rax
  nopl   0x0(%rax)
L519:
  movss  (%rsi,%rax,4),%xmm0
  subss  (%rcx,%rax,4),%xmm0
  mulss  (%rdi),%xmm0
  addss  (%rdx,%rax,4),%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %eax,%ebx
  jge    L519
L457:
  add    $0x1,%r9d
  add    $0x4,%r10
  cmp    %r9d,%r11d
  jne    L726
  cmp    %ebx,%r14d
  jg     L77
L35:
  mov    0xe0(%rsp),%rax
  mov    0x10(%rsp),%rcx
  mov    0x40(%rsp),%rsi
  mov    0x10(%rax),%r10
  mov    0xd0(%rsp),%rax
  mov    (%rax,%rcx,8),%rax
  add    %rsi,%r10
  mov    (%rax,%r12,1),%rdx
  mov    0xd8(%rsp),%rax
  add    0x10(%rax),%rsi
  mov    %rsi,%r9
  mov    0x18(%rsp),%rsi
  mov    (%rsi,%rcx,8),%rax
  mov    (%rax,%r12,1),%rdi
  mov    0x8(%rsi,%rcx,8),%rax
  mov    0x10(%rbp),%rcx
  mov    (%rax,%r12,1),%rsi
  mov    %r15,%rax
  nopl   0x0(%rax,%rax,1)
L119:
  movss  (%rdi,%rax,4),%xmm1
  addss  (%rsi,%rax,4),%xmm1
  pxor   %xmm3,%xmm3
  movss  (%rdx,%rax,4),%xmm0
  cvtss2sd (%rcx,%rax,4),%xmm3
  mulss  (%r9),%xmm0
  cvtss2sd %xmm1,%xmm1
  mulsd  %xmm2,%xmm1
  cvtss2sd %xmm0,%xmm0
  mulsd  %xmm3,%xmm1
  subsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%r10),%xmm1
  mulsd  %xmm1,%xmm0
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rdx,%rax,4)
  add    $0x1,%rax
  cmp    %eax,%ebx
  jge    L119
L77:
  add    $0x8,%r12
  cmp    %r12,0x20(%rsp)
  jne    L55
L296:
  addq   $0x1,0x10(%rsp)
  mov    0x10(%rsp),%rax
  cmp    %eax,0x70(%rsp)
  jge    L206
L318:
  mov    0x120(%rsp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L232
  mov    0x5c(%rsp),%ebx
  cmp    %ebx,0x68(%rsp)
  jg     L266
  mov    0xf0(%rsp),%rax
  movslq 0x68(%rsp),%rbp
  mov    0x28(%rsp),%rcx
  mov    0xf0(%rsp),%r14
  movslq 0x4(%rax),%r10
  mov    0xf8(%rsp),%rax
  lea    (%rcx,%rbp,8),%rdi
  mov    0x4(%rax),%ebx
  mov    0x5c(%rsp),%eax
  mov    %r10,%r8
  lea    0x0(,%r10,8),%r13
  sub    %ebp,%eax
  add    %rbp,%rax
  lea    0x8(%rcx,%rax,8),%r12
  mov    %ebx,%eax
  sub    %r10d,%eax
  lea    0x1(%rax,%r10,1),%rax
  lea    0x0(,%rax,8),%r11
  mov    0x130(%rsp),%eax
  lea    -0x2(%rax),%r9d
  mov    %eax,%r15d
L218:
  mov    %r13,%rsi
  cmp    %ebx,%r8d
  jg     L167
L8:
  cmp    $0x1,%r15d
  jle    L804
  mov    (%rdi),%rax
  movslq (%r14),%rcx
  mov    (%rax,%rsi,1),%rdx
  lea    (%rdx,%rcx,4),%rax
  lea    0x1(%rcx,%r9,1),%rcx
  lea    (%rdx,%rcx,4),%rcx
  mov    %rax,%rdx
  nopl   0x0(%rax)
L86:
  movss  (%rax),%xmm0
  add    $0x4,%rax
  sub    $0x4,%rdx
  movss  %xmm0,(%rdx)
  cmp    %rax,%rcx
  jne    L86
L804:
  add    $0x8,%rsi
  cmp    %rsi,%r11
  jne    L8
L167:
  add    $0x8,%rdi
  cmp    %rdi,%r12
  jne    L218
  mov    0x128(%rsp),%rax
  mov    (%rax),%ecx
  test   %ecx,%ecx
  jne    L394
L266:
  mov    0x120(%rsp),%rax
  mov    0x4(%rax),%ebx
  test   %ebx,%ebx
  je     L573
  mov    0x58(%rsp),%ebx
  cmp    %ebx,0x60(%rsp)
  jg     L859
  mov    0x100(%rsp),%rax
  movslq 0x60(%rsp),%r12
  mov    0x30(%rsp),%rsi
  mov    0x100(%rsp),%r15
  movslq (%rax),%r11
  mov    0x108(%rsp),%rax
  lea    (%rsi,%r12,8),%r8
  mov    (%rax),%ebp
  mov    0x58(%rsp),%eax
  mov    %r11,0x8(%rsp)
  mov    %r11,%r9
  lea    0x0(,%r11,4),%r14
  sub    %r12d,%eax
  add    %r12,%rax
  lea    0x8(%rsi,%rax,8),%r13
  mov    %ebp,%eax
  sub    %r11d,%eax
  lea    0x1(%rax,%r11,1),%rax
  lea    0x0(,%rax,4),%rbx
  mov    0x130(%rsp),%eax
  lea    -0x2(%rax),%r10d
  mov    %eax,%r11d
L538:
  mov    %r14,%rcx
  cmp    %ebp,%r9d
  jg     L631
L721:
  cmp    $0x1,%r11d
  jle    L755
  mov    (%r8),%rdx
  movslq 0x4(%r15),%rsi
  lea    (%rdx,%rsi,8),%rax
  lea    0x1(%rsi,%r10,1),%rsi
  lea    (%rdx,%rsi,8),%rdi
  mov    %rax,%rdx
  nopl   0x0(%rax)
L44:
  mov    (%rax),%rsi
  add    $0x8,%rax
  sub    $0x8,%rdx
  movss  (%rsi,%rcx,1),%xmm0
  mov    (%rdx),%rsi
  movss  %xmm0,(%rsi,%rcx,1)
  cmp    %rax,%rdi
  jne    L44
L755:
  add    $0x4,%rcx
  cmp    %rcx,%rbx
  jne    L721
L631:
  add    $0x8,%r8
  cmp    %r8,%r13
  jne    L538
  mov    0x128(%rsp),%rax
  mov    0x8(%rsp),%r11
  mov    0x4(%rax),%esi
  test   %esi,%esi
  jne    L216
L859:
  mov    0x128(%rsp),%rax
  mov    0x8(%rax),%eax
  mov    %eax,0x8(%rsp)
  mov    0x120(%rsp),%rax
  mov    0x8(%rax),%r10d
  test   %r10d,%r10d
  je     L664
  mov    0x110(%rsp),%rax
  mov    0x4(%rax),%r10d
  mov    0x118(%rsp),%rax
  mov    0x4(%rax),%r15d
  cmp    %r15d,%r10d
  jg     L121
  mov    0x110(%rsp),%rax
  movslq %r10d,%r14
  mov    %r10d,0x28(%rsp)
  mov    0xd0(%rsp),%rcx
  lea    0x0(,%r14,8),%rsi
  movslq (%rax),%r13
  mov    0x118(%rsp),%rax
  mov    (%rax),%r12d
  mov    %r15d,%eax
  mov    %r13,%rbx
  sub    %r10d,%eax
  mov    0x130(%rsp),%r10d
  lea    0x1(%rax,%r14,1),%rax
  shl    $0x3,%rax
  mov    %rax,0x18(%rsp)
  lea    0x0(,%r13,4),%rax
  mov    %rax,0x20(%rsp)
  mov    %r12d,%eax
  sub    %r13d,%eax
  lea    0x1(%rax,%r13,1),%r11
  movslq 0x6c(%rsp),%rax
  shl    $0x2,%r11
  lea    (%rcx,%rax,8),%r9
  mov    0x130(%rsp),%ecx
  lea    -0x2(%rcx),%edx
  mov    0xd0(%rsp),%rcx
  mov    %edx,0x10(%rsp)
  add    %rdx,%rax
  lea    0x8(%rcx),%rbp
  lea    0x0(%rbp,%rax,8),%r8
L603:
  mov    0x20(%rsp),%rcx
  cmp    %r12d,%ebx
  jg     L16
L791:
  mov    %r9,%rdx
  mov    %r9,%rax
  cmp    $0x1,%r10d
  jle    L686
  cs nopw 0x0(%rax,%rax,1)
L619:
  mov    (%rax),%rdi
  add    $0x8,%rax
  sub    $0x8,%rdx
  mov    (%rdi,%rsi,1),%rdi
  movss  (%rdi,%rcx,1),%xmm0
  mov    (%rdx),%rdi
  mov    (%rdi,%rsi,1),%rdi
  movss  %xmm0,(%rdi,%rcx,1)
  cmp    %rax,%r8
  jne    L619
L686:
  add    $0x4,%rcx
  cmp    %rcx,%r11
  jne    L791
L16:
  add    $0x8,%rsi
  cmp    %rsi,0x18(%rsp)
  jne    L603
  mov    0x8(%rsp),%edi
  mov    0x28(%rsp),%r10d
  test   %edi,%edi
  jne    L834
L121:
  add    $0x98,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L435:
  mov    0x130(%rsp),%eax
  test   %eax,%eax
  jg     L423
  jmp    L668
L458:
  mov    0x130(%rsp),%edx
  test   %edx,%edx
  jg     L341
  add    $0x8,%r12
  cmp    %r12,0x20(%rsp)
  jne    L55
  jmp    L296
L664:
  mov    0x8(%rsp),%r8d
  test   %r8d,%r8d
  je     L121
  mov    0x110(%rsp),%rax
  mov    0x4(%rax),%r10d
  mov    0x118(%rsp),%rax
  mov    0x4(%rax),%r15d
  cmp    %r15d,%r10d
  jg     L121
  mov    0x110(%rsp),%rax
  movslq %r10d,%r14
  movslq (%rax),%r13
  mov    0x118(%rsp),%rax
  mov    (%rax),%r12d
  mov    0x130(%rsp),%eax
  mov    %r13,%rbx
  sub    $0x2,%eax
  mov    %eax,0x10(%rsp)
  mov    0xd0(%rsp),%rax
  lea    0x8(%rax),%rbp
L834:
  mov    %r12d,%eax
  movslq 0x70(%rsp),%rdx
  lea    0x0(,%r13,4),%rdi
  lea    0x0(,%r14,8),%rsi
  sub    %ebx,%eax
  lea    0x1(%rax,%r13,1),%r8
  mov    0xd0(%rsp),%rax
  shl    $0x2,%r8
  lea    (%rax,%rdx,8),%r11
  mov    0x10(%rsp),%eax
  add    %rdx,%rax
  lea    0x0(%rbp,%rax,8),%r13
  mov    0x130(%rsp),%ebp
L362:
  mov    %rdi,%rcx
  cmp    %r12d,%ebx
  jg     L237
L449:
  mov    %r11,%rax
  mov    %r11,%rdx
  cmp    $0x1,%ebp
  jle    L507
  nopl   (%rax)
L757:
  mov    (%rdx),%r9
  add    $0x8,%rax
  sub    $0x8,%rdx
  mov    (%r9,%rsi,1),%r9
  movss  (%r9,%rcx,1),%xmm0
  mov    (%rax),%r9
  mov    (%r9,%rsi,1),%r9
  movss  %xmm0,(%r9,%rcx,1)
  cmp    %rax,%r13
  jne    L757
L507:
  add    $0x4,%rcx
  cmp    %rcx,%r8
  jne    L449
L237:
  add    $0x1,%r10d
  add    $0x8,%rsi
  cmp    %r10d,%r15d
  jge    L362
  jmp    L121
L573:
  mov    0x128(%rsp),%rax
  mov    0x4(%rax),%r9d
  test   %r9d,%r9d
  je     L859
  mov    0x60(%rsp),%eax
  mov    0x58(%rsp),%ebx
  cmp    %ebx,%eax
  jg     L859
  mov    0x100(%rsp),%rbx
  movslq %eax,%r12
  movslq (%rbx),%r11
  mov    0x108(%rsp),%rbx
  mov    (%rbx),%ebp
  mov    %r11,%r9
L216:
  mov    %ebp,%eax
  lea    0x0(,%r11,4),%rbx
  mov    %r12,%r8
  mov    0x108(%rsp),%r13
  sub    %r9d,%eax
  mov    0x30(%rsp),%r12
  lea    0x1(%rax,%r11,1),%rax
  lea    0x0(,%rax,4),%r11
  mov    0x130(%rsp),%eax
  lea    -0x2(%rax),%r10d
  mov    %eax,%r14d
L443:
  mov    %rbx,%rcx
  cmp    %ebp,%r9d
  jg     L617
L784:
  cmp    $0x1,%r14d
  jle    L789
  mov    (%r12,%r8,8),%rax
  movslq 0x4(%r13),%rsi
  lea    (%rax,%rsi,8),%rdx
  lea    0x1(%rsi,%r10,1),%rsi
  lea    (%rax,%rsi,8),%rdi
  mov    %rdx,%rax
  nopl   0x0(%rax,%rax,1)
L229:
  mov    (%rdx),%rsi
  add    $0x8,%rax
  sub    $0x8,%rdx
  movss  (%rsi,%rcx,1),%xmm0
  mov    (%rax),%rsi
  movss  %xmm0,(%rsi,%rcx,1)
  cmp    %rax,%rdi
  jne    L229
L789:
  add    $0x4,%rcx
  cmp    %rcx,%r11
  jne    L784
L617:
  add    $0x1,%r8
  cmp    %r8d,0x58(%rsp)
  jge    L443
  jmp    L859
L232:
  mov    0x128(%rsp),%rax
  mov    (%rax),%r11d
  test   %r11d,%r11d
  je     L266
  mov    0x68(%rsp),%eax
  mov    0x5c(%rsp),%ebx
  cmp    %ebx,%eax
  jg     L266
  mov    0xf0(%rsp),%rbx
  movslq %eax,%rbp
  movslq 0x4(%rbx),%r10
  mov    0xf8(%rsp),%rbx
  mov    0x4(%rbx),%ebx
  mov    %r10,%r8
L394:
  mov    %ebx,%eax
  mov    %rbp,%rdi
  mov    0xf8(%rsp),%r12
  mov    0x28(%rsp),%rbp
  sub    %r8d,%eax
  lea    0x0(,%r10,8),%r11
  lea    0x1(%rax,%r10,1),%r9
  mov    0x130(%rsp),%eax
  shl    $0x3,%r9
  lea    -0x2(%rax),%r10d
  mov    %eax,%r13d
L546:
  mov    %r11,%rsi
  cmp    %ebx,%r8d
  jg     L31
L466:
  cmp    $0x1,%r13d
  jle    L659
  mov    0x0(%rbp,%rdi,8),%rax
  movslq (%r12),%rcx
  mov    (%rax,%rsi,1),%rax
  lea    (%rax,%rcx,4),%rdx
  lea    0x1(%rcx,%r10,1),%rcx
  lea    (%rax,%rcx,4),%rcx
  mov    %rdx,%rax
  cs nopw 0x0(%rax,%rax,1)
L303:
  movss  (%rdx),%xmm0
  add    $0x4,%rax
  sub    $0x4,%rdx
  movss  %xmm0,(%rax)
  cmp    %rax,%rcx
  jne    L303
L659:
  add    $0x8,%rsi
  cmp    %rsi,%r9
  jne    L466
L31:
  add    $0x1,%rdi
  cmp    %edi,0x5c(%rsp)
  jge    L546
  jmp    L266
```

tool_calls: name: unpack_data
arguments: data_label: D4
datatype: f64

tool: D4: 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];
        }
      }
    }
  }
}
```