int CheckIfElecHop(int xx, int yy, int zz, int *Xsource, int *Ysource,
                   int *Zsource, int *Xdrain, int *Ydrain, int *Zdrain,
                   int *TrackX, int *TrackY, int *TrackZ,
                   long double *TotalVelX, long double *TotalVelY,
                   long double *TotalVelZ, const int SLength, const int SWidth,
                   const int SHeight, const int EndX, const int EndY,
                   const int EndZ, int *NumAvgVel, long double *TimeTrack1,
                   long double t, double SiteDistance, int *nc, int *ElecExit,
                   const int PeriodicX, const int PeriodicY,
                   const int PeriodicZ) {
  long double TrackX2 = (long double)(*TrackX);
  long double TrackY2 = (long double)(*TrackY);
  long double TrackZ2 = (long double)(*TrackZ);
  long double nc2 = (long double)(*nc);
  long double SiteDistance2 = (long double)SiteDistance;
  if (xx == -1 && PeriodicX != 1) {
    (*Xsource) = *Xsource + 1;
    if (t != *TimeTrack1) {
      (*TotalVelX) = (*TotalVelX) + (TrackX2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelY) = (*TotalVelY) + (TrackY2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelZ) = (*TotalVelZ) + (TrackZ2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
    }
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  } else if (xx == SLength * EndX && EndX != 0) {
    (*Xdrain) = *Xdrain + 1;
    if (t != *TimeTrack1) {
      (*TotalVelX) = (*TotalVelX) + (TrackX2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelY) = (*TotalVelY) + (TrackY2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelZ) = (*TotalVelZ) + (TrackZ2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
    }
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  }
  if (yy == -1 && PeriodicY != 1) {
    (*Ysource) = *Ysource + 1;
    if (t != *TimeTrack1) {
      (*TotalVelX) = (*TotalVelX) + (TrackX2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelY) = (*TotalVelY) + (TrackY2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelZ) = (*TotalVelZ) + (TrackZ2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
    }
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  } else if (yy == SWidth * EndY && EndY != 0) {
    (*Ydrain) = *Ydrain + 1;
    if (t != *TimeTrack1) {
      (*TotalVelX) = (*TotalVelX) + (TrackX2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelY) = (*TotalVelY) + (TrackY2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelZ) = (*TotalVelZ) + (TrackZ2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
    }
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  }
  if (zz == -1 && PeriodicZ != 1) {
    (*Zsource) = *Zsource + 1;
    if (t != *TimeTrack1) {
      (*TotalVelX) = (*TotalVelX) + (TrackX2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelY) = (*TotalVelY) + (TrackY2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelZ) = (*TotalVelZ) + (TrackZ2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
    }
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  } else if (zz == SHeight * EndZ && EndZ != 0) {
    (*Zdrain) = *Zdrain + 1;
    if (t != *TimeTrack1) {
      (*TotalVelX) = (*TotalVelX) + (TrackX2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelY) = (*TotalVelY) + (TrackY2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
      (*TotalVelZ) = (*TotalVelZ) + (TrackZ2) * (SiteDistance2) /
                                        ((t - (*TimeTrack1)) * (nc2));
    }
    (*TrackX) = 0;
    (*TrackY) = 0;
    (*TrackZ) = 0;
    (*NumAvgVel) = *NumAvgVel + 1;
    (*TimeTrack1) = t;
    (*ElecExit) = 1;
  }
  if (isnan(*TotalVelX)) {
    printf("ERROR *TotalVelX is nan!\n");
    exit(1);
  }
  return 0;
}


x86 assembly (clang, -O0):
<CheckIfElecHop>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    0xd0(%rbp),%eax
mov    0xc8(%rbp),%eax
mov    0xc0(%rbp),%eax
mov    0xb8(%rbp),%rax
mov    0xb0(%rbp),%rax
fldt   0xa0(%rbp)
mov    0x90(%rbp),%rax
mov    0x88(%rbp),%rax
mov    0x80(%rbp),%eax
mov    0x78(%rbp),%eax
mov    0x70(%rbp),%eax
mov    0x68(%rbp),%eax
mov    0x60(%rbp),%eax
mov    0x58(%rbp),%eax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
fstpt  -0x40(%rbp)
movsd  %xmm0,-0x48(%rbp)
mov    0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xb0(%rbp)
fildl  -0xb0(%rbp)
fstpt  -0x60(%rbp)
mov    0x30(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xac(%rbp)
fildl  -0xac(%rbp)
fstpt  -0x70(%rbp)
mov    0x38(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xa8(%rbp)
fildl  -0xa8(%rbp)
fstpt  -0x80(%rbp)
mov    0xb0(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0xa4(%rbp)
fildl  -0xa4(%rbp)
fstpt  -0x90(%rbp)
fldl   -0x48(%rbp)
fstpt  -0xa0(%rbp)
cmpl   $0xffffffff,-0x4(%rbp)
jne    133e <CheckIfElecHop+0x20e>
cmpl   $0x1,0xc0(%rbp)
je     133e <CheckIfElecHop+0x20e>
mov    -0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fldt   (%rax)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    126d <CheckIfElecHop+0x13d>
jp     126d <CheckIfElecHop+0x13d>
jmp    12f4 <CheckIfElecHop+0x1c4>
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    1459 <CheckIfElecHop+0x329>
mov    -0x4(%rbp),%eax
mov    0x58(%rbp),%ecx
imul   0x70(%rbp),%ecx
cmp    %ecx,%eax
jne    1454 <CheckIfElecHop+0x324>
cmpl   $0x0,0x70(%rbp)
je     1454 <CheckIfElecHop+0x324>
mov    0x10(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fldt   (%rax)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    1388 <CheckIfElecHop+0x258>
jp     1388 <CheckIfElecHop+0x258>
jmp    140f <CheckIfElecHop+0x2df>
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    1459 <CheckIfElecHop+0x329>
cmpl   $0xffffffff,-0x8(%rbp)
jne    156f <CheckIfElecHop+0x43f>
cmpl   $0x1,0xc8(%rbp)
je     156f <CheckIfElecHop+0x43f>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fldt   (%rax)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    149e <CheckIfElecHop+0x36e>
jp     149e <CheckIfElecHop+0x36e>
jmp    1525 <CheckIfElecHop+0x3f5>
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    168a <CheckIfElecHop+0x55a>
mov    -0x8(%rbp),%eax
mov    0x60(%rbp),%ecx
imul   0x78(%rbp),%ecx
cmp    %ecx,%eax
jne    1685 <CheckIfElecHop+0x555>
cmpl   $0x0,0x78(%rbp)
je     1685 <CheckIfElecHop+0x555>
mov    0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fldt   (%rax)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    15b9 <CheckIfElecHop+0x489>
jp     15b9 <CheckIfElecHop+0x489>
jmp    1640 <CheckIfElecHop+0x510>
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    168a <CheckIfElecHop+0x55a>
cmpl   $0xffffffff,-0xc(%rbp)
jne    17a0 <CheckIfElecHop+0x670>
cmpl   $0x1,0xd0(%rbp)
je     17a0 <CheckIfElecHop+0x670>
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fldt   (%rax)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    16cf <CheckIfElecHop+0x59f>
jp     16cf <CheckIfElecHop+0x59f>
jmp    1756 <CheckIfElecHop+0x626>
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    18c1 <CheckIfElecHop+0x791>
mov    -0xc(%rbp),%eax
mov    0x68(%rbp),%ecx
imul   0x80(%rbp),%ecx
cmp    %ecx,%eax
jne    18bc <CheckIfElecHop+0x78c>
cmpl   $0x0,0x80(%rbp)
je     18bc <CheckIfElecHop+0x78c>
mov    0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fldt   (%rax)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    17f0 <CheckIfElecHop+0x6c0>
jp     17f0 <CheckIfElecHop+0x6c0>
jmp    1877 <CheckIfElecHop+0x747>
mov    0x40(%rbp),%rax
fldt   (%rax)
fldt   -0x60(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x48(%rbp),%rax
fldt   (%rax)
fldt   -0x70(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x50(%rbp),%rax
fldt   (%rax)
fldt   -0x80(%rbp)
fldt   -0xa0(%rbp)
fmulp  %st,%st(1)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rcx
fldt   (%rcx)
fsubrp %st,%st(1)
fldt   -0x90(%rbp)
fmulp  %st,%st(1)
fdivrp %st,%st(1)
faddp  %st,%st(1)
fstpt  (%rax)
mov    0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    0x38(%rbp),%rax
movl   $0x0,(%rax)
mov    0x88(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
fldt   -0x40(%rbp)
mov    0x90(%rbp),%rax
fstpt  (%rax)
mov    0xb8(%rbp),%rax
movl   $0x1,(%rax)
jmp    18c1 <CheckIfElecHop+0x791>
mov    0x40(%rbp),%rax
fldt   (%rax)
mov    %rsp,%rax
fstpt  (%rax)
xor    %eax,%eax
call   1040 <isnan@plt>
cmp    $0x0,%eax
je     18f4 <CheckIfElecHop+0x7c4>
lea    0x71d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    $0x1,%edi
call   1050 <exit@plt>
xor    %eax,%eax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<CheckIfElecHop>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    0x118(%rsp),%r10
fldt   0x100(%rsp)
mov    0xf0(%rsp),%rax
mov    0xe8(%rsp),%r11
mov    0xb0(%rsp),%r14
mov    0xa8(%rsp),%rbp
mov    0x98(%rsp),%r15
mov    0x90(%rsp),%r12
mov    0x88(%rsp),%r13
mov    0x0(%r13),%ebx
mov    %ebx,0x14(%rsp)
fildl  0x14(%rsp)
mov    (%r12),%ebx
mov    %ebx,0x18(%rsp)
fildl  0x18(%rsp)
mov    (%r15),%ebx
mov    %ebx,0x1c(%rsp)
mov    0x110(%rsp),%rbx
fildl  0x1c(%rsp)
fstpt  0x24(%rsp)
mov    (%rbx),%ebx
mov    %ebx,0x20(%rsp)
mov    0xa0(%rsp),%rbx
fildl  0x20(%rsp)
movsd  %xmm0,0x30(%rsp)
fldl   0x30(%rsp)
cmp    $0xffffffff,%edi
jne    11df <CheckIfElecHop+0xaf>
cmpl   $0x1,0x120(%rsp)
01
jne    11ff <CheckIfElecHop+0xcf>
mov    0xd0(%rsp),%ecx
test   %ecx,%ecx
je     1270 <CheckIfElecHop+0x140>
imul   0xb8(%rsp),%ecx
cmp    %edi,%ecx
jne    1270 <CheckIfElecHop+0x140>
mov    0x70(%rsp),%rcx
addl   $0x1,(%rcx)
fldt   (%rax)
fucomi %st(5),%st
jne    120a <CheckIfElecHop+0xda>
jnp    1248 <CheckIfElecHop+0x118>
fld    %st(1)
fmul   %st(5),%st
fxch   %st(1)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   (%rbx)
faddp  %st,%st(1)
fstpt  (%rbx)
fld    %st(0)
fmul   %st(3),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   0x0(%rbp)
faddp  %st,%st(1)
fstpt  0x0(%rbp)
fldt   0x24(%rsp)
fmul   %st(1),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   (%r14)
faddp  %st,%st(1)
fstpt  (%r14)
fldz
fstp   %st(0)
movl   $0x0,0x0(%r13)
movl   $0x0,(%r12)
movl   $0x0,(%r15)
addl   $0x1,(%r11)
fld    %st(4)
fstpt  (%rax)
movl   $0x1,(%r10)
cmp    $0xffffffff,%esi
jne    1285 <CheckIfElecHop+0x155>
cmpl   $0x1,0x128(%rsp)
01
je     1285 <CheckIfElecHop+0x155>
addl   $0x1,(%r8)
jmp    12a8 <CheckIfElecHop+0x178>
mov    0xd8(%rsp),%ecx
test   %ecx,%ecx
je     1316 <CheckIfElecHop+0x1e6>
imul   0xc0(%rsp),%ecx
cmp    %esi,%ecx
jne    1316 <CheckIfElecHop+0x1e6>
mov    0x78(%rsp),%rcx
addl   $0x1,(%rcx)
fldt   (%rax)
fucomi %st(5),%st
jne    12b0 <CheckIfElecHop+0x180>
jnp    12ee <CheckIfElecHop+0x1be>
fld    %st(1)
fmul   %st(5),%st
fxch   %st(1)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   (%rbx)
faddp  %st,%st(1)
fstpt  (%rbx)
fld    %st(0)
fmul   %st(3),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   0x0(%rbp)
faddp  %st,%st(1)
fstpt  0x0(%rbp)
fldt   0x24(%rsp)
fmul   %st(1),%st
fldt   (%rax)
fsubr  %st(6),%st
fmul   %st(3),%st
fdivrp %st,%st(1)
fldt   (%r14)
faddp  %st,%st(1)
fstpt  (%r14)
fldz
fstp   %st(0)
movl   $0x0,0x0(%r13)
movl   $0x0,(%r12)
movl   $0x0,(%r15)
addl   $0x1,(%r11)
fld    %st(4)
fstpt  (%rax)
movl   $0x1,(%r10)
cmp    $0xffffffff,%edx
jne    13ec <CheckIfElecHop+0x2bc>
cmpl   $0x1,0x130(%rsp)
01
je     13ec <CheckIfElecHop+0x2bc>
addl   $0x1,(%r9)
fldt   (%rax)
fucomi %st(5),%st
jne    1339 <CheckIfElecHop+0x209>
jnp    1389 <CheckIfElecHop+0x259>
fxch   %st(4)
fmul   %st(1),%st
fxch   %st(4)
fsubr  %st(5),%st
fmul   %st(2),%st
fdivrp %st,%st(4)
fldt   (%rbx)
faddp  %st,%st(4)
fxch   %st(3)
fstpt  (%rbx)
fxch   %st(1)
fmul   %st(2),%st
fldt   (%rax)
fsubr  %st(4),%st
fmul   %st(2),%st
fdivrp %st,%st(1)
fldt   0x0(%rbp)
faddp  %st,%st(1)
fstpt  0x0(%rbp)
fldt   0x24(%rsp)
fmulp  %st,%st(2)
fldt   (%rax)
fsubr  %st(3),%st
fmulp  %st,%st(1)
fdivrp %st,%st(1)
fldt   (%r14)
faddp  %st,%st(1)
fstpt  (%r14)
fldz
fldz
fldz
fldz
fldz
fxch   %st(1)
fxch   %st(4)
fxch   %st(2)
fxch   %st(1)
fstp   %st(2)
fstp   %st(2)
fstp   %st(1)
fstp   %st(1)
fstp   %st(0)
movl   $0x0,0x0(%r13)
movl   $0x0,(%r12)
movl   $0x0,(%r15)
addl   $0x1,(%r11)
fstpt  (%rax)
movl   $0x1,(%r10)
fldz
fldz
fldz
fldz
fldz
fstp   %st(4)
fstp   %st(2)
fstp   %st(0)
fstp   %st(0)
fstp   %st(0)
fldt   (%rbx)
fstpt  (%rsp)
xor    %eax,%eax
call   1040 <isnan@plt>
test   %eax,%eax
jne    142f <CheckIfElecHop+0x2ff>
xor    %eax,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0xe0(%rsp),%ecx
test   %ecx,%ecx
fxch   %st(1)
fxch   %st(3)
je     13c1 <CheckIfElecHop+0x291>
imul   0xc8(%rsp),%ecx
cmp    %edx,%ecx
jne    13c1 <CheckIfElecHop+0x291>
mov    0x80(%rsp),%rcx
addl   $0x1,(%rcx)
fldt   (%rax)
fucomi %st(5),%st
fxch   %st(1)
fxch   %st(4)
fxch   %st(2)
fxch   %st(1)
jne    1339 <CheckIfElecHop+0x209>
jp     1339 <CheckIfElecHop+0x209>
jmp    1389 <CheckIfElecHop+0x259>
lea    0xbca(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%edi
call   1050 <exit@plt>

LLVM IR (-O0):
@.str = [26 x i8] c"ERROR *TotalVelX is nan!\0A\00"
define i32 @CheckIfElecHop(i32 %0, i32 %1, i32 %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8, i32* %9, i32* %10, i32* %11, x86_fp80* %12, x86_fp80* %13, x86_fp80* %14, i32 %15, i32 %16, i32 %17, i32 %18, i32 %19, i32 %20, i32* %21, x86_fp80* %22, x86_fp80 %23, double %24, i32* %25, i32* %26, i32 %27, i32 %28, i32 %29) {
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32*
%35 = alloca i32*
%36 = alloca i32*
%37 = alloca i32*
%38 = alloca i32*
%39 = alloca i32*
%40 = alloca i32*
%41 = alloca i32*
%42 = alloca i32*
%43 = alloca x86_fp80*
%44 = alloca x86_fp80*
%45 = alloca x86_fp80*
%46 = alloca i32
%47 = alloca i32
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
%51 = alloca i32
%52 = alloca i32*
%53 = alloca x86_fp80*
%54 = alloca x86_fp80
%55 = alloca double
%56 = alloca i32*
%57 = alloca i32*
%58 = alloca i32
%59 = alloca i32
%60 = alloca i32
%61 = alloca x86_fp80
%62 = alloca x86_fp80
%63 = alloca x86_fp80
%64 = alloca x86_fp80
%65 = alloca x86_fp80
store i32 %0, i32* %31
store i32 %1, i32* %32
store i32 %2, i32* %33
store i32* %3, i32** %34
store i32* %4, i32** %35
store i32* %5, i32** %36
store i32* %6, i32** %37
store i32* %7, i32** %38
store i32* %8, i32** %39
store i32* %9, i32** %40
store i32* %10, i32** %41
store i32* %11, i32** %42
store x86_fp80* %12, x86_fp80** %43
store x86_fp80* %13, x86_fp80** %44
store x86_fp80* %14, x86_fp80** %45
store i32 %15, i32* %46
store i32 %16, i32* %47
store i32 %17, i32* %48
store i32 %18, i32* %49
store i32 %19, i32* %50
store i32 %20, i32* %51
store i32* %21, i32** %52
store x86_fp80* %22, x86_fp80** %53
store x86_fp80 %23, x86_fp80* %54
store double %24, double* %55
store i32* %25, i32** %56
store i32* %26, i32** %57
store i32 %27, i32* %58
store i32 %28, i32* %59
store i32 %29, i32* %60
%66 = load i32*, i32** %40
%67 = load i32, i32* %66
%68 = sitofp i32 %67 to x86_fp80
store x86_fp80 %68, x86_fp80* %61
%69 = load i32*, i32** %41
%70 = load i32, i32* %69
%71 = sitofp i32 %70 to x86_fp80
store x86_fp80 %71, x86_fp80* %62
%72 = load i32*, i32** %42
%73 = load i32, i32* %72
%74 = sitofp i32 %73 to x86_fp80
store x86_fp80 %74, x86_fp80* %63
%75 = load i32*, i32** %56
%76 = load i32, i32* %75
%77 = sitofp i32 %76 to x86_fp80
store x86_fp80 %77, x86_fp80* %64
%78 = load double, double* %55
%79 = fpext double %78 to x86_fp80
store x86_fp80 %79, x86_fp80* %65
%80 = load i32, i32* %31
%81 = icmp eq i32 %80, -1
br i1 %81, label %82, label %148
82: ; preds = %30
%83 = load i32, i32* %58
%84 = icmp ne i32 %83, 1
br i1 %84, label %85, label %148
85: ; preds = %82
%86 = load i32*, i32** %34
%87 = load i32, i32* %86
%88 = add nsw i32 %87, 1
%89 = load i32*, i32** %34
store i32 %88, i32* %89
%90 = load x86_fp80, x86_fp80* %54
%91 = load x86_fp80*, x86_fp80** %53
%92 = load x86_fp80, x86_fp80* %91
%93 = fcmp une x86_fp80 %90, %92
br i1 %93, label %94, label %137
94: ; preds = %85
%95 = load x86_fp80*, x86_fp80** %43
%96 = load x86_fp80, x86_fp80* %95
%97 = load x86_fp80, x86_fp80* %61
%98 = load x86_fp80, x86_fp80* %65
%99 = fmul x86_fp80 %97, %98
%100 = load x86_fp80, x86_fp80* %54
%101 = load x86_fp80*, x86_fp80** %53
%102 = load x86_fp80, x86_fp80* %101
%103 = fsub x86_fp80 %100, %102
%104 = load x86_fp80, x86_fp80* %64
%105 = fmul x86_fp80 %103, %104
%106 = fdiv x86_fp80 %99, %105
%107 = fadd x86_fp80 %96, %106
%108 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %107, x86_fp80* %108
%109 = load x86_fp80*, x86_fp80** %44
%110 = load x86_fp80, x86_fp80* %109
%111 = load x86_fp80, x86_fp80* %62
%112 = load x86_fp80, x86_fp80* %65
%113 = fmul x86_fp80 %111, %112
%114 = load x86_fp80, x86_fp80* %54
%115 = load x86_fp80*, x86_fp80** %53
%116 = load x86_fp80, x86_fp80* %115
%117 = fsub x86_fp80 %114, %116
%118 = load x86_fp80, x86_fp80* %64
%119 = fmul x86_fp80 %117, %118
%120 = fdiv x86_fp80 %113, %119
%121 = fadd x86_fp80 %110, %120
%122 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %121, x86_fp80* %122
%123 = load x86_fp80*, x86_fp80** %45
%124 = load x86_fp80, x86_fp80* %123
%125 = load x86_fp80, x86_fp80* %63
%126 = load x86_fp80, x86_fp80* %65
%127 = fmul x86_fp80 %125, %126
%128 = load x86_fp80, x86_fp80* %54
%129 = load x86_fp80*, x86_fp80** %53
%130 = load x86_fp80, x86_fp80* %129
%131 = fsub x86_fp80 %128, %130
%132 = load x86_fp80, x86_fp80* %64
%133 = fmul x86_fp80 %131, %132
%134 = fdiv x86_fp80 %127, %133
%135 = fadd x86_fp80 %124, %134
%136 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %135, x86_fp80* %136
br label %137
137: ; preds = %94, %85
%138 = load i32*, i32** %40
store i32 0, i32* %138
%139 = load i32*, i32** %41
store i32 0, i32* %139
%140 = load i32*, i32** %42
store i32 0, i32* %140
%141 = load i32*, i32** %52
%142 = load i32, i32* %141
%143 = add nsw i32 %142, 1
%144 = load i32*, i32** %52
store i32 %143, i32* %144
%145 = load x86_fp80, x86_fp80* %54
%146 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %145, x86_fp80* %146
%147 = load i32*, i32** %57
store i32 1, i32* %147
br label %221
148: ; preds = %82, %30
%149 = load i32, i32* %31
%150 = load i32, i32* %46
%151 = load i32, i32* %49
%152 = mul nsw i32 %150, %151
%153 = icmp eq i32 %149, %152
br i1 %153, label %154, label %220
154: ; preds = %148
%155 = load i32, i32* %49
%156 = icmp ne i32 %155, 0
br i1 %156, label %157, label %220
157: ; preds = %154
%158 = load i32*, i32** %37
%159 = load i32, i32* %158
%160 = add nsw i32 %159, 1
%161 = load i32*, i32** %37
store i32 %160, i32* %161
%162 = load x86_fp80, x86_fp80* %54
%163 = load x86_fp80*, x86_fp80** %53
%164 = load x86_fp80, x86_fp80* %163
%165 = fcmp une x86_fp80 %162, %164
br i1 %165, label %166, label %209
166: ; preds = %157
%167 = load x86_fp80*, x86_fp80** %43
%168 = load x86_fp80, x86_fp80* %167
%169 = load x86_fp80, x86_fp80* %61
%170 = load x86_fp80, x86_fp80* %65
%171 = fmul x86_fp80 %169, %170
%172 = load x86_fp80, x86_fp80* %54
%173 = load x86_fp80*, x86_fp80** %53
%174 = load x86_fp80, x86_fp80* %173
%175 = fsub x86_fp80 %172, %174
%176 = load x86_fp80, x86_fp80* %64
%177 = fmul x86_fp80 %175, %176
%178 = fdiv x86_fp80 %171, %177
%179 = fadd x86_fp80 %168, %178
%180 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %179, x86_fp80* %180
%181 = load x86_fp80*, x86_fp80** %44
%182 = load x86_fp80, x86_fp80* %181
%183 = load x86_fp80, x86_fp80* %62
%184 = load x86_fp80, x86_fp80* %65
%185 = fmul x86_fp80 %183, %184
%186 = load x86_fp80, x86_fp80* %54
%187 = load x86_fp80*, x86_fp80** %53
%188 = load x86_fp80, x86_fp80* %187
%189 = fsub x86_fp80 %186, %188
%190 = load x86_fp80, x86_fp80* %64
%191 = fmul x86_fp80 %189, %190
%192 = fdiv x86_fp80 %185, %191
%193 = fadd x86_fp80 %182, %192
%194 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %193, x86_fp80* %194
%195 = load x86_fp80*, x86_fp80** %45
%196 = load x86_fp80, x86_fp80* %195
%197 = load x86_fp80, x86_fp80* %63
%198 = load x86_fp80, x86_fp80* %65
%199 = fmul x86_fp80 %197, %198
%200 = load x86_fp80, x86_fp80* %54
%201 = load x86_fp80*, x86_fp80** %53
%202 = load x86_fp80, x86_fp80* %201
%203 = fsub x86_fp80 %200, %202
%204 = load x86_fp80, x86_fp80* %64
%205 = fmul x86_fp80 %203, %204
%206 = fdiv x86_fp80 %199, %205
%207 = fadd x86_fp80 %196, %206
%208 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %207, x86_fp80* %208
br label %209
209: ; preds = %166, %157
%210 = load i32*, i32** %40
store i32 0, i32* %210
%211 = load i32*, i32** %41
store i32 0, i32* %211
%212 = load i32*, i32** %42
store i32 0, i32* %212
%213 = load i32*, i32** %52
%214 = load i32, i32* %213
%215 = add nsw i32 %214, 1
%216 = load i32*, i32** %52
store i32 %215, i32* %216
%217 = load x86_fp80, x86_fp80* %54
%218 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %217, x86_fp80* %218
%219 = load i32*, i32** %57
store i32 1, i32* %219
br label %220
220: ; preds = %209, %154, %148
br label %221
221: ; preds = %220, %137
%222 = load i32, i32* %32
%223 = icmp eq i32 %222, -1
br i1 %223, label %224, label %290
224: ; preds = %221
%225 = load i32, i32* %59
%226 = icmp ne i32 %225, 1
br i1 %226, label %227, label %290
227: ; preds = %224
%228 = load i32*, i32** %35
%229 = load i32, i32* %228
%230 = add nsw i32 %229, 1
%231 = load i32*, i32** %35
store i32 %230, i32* %231
%232 = load x86_fp80, x86_fp80* %54
%233 = load x86_fp80*, x86_fp80** %53
%234 = load x86_fp80, x86_fp80* %233
%235 = fcmp une x86_fp80 %232, %234
br i1 %235, label %236, label %279
236: ; preds = %227
%237 = load x86_fp80*, x86_fp80** %43
%238 = load x86_fp80, x86_fp80* %237
%239 = load x86_fp80, x86_fp80* %61
%240 = load x86_fp80, x86_fp80* %65
%241 = fmul x86_fp80 %239, %240
%242 = load x86_fp80, x86_fp80* %54
%243 = load x86_fp80*, x86_fp80** %53
%244 = load x86_fp80, x86_fp80* %243
%245 = fsub x86_fp80 %242, %244
%246 = load x86_fp80, x86_fp80* %64
%247 = fmul x86_fp80 %245, %246
%248 = fdiv x86_fp80 %241, %247
%249 = fadd x86_fp80 %238, %248
%250 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %249, x86_fp80* %250
%251 = load x86_fp80*, x86_fp80** %44
%252 = load x86_fp80, x86_fp80* %251
%253 = load x86_fp80, x86_fp80* %62
%254 = load x86_fp80, x86_fp80* %65
%255 = fmul x86_fp80 %253, %254
%256 = load x86_fp80, x86_fp80* %54
%257 = load x86_fp80*, x86_fp80** %53
%258 = load x86_fp80, x86_fp80* %257
%259 = fsub x86_fp80 %256, %258
%260 = load x86_fp80, x86_fp80* %64
%261 = fmul x86_fp80 %259, %260
%262 = fdiv x86_fp80 %255, %261
%263 = fadd x86_fp80 %252, %262
%264 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %263, x86_fp80* %264
%265 = load x86_fp80*, x86_fp80** %45
%266 = load x86_fp80, x86_fp80* %265
%267 = load x86_fp80, x86_fp80* %63
%268 = load x86_fp80, x86_fp80* %65
%269 = fmul x86_fp80 %267, %268
%270 = load x86_fp80, x86_fp80* %54
%271 = load x86_fp80*, x86_fp80** %53
%272 = load x86_fp80, x86_fp80* %271
%273 = fsub x86_fp80 %270, %272
%274 = load x86_fp80, x86_fp80* %64
%275 = fmul x86_fp80 %273, %274
%276 = fdiv x86_fp80 %269, %275
%277 = fadd x86_fp80 %266, %276
%278 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %277, x86_fp80* %278
br label %279
279: ; preds = %236, %227
%280 = load i32*, i32** %40
store i32 0, i32* %280
%281 = load i32*, i32** %41
store i32 0, i32* %281
%282 = load i32*, i32** %42
store i32 0, i32* %282
%283 = load i32*, i32** %52
%284 = load i32, i32* %283
%285 = add nsw i32 %284, 1
%286 = load i32*, i32** %52
store i32 %285, i32* %286
%287 = load x86_fp80, x86_fp80* %54
%288 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %287, x86_fp80* %288
%289 = load i32*, i32** %57
store i32 1, i32* %289
br label %363
290: ; preds = %224, %221
%291 = load i32, i32* %32
%292 = load i32, i32* %47
%293 = load i32, i32* %50
%294 = mul nsw i32 %292, %293
%295 = icmp eq i32 %291, %294
br i1 %295, label %296, label %362
296: ; preds = %290
%297 = load i32, i32* %50
%298 = icmp ne i32 %297, 0
br i1 %298, label %299, label %362
299: ; preds = %296
%300 = load i32*, i32** %38
%301 = load i32, i32* %300
%302 = add nsw i32 %301, 1
%303 = load i32*, i32** %38
store i32 %302, i32* %303
%304 = load x86_fp80, x86_fp80* %54
%305 = load x86_fp80*, x86_fp80** %53
%306 = load x86_fp80, x86_fp80* %305
%307 = fcmp une x86_fp80 %304, %306
br i1 %307, label %308, label %351
308: ; preds = %299
%309 = load x86_fp80*, x86_fp80** %43
%310 = load x86_fp80, x86_fp80* %309
%311 = load x86_fp80, x86_fp80* %61
%312 = load x86_fp80, x86_fp80* %65
%313 = fmul x86_fp80 %311, %312
%314 = load x86_fp80, x86_fp80* %54
%315 = load x86_fp80*, x86_fp80** %53
%316 = load x86_fp80, x86_fp80* %315
%317 = fsub x86_fp80 %314, %316
%318 = load x86_fp80, x86_fp80* %64
%319 = fmul x86_fp80 %317, %318
%320 = fdiv x86_fp80 %313, %319
%321 = fadd x86_fp80 %310, %320
%322 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %321, x86_fp80* %322
%323 = load x86_fp80*, x86_fp80** %44
%324 = load x86_fp80, x86_fp80* %323
%325 = load x86_fp80, x86_fp80* %62
%326 = load x86_fp80, x86_fp80* %65
%327 = fmul x86_fp80 %325, %326
%328 = load x86_fp80, x86_fp80* %54
%329 = load x86_fp80*, x86_fp80** %53
%330 = load x86_fp80, x86_fp80* %329
%331 = fsub x86_fp80 %328, %330
%332 = load x86_fp80, x86_fp80* %64
%333 = fmul x86_fp80 %331, %332
%334 = fdiv x86_fp80 %327, %333
%335 = fadd x86_fp80 %324, %334
%336 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %335, x86_fp80* %336
%337 = load x86_fp80*, x86_fp80** %45
%338 = load x86_fp80, x86_fp80* %337
%339 = load x86_fp80, x86_fp80* %63
%340 = load x86_fp80, x86_fp80* %65
%341 = fmul x86_fp80 %339, %340
%342 = load x86_fp80, x86_fp80* %54
%343 = load x86_fp80*, x86_fp80** %53
%344 = load x86_fp80, x86_fp80* %343
%345 = fsub x86_fp80 %342, %344
%346 = load x86_fp80, x86_fp80* %64
%347 = fmul x86_fp80 %345, %346
%348 = fdiv x86_fp80 %341, %347
%349 = fadd x86_fp80 %338, %348
%350 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %349, x86_fp80* %350
br label %351
351: ; preds = %308, %299
%352 = load i32*, i32** %40
store i32 0, i32* %352
%353 = load i32*, i32** %41
store i32 0, i32* %353
%354 = load i32*, i32** %42
store i32 0, i32* %354
%355 = load i32*, i32** %52
%356 = load i32, i32* %355
%357 = add nsw i32 %356, 1
%358 = load i32*, i32** %52
store i32 %357, i32* %358
%359 = load x86_fp80, x86_fp80* %54
%360 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %359, x86_fp80* %360
%361 = load i32*, i32** %57
store i32 1, i32* %361
br label %362
362: ; preds = %351, %296, %290
br label %363
363: ; preds = %362, %279
%364 = load i32, i32* %33
%365 = icmp eq i32 %364, -1
br i1 %365, label %366, label %432
366: ; preds = %363
%367 = load i32, i32* %60
%368 = icmp ne i32 %367, 1
br i1 %368, label %369, label %432
369: ; preds = %366
%370 = load i32*, i32** %36
%371 = load i32, i32* %370
%372 = add nsw i32 %371, 1
%373 = load i32*, i32** %36
store i32 %372, i32* %373
%374 = load x86_fp80, x86_fp80* %54
%375 = load x86_fp80*, x86_fp80** %53
%376 = load x86_fp80, x86_fp80* %375
%377 = fcmp une x86_fp80 %374, %376
br i1 %377, label %378, label %421
378: ; preds = %369
%379 = load x86_fp80*, x86_fp80** %43
%380 = load x86_fp80, x86_fp80* %379
%381 = load x86_fp80, x86_fp80* %61
%382 = load x86_fp80, x86_fp80* %65
%383 = fmul x86_fp80 %381, %382
%384 = load x86_fp80, x86_fp80* %54
%385 = load x86_fp80*, x86_fp80** %53
%386 = load x86_fp80, x86_fp80* %385
%387 = fsub x86_fp80 %384, %386
%388 = load x86_fp80, x86_fp80* %64
%389 = fmul x86_fp80 %387, %388
%390 = fdiv x86_fp80 %383, %389
%391 = fadd x86_fp80 %380, %390
%392 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %391, x86_fp80* %392
%393 = load x86_fp80*, x86_fp80** %44
%394 = load x86_fp80, x86_fp80* %393
%395 = load x86_fp80, x86_fp80* %62
%396 = load x86_fp80, x86_fp80* %65
%397 = fmul x86_fp80 %395, %396
%398 = load x86_fp80, x86_fp80* %54
%399 = load x86_fp80*, x86_fp80** %53
%400 = load x86_fp80, x86_fp80* %399
%401 = fsub x86_fp80 %398, %400
%402 = load x86_fp80, x86_fp80* %64
%403 = fmul x86_fp80 %401, %402
%404 = fdiv x86_fp80 %397, %403
%405 = fadd x86_fp80 %394, %404
%406 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %405, x86_fp80* %406
%407 = load x86_fp80*, x86_fp80** %45
%408 = load x86_fp80, x86_fp80* %407
%409 = load x86_fp80, x86_fp80* %63
%410 = load x86_fp80, x86_fp80* %65
%411 = fmul x86_fp80 %409, %410
%412 = load x86_fp80, x86_fp80* %54
%413 = load x86_fp80*, x86_fp80** %53
%414 = load x86_fp80, x86_fp80* %413
%415 = fsub x86_fp80 %412, %414
%416 = load x86_fp80, x86_fp80* %64
%417 = fmul x86_fp80 %415, %416
%418 = fdiv x86_fp80 %411, %417
%419 = fadd x86_fp80 %408, %418
%420 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %419, x86_fp80* %420
br label %421
421: ; preds = %378, %369
%422 = load i32*, i32** %40
store i32 0, i32* %422
%423 = load i32*, i32** %41
store i32 0, i32* %423
%424 = load i32*, i32** %42
store i32 0, i32* %424
%425 = load i32*, i32** %52
%426 = load i32, i32* %425
%427 = add nsw i32 %426, 1
%428 = load i32*, i32** %52
store i32 %427, i32* %428
%429 = load x86_fp80, x86_fp80* %54
%430 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %429, x86_fp80* %430
%431 = load i32*, i32** %57
store i32 1, i32* %431
br label %505
432: ; preds = %366, %363
%433 = load i32, i32* %33
%434 = load i32, i32* %48
%435 = load i32, i32* %51
%436 = mul nsw i32 %434, %435
%437 = icmp eq i32 %433, %436
br i1 %437, label %438, label %504
438: ; preds = %432
%439 = load i32, i32* %51
%440 = icmp ne i32 %439, 0
br i1 %440, label %441, label %504
441: ; preds = %438
%442 = load i32*, i32** %39
%443 = load i32, i32* %442
%444 = add nsw i32 %443, 1
%445 = load i32*, i32** %39
store i32 %444, i32* %445
%446 = load x86_fp80, x86_fp80* %54
%447 = load x86_fp80*, x86_fp80** %53
%448 = load x86_fp80, x86_fp80* %447
%449 = fcmp une x86_fp80 %446, %448
br i1 %449, label %450, label %493
450: ; preds = %441
%451 = load x86_fp80*, x86_fp80** %43
%452 = load x86_fp80, x86_fp80* %451
%453 = load x86_fp80, x86_fp80* %61
%454 = load x86_fp80, x86_fp80* %65
%455 = fmul x86_fp80 %453, %454
%456 = load x86_fp80, x86_fp80* %54
%457 = load x86_fp80*, x86_fp80** %53
%458 = load x86_fp80, x86_fp80* %457
%459 = fsub x86_fp80 %456, %458
%460 = load x86_fp80, x86_fp80* %64
%461 = fmul x86_fp80 %459, %460
%462 = fdiv x86_fp80 %455, %461
%463 = fadd x86_fp80 %452, %462
%464 = load x86_fp80*, x86_fp80** %43
store x86_fp80 %463, x86_fp80* %464
%465 = load x86_fp80*, x86_fp80** %44
%466 = load x86_fp80, x86_fp80* %465
%467 = load x86_fp80, x86_fp80* %62
%468 = load x86_fp80, x86_fp80* %65
%469 = fmul x86_fp80 %467, %468
%470 = load x86_fp80, x86_fp80* %54
%471 = load x86_fp80*, x86_fp80** %53
%472 = load x86_fp80, x86_fp80* %471
%473 = fsub x86_fp80 %470, %472
%474 = load x86_fp80, x86_fp80* %64
%475 = fmul x86_fp80 %473, %474
%476 = fdiv x86_fp80 %469, %475
%477 = fadd x86_fp80 %466, %476
%478 = load x86_fp80*, x86_fp80** %44
store x86_fp80 %477, x86_fp80* %478
%479 = load x86_fp80*, x86_fp80** %45
%480 = load x86_fp80, x86_fp80* %479
%481 = load x86_fp80, x86_fp80* %63
%482 = load x86_fp80, x86_fp80* %65
%483 = fmul x86_fp80 %481, %482
%484 = load x86_fp80, x86_fp80* %54
%485 = load x86_fp80*, x86_fp80** %53
%486 = load x86_fp80, x86_fp80* %485
%487 = fsub x86_fp80 %484, %486
%488 = load x86_fp80, x86_fp80* %64
%489 = fmul x86_fp80 %487, %488
%490 = fdiv x86_fp80 %483, %489
%491 = fadd x86_fp80 %480, %490
%492 = load x86_fp80*, x86_fp80** %45
store x86_fp80 %491, x86_fp80* %492
br label %493
493: ; preds = %450, %441
%494 = load i32*, i32** %40
store i32 0, i32* %494
%495 = load i32*, i32** %41
store i32 0, i32* %495
%496 = load i32*, i32** %42
store i32 0, i32* %496
%497 = load i32*, i32** %52
%498 = load i32, i32* %497
%499 = add nsw i32 %498, 1
%500 = load i32*, i32** %52
store i32 %499, i32* %500
%501 = load x86_fp80, x86_fp80* %54
%502 = load x86_fp80*, x86_fp80** %53
store x86_fp80 %501, x86_fp80* %502
%503 = load i32*, i32** %57
store i32 1, i32* %503
br label %504
504: ; preds = %493, %438, %432
br label %505
505: ; preds = %504, %421
%506 = load x86_fp80*, x86_fp80** %43
%507 = load x86_fp80, x86_fp80* %506
%508 = call i32 (x86_fp80, ...) bitcast (i32 (...)* @isnan to i32 (x86_fp80, ...)*)(x86_fp80 %507)
%509 = icmp ne i32 %508, 0
br i1 %509, label %510, label %512
510: ; preds = %505
%511 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str, i64 0, i64 0))
unreachable
512: ; preds = %505
ret i32 0
}

LLVM IR (-O2):
@str = [25 x i8] c"ERROR *TotalVelX is nan!\00"
define i32 @CheckIfElecHop(i32 %0, i32 %1, i32 %2, i32* nocapture %3, i32* nocapture %4, i32* nocapture %5, i32* nocapture %6, i32* nocapture %7, i32* nocapture %8, i32* nocapture %9, i32* nocapture %10, i32* nocapture %11, x86_fp80* nocapture %12, x86_fp80* nocapture %13, x86_fp80* nocapture %14, i32 %15, i32 %16, i32 %17, i32 %18, i32 %19, i32 %20, i32* nocapture %21, x86_fp80* %22, x86_fp80 %23, double %24, i32* nocapture %25, i32* nocapture writeonly %26, i32 %27, i32 %28, i32 %29) {
%31 = load i32, i32* %9
%32 = sitofp i32 %31 to x86_fp80
%33 = load i32, i32* %10
%34 = sitofp i32 %33 to x86_fp80
%35 = load i32, i32* %11
%36 = sitofp i32 %35 to x86_fp80
%37 = load i32, i32* %25
%38 = sitofp i32 %37 to x86_fp80
%39 = fpext double %24 to x86_fp80
%40 = icmp eq i32 %0, -1
%41 = icmp ne i32 %27, 1
%42 = and i1 %40, %41
br i1 %42, label %43, label %48
43: ; preds = %30
%44 = load i32, i32* %3
%45 = add nsw i32 %44, 1
store i32 %45, i32* %3
%46 = load x86_fp80, x86_fp80* %22
%47 = fcmp une x86_fp80 %46, %23
br i1 %47, label %58, label %80
48: ; preds = %30
%49 = mul nsw i32 %18, %15
%50 = icmp eq i32 %49, %0
%51 = icmp ne i32 %18, 0
%52 = and i1 %51, %50
br i1 %52, label %53, label %83
53: ; preds = %48
%54 = load i32, i32* %6
%55 = add nsw i32 %54, 1
store i32 %55, i32* %6
%56 = load x86_fp80, x86_fp80* %22
%57 = fcmp une x86_fp80 %56, %23
br i1 %57, label %58, label %80
58: ; preds = %53, %43
%59 = phi x86_fp80 [ %46, %43 ], [ %56, %53 ]
%60 = load x86_fp80, x86_fp80* %12
%61 = fmul x86_fp80 %39, %32
%62 = fsub x86_fp80 %23, %59
%63 = fmul x86_fp80 %62, %38
%64 = fdiv x86_fp80 %61, %63
%65 = fadd x86_fp80 %64, %60
store x86_fp80 %65, x86_fp80* %12
%66 = load x86_fp80, x86_fp80* %13
%67 = fmul x86_fp80 %39, %34
%68 = load x86_fp80, x86_fp80* %22
%69 = fsub x86_fp80 %23, %68
%70 = fmul x86_fp80 %69, %38
%71 = fdiv x86_fp80 %67, %70
%72 = fadd x86_fp80 %66, %71
store x86_fp80 %72, x86_fp80* %13
%73 = load x86_fp80, x86_fp80* %14
%74 = fmul x86_fp80 %39, %36
%75 = load x86_fp80, x86_fp80* %22
%76 = fsub x86_fp80 %23, %75
%77 = fmul x86_fp80 %76, %38
%78 = fdiv x86_fp80 %74, %77
%79 = fadd x86_fp80 %73, %78
store x86_fp80 %79, x86_fp80* %14
br label %80
80: ; preds = %58, %53, %43
store i32 0, i32* %9
store i32 0, i32* %10
store i32 0, i32* %11
%81 = load i32, i32* %21
%82 = add nsw i32 %81, 1
store i32 %82, i32* %21
store x86_fp80 %23, x86_fp80* %22
store i32 1, i32* %26
br label %83
83: ; preds = %80, %48
%84 = icmp eq i32 %1, -1
%85 = icmp ne i32 %28, 1
%86 = and i1 %84, %85
br i1 %86, label %87, label %92
87: ; preds = %83
%88 = load i32, i32* %4
%89 = add nsw i32 %88, 1
store i32 %89, i32* %4
%90 = load x86_fp80, x86_fp80* %22
%91 = fcmp une x86_fp80 %90, %23
br i1 %91, label %102, label %124
92: ; preds = %83
%93 = mul nsw i32 %19, %16
%94 = icmp eq i32 %93, %1
%95 = icmp ne i32 %19, 0
%96 = and i1 %95, %94
br i1 %96, label %97, label %127
97: ; preds = %92
%98 = load i32, i32* %7
%99 = add nsw i32 %98, 1
store i32 %99, i32* %7
%100 = load x86_fp80, x86_fp80* %22
%101 = fcmp une x86_fp80 %100, %23
br i1 %101, label %102, label %124
102: ; preds = %97, %87
%103 = phi x86_fp80 [ %90, %87 ], [ %100, %97 ]
%104 = load x86_fp80, x86_fp80* %12
%105 = fmul x86_fp80 %39, %32
%106 = fsub x86_fp80 %23, %103
%107 = fmul x86_fp80 %106, %38
%108 = fdiv x86_fp80 %105, %107
%109 = fadd x86_fp80 %108, %104
store x86_fp80 %109, x86_fp80* %12
%110 = load x86_fp80, x86_fp80* %13
%111 = fmul x86_fp80 %39, %34
%112 = load x86_fp80, x86_fp80* %22
%113 = fsub x86_fp80 %23, %112
%114 = fmul x86_fp80 %113, %38
%115 = fdiv x86_fp80 %111, %114
%116 = fadd x86_fp80 %110, %115
store x86_fp80 %116, x86_fp80* %13
%117 = load x86_fp80, x86_fp80* %14
%118 = fmul x86_fp80 %39, %36
%119 = load x86_fp80, x86_fp80* %22
%120 = fsub x86_fp80 %23, %119
%121 = fmul x86_fp80 %120, %38
%122 = fdiv x86_fp80 %118, %121
%123 = fadd x86_fp80 %117, %122
store x86_fp80 %123, x86_fp80* %14
br label %124
124: ; preds = %102, %97, %87
store i32 0, i32* %9
store i32 0, i32* %10
store i32 0, i32* %11
%125 = load i32, i32* %21
%126 = add nsw i32 %125, 1
store i32 %126, i32* %21
store x86_fp80 %23, x86_fp80* %22
store i32 1, i32* %26
br label %127
127: ; preds = %124, %92
%128 = icmp eq i32 %2, -1
%129 = icmp ne i32 %29, 1
%130 = and i1 %128, %129
br i1 %130, label %131, label %136
131: ; preds = %127
%132 = load i32, i32* %5
%133 = add nsw i32 %132, 1
store i32 %133, i32* %5
%134 = load x86_fp80, x86_fp80* %22
%135 = fcmp une x86_fp80 %134, %23
br i1 %135, label %146, label %168
136: ; preds = %127
%137 = mul nsw i32 %20, %17
%138 = icmp eq i32 %137, %2
%139 = icmp ne i32 %20, 0
%140 = and i1 %139, %138
br i1 %140, label %141, label %171
141: ; preds = %136
%142 = load i32, i32* %8
%143 = add nsw i32 %142, 1
store i32 %143, i32* %8
%144 = load x86_fp80, x86_fp80* %22
%145 = fcmp une x86_fp80 %144, %23
br i1 %145, label %146, label %168
146: ; preds = %141, %131
%147 = phi x86_fp80 [ %134, %131 ], [ %144, %141 ]
%148 = load x86_fp80, x86_fp80* %12
%149 = fmul x86_fp80 %39, %32
%150 = fsub x86_fp80 %23, %147
%151 = fmul x86_fp80 %150, %38
%152 = fdiv x86_fp80 %149, %151
%153 = fadd x86_fp80 %152, %148
store x86_fp80 %153, x86_fp80* %12
%154 = load x86_fp80, x86_fp80* %13
%155 = fmul x86_fp80 %39, %34
%156 = load x86_fp80, x86_fp80* %22
%157 = fsub x86_fp80 %23, %156
%158 = fmul x86_fp80 %157, %38
%159 = fdiv x86_fp80 %155, %158
%160 = fadd x86_fp80 %154, %159
store x86_fp80 %160, x86_fp80* %13
%161 = load x86_fp80, x86_fp80* %14
%162 = fmul x86_fp80 %39, %36
%163 = load x86_fp80, x86_fp80* %22
%164 = fsub x86_fp80 %23, %163
%165 = fmul x86_fp80 %164, %38
%166 = fdiv x86_fp80 %162, %165
%167 = fadd x86_fp80 %161, %166
store x86_fp80 %167, x86_fp80* %14
br label %168
168: ; preds = %146, %141, %131
store i32 0, i32* %9
store i32 0, i32* %10
store i32 0, i32* %11
%169 = load i32, i32* %21
%170 = add nsw i32 %169, 1
store i32 %170, i32* %21
store x86_fp80 %23, x86_fp80* %22
store i32 1, i32* %26
br label %171
171: ; preds = %168, %136
%172 = load x86_fp80, x86_fp80* %12
%173 = tail call i32 (x86_fp80, ...) bitcast (i32 (...)* @isnan to i32 (x86_fp80, ...)*)(x86_fp80 %172)
%174 = icmp eq i32 %173, 0
br i1 %174, label %177, label %175
175: ; preds = %171
%176 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str, i64 0, i64 0))
tail call void @exit(i32 1)
unreachable
177: ; preds = %171
ret i32 0
}