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

```asm
<a2b_ord2>:
  endbr64
  push   %r15
  push   %r14
  lea    0x1(%rdi),%r14d
  push   %r13
  mov    %esi,%r13d
  push   %r12
  mov    %edi,%r12d
  push   %rbp
  lea    0x2(%rdi),%ebp
  push   %rbx
  mov    %rdx,%rbx
  sub    $0xa8,%rsp
  mov    0xe0(%rsp),%rax
  mov    0x108(%rsp),%edx
  mov    %esi,0x90(%rsp)
  mov    %rcx,0x68(%rsp)
  mov    0xf8(%rsp),%esi
  mov    0x100(%rsp),%ecx
  mov    %rax,0x80(%rsp)
  mov    0xf0(%rsp),%eax
  mov    %edi,0x4c(%rsp)
  lea    0x0(,%rbp,8),%edi
  mov    %r9,0x78(%rsp)
  mov    0xe8(%rsp),%r15
  mov    %r8,0x70(%rsp)
  mov    %esi,0x60(%rsp)
  mov    %ecx,0x8c(%rsp)
  mov    %edx,0x64(%rsp)
  mov    %eax,0x94(%rsp)
  mov    %r14d,0x4(%rsp)
  mov    %ebp,0x18(%rsp)
  call   <malloc@plt>
  lea    0x10(,%r13,8),%edi
  mov    %rax,0x10(%rsp)
  call   <malloc@plt>
  mov    0x94(%rsp),%r11d
  mov    %rax,0x20(%rsp)
  mov    0x60(%rsp),%eax
  test   %r11d,%r11d
  mov    %r14d,%r11d
  setne  0x8a(%rsp)
  setne  %r9b
  test   %eax,%eax
  mov    0x8c(%rsp),%eax
  cmovne %r12d,%r11d
  movzbl %r9b,%r9d
  movzbl 0x8a(%rsp),%edi
  test   %eax,%eax
  mov    %r9d,0x50(%rsp)
  setne  %al
  setne  0x8b(%rsp)
  cmpl   $0x1,0x64(%rsp)
  movzbl %al,%eax
  adc    $0x0,%r13d
  mov    %r11d,0x48(%rsp)
  mov    %eax,0x54(%rsp)
  mov    %r13d,0x1c(%rsp)
  cmp    %eax,%r13d
  jle    L231
  cmp    %r9d,%r11d
  jle    L231
  mov    %ebp,%r8d
  movzbl %dil,%r12d
  mov    %r14d,%r10d
  movslq %ebp,%r14
  imul   %eax,%r8d
  lea    0x1(%r12),%rcx
  sub    %r9d,%r11d
  mov    %r12,0x58(%rsp)
  lea    0x0(,%r14,8),%r13
  mov    %eax,%r14d
  mov    %r11d,0x8(%rsp)
  movapd D181(%rip),%xmm2
  imul   %r14d,%r10d
  mov    %r13,0x28(%rsp)
  movsd  D181(%rip),%xmm1
  movslq %r8d,%rax
  add    %rcx,%rax
  lea    (%rbx,%rax,8),%rdi
  lea    0x1(%r14),%eax
  imul   %ebp,%eax
  movslq %eax,%rdx
  sub    %r8d,%eax
  add    %rcx,%rdx
  mov    %eax,0x40(%rsp)
  mov    %r11d,%eax
  lea    -0x8(%r13),%rcx
  shr    %eax
  lea    (%rbx,%rdx,8),%rsi
  movslq %r10d,%rdx
  and    $0xfffffffe,%r11d
  lea    (%r15,%rdx,8),%r13
  lea    0x0(,%r12,8),%rdx
  mov    %r11d,0x44(%rsp)
  add    %r11d,%r9d
  lea    -0x1(%rax),%r12d
  mov    $0xfffffffffffffff8,%rax
  mov    %rdx,0x38(%rsp)
  sub    %rdx,%rax
  add    $0x1,%r12
  mov    %rcx,0x30(%rsp)
  mov    %r9d,%ecx
  mov    %rax,0x98(%rsp)
  shl    $0x4,%r12
  nopw   0x0(%rax,%rax,1)
L625:
  mov    0x40(%rsp),%eax
  add    $0x1,%r14d
  lea    (%r8,%rax,1),%edx
  mov    0x38(%rsp),%rax
  lea    0x0(%r13,%rax,1),%r9
  mov    %r9,%rax
  sub    %rdi,%rax
  cmp    $0x8,%rax
  mov    %r9,%rax
  seta   %r11b
  sub    %rsi,%rax
  cmp    $0x8,%rax
  seta   %al
  test   %al,%r11b
  je     L212
  xor    %eax,%eax
  lea    -0x8(%rdi),%rbp
  lea    -0x8(%rsi),%r11
  cmpl   $0x1,0x8(%rsp)
  je     L212
  nopw   0x0(%rax,%rax,1)
L483:
  movupd 0x0(%rbp,%rax,1),%xmm0
  movupd (%rdi,%rax,1),%xmm5
  movupd (%r11,%rax,1),%xmm6
  movupd (%rsi,%rax,1),%xmm7
  addpd  %xmm5,%xmm0
  addpd  %xmm6,%xmm0
  addpd  %xmm7,%xmm0
  mulpd  %xmm2,%xmm0
  movups %xmm0,(%r9,%rax,1)
  add    $0x10,%rax
  cmp    %r12,%rax
  jne    L483
  mov    0x44(%rsp),%r11d
  cmp    %r11d,0x8(%rsp)
  je     L106
  lea    (%r8,%rcx,1),%eax
  add    %ecx,%edx
  lea    (%r10,%rcx,1),%r9d
  cltq
  movslq %edx,%rdx
  movslq %r9d,%r9
  movsd  0x8(%rbx,%rax,8),%xmm0
  addsd  (%rbx,%rax,8),%xmm0
  addsd  (%rbx,%rdx,8),%xmm0
  addsd  0x8(%rbx,%rdx,8),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%r15,%r9,8)
L106:
  mov    0x28(%rsp),%rax
  add    0x18(%rsp),%r8d
  add    0x4(%rsp),%r10d
  add    0x30(%rsp),%r13
  add    %rax,%rdi
  add    %rax,%rsi
  cmp    %r14d,0x1c(%rsp)
  jne    L625
L231:
  cmpb   $0x0,0x8a(%rsp)
  je     L224
  cmpb   $0x0,0x8b(%rsp)
  je     L224
  movslq 0x4c(%rsp),%rax
  movsd  0x10(%rbx,%rax,8),%xmm0
  addsd  0x18(%rbx,%rax,8),%xmm0
  addsd  0x8(%rbx),%xmm0
  mulsd  D204(%rip),%xmm0
  movsd  %xmm0,(%r15)
L224:
  mov    0x60(%rsp),%r10d
  test   %r10d,%r10d
  setne  %al
  je     L632
  cmpb   $0x0,0x8b(%rsp)
  je     L632
  mov    0x18(%rsp),%edi
  movslq 0x4c(%rsp),%rcx
  mov    %edi,%edx
  add    0x4(%rsp),%edi
  add    %ecx,%edx
  movslq %edx,%rdx
  movsd  (%rbx,%rdx,8),%xmm0
  movslq %edi,%rdx
  addsd  (%rbx,%rcx,8),%xmm0
  addsd  (%rbx,%rdx,8),%xmm0
  mulsd  D204(%rip),%xmm0
  movsd  %xmm0,(%r15,%rcx,8)
L632:
  mov    0x64(%rsp),%r9d
  test   %r9d,%r9d
  setne  %cl
  test   %al,%al
  je     L371
  test   %cl,%cl
  je     L672
  mov    0x18(%rsp),%r14d
  mov    0x90(%rsp),%edi
  mov    0x4c(%rsp),%r10d
  mov    0x4(%rsp),%esi
  mov    %r14d,%eax
  imul   %edi,%eax
  mov    %eax,%edx
  add    %eax,%esi
  sub    %edi,%edx
  lea    (%rax,%r10,1),%edi
  add    %r14d,%eax
  movslq %esi,%rsi
  add    %r10d,%eax
  movslq %edi,%rdi
  add    %r10d,%edx
  cltq
  movsd  (%rbx,%rdi,8),%xmm0
  addsd  (%rbx,%rsi,8),%xmm0
  movslq %edx,%rdx
  addsd  (%rbx,%rax,8),%xmm0
  mulsd  D204(%rip),%xmm0
  movsd  %xmm0,(%r15,%rdx,8)
L371:
  test   %cl,%cl
  je     L672
  cmpb   $0x0,0x8a(%rsp)
  je     L672
  mov    0x18(%rsp),%edi
  mov    0x90(%rsp),%esi
  mov    %edi,%eax
  imul   %esi,%eax
  movslq %eax,%rcx
  mov    %eax,%edx
  add    %edi,%eax
  cltq
  movsd  (%rbx,%rcx,8),%xmm0
  addsd  0x8(%rbx,%rcx,8),%xmm0
  sub    %esi,%edx
  addsd  0x8(%rbx,%rax,8),%xmm0
  mulsd  D204(%rip),%xmm0
  movslq %edx,%rdx
  movsd  %xmm0,(%r15,%rdx,8)
L223:
  mov    0x54(%rsp),%ecx
  cmp    %ecx,0x1c(%rsp)
  jl     L507
  movslq 0x18(%rsp),%r14
  mov    %ecx,%edi
  mov    0x20(%rsp),%r10
  movzbl 0x8b(%rsp),%r13d
  movsd  D84(%rip),%xmm1
  mov    %r14,%rax
  lea    0x0(,%r14,8),%rsi
  imul   %ecx,%eax
  mov    0x1c(%rsp),%ecx
  sub    %edi,%ecx
  lea    0x8(%r10),%rdi
  mov    %rdi,0x28(%rsp)
  cltq
  add    %r13,%rcx
  lea    (%rbx,%rax,8),%rdx
  lea    (%rdi,%rcx,8),%rcx
  lea    (%r10,%r13,8),%rax
  nopw   0x0(%rax,%rax,1)
L163:
  movsd  (%rdx),%xmm0
  addsd  0x8(%rdx),%xmm0
  add    $0x8,%rax
  add    %rsi,%rdx
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rax)
  cmp    %rcx,%rax
  jne    L163
  mov    0x54(%rsp),%ecx
  cmp    %ecx,0x1c(%rsp)
  jle    L507
  mov    0x4(%rsp),%esi
  mov    0x1c(%rsp),%ebp
  mov    0x68(%rsp),%r10
  sub    %ecx,%ebp
  mov    %esi,%eax
  movslq %esi,%rdi
  imul   %ecx,%eax
  mov    %ebp,%edx
  mov    %rdi,0x8(%rsp)
  shl    $0x3,%rdi
  lea    0x0(%r13,%rdx,1),%r11
  sub    $0x1,%rdx
  xor    %ecx,%ecx
  imul   %rdi,%rdx
  mov    %rcx,%r8
  lea    -0x8(%r10,%r11,8),%r9
  cltq
  shl    $0x3,%rax
  test   %esi,%esi
  cmovs  %rdx,%r8
  add    %rax,%r8
  add    %r15,%r8
  test   %esi,%esi
  mov    %rcx,%rsi
  cmovns %rdx,%rsi
  lea    0x0(,%r13,8),%rcx
  lea    (%r10,%rcx,1),%r12
  add    0x20(%rsp),%rcx
  add    %rax,%rsi
  mov    %rcx,%rdx
  add    %r15,%rsi
  cmp    %r9,%r8
  seta   %r10b
  cmp    %r12,%rsi
  setb   %r9b
  or     %r10d,%r9d
  mov    0x20(%rsp),%r10
  lea    (%r10,%r11,8),%r10
  cmp    %r10,%r8
  seta   %r8b
  cmp    %rcx,%rsi
  setb   %sil
  or     %esi,%r8d
  test   %r8b,%r9b
  je     L563
  cmp    $0x1,%ebp
  je     L563
  mov    %ebp,%esi
  mov    0x8(%rsp),%rcx
  add    %r15,%rax
  sub    %rdx,%r12
  shr    %esi
  movapd D235(%rip),%xmm2
  sub    $0x1,%esi
  shl    $0x4,%rcx
  shl    $0x4,%rsi
  lea    0x10(%rdx,%rsi,1),%rsi
  cs nopw 0x0(%rax,%rax,1)
L481:
  movupd (%r12,%rdx,1),%xmm4
  movapd %xmm2,%xmm0
  movupd (%rdx),%xmm3
  subpd  %xmm4,%xmm0
  movupd 0x8(%rdx),%xmm4
  mulpd  %xmm4,%xmm0
  movupd (%r12,%rdx,1),%xmm4
  add    $0x10,%rdx
  mulpd  %xmm4,%xmm3
  addpd  %xmm3,%xmm0
  movlpd %xmm0,(%rax)
  movhpd %xmm0,(%rax,%rdi,1)
  add    %rcx,%rax
  cmp    %rsi,%rdx
  jne    L481
  mov    0x54(%rsp),%eax
  mov    %ebp,%edx
  and    $0xfffffffe,%edx
  add    %edx,%eax
  cmp    %edx,%ebp
  je     L54
  mov    0x68(%rsp),%rdi
  movslq %eax,%rdx
  movsd  D235(%rip),%xmm0
  imul   0x4(%rsp),%eax
  movsd  (%rdi,%rdx,8),%xmm2
  mov    0x20(%rsp),%rdi
  subsd  %xmm2,%xmm0
  mulsd  (%rdi,%rdx,8),%xmm2
  cltq
  mulsd  0x8(%rdi,%rdx,8),%xmm0
  addsd  %xmm2,%xmm0
  movsd  %xmm0,(%r15,%rax,8)
L54:
  mov    0x60(%rsp),%eax
  test   %eax,%eax
  je     L272
L450:
  mov    0x18(%rsp),%eax
  mov    0x54(%rsp),%edx
  lea    0x0(,%r14,8),%rdi
  movslq 0x4c(%rsp),%rcx
  mov    0x20(%rsp),%rsi
  imul   %edx,%eax
  mov    0x1c(%rsp),%r8d
  lea    (%rsi,%r13,8),%rsi
  cltq
  add    %rcx,%rax
  lea    (%rbx,%rax,8),%rax
  nopw   0x0(%rax,%rax,1)
L245:
  movsd  (%rax),%xmm0
  addsd  0x8(%rax),%xmm0
  add    $0x1,%edx
  add    %rdi,%rax
  add    $0x8,%rsi
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rsi)
  cmp    %edx,%r8d
  jge    L245
  mov    0x54(%rsp),%edi
  cmp    %edi,0x1c(%rsp)
  jle    L272
  mov    0x1c(%rsp),%r14d
  mov    %edi,%esi
  mov    0x70(%rsp),%r10
  sub    %edi,%r14d
  mov    0x4(%rsp),%edi
  mov    %r14d,%edx
  mov    %edi,%eax
  movslq %edi,%rbp
  lea    (%rdx,%r13,1),%r11
  sub    $0x1,%rdx
  imul   %esi,%eax
  lea    0x0(,%rbp,8),%rdi
  imul   %rdi,%rdx
  lea    -0x8(%r10,%r11,8),%r9
  cltq
  add    %rcx,%rax
  xor    %ecx,%ecx
  shl    $0x3,%rax
  mov    %rcx,%r8
  test   %ebp,%ebp
  cmovs  %rdx,%r8
  add    %rax,%r8
  add    %r15,%r8
  test   %ebp,%ebp
  cmovns %rdx,%rcx
  mov    %rcx,%rsi
  lea    0x0(,%r13,8),%rcx
  add    %rax,%rsi
  lea    (%r10,%rcx,1),%r12
  add    0x20(%rsp),%rcx
  add    %r15,%rsi
  cmp    %r9,%r8
  mov    %rcx,%rdx
  seta   %r10b
  cmp    %rsi,%r12
  seta   %r9b
  or     %r10d,%r9d
  mov    0x20(%rsp),%r10
  lea    (%r10,%r11,8),%r10
  cmp    %r10,%r8
  seta   %r8b
  cmp    %rsi,%rcx
  seta   %sil
  or     %esi,%r8d
  test   %r8b,%r9b
  je     L222
  cmp    $0x1,%r14d
  je     L222
  mov    %r14d,%esi
  mov    %rbp,%rcx
  add    %r15,%rax
  sub    %rdx,%r12
  shr    %esi
  movapd D235(%rip),%xmm2
  shl    $0x4,%rcx
  sub    $0x1,%esi
  shl    $0x4,%rsi
  lea    0x10(%rdx,%rsi,1),%rsi
  nop
L92:
  movupd (%r12,%rdx,1),%xmm4
  movapd %xmm2,%xmm0
  movupd (%rdx),%xmm1
  add    $0x10,%rdx
  movupd -0x8(%rdx),%xmm3
  subpd  %xmm4,%xmm0
  mulpd  %xmm4,%xmm1
  mulpd  %xmm3,%xmm0
  addpd  %xmm1,%xmm0
  movlpd %xmm0,(%rax)
  movhpd %xmm0,(%rax,%rdi,1)
  add    %rcx,%rax
  cmp    %rdx,%rsi
  jne    L92
  mov    0x54(%rsp),%edx
  mov    %r14d,%eax
  and    $0xfffffffe,%eax
  add    %eax,%edx
  cmp    %eax,%r14d
  je     L272
  mov    0x70(%rsp),%rsi
  movslq %edx,%rax
  movsd  D235(%rip),%xmm0
  imul   0x4(%rsp),%edx
  add    0x4c(%rsp),%edx
  movsd  (%rsi,%rax,8),%xmm1
  mov    0x20(%rsp),%rsi
  movslq %edx,%rdx
  subsd  %xmm1,%xmm0
  mulsd  (%rsi,%rax,8),%xmm1
  mulsd  0x8(%rsi,%rax,8),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%r15,%rdx,8)
L272:
  mov    0x8c(%rsp),%esi
  test   %esi,%esi
  je     L365
  mov    0x48(%rsp),%eax
  mov    0x50(%rsp),%edi
  cmp    %edi,%eax
  jl     L365
  movzbl 0x8a(%rsp),%esi
  movslq 0x4c(%rsp),%r8
  mov    %eax,%ecx
  mov    0x10(%rsp),%r14
  sub    %edi,%ecx
  mov    %rsi,0x58(%rsp)
  lea    0x0(,%rsi,8),%rdi
  lea    0x3(%r8,%rsi,1),%rsi
  lea    (%r14,%rdi,1),%rdx
  shl    $0x3,%rsi
  lea    0x8(%rbx,%rdi,1),%rdi
  cmp    %rdi,%rdx
  lea    (%rbx,%rsi,1),%rdi
  mov    %rdx,%rax
  setne  %r9b
  cmp    %rdi,%rdx
  setne  %dil
  test   %dil,%r9b
  je     L418
  cmp    $0x1,%ecx
  jbe    L418
  add    $0x1,%ecx
  movapd D84(%rip),%xmm1
  mov    %ecx,%edx
  shr    %edx
  sub    $0x1,%edx
  shl    $0x4,%rdx
  lea    0x10(%rax,%rdx,1),%rdi
  mov    %rbx,%rdx
  sub    %rax,%rdx
  lea    -0x8(%rdx,%rsi,1),%rsi
  mov    %rbx,%rdx
  sub    %r14,%rdx
  nop
L14:
  movupd (%rsi,%rax,1),%xmm0
  movupd (%rdx,%rax,1),%xmm3
  add    $0x10,%rax
  addpd  %xmm3,%xmm0
  mulpd  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %rdi,%rax
  jne    L14
  mov    0x50(%rsp),%eax
  mov    %ecx,%edx
  and    $0xfffffffe,%edx
  add    %edx,%eax
  cmp    %ecx,%edx
  je     L533
  movslq %eax,%rdx
  add    0x18(%rsp),%eax
  movsd  D84(%rip),%xmm1
  cltq
  movsd  (%rbx,%rax,8),%xmm0
  addsd  (%rbx,%rdx,8),%xmm0
  mov    0x10(%rsp),%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax,%rdx,8)
L533:
  mov    0x50(%rsp),%edi
  cmp    %edi,0x48(%rsp)
  jle    L365
  mov    0x58(%rsp),%rax
  mov    0x10(%rsp),%r10
  mov    0x78(%rsp),%r14
  mov    0x48(%rsp),%edi
  lea    0x0(,%rax,8),%rsi
  sub    0x50(%rsp),%edi
  lea    (%r15,%rsi,1),%rcx
  lea    (%r10,%rsi,1),%rax
  lea    0x8(%rax),%rdx
  mov    %rcx,%r8
  lea    0x8(%r14,%rsi,1),%rsi
  sub    %rdx,%r8
  cmp    $0x8,%r8
  seta   %r8b
  cmp    %rsi,%rcx
  setne  %sil
  test   %sil,%r8b
  je     L716
  cmp    $0x1,%edi
  je     L716
  mov    %edi,%edx
  movapd D235(%rip),%xmm2
  sub    %rax,%rcx
  shr    %edx
  sub    $0x1,%edx
  shl    $0x4,%rdx
  lea    0x10(%rax,%rdx,1),%rsi
  mov    %r14,%rdx
  sub    %r10,%rdx
  nopl   (%rax)
L692:
  movupd (%rdx,%rax,1),%xmm4
  movapd %xmm2,%xmm0
  movupd 0x8(%rax),%xmm3
  movupd (%rax),%xmm1
  subpd  %xmm4,%xmm0
  mulpd  %xmm4,%xmm1
  mulpd  %xmm3,%xmm0
  addpd  %xmm1,%xmm0
  movups %xmm0,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rsi
  jne    L692
  mov    0x50(%rsp),%eax
  mov    %edi,%edx
  and    $0xfffffffe,%edx
  add    %edx,%eax
  cmp    %edi,%edx
  je     L108
  mov    0x78(%rsp),%rsi
  cltq
  mov    0x10(%rsp),%rdi
  movsd  D235(%rip),%xmm0
  movsd  (%rsi,%rax,8),%xmm1
  subsd  %xmm1,%xmm0
  mulsd  (%rdi,%rax,8),%xmm1
  mulsd  0x8(%rdi,%rax,8),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%r15,%rax,8)
L108:
  mov    0x64(%rsp),%edx
  test   %edx,%edx
  je     L261
L10:
  mov    0x18(%rsp),%eax
  mov    0x90(%rsp),%edx
  mov    0x58(%rsp),%r11
  mov    0x48(%rsp),%r14d
  imul   %eax,%edx
  mov    0x50(%rsp),%r13d
  mov    %r14d,%r12d
  sub    %r13d,%r12d
  add    %edx,%eax
  movslq %edx,%r10
  movslq %eax,%r9
  lea    0x1(%r10,%r11,1),%rdi
  mov    0x10(%rsp),%rax
  lea    0x0(,%rdi,8),%rbp
  lea    0x1(%r9,%r11,1),%rdi
  mov    %r9,%rcx
  shl    $0x3,%rdi
  lea    (%rax,%r11,8),%rsi
  lea    (%rbx,%rdi,1),%r8
  mov    %rsi,%rax
  cmp    %r8,%rsi
  lea    (%rbx,%rbp,1),%r8
  setne  %r11b
  cmp    %r8,%rsi
  setne  %r8b
  and    %r11d,%r8d
  cmp    %r13d,%r14d
  setge  %r11b
  test   %r11b,%r8b
  je     L329
  cmp    $0x1,%r12d
  jbe    L329
  cmp    %r13d,%r14d
  mov    $0x1,%r8d
  lea    0x1(%r12),%esi
  mov    %rbx,%r9
  cmovl  %r8d,%esi
  sub    %rax,%r9
  movapd D84(%rip),%xmm1
  lea    -0x8(%r9,%rdi,1),%rdi
  mov    %rbx,%r9
  mov    %esi,%r8d
  sub    %rax,%r9
  shr    %r8d
  lea    -0x8(%r9,%rbp,1),%r9
  sub    $0x1,%r8d
  shl    $0x4,%r8
  lea    0x10(%rax,%r8,1),%r8
  nopw   0x0(%rax,%rax,1)
L85:
  movupd (%rdi,%rax,1),%xmm0
  movupd (%r9,%rax,1),%xmm3
  add    $0x10,%rax
  addpd  %xmm3,%xmm0
  mulpd  %xmm1,%xmm0
  movups %xmm0,-0x10(%rax)
  cmp    %r8,%rax
  jne    L85
  mov    0x50(%rsp),%edi
  mov    %esi,%eax
  and    $0xfffffffe,%eax
  add    %eax,%edi
  cmp    %esi,%eax
  je     L400
  add    %edi,%ecx
  add    %edi,%edx
  movslq %edi,%rax
  mov    0x10(%rsp),%rdi
  movslq %ecx,%rcx
  movslq %edx,%rdx
  movsd  (%rbx,%rcx,8),%xmm0
  addsd  (%rbx,%rdx,8),%xmm0
  mulsd  D84(%rip),%xmm0
  movsd  %xmm0,(%rdi,%rax,8)
L400:
  mov    0x50(%rsp),%ebx
  cmp    %ebx,0x48(%rsp)
  jle    L261
  mov    0x4(%rsp),%edx
  imul   0x90(%rsp),%edx
  mov    0x58(%rsp),%rbx
  mov    0x10(%rsp),%r10
  mov    0x80(%rsp),%r14
  mov    0x48(%rsp),%edi
  movslq %edx,%rsi
  sub    0x50(%rsp),%edi
  lea    (%rsi,%rbx,1),%rax
  lea    (%r15,%rax,8),%rcx
  lea    (%r10,%rbx,8),%rax
  lea    0x8(%rax),%r9
  mov    %rcx,%r8
  sub    %r9,%r8
  cmp    $0x8,%r8
  lea    0x8(%r14,%rbx,8),%r8
  seta   %r9b
  cmp    %r8,%rcx
  setne  %r8b
  test   %r8b,%r9b
  je     L678
  cmp    $0x1,%edi
  je     L678
  mov    %edi,%esi
  movapd D235(%rip),%xmm2
  sub    %rax,%rcx
  shr    %esi
  sub    $0x1,%esi
  shl    $0x4,%rsi
  lea    0x10(%rax,%rsi,1),%r8
  mov    %r14,%rsi
  sub    %r10,%rsi
  nopl   0x0(%rax)
L719:
  movupd (%rsi,%rax,1),%xmm4
  movapd %xmm2,%xmm0
  movupd 0x8(%rax),%xmm3
  movupd (%rax),%xmm1
  subpd  %xmm4,%xmm0
  mulpd  %xmm4,%xmm1
  mulpd  %xmm3,%xmm0
  addpd  %xmm1,%xmm0
  movups %xmm0,(%rcx,%rax,1)
  add    $0x10,%rax
  cmp    %r8,%rax
  jne    L719
  mov    0x50(%rsp),%eax
  mov    %edi,%ecx
  and    $0xfffffffe,%ecx
  add    %ecx,%eax
  cmp    %ecx,%edi
  je     L261
  mov    0x80(%rsp),%rsi
  movslq %eax,%rcx
  movsd  D235(%rip),%xmm0
  add    %edx,%eax
  cltq
  movsd  (%rsi,%rcx,8),%xmm1
  mov    0x10(%rsp),%rsi
  subsd  %xmm1,%xmm0
  mulsd  (%rsi,%rcx,8),%xmm1
  mulsd  0x8(%rsi,%rcx,8),%xmm0
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%r15,%rax,8)
L261:
  mov    0x10(%rsp),%rdi
  call   <free@plt>
  mov    0x20(%rsp),%rdi
  add    $0xa8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1060 <free@plt>
L672:
  mov    0x94(%rsp),%r8d
  test   %r8d,%r8d
  jne    L223
L507:
  mov    0x60(%rsp),%edi
  test   %edi,%edi
  je     L272
  mov    0x54(%rsp),%ecx
  cmp    %ecx,0x1c(%rsp)
  jl     L272
  movslq 0x18(%rsp),%r14
  movsd  D84(%rip),%xmm1
  movzbl 0x8b(%rsp),%r13d
  jmp    L450
L365:
  mov    0x64(%rsp),%ecx
  test   %ecx,%ecx
  je     L261
  mov    0x50(%rsp),%ecx
  cmp    %ecx,0x48(%rsp)
  jl     L261
  movzbl 0x8a(%rsp),%eax
  mov    %rax,0x58(%rsp)
  jmp    L10
  nop
L212:
  mov    0x98(%rsp),%rax
  mov    0x48(%rsp),%r11d
  lea    (%rdi,%rax,1),%r9
  lea    (%rsi,%rax,1),%rdx
  mov    0x58(%rsp),%rax
  nopw   0x0(%rax,%rax,1)
L58:
  movsd  (%r9,%rax,8),%xmm0
  addsd  0x8(%r9,%rax,8),%xmm0
  addsd  (%rdx,%rax,8),%xmm0
  addsd  0x8(%rdx,%rax,8),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x0(%r13,%rax,8)
  add    $0x1,%rax
  cmp    %eax,%r11d
  jg     L58
  jmp    L106
L563:
  mov    0x1c(%rsp),%edx
  sub    0x54(%rsp),%edx
  add    %r15,%rax
  mov    0x28(%rsp),%rsi
  sub    $0x1,%edx
  movsd  D235(%rip),%xmm0
  add    %r13,%rdx
  lea    (%rsi,%rdx,8),%rsi
  mov    0x68(%rsp),%rdx
  sub    0x20(%rsp),%rdx
  nopl   (%rax)
L708:
  movsd  (%rdx,%rcx,1),%xmm3
  movsd  (%rcx),%xmm4
  movapd %xmm0,%xmm2
  add    $0x8,%rcx
  mulsd  %xmm3,%xmm4
  subsd  %xmm3,%xmm2
  mulsd  (%rcx),%xmm2
  addsd  %xmm4,%xmm2
  movsd  %xmm2,(%rax)
  add    %rdi,%rax
  cmp    %rcx,%rsi
  jne    L708
  jmp    L54
L222:
  mov    0x1c(%rsp),%edx
  sub    0x54(%rsp),%edx
  add    %r15,%rax
  mov    0x20(%rsp),%r14
  mov    0x70(%rsp),%rsi
  sub    $0x1,%edx
  add    %r13,%rdx
  movsd  D235(%rip),%xmm0
  lea    0x8(%r14,%rdx,8),%rdx
  sub    %r14,%rsi
  nopl   (%rax)
L142:
  movsd  (%rsi,%rcx,1),%xmm2
  movsd  (%rcx),%xmm3
  movapd %xmm0,%xmm1
  add    $0x8,%rcx
  mulsd  %xmm2,%xmm3
  subsd  %xmm2,%xmm1
  mulsd  (%rcx),%xmm1
  addsd  %xmm3,%xmm1
  movsd  %xmm1,(%rax)
  add    %rdi,%rax
  cmp    %rcx,%rdx
  jne    L142
  jmp    L272
L678:
  mov    0x58(%rsp),%rdi
  mov    0x48(%rsp),%edx
  lea    (%r15,%rsi,8),%rcx
  sub    0x50(%rsp),%edx
  mov    0x10(%rsp),%rbx
  mov    0x80(%rsp),%rsi
  sub    $0x1,%edx
  movsd  D235(%rip),%xmm0
  add    %rdi,%rdx
  lea    (%rbx,%rdi,8),%rax
  sub    %rbx,%rcx
  lea    0x8(%rbx,%rdx,8),%rdi
  sub    %rbx,%rsi
  nopl   (%rax)
L592:
  movsd  (%rsi,%rax,1),%xmm2
  movsd  (%rax),%xmm3
  mov    %rax,%rdx
  movapd %xmm0,%xmm1
  add    $0x8,%rax
  mulsd  %xmm2,%xmm3
  subsd  %xmm2,%xmm1
  mulsd  (%rax),%xmm1
  addsd  %xmm3,%xmm1
  movsd  %xmm1,(%rcx,%rdx,1)
  cmp    %rdi,%rax
  jne    L592
  jmp    L261
L329:
  mov    0x10(%rsp),%rdi
  lea    (%rbx,%r10,8),%rax
  lea    (%rbx,%r9,8),%rcx
  mov    0x50(%rsp),%edx
  movsd  D84(%rip),%xmm1
  sub    %rdi,%rax
  sub    %rdi,%rcx
  mov    0x48(%rsp),%edi
  cs nopw 0x0(%rax,%rax,1)
L680:
  movsd  (%rcx,%rsi,1),%xmm0
  addsd  (%rax,%rsi,1),%xmm0
  add    $0x1,%edx
  add    $0x8,%rsi
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rsi)
  cmp    %edx,%edi
  jge    L680
  jmp    L400
L716:
  mov    0x10(%rsp),%rsi
  mov    0x48(%rsp),%ecx
  mov    0x78(%rsp),%rdi
  sub    0x50(%rsp),%ecx
  sub    $0x1,%ecx
  add    0x58(%rsp),%rcx
  movsd  D235(%rip),%xmm0
  lea    0x8(%rsi,%rcx,8),%r8
  sub    %rsi,%rdi
  mov    %rsi,%rcx
  mov    %r15,%rsi
  sub    %rcx,%rsi
  jmp    L637
L657:
  add    $0x8,%rdx
L637:
  movsd  (%rdi,%rax,1),%xmm2
  movsd  (%rax),%xmm3
  movapd %xmm0,%xmm1
  mov    %rax,%rcx
  mov    %rdx,%rax
  mulsd  %xmm2,%xmm3
  subsd  %xmm2,%xmm1
  mulsd  (%rdx),%xmm1
  addsd  %xmm3,%xmm1
  movsd  %xmm1,(%rsi,%rcx,1)
  cmp    %rdx,%r8
  jne    L657
  jmp    L108
L418:
  mov    0x10(%rsp),%rdi
  mov    %ecx,%eax
  add    0x58(%rsp),%rax
  mov    %rbx,%rsi
  movsd  D84(%rip),%xmm1
  lea    0x8(%rdi,%rax,8),%rcx
  lea    (%rbx,%r8,8),%rax
  sub    %rdi,%rsi
  sub    %rdi,%rax
  nopl   0x0(%rax)
L420:
  movsd  (%rsi,%rdx,1),%xmm0
  addsd  0x10(%rax,%rdx,1),%xmm0
  add    $0x8,%rdx
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x8(%rdx)
  cmp    %rdx,%rcx
  jne    L420
  jmp    L533
```

