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

```asm
<compute_cell_geometry>:
  endbr64
  push   %r15
  pxor   %xmm0,%xmm0
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x198,%rsp
  mov    %rcx,0x38(%rsp)
  mov    0x1e0(%rsp),%rcx
  mov    0x1d0(%rsp),%rax
  mov    %rdx,0x70(%rsp)
  mov    %rcx,0x78(%rsp)
  mov    0x1e8(%rsp),%rcx
  mov    %rax,0xa0(%rsp)
  movslq 0x1d8(%rsp),%rax
  mov    %rcx,0x68(%rsp)
  mov    0x1f0(%rsp),%rcx
  mov    %r8,0x80(%rsp)
  mov    %rcx,0x88(%rsp)
  mov    0x1f8(%rsp),%rcx
  mov    %r9,0x8(%rsp)
  mov    %rcx,0xa8(%rsp)
  mov    %fs:0x28,%rdx
  mov    %rdx,0x188(%rsp)
  xor    %edx,%edx
  movaps %xmm0,0x170(%rsp)
  movq   $0x0,0x180(%rsp)
  test   %eax,%eax
  jle    L590
  mov    %rax,0x98(%rsp)
  lea    -0x1(%rdi),%eax
  mov    %edi,%r13d
  mov    %edi,%ebx
  lea    0x8(,%rax,8),%rax
  and    $0xfffffffe,%r13d
  test   %edi,%edi
  mov    %rsi,%rbp
  mov    %rax,0x58(%rsp)
  mov    $0x1,%eax
  mov    %r13d,%r15d
  movq   $0x0,0x48(%rsp)
  cmovg  %edi,%eax
  mov    %eax,0x90(%rsp)
  and    $0xfffffffe,%eax
  mov    %eax,0x94(%rsp)
L499:
  test   %ebx,%ebx
  jle    L81
  mov    0x58(%rsp),%r14
  lea    0x130(%rsp),%rdi
  xor    %esi,%esi
  mov    %r14,%rdx
  call   <memset@plt>
  xor    %esi,%esi
  lea    0x150(%rsp),%rdi
  mov    %r14,%rdx
  call   <memset@plt>
  mov    0x78(%rsp),%rax
  mov    0x48(%rsp),%rsi
  mov    (%rax,%rsi,4),%ecx
  mov    0x4(%rax,%rsi,4),%eax
  cmp    %eax,%ecx
  jge    L686
  lea    -0x1(%rax),%r8d
  lea    0x1(%rcx),%edx
  cmp    %edx,%r8d
  jle    L481
  lea    0x2(%rcx),%edx
  mov    0x68(%rsp),%r10
  xor    %r11d,%r11d
  xor    %r12d,%r12d
  movsd  0x130(%rsp),%xmm0
  mov    0xa0(%rsp),%r9
  movslq %edx,%rdx
  movsd  0x138(%rsp),%xmm2
  movsd  0x140(%rsp),%xmm1
  jmp    L715
L432:
  addsd  0x8(%r9,%r11,1),%xmm1
  addsd  0x8(%r9,%r13,1),%xmm1
  mov    $0x1,%r11d
  mov    $0x1,%r12d
L335:
  movslq %edx,%rdi
  add    $0x2,%rdx
  lea    -0x1(%rdx),%esi
  cmp    %esi,%r8d
  jle    L361
L715:
  mov    -0x8(%r10,%rdx,4),%esi
  lea    (%rsi,%rsi,2),%edi
  mov    -0x4(%r10,%rdx,4),%esi
  movslq %edi,%r13
  lea    (%rsi,%rsi,2),%esi
  addsd  (%r9,%r13,8),%xmm0
  movslq %esi,%r13
  addsd  (%r9,%r13,8),%xmm0
  cmp    $0x1,%ebx
  jle    L335
  add    $0x1,%edi
  add    $0x1,%esi
  movslq %edi,%rdi
  movslq %esi,%rsi
  addsd  (%r9,%rdi,8),%xmm2
  lea    0x0(,%rdi,8),%r11
  addsd  (%r9,%rsi,8),%xmm2
  lea    0x0(,%rsi,8),%r13
  cmp    $0x2,%ebx
  jne    L432
  movslq %edx,%rdi
  add    $0x2,%rdx
  mov    $0x1,%r11d
  lea    -0x1(%rdx),%esi
  cmp    %esi,%r8d
  jg     L715
L361:
  movsd  %xmm0,0x130(%rsp)
  test   %r11b,%r11b
  je     L53
  movsd  %xmm2,0x138(%rsp)
L53:
  test   %r12b,%r12b
  je     L645
  movsd  %xmm1,0x140(%rsp)
L645:
  mov    0xa0(%rsp),%r8
  mov    0x68(%rsp),%r9
L169:
  movslq (%r9,%rdi,4),%rsi
  lea    (%rsi,%rsi,2),%edx
  cmp    $0x1,%ebx
  je     L291
  lea    (%rsi,%rsi,2),%rsi
  mov    %r15d,%r10d
  movupd (%r8,%rsi,8),%xmm0
  addpd  0x130(%rsp),%xmm0
  movaps %xmm0,0x130(%rsp)
  cmp    %r15d,%ebx
  je     L722
L573:
  add    %r10d,%edx
  movslq %r10d,%rsi
  movslq %edx,%rdx
  movsd  (%r8,%rdx,8),%xmm0
  addsd  0x130(%rsp,%rsi,8),%xmm0
  movsd  %xmm0,0x130(%rsp,%rsi,8)
L722:
  add    $0x1,%rdi
  cmp    %edi,%eax
  jg     L169
L686:
  mov    %eax,%edx
  pxor   %xmm2,%xmm2
  sub    %ecx,%edx
  cvtsi2sd %edx,%xmm2
  cmp    $0x1,%ebx
  jle    L519
  movapd 0x130(%rsp),%xmm0
  movapd %xmm2,%xmm1
  mov    0x94(%rsp),%esi
  unpcklpd %xmm1,%xmm1
  divpd  %xmm1,%xmm0
  movslq %esi,%rdx
  movaps %xmm0,0x130(%rsp)
  cmp    %esi,0x90(%rsp)
  je     L736
L762:
  movsd  0x130(%rsp,%rdx,8),%xmm0
  divsd  %xmm2,%xmm0
  movsd  %xmm0,0x130(%rsp,%rdx,8)
L736:
  cmp    %eax,%ecx
  jl     L708
  movq   $0x0,0x28(%rsp)
  jmp    L778
L81:
  mov    0x78(%rsp),%rax
  mov    0x48(%rsp),%rsi
  mov    (%rax,%rsi,4),%ecx
  cmp    0x4(%rax,%rsi,4),%ecx
  jge    L644
L708:
  movq   $0x0,0x28(%rsp)
  movslq %ecx,%rax
  mov    %rbp,%r12
  mov    %ebx,%ebp
  mov    %rax,0x60(%rsp)
  cs nopw 0x0(%rax,%rax,1)
L434:
  test   %ebp,%ebp
  jle    L62
  mov    0x58(%rsp),%rbx
  lea    0xb0(%rsp),%rdi
  xor    %esi,%esi
  mov    %rbx,%rdx
  call   <memset@plt>
  mov    %rbx,%rdx
  lea    0x170(%rsp),%rdi
  xor    %esi,%esi
  call   <memset@plt>
  mov    0x60(%rsp),%rcx
  mov    0x68(%rsp),%rax
  mov    0x70(%rsp),%rbx
  movslq (%rax,%rcx,4),%rax
  mov    (%rbx,%rax,4),%r8d
  mov    %rax,%rcx
  lea    0x4(%rbx,%rax,4),%rax
  mov    %rax,0x40(%rsp)
  mov    (%rax),%eax
  cmp    %r8d,%eax
  jle    L163
  lea    -0x1(%rax),%r10d
  lea    0x1(%r8),%edx
  cmp    %edx,%r10d
  jle    L749
  lea    0x2(%r8),%edx
  mov    0x38(%rsp),%r9
  xor    %ebx,%ebx
  xor    %r13d,%r13d
  movsd  0xb0(%rsp),%xmm0
  movslq %edx,%rdx
  movsd  0xb8(%rsp),%xmm1
  movsd  0xc0(%rsp),%xmm2
  jmp    L127
  nop
L225:
  addsd  0x8(%r12,%r11,1),%xmm2
  mov    $0x1,%r13d
  addsd  0x8(%r12,%rbx,1),%xmm2
  mov    $0x1,%ebx
L624:
  movslq %edx,%rsi
  add    $0x2,%rdx
  lea    -0x1(%rdx),%edi
  cmp    %r10d,%edi
  jge    L450
L127:
  mov    -0x8(%r9,%rdx,4),%esi
  lea    (%rsi,%rsi,2),%edi
  mov    -0x4(%r9,%rdx,4),%esi
  movslq %edi,%r11
  lea    (%rsi,%rsi,2),%esi
  addsd  (%r12,%r11,8),%xmm0
  movslq %esi,%r11
  addsd  (%r12,%r11,8),%xmm0
  cmp    $0x1,%ebp
  jle    L624
  add    $0x1,%edi
  add    $0x1,%esi
  movslq %edi,%rdi
  movslq %esi,%rsi
  addsd  (%r12,%rdi,8),%xmm1
  lea    0x0(,%rdi,8),%r11
  addsd  (%r12,%rsi,8),%xmm1
  lea    0x0(,%rsi,8),%rbx
  cmp    $0x2,%ebp
  jne    L225
  movslq %edx,%rsi
  add    $0x2,%rdx
  mov    $0x1,%ebx
  lea    -0x1(%rdx),%edi
  cmp    %r10d,%edi
  jl     L127
L450:
  movsd  %xmm0,0xb0(%rsp)
  test   %bl,%bl
  je     L31
  movsd  %xmm1,0xb8(%rsp)
L31:
  test   %r13b,%r13b
  je     L18
  movsd  %xmm2,0xc0(%rsp)
L18:
  mov    0x38(%rsp),%r9
  nopl   0x0(%rax)
L300:
  movslq (%r9,%rsi,4),%rdi
  lea    (%rdi,%rdi,2),%edx
  cmp    $0x1,%ebp
  je     L507
  lea    (%rdi,%rdi,2),%rdi
  mov    %r15d,%r10d
  movupd (%r12,%rdi,8),%xmm0
  addpd  0xb0(%rsp),%xmm0
  movaps %xmm0,0xb0(%rsp)
  cmp    %r15d,%ebp
  je     L167
L145:
  add    %r10d,%edx
  movslq %r10d,%rdi
  movslq %edx,%rdx
  movsd  (%r12,%rdx,8),%xmm0
  addsd  0xb0(%rsp,%rdi,8),%xmm0
  movsd  %xmm0,0xb0(%rsp,%rdi,8)
L167:
  add    $0x1,%rsi
  cmp    %esi,%eax
  jg     L300
  test   %ebp,%ebp
  jle    L423
L163:
  mov    %eax,%edx
  pxor   %xmm2,%xmm2
  sub    %r8d,%edx
  cvtsi2sd %edx,%xmm2
  cmp    $0x1,%ebp
  je     L538
  movapd 0xb0(%rsp),%xmm0
  movapd %xmm2,%xmm1
  movslq %r15d,%rdx
  unpcklpd %xmm1,%xmm1
  divpd  %xmm1,%xmm0
  movaps %xmm0,0xb0(%rsp)
  cmp    %r15d,%ebp
  je     L425
L521:
  movsd  0xb0(%rsp,%rdx,8),%xmm0
  mov    0x38(%rsp),%rbx
  divsd  %xmm2,%xmm0
  movsd  %xmm0,0xb0(%rsp,%rdx,8)
  movslq %eax,%rdx
  movslq -0x4(%rbx,%rdx,4),%rdx
  lea    (%rdx,%rdx,2),%edi
  cmp    $0x1,%ebp
  je     L673
  lea    (%rdx,%rdx,2),%rdx
  movupd (%r12,%rdx,8),%xmm0
  subpd  0xb0(%rsp),%xmm0
  movaps %xmm0,0xd0(%rsp)
  cmp    %r15d,%ebp
  je     L698
  mov    %r15d,%edx
L597:
  movslq %edx,%rsi
  add    %edi,%edx
  movslq %edx,%rdx
  movsd  (%r12,%rdx,8),%xmm0
  subsd  0xb0(%rsp,%rsi,8),%xmm0
  movsd  %xmm0,0xd0(%rsp,%rsi,8)
L698:
  cmp    %r8d,%eax
  jg     L423
  xchg   %ax,%ax
L182:
  mov    0x78(%rsp),%rcx
  mov    0x48(%rsp),%rsi
  addq   $0x1,0x60(%rsp)
  mov    0x60(%rsp),%rax
  cmp    %eax,0x4(%rcx,%rsi,4)
  jg     L434
  mov    %ebp,%ebx
  mov    %r12,%rbp
L778:
  test   %ebx,%ebx
  jle    L659
  mov    0x48(%rsp),%rax
  lea    (%rax,%rax,2),%edx
  cmp    $0x1,%ebx
  je     L527
  movsd  0x28(%rsp),%xmm1
  mov    0x88(%rsp),%rcx
  lea    (%rax,%rax,2),%rax
  movapd 0x150(%rsp),%xmm0
  unpcklpd %xmm1,%xmm1
  divpd  %xmm1,%xmm0
  addpd  0x130(%rsp),%xmm0
  movups %xmm0,(%rcx,%rax,8)
  movslq %r15d,%rax
  cmp    %r15d,%ebx
  je     L659
L132:
  movsd  0x150(%rsp,%rax,8),%xmm0
  divsd  0x28(%rsp),%xmm0
  add    %eax,%edx
  addsd  0x130(%rsp,%rax,8),%xmm0
  mov    0x88(%rsp),%rax
  movslq %edx,%rdx
  movsd  %xmm0,(%rax,%rdx,8)
L659:
  mov    0x48(%rsp),%rax
  mov    0xa8(%rsp),%rcx
  movsd  0x28(%rsp),%xmm5
  movsd  %xmm5,(%rcx,%rax,8)
  add    $0x1,%rax
  mov    %rax,0x48(%rsp)
  cmp    0x98(%rsp),%rax
  jne    L499
L590:
  mov    0x188(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L700
  add    $0x198,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L62:
  mov    0x68(%rsp),%rax
  mov    0x60(%rsp),%rsi
  mov    0x70(%rsp),%rbx
  movslq (%rax,%rsi,4),%rax
  mov    (%rbx,%rax,4),%r8d
  mov    %rax,%rcx
  lea    0x4(%rbx,%rax,4),%rax
  mov    %rax,0x40(%rsp)
  cmp    (%rax),%r8d
  jge    L182
L423:
  lea    (%rcx,%rcx,1),%eax
  lea    0xf0(%rsp),%r14
  lea    (%rax,%rcx,1),%ebx
  mov    0x80(%rsp),%rcx
  cltq
  lea    0xd0(%rsp),%r13
  mov    %ebx,0x24(%rsp)
  lea    (%rcx,%rax,4),%rax
  mov    %rax,0x50(%rsp)
  movslq %r8d,%rax
  mov    %rax,(%rsp)
  movslq %ebx,%rax
  mov    0x8(%rsp),%rbx
  lea    (%rbx,%rax,8),%rax
  lea    0x110(%rsp),%rbx
  mov    %rax,0x30(%rsp)
  mov    %rbx,%rax
  mov    %ebp,%ebx
  mov    %rax,%rbp
  jmp    L231
  nopw   0x0(%rax,%rax,1)
L212:
  movapd D58(%rip),%xmm0
  pxor   %xmm5,%xmm5
  movapd 0xb0(%rsp),%xmm1
  mulpd  0x110(%rsp),%xmm0
  subpd  0x130(%rsp),%xmm1
  mulpd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  unpckhpd %xmm1,%xmm1
  addsd  %xmm5,%xmm0
  addsd  %xmm1,%xmm0
  cmp    %r15d,%ebx
  je     L596
  movslq %r15d,%rax
L676:
  movsd  D58(%rip),%xmm2
  mulsd  0x110(%rsp,%rax,8),%xmm2
  movsd  0xb0(%rsp,%rax,8),%xmm1
  subsd  0x130(%rsp,%rax,8),%xmm1
  mulsd  %xmm2,%xmm1
  addsd  %xmm1,%xmm0
  cmp    $0x1,%ebx
  je     L628
  mov    0x30(%rsp),%rax
  pxor   %xmm4,%xmm4
  movapd 0x110(%rsp),%xmm2
  movupd (%rax),%xmm3
  mulpd  %xmm3,%xmm2
  movaps %xmm3,0x10(%rsp)
  movapd %xmm2,%xmm1
  unpckhpd %xmm2,%xmm2
  addsd  %xmm4,%xmm1
  addsd  %xmm2,%xmm1
  cmp    %r15d,%ebx
  je     L537
  movslq %r15d,%rax
L427:
  mov    0x24(%rsp),%ecx
  lea    (%rcx,%rax,1),%edx
  mov    0x8(%rsp),%rcx
  movslq %edx,%rdx
  movsd  (%rcx,%rdx,8),%xmm2
  mulsd  0x110(%rsp,%rax,8),%xmm2
  addsd  %xmm2,%xmm1
L537:
  pxor   %xmm6,%xmm6
  comisd %xmm1,%xmm6
  jbe    L417
  xorpd  D113(%rip),%xmm0
L417:
  mov    0x50(%rsp),%rax
  mov    0x48(%rsp),%ecx
  cmp    %ecx,(%rax)
  je     L526
  movsd  0x28(%rsp),%xmm7
  movapd %xmm0,%xmm1
  xorpd  D113(%rip),%xmm1
  subsd  %xmm0,%xmm7
  movsd  %xmm7,0x28(%rsp)
  cmp    $0x1,%ebx
  je     L491
L439:
  movapd 0xf0(%rsp),%xmm0
  addpd  0xd0(%rsp),%xmm0
  mulpd  D26(%rip),%xmm0
  addpd  0xb0(%rsp),%xmm0
  movaps %xmm0,0x170(%rsp)
  cmp    %r15d,%ebx
  je     L171
  mulsd  D31(%rip),%xmm1
  movslq %r15d,%rax
  movsd  0xf0(%rsp,%rax,8),%xmm0
  mulsd  D75(%rip),%xmm1
  addsd  0xd0(%rsp,%rax,8),%xmm0
  mulsd  D26(%rip),%xmm0
  addsd  0xb0(%rsp,%rax,8),%xmm0
  movsd  %xmm0,0x170(%rsp,%rax,8)
  movapd %xmm1,%xmm2
  movslq %r15d,%rax
  movapd 0x170(%rsp),%xmm0
  subpd  0x130(%rsp),%xmm0
  unpcklpd %xmm2,%xmm2
  mulpd  %xmm2,%xmm0
  addpd  0x150(%rsp),%xmm0
  movaps %xmm0,0x150(%rsp)
L503:
  movsd  0x170(%rsp,%rax,8),%xmm0
  subsd  0x130(%rsp,%rax,8),%xmm0
  mulsd  %xmm1,%xmm0
  addsd  0x150(%rsp,%rax,8),%xmm0
  movsd  %xmm0,0x150(%rsp,%rax,8)
L669:
  mov    0x58(%rsp),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <memcpy@plt>
L140:
  mov    0x40(%rsp),%rcx
  addq   $0x1,(%rsp)
  mov    (%rsp),%rax
  cmp    %eax,(%rcx)
  jle    L165
L231:
  mov    0x38(%rsp),%rax
  mov    (%rsp),%rcx
  movslq (%rax,%rcx,4),%rdx
  test   %ebx,%ebx
  jle    L240
  lea    (%rdx,%rdx,2),%eax
  cmp    $0x1,%ebx
  je     L16
  lea    (%rdx,%rdx,2),%rdx
  mov    %r15d,%esi
  movupd (%r12,%rdx,8),%xmm0
  subpd  0xb0(%rsp),%xmm0
  movaps %xmm0,0xf0(%rsp)
  cmp    %r15d,%ebx
  je     L382
L559:
  add    %esi,%eax
  movslq %esi,%rdx
  mov    %r13,%rdi
  mov    %r14,%rsi
  cltq
  movsd  (%r12,%rax,8),%xmm0
  xor    %eax,%eax
  subsd  0xb0(%rsp,%rdx,8),%xmm0
  movsd  %xmm0,0xf0(%rsp,%rdx,8)
  mov    %rbp,%rdx
  call   <cross@plt>
  cmp    $0x1,%ebx
  jne    L212
  pxor   %xmm0,%xmm0
  xor    %eax,%eax
  jmp    L676
  nopl   (%rax)
L628:
  pxor   %xmm1,%xmm1
  xor    %eax,%eax
  jmp    L427
  nopl   0x0(%rax,%rax,1)
L382:
  mov    %rbp,%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <cross@plt>
  movapd D58(%rip),%xmm0
  pxor   %xmm3,%xmm3
  movapd 0xb0(%rsp),%xmm1
  mulpd  0x110(%rsp),%xmm0
  subpd  0x130(%rsp),%xmm1
  mulpd  %xmm0,%xmm1
  movapd %xmm1,%xmm0
  unpckhpd %xmm1,%xmm1
  addsd  %xmm3,%xmm0
  addsd  %xmm1,%xmm0
L596:
  mov    0x30(%rsp),%rax
  pxor   %xmm6,%xmm6
  movapd 0x110(%rsp),%xmm2
  movupd (%rax),%xmm7
  mulpd  %xmm7,%xmm2
  movaps %xmm7,0x10(%rsp)
  movapd %xmm2,%xmm1
  unpckhpd %xmm2,%xmm2
  addsd  %xmm6,%xmm1
  addsd  %xmm2,%xmm1
  jmp    L537
  nopw   0x0(%rax,%rax,1)
L171:
  mulsd  D31(%rip),%xmm1
  subpd  0x130(%rsp),%xmm0
  mulsd  D75(%rip),%xmm1
  unpcklpd %xmm1,%xmm1
  mulpd  %xmm1,%xmm0
  addpd  0x150(%rsp),%xmm0
  movaps %xmm0,0x150(%rsp)
  jmp    L669
  nopw   0x0(%rax,%rax,1)
L526:
  movsd  0x28(%rsp),%xmm4
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm4
  movsd  %xmm4,0x28(%rsp)
  cmp    $0x1,%ebx
  jne    L439
L491:
  movsd  0xf0(%rsp),%xmm0
  mulsd  D31(%rip),%xmm1
  xor    %eax,%eax
  addsd  0xd0(%rsp),%xmm0
  mulsd  D26(%rip),%xmm0
  addsd  0xb0(%rsp),%xmm0
  mulsd  D75(%rip),%xmm1
  movsd  %xmm0,0x170(%rsp)
  jmp    L503
L240:
  mov    %r14,%rsi
  mov    %rbp,%rdx
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <cross@plt>
  mov    0x50(%rsp),%rax
  mov    0x48(%rsp),%esi
  cmp    %esi,(%rax)
  jne    L140
  pxor   %xmm5,%xmm5
  addsd  0x28(%rsp),%xmm5
  movsd  %xmm5,0x28(%rsp)
  jmp    L140
  cs nopw 0x0(%rax,%rax,1)
L165:
  mov    %ebx,%ebp
  jmp    L182
  nopw   0x0(%rax,%rax,1)
L16:
  xor    %esi,%esi
  jmp    L559
  nopw   0x0(%rax,%rax,1)
L673:
  xor    %edx,%edx
  jmp    L597
  nopw   0x0(%rax,%rax,1)
L425:
  mov    0x38(%rsp),%rbx
  movslq %eax,%rdx
  movslq -0x4(%rbx,%rdx,4),%rdx
  lea    (%rdx,%rdx,2),%rdx
  movupd (%r12,%rdx,8),%xmm0
  subpd  0xb0(%rsp),%xmm0
  movaps %xmm0,0xd0(%rsp)
  jmp    L698
  nopl   (%rax)
L507:
  xor    %r10d,%r10d
  jmp    L145
L538:
  xor    %edx,%edx
  jmp    L521
L749:
  movslq %r8d,%rsi
  jmp    L18
L291:
  xor    %r10d,%r10d
  jmp    L573
L644:
  movq   $0x0,0x28(%rsp)
  jmp    L659
L481:
  movslq %ecx,%rdi
  jmp    L645
L519:
  xor    %edx,%edx
  jmp    L762
L527:
  xor    %eax,%eax
  jmp    L132
L700:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D58
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D113
data_type: f32[4]
name: extract_symbolic_data
arguments: data_label: D26
data_type: byte[16]
name: extract_symbolic_data
arguments: data_label: D31
data_type: f32[2]
name: extract_symbolic_data
arguments: data_label: D75
data_type: f32[2]

tool: {"D58": [0x55,0x55,0x55,0x55,0x55,0x55,0xc5,0x3f,0x55,0x55,0x55,0x55,0x55,0x55,0xc5,0x3f]}

tool: {"D113": [0.0,-0.0,0.0,0.0]}

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

tool: {"D31": [0.0,2.125]}

tool: {"D75": [0.0,1.625]}

assistant: ```c
void compute_cell_geometry(int ndims, double *coords, int *nodepos, int *facenodes, int *neighbors, double *fnormals, double *fcentroids, int ncells, int *facepos, int *cellfaces, double *ccentroids, double *cvolumes) {
  int i, k, f, c;
  int face, node;
  double x[3];
  double u[3];
  double v[3];
  double w[3];
  double xcell[3];
  double ccell[3];
  double cface[3] = {0};
  int num_faces;
  double volume;
  double tet_volume, subnormal_sign;
  double twothirds = 0.666666666666666666666666666667;
#pragma omp parallel for default(none) private(i, k, f, c, face, node, x, u, v, w, xcell, ccell, cface, num_faces, volume, tet_volume, subnormal_sign) shared(coords, nodepos, facenodes, neighbors, fnormals, fcentroids, facepos, cellfaces, ccentroids, cvolumes) firstprivate(ncells, ndims, twothirds)
  for (c = 0; c < ncells; ++c) {
    for (i = 0; i < ndims; ++i)
      xcell[i] = 0.0;
    for (i = 0; i < ndims; ++i)
      ccell[i] = 0.0;
    for (f = facepos[c]; f < facepos[c + 1]; ++f) {
      face = cellfaces[f];
      for (i = 0; i < ndims; ++i)
        xcell[i] += fcentroids[3 * face + i];
    }
    num_faces = facepos[c + 1] - facepos[c];
    for (i = 0; i < ndims; ++i)
      xcell[i] /= num_faces;
    volume = 0;
    for (f = facepos[c]; f < facepos[c + 1]; ++f) {
      int num_face_nodes;
      for (i = 0; i < ndims; ++i)
        x[i] = 0.0;
      for (i = 0; i < ndims; ++i)
        cface[i] = 0.0;
      face = cellfaces[f];
      for (k = nodepos[face]; k < nodepos[face + 1]; ++k) {
        node = facenodes[k];
        for (i = 0; i < ndims; ++i)
          x[i] += coords[3 * node + i];
      }
      num_face_nodes = nodepos[face + 1] - nodepos[face];
      for (i = 0; i < ndims; ++i)
        x[i] /= num_face_nodes;
      node = facenodes[nodepos[face + 1] - 1];
      for (i = 0; i < ndims; ++i)
        u[i] = coords[3 * node + i] - x[i];
      for (k = nodepos[face]; k < nodepos[face + 1]; ++k) {
        node = facenodes[k];
        for (i = 0; i < ndims; ++i)
          v[i] = coords[3 * node + i] - x[i];
        cross(u, v, w);
        tet_volume = 0;
        for (i = 0; i < ndims; ++i) {
          tet_volume += 0.5 / 3 * w[i] * (x[i] - xcell[i]);
        }
        subnormal_sign = 0.0;
        for (i = 0; i < ndims; ++i) {
          subnormal_sign += w[i] * fnormals[3 * face + i];
        }
        if (subnormal_sign < 0) {
          tet_volume *= -1.0;
        }
        if (!(neighbors[2 * face + 0] == c)) {
          tet_volume *= -1.0;
        }
        volume += tet_volume;
        for (i = 0; i < ndims; ++i)
          cface[i] = (x[i] + (twothirds)*0.5 * (u[i] + v[i]));
        for (i = 0; i < ndims; ++i)
          ccell[i] += tet_volume * 3 / 4.0 * (cface[i] - xcell[i]);
        for (i = 0; i < ndims; ++i)
          u[i] = v[i];
      }
    }
    for (i = 0; i < ndims; ++i)
      ccentroids[3 * c + i] = xcell[i] + ccell[i] / volume;
    cvolumes[c] = volume;
  }
}
```