tool_calls: name: parse_data
arguments: tag: D181
type_guessed: f64[2]
name: parse_data
arguments: tag: D204
type_guessed: byte[8]
name: parse_data
arguments: tag: D84
type_guessed: f64[2]
name: parse_data
arguments: tag: D235
type_guessed: f64[2]

tool: {"D181": [0.25,0.25]}

tool: {"D204": [0x55,0x55,0x55,0x55,0x55,0x55,0xd5,0x3f]}

tool: {"D84": [0.5,0.5]}

tool: {"D235": [1.0,1.0]}

assistant: ```c
void a2b_ord2(int nx, int ny, const double *qin, const double *edge_w, const double *edge_e, const double *edge_s, const double *edge_n, double *qout, int on_west_edge, int on_east_edge, int on_south_edge, int on_north_edge) {
  int nxp, nyp, i, j;
  int istart, iend, jstart, jend;
  double *q1, *q2;
  const double r3 = 1. / 3.;
  nxp = nx + 1;
  nyp = ny + 1;
  q1 = (double *)malloc((nx + 2) * sizeof(double));
  q2 = (double *)malloc((ny + 2) * sizeof(double));
  if (on_west_edge)
    istart = 1;
  else
    istart = 0;
  if (on_east_edge)
    iend = nx;
  else
    iend = nxp;
  if (on_south_edge)
    jstart = 1;
  else
    jstart = 0;
  if (on_north_edge)
    jend = ny;
  else
    jend = nyp;
  for (j = jstart; j < jend; j++)
    for (i = istart; i < iend; i++) {
      qout[j * nxp + i] = 0.25 * (qin[j * (nx + 2) + i] + qin[j * (nx + 2) + i + 1] + qin[(j + 1) * (nx + 2) + i] + qin[(j + 1) * (nx + 2) + i + 1]);
    }
  if (on_west_edge && on_south_edge)
    qout[0] = r3 * (qin[1 * (nx + 2) + 1] + qin[1 * (nx + 2)] + qin[1]);
  if (on_east_edge && on_south_edge)
    qout[nx] = r3 * (qin[1 * (nx + 2) + nx] + qin[nx] + qin[1 * (nx + 2) + nxp]);
  if (on_east_edge && on_north_edge)
    qout[ny * nxp + nx] = r3 * (qin[ny * (nx + 2) + nx] + qin[ny * (nx + 2) + nxp] + qin[nyp * (nx + 2) + nx]);
  if (on_west_edge && on_north_edge)
    qout[ny * nxp] = r3 * (qin[ny * (nx + 2) + 1] + qin[ny * (nx + 2)] + qin[nyp * (nx + 2) + 1]);
  if (on_west_edge) {
    for (j = jstart; j <= jend; j++) {
      q2[j] = 0.5 * (qin[j * (nx + 2)] + qin[j * (nx + 2) + 1]);
    }
    for (j = jstart; j < jend; j++) {
      qout[j * nxp] = edge_w[j] * q2[j] + (1 - edge_w[j]) * q2[j + 1];
    }
  }
  if (on_east_edge) {
    for (j = jstart; j <= jend; j++) {
      q2[j] = 0.5 * (qin[j * (nx + 2) + nx] + qin[j * (nx + 2) + nxp]);
    }
    for (j = jstart; j < jend; j++) {
      qout[j * nxp + nx] = edge_e[j] * q2[j] + (1 - edge_e[j]) * q2[j + 1];
    }
  }
  if (on_south_edge) {
    for (i = istart; i <= iend; i++) {
      q1[i] = 0.5 * (qin[i] + qin[(nx + 2) + i]);
    }
    for (i = istart; i < iend; i++) {
      qout[i] = edge_s[i] * q1[i] + (1 - edge_s[i]) * q1[i + 1];
    }
  }
  if (on_north_edge) {
    for (i = istart; i <= iend; i++) {
      q1[i] = 0.5 * (qin[ny * (nx + 2) + i] + qin[nyp * (nx + 2) + i]);
    }
    for (i = istart; i < iend; i++) {
      qout[ny * nxp + i] = edge_n[i] * q1[i] + (1 - edge_n[i]) * q1[i + 1];
    }
  }
  free(q1);
  free(q2);
}
```