int BSIM4PAeffGeo(nf, geo, minSD, Weffcj, DMCG, DMCI, DMDG, Ps, Pd, As, Ad)
int geo, minSD;
double Weffcj, DMCG, DMCI, DMDG;
double nf, *Ps, *Pd, *As, *Ad;
{
  double T0, T1, T2;
  double ADiso, ADsha, ADmer, ASiso, ASsha, ASmer;
  double PDiso, PDsha, PDmer, PSiso, PSsha, PSmer;
  double nuIntD = 0.0, nuEndD = 0.0, nuIntS = 0.0, nuEndS = 0.0;
  if (geo < 9)
    BSIM4NumFingerDiff(nf, minSD, &nuIntD, &nuEndD, &nuIntS, &nuEndS);
  T0 = DMCG + DMCI;
  T1 = DMCG + DMCG;
  T2 = DMDG + DMDG;
  PSiso = PDiso = T0 + T0 + Weffcj;
  PSsha = PDsha = T1;
  PSmer = PDmer = T2;
  ASiso = ADiso = T0 * Weffcj;
  ASsha = ADsha = DMCG * Weffcj;
  ASmer = ADmer = DMDG * Weffcj;
  switch (geo) {
  case 0:
    *Ps = nuEndS * PSiso + nuIntS * PSsha;
    *Pd = nuEndD * PDiso + nuIntD * PDsha;
    *As = nuEndS * ASiso + nuIntS * ASsha;
    *Ad = nuEndD * ADiso + nuIntD * ADsha;
    break;
  case 1:
    *Ps = nuEndS * PSiso + nuIntS * PSsha;
    *Pd = (nuEndD + nuIntD) * PDsha;
    *As = nuEndS * ASiso + nuIntS * ASsha;
    *Ad = (nuEndD + nuIntD) * ADsha;
    break;
  case 2:
    *Ps = (nuEndS + nuIntS) * PSsha;
    *Pd = nuEndD * PDiso + nuIntD * PDsha;
    *As = (nuEndS + nuIntS) * ASsha;
    *Ad = nuEndD * ADiso + nuIntD * ADsha;
    break;
  case 3:
    *Ps = (nuEndS + nuIntS) * PSsha;
    *Pd = (nuEndD + nuIntD) * PDsha;
    *As = (nuEndS + nuIntS) * ASsha;
    *Ad = (nuEndD + nuIntD) * ADsha;
    break;
  case 4:
    *Ps = nuEndS * PSiso + nuIntS * PSsha;
    *Pd = nuEndD * PDmer + nuIntD * PDsha;
    *As = nuEndS * ASiso + nuIntS * ASsha;
    *Ad = nuEndD * ADmer + nuIntD * ADsha;
    break;
  case 5:
    *Ps = (nuEndS + nuIntS) * PSsha;
    *Pd = nuEndD * PDmer + nuIntD * PDsha;
    *As = (nuEndS + nuIntS) * ASsha;
    *Ad = nuEndD * ADmer + nuIntD * ADsha;
    break;
  case 6:
    *Ps = nuEndS * PSmer + nuIntS * PSsha;
    *Pd = nuEndD * PDiso + nuIntD * PDsha;
    *As = nuEndS * ASmer + nuIntS * ASsha;
    *Ad = nuEndD * ADiso + nuIntD * ADsha;
    break;
  case 7:
    *Ps = nuEndS * PSmer + nuIntS * PSsha;
    *Pd = (nuEndD + nuIntD) * PDsha;
    *As = nuEndS * ASmer + nuIntS * ASsha;
    *Ad = (nuEndD + nuIntD) * ADsha;
    break;
  case 8:
    *Ps = nuEndS * PSmer + nuIntS * PSsha;
    *Pd = nuEndD * PDmer + nuIntD * PDsha;
    *As = nuEndS * ASmer + nuIntS * ASsha;
    *Ad = nuEndD * ADmer + nuIntD * ADsha;
    break;
  case 9:
    *Ps = PSiso + (nf - 1.0) * PSsha;
    *Pd = nf * PDsha;
    *As = ASiso + (nf - 1.0) * ASsha;
    *Ad = nf * ADsha;
    break;
  case 10:
    *Ps = nf * PSsha;
    *Pd = PDiso + (nf - 1.0) * PDsha;
    *As = nf * ASsha;
    *Ad = ADiso + (nf - 1.0) * ADsha;
    break;
  default:
    printf("Warning: Specified GEO = %d not matched\n", geo);
  }
  return 0;
}


x86 assembly (clang, -O0):
<BSIM4PAeffGeo>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
movsd  %xmm0,-0x8(%rbp)
mov    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  %xmm2,-0x20(%rbp)
movsd  %xmm3,-0x28(%rbp)
movsd  %xmm4,-0x30(%rbp)
mov    %rdx,-0x38(%rbp)
mov    %rcx,-0x40(%rbp)
mov    %r8,-0x48(%rbp)
mov    %r9,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
cmpl   $0x9,-0xc(%rbp)
jge    11bb <BSIM4PAeffGeo+0x9b>
movsd  -0x8(%rbp),%xmm0
mov    -0x10(%rbp),%edi
lea    -0xd0(%rbp),%rsi
lea    -0xd8(%rbp),%rdx
lea    -0xe0(%rbp),%rcx
lea    -0xe8(%rbp),%r8
mov    $0x1,%al
call   1030 <BSIM4NumFingerDiff@plt>
movsd  -0x20(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x20(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x58(%rbp),%xmm0
addsd  %xmm0,%xmm0
movsd  -0x18(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x20(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0xc(%rbp),%eax
mov    %rax,-0xf0(%rbp)
sub    $0xa,%rax
ja     19cb <BSIM4PAeffGeo+0x8ab>
mov    -0xf0(%rbp),%rax
lea    0xd5f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0xe8(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xc0(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0xe8(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xc0(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0xe8(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0xc0(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xa8(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x80(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x8(%rbp),%xmm0
movsd  0x739(%rip),%xmm2
subsd  %xmm2,%xmm0
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
mulsd  -0xa8(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x8(%rbp),%xmm0
movsd  0x6f3(%rip),%xmm2
subsd  %xmm2,%xmm0
movsd  -0x90(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
movsd  -0x8(%rbp),%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0x8(%rbp),%xmm0
movsd  0x696(%rip),%xmm2
subsd  %xmm2,%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm0
movsd  0x653(%rip),%xmm2
subsd  %xmm2,%xmm0
movsd  -0x78(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    19dc <BSIM4PAeffGeo+0x8bc>
mov    -0xc(%rbp),%esi
lea    0x65f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<BSIM4PAeffGeo>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x50,%rsp
mov    %r9,%r14
mov    %r8,%r15
mov    %rcx,%r12
mov    %rdx,%rbx
movapd %xmm2,%xmm7
mov    %edi,%ebp
movq   $0x0,0x20(%rsp)
movq   $0x0,0x18(%rsp)
movq   $0x0,0x10(%rsp)
movq   $0x0,0x8(%rsp)
cmp    $0x8,%edi
jg     11c3 <BSIM4PAeffGeo+0xa3>
lea    0x20(%rsp),%rax
lea    0x18(%rsp),%rdx
lea    0x10(%rsp),%rcx
lea    0x8(%rsp),%r8
mov    %esi,%edi
mov    %rax,%rsi
mov    $0x1,%al
movsd  %xmm3,0x48(%rsp)
movsd  %xmm7,0x40(%rsp)
movsd  %xmm1,0x38(%rsp)
movsd  %xmm4,0x30(%rsp)
movsd  %xmm0,0x28(%rsp)
call   1030 <BSIM4NumFingerDiff@plt>
movsd  0x28(%rsp),%xmm0
movsd  0x30(%rsp),%xmm4
movsd  0x38(%rsp),%xmm1
movsd  0x40(%rsp),%xmm7
movsd  0x48(%rsp),%xmm3
cmp    $0xa,%ebp
ja     1274 <BSIM4PAeffGeo+0x154>
addsd  %xmm7,%xmm3
movapd %xmm3,%xmm6
addsd  %xmm3,%xmm6
addsd  %xmm1,%xmm6
mulsd  %xmm1,%xmm3
movapd %xmm1,%xmm9
mulsd  %xmm7,%xmm9
addsd  %xmm7,%xmm7
mulsd  %xmm4,%xmm1
addsd  %xmm4,%xmm4
mov    %ebp,%eax
lea    0xe09(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsd  0x8(%rsp),%xmm2
movsd  0x10(%rsp),%xmm1
movapd %xmm7,%xmm4
mulsd  %xmm1,%xmm4
movapd %xmm2,%xmm5
mulsd  %xmm6,%xmm5
addsd  %xmm4,%xmm5
movsd  %xmm5,(%rbx)
movsd  0x18(%rsp),%xmm4
movsd  0x20(%rsp),%xmm5
mulsd  %xmm5,%xmm7
mulsd  %xmm4,%xmm6
addsd  %xmm7,%xmm6
movsd  %xmm6,(%r12)
mulsd  %xmm9,%xmm1
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%r15)
mulsd  %xmm5,%xmm9
mulsd  %xmm3,%xmm4
addsd  %xmm9,%xmm4
movsd  %xmm4,(%r14)
jmp    15ca <BSIM4PAeffGeo+0x4aa>
lea    0xdb9(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    15ca <BSIM4PAeffGeo+0x4aa>
movsd  0x8(%rsp),%xmm2
movsd  0x10(%rsp),%xmm5
movapd %xmm7,%xmm4
mulsd  %xmm5,%xmm4
mulsd  %xmm2,%xmm6
addsd  %xmm4,%xmm6
movsd  %xmm6,(%rbx)
movsd  0x18(%rsp),%xmm1
addsd  0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm7
movsd  %xmm7,(%r12)
mulsd  %xmm9,%xmm5
mulsd  %xmm2,%xmm3
addsd  %xmm5,%xmm3
movsd  %xmm3,(%r15)
mulsd  %xmm9,%xmm1
movsd  %xmm1,(%r14)
jmp    15ca <BSIM4PAeffGeo+0x4aa>
movsd  0x8(%rsp),%xmm2
addsd  0x10(%rsp),%xmm2
movapd %xmm7,%xmm4
mulsd  %xmm2,%xmm4
movsd  %xmm4,(%rbx)
movsd  0x18(%rsp),%xmm5
movsd  0x20(%rsp),%xmm4
mulsd  %xmm4,%xmm7
mulsd  %xmm5,%xmm6
addsd  %xmm7,%xmm6
movsd  %xmm6,(%r12)
mulsd  %xmm9,%xmm2
movsd  %xmm2,(%r15)
mulsd  %xmm4,%xmm9
mulsd  %xmm5,%xmm3
jmp    1540 <BSIM4PAeffGeo+0x420>
movsd  0x8(%rsp),%xmm1
addsd  0x10(%rsp),%xmm1
movapd %xmm7,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,(%rbx)
movsd  0x18(%rsp),%xmm2
addsd  0x20(%rsp),%xmm2
mulsd  %xmm2,%xmm7
movsd  %xmm7,(%r12)
mulsd  %xmm9,%xmm1
movsd  %xmm1,(%r15)
mulsd  %xmm9,%xmm2
movsd  %xmm2,(%r14)
jmp    15ca <BSIM4PAeffGeo+0x4aa>
movsd  0x8(%rsp),%xmm8
movsd  0x10(%rsp),%xmm5
movapd %xmm7,%xmm2
mulsd  %xmm5,%xmm2
mulsd  %xmm8,%xmm6
addsd  %xmm2,%xmm6
movsd  %xmm6,(%rbx)
movsd  0x18(%rsp),%xmm6
movsd  0x20(%rsp),%xmm2
mulsd  %xmm2,%xmm7
mulsd  %xmm6,%xmm4
addsd  %xmm7,%xmm4
movsd  %xmm4,(%r12)
mulsd  %xmm9,%xmm5
mulsd  %xmm8,%xmm3
addsd  %xmm5,%xmm3
movsd  %xmm3,(%r15)
mulsd  %xmm2,%xmm9
mulsd  %xmm6,%xmm1
jmp    141c <BSIM4PAeffGeo+0x2fc>
movsd  0x8(%rsp),%xmm5
addsd  0x10(%rsp),%xmm5
movapd %xmm7,%xmm2
mulsd  %xmm5,%xmm2
movsd  %xmm2,(%rbx)
movsd  0x18(%rsp),%xmm2
movsd  0x20(%rsp),%xmm3
mulsd  %xmm3,%xmm7
mulsd  %xmm2,%xmm4
addsd  %xmm7,%xmm4
movsd  %xmm4,(%r12)
mulsd  %xmm9,%xmm5
movsd  %xmm5,(%r15)
mulsd  %xmm3,%xmm9
mulsd  %xmm2,%xmm1
addsd  %xmm9,%xmm1
movsd  %xmm1,(%r14)
jmp    15ca <BSIM4PAeffGeo+0x4aa>
movsd  0x8(%rsp),%xmm8
movsd  0x10(%rsp),%xmm2
movapd %xmm7,%xmm5
mulsd  %xmm2,%xmm5
mulsd  %xmm8,%xmm4
addsd  %xmm5,%xmm4
movsd  %xmm4,(%rbx)
movsd  0x18(%rsp),%xmm4
movsd  0x20(%rsp),%xmm5
mulsd  %xmm5,%xmm7
mulsd  %xmm4,%xmm6
addsd  %xmm7,%xmm6
movsd  %xmm6,(%r12)
mulsd  %xmm9,%xmm2
mulsd  %xmm8,%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,(%r15)
mulsd  %xmm5,%xmm9
mulsd  %xmm4,%xmm3
jmp    1540 <BSIM4PAeffGeo+0x420>
movsd  0x8(%rsp),%xmm5
movsd  0x10(%rsp),%xmm2
movapd %xmm7,%xmm3
mulsd  %xmm2,%xmm3
mulsd  %xmm5,%xmm4
addsd  %xmm3,%xmm4
movsd  %xmm4,(%rbx)
movsd  0x18(%rsp),%xmm3
addsd  0x20(%rsp),%xmm3
mulsd  %xmm3,%xmm7
movsd  %xmm7,(%r12)
mulsd  %xmm9,%xmm2
mulsd  %xmm5,%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,(%r15)
mulsd  %xmm9,%xmm3
movsd  %xmm3,(%r14)
jmp    15ca <BSIM4PAeffGeo+0x4aa>
movsd  0x8(%rsp),%xmm5
movsd  0x10(%rsp),%xmm2
movapd %xmm7,%xmm3
mulsd  %xmm2,%xmm3
movapd %xmm5,%xmm6
mulsd  %xmm4,%xmm6
addsd  %xmm3,%xmm6
movsd  %xmm6,(%rbx)
movsd  0x18(%rsp),%xmm3
movsd  0x20(%rsp),%xmm6
mulsd  %xmm6,%xmm7
mulsd  %xmm3,%xmm4
addsd  %xmm7,%xmm4
movsd  %xmm4,(%r12)
mulsd  %xmm9,%xmm2
mulsd  %xmm1,%xmm5
addsd  %xmm2,%xmm5
movsd  %xmm5,(%r15)
mulsd  %xmm6,%xmm9
mulsd  %xmm1,%xmm3
addsd  %xmm9,%xmm3
movsd  %xmm3,(%r14)
jmp    15ca <BSIM4PAeffGeo+0x4aa>
movsd  0xaac(%rip),%xmm2
addsd  %xmm0,%xmm2
movapd %xmm2,%xmm4
mulsd  %xmm7,%xmm4
addsd  %xmm6,%xmm4
movsd  %xmm4,(%rbx)
mulsd  %xmm0,%xmm7
movsd  %xmm7,(%r12)
mulsd  %xmm9,%xmm2
addsd  %xmm3,%xmm2
movsd  %xmm2,(%r15)
mulsd  %xmm0,%xmm9
movsd  %xmm9,(%r14)
jmp    15ca <BSIM4PAeffGeo+0x4aa>
movapd %xmm7,%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm9,%xmm4
mulsd  %xmm0,%xmm4
addsd  0xa5b(%rip),%xmm0
movsd  %xmm2,(%rbx)
mulsd  %xmm0,%xmm7
addsd  %xmm6,%xmm7
movsd  %xmm7,(%r12)
movsd  %xmm4,(%r15)
mulsd  %xmm9,%xmm0
addsd  %xmm3,%xmm0
movsd  %xmm0,(%r14)
xor    %eax,%eax
add    $0x50,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [41 x i8] c"Warning: Specified GEO = %d not matched\0A\00"
define i32 @BSIM4PAeffGeo(double %0, i32 %1, i32 %2, double %3, double %4, double %5, double %6, double* %7, double* %8, double* %9, double* %10) {
%12 = alloca double
%13 = alloca i32
%14 = alloca i32
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double*
%20 = alloca double*
%21 = alloca double*
%22 = alloca double*
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
store double %0, double* %12
store i32 %1, i32* %13
store i32 %2, i32* %14
store double %3, double* %15
store double %4, double* %16
store double %5, double* %17
store double %6, double* %18
store double* %7, double** %19
store double* %8, double** %20
store double* %9, double** %21
store double* %10, double** %22
store double 0.000000e+00, double* %38
store double 0.000000e+00, double* %39
store double 0.000000e+00, double* %40
store double 0.000000e+00, double* %41
%42 = load i32, i32* %13
%43 = icmp slt i32 %42, 9
br i1 %43, label %44, label %48
44: ; preds = %11
%45 = load double, double* %12
%46 = load i32, i32* %14
%47 = call i32 (double, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @BSIM4NumFingerDiff to i32 (double, i32, double*, double*, double*, double*, ...)*)(double %45, i32 %46, double* %38, double* %39, double* %40, double* %41)
br label %48
48: ; preds = %44, %11
%49 = load double, double* %16
%50 = load double, double* %17
%51 = fadd double %49, %50
store double %51, double* %23
%52 = load double, double* %16
%53 = load double, double* %16
%54 = fadd double %52, %53
store double %54, double* %24
%55 = load double, double* %18
%56 = load double, double* %18
%57 = fadd double %55, %56
store double %57, double* %25
%58 = load double, double* %23
%59 = load double, double* %23
%60 = fadd double %58, %59
%61 = load double, double* %15
%62 = fadd double %60, %61
store double %62, double* %32
store double %62, double* %35
%63 = load double, double* %24
store double %63, double* %33
store double %63, double* %36
%64 = load double, double* %25
store double %64, double* %34
store double %64, double* %37
%65 = load double, double* %23
%66 = load double, double* %15
%67 = fmul double %65, %66
store double %67, double* %26
store double %67, double* %29
%68 = load double, double* %16
%69 = load double, double* %15
%70 = fmul double %68, %69
store double %70, double* %27
store double %70, double* %30
%71 = load double, double* %18
%72 = load double, double* %15
%73 = fmul double %71, %72
store double %73, double* %28
store double %73, double* %31
%74 = load i32, i32* %13
switch i32 %74, label %366 [
i32 0, label %75
i32 1, label %104
i32 2, label %131
i32 3, label %158
i32 4, label %183
i32 5, label %212
i32 6, label %239
i32 7, label %268
i32 8, label %295
i32 9, label %324
i32 10, label %345
]
75: ; preds = %48
%76 = load double, double* %41
%77 = load double, double* %35
%78 = load double, double* %40
%79 = load double, double* %36
%80 = fmul double %78, %79
%81 = call double @llvm.fmuladd.f64(double %76, double %77, double %80)
%82 = load double*, double** %19
store double %81, double* %82
%83 = load double, double* %39
%84 = load double, double* %32
%85 = load double, double* %38
%86 = load double, double* %33
%87 = fmul double %85, %86
%88 = call double @llvm.fmuladd.f64(double %83, double %84, double %87)
%89 = load double*, double** %20
store double %88, double* %89
%90 = load double, double* %41
%91 = load double, double* %29
%92 = load double, double* %40
%93 = load double, double* %30
%94 = fmul double %92, %93
%95 = call double @llvm.fmuladd.f64(double %90, double %91, double %94)
%96 = load double*, double** %21
store double %95, double* %96
%97 = load double, double* %39
%98 = load double, double* %26
%99 = load double, double* %38
%100 = load double, double* %27
%101 = fmul double %99, %100
%102 = call double @llvm.fmuladd.f64(double %97, double %98, double %101)
%103 = load double*, double** %22
store double %102, double* %103
br label %369
104: ; preds = %48
%105 = load double, double* %41
%106 = load double, double* %35
%107 = load double, double* %40
%108 = load double, double* %36
%109 = fmul double %107, %108
%110 = call double @llvm.fmuladd.f64(double %105, double %106, double %109)
%111 = load double*, double** %19
store double %110, double* %111
%112 = load double, double* %39
%113 = load double, double* %38
%114 = fadd double %112, %113
%115 = load double, double* %33
%116 = fmul double %114, %115
%117 = load double*, double** %20
store double %116, double* %117
%118 = load double, double* %41
%119 = load double, double* %29
%120 = load double, double* %40
%121 = load double, double* %30
%122 = fmul double %120, %121
%123 = call double @llvm.fmuladd.f64(double %118, double %119, double %122)
%124 = load double*, double** %21
store double %123, double* %124
%125 = load double, double* %39
%126 = load double, double* %38
%127 = fadd double %125, %126
%128 = load double, double* %27
%129 = fmul double %127, %128
%130 = load double*, double** %22
store double %129, double* %130
br label %369
131: ; preds = %48
%132 = load double, double* %41
%133 = load double, double* %40
%134 = fadd double %132, %133
%135 = load double, double* %36
%136 = fmul double %134, %135
%137 = load double*, double** %19
store double %136, double* %137
%138 = load double, double* %39
%139 = load double, double* %32
%140 = load double, double* %38
%141 = load double, double* %33
%142 = fmul double %140, %141
%143 = call double @llvm.fmuladd.f64(double %138, double %139, double %142)
%144 = load double*, double** %20
store double %143, double* %144
%145 = load double, double* %41
%146 = load double, double* %40
%147 = fadd double %145, %146
%148 = load double, double* %30
%149 = fmul double %147, %148
%150 = load double*, double** %21
store double %149, double* %150
%151 = load double, double* %39
%152 = load double, double* %26
%153 = load double, double* %38
%154 = load double, double* %27
%155 = fmul double %153, %154
%156 = call double @llvm.fmuladd.f64(double %151, double %152, double %155)
%157 = load double*, double** %22
store double %156, double* %157
br label %369
158: ; preds = %48
%159 = load double, double* %41
%160 = load double, double* %40
%161 = fadd double %159, %160
%162 = load double, double* %36
%163 = fmul double %161, %162
%164 = load double*, double** %19
store double %163, double* %164
%165 = load double, double* %39
%166 = load double, double* %38
%167 = fadd double %165, %166
%168 = load double, double* %33
%169 = fmul double %167, %168
%170 = load double*, double** %20
store double %169, double* %170
%171 = load double, double* %41
%172 = load double, double* %40
%173 = fadd double %171, %172
%174 = load double, double* %30
%175 = fmul double %173, %174
%176 = load double*, double** %21
store double %175, double* %176
%177 = load double, double* %39
%178 = load double, double* %38
%179 = fadd double %177, %178
%180 = load double, double* %27
%181 = fmul double %179, %180
%182 = load double*, double** %22
store double %181, double* %182
br label %369
183: ; preds = %48
%184 = load double, double* %41
%185 = load double, double* %35
%186 = load double, double* %40
%187 = load double, double* %36
%188 = fmul double %186, %187
%189 = call double @llvm.fmuladd.f64(double %184, double %185, double %188)
%190 = load double*, double** %19
store double %189, double* %190
%191 = load double, double* %39
%192 = load double, double* %34
%193 = load double, double* %38
%194 = load double, double* %33
%195 = fmul double %193, %194
%196 = call double @llvm.fmuladd.f64(double %191, double %192, double %195)
%197 = load double*, double** %20
store double %196, double* %197
%198 = load double, double* %41
%199 = load double, double* %29
%200 = load double, double* %40
%201 = load double, double* %30
%202 = fmul double %200, %201
%203 = call double @llvm.fmuladd.f64(double %198, double %199, double %202)
%204 = load double*, double** %21
store double %203, double* %204
%205 = load double, double* %39
%206 = load double, double* %28
%207 = load double, double* %38
%208 = load double, double* %27
%209 = fmul double %207, %208
%210 = call double @llvm.fmuladd.f64(double %205, double %206, double %209)
%211 = load double*, double** %22
store double %210, double* %211
br label %369
212: ; preds = %48
%213 = load double, double* %41
%214 = load double, double* %40
%215 = fadd double %213, %214
%216 = load double, double* %36
%217 = fmul double %215, %216
%218 = load double*, double** %19
store double %217, double* %218
%219 = load double, double* %39
%220 = load double, double* %34
%221 = load double, double* %38
%222 = load double, double* %33
%223 = fmul double %221, %222
%224 = call double @llvm.fmuladd.f64(double %219, double %220, double %223)
%225 = load double*, double** %20
store double %224, double* %225
%226 = load double, double* %41
%227 = load double, double* %40
%228 = fadd double %226, %227
%229 = load double, double* %30
%230 = fmul double %228, %229
%231 = load double*, double** %21
store double %230, double* %231
%232 = load double, double* %39
%233 = load double, double* %28
%234 = load double, double* %38
%235 = load double, double* %27
%236 = fmul double %234, %235
%237 = call double @llvm.fmuladd.f64(double %232, double %233, double %236)
%238 = load double*, double** %22
store double %237, double* %238
br label %369
239: ; preds = %48
%240 = load double, double* %41
%241 = load double, double* %37
%242 = load double, double* %40
%243 = load double, double* %36
%244 = fmul double %242, %243
%245 = call double @llvm.fmuladd.f64(double %240, double %241, double %244)
%246 = load double*, double** %19
store double %245, double* %246
%247 = load double, double* %39
%248 = load double, double* %32
%249 = load double, double* %38
%250 = load double, double* %33
%251 = fmul double %249, %250
%252 = call double @llvm.fmuladd.f64(double %247, double %248, double %251)
%253 = load double*, double** %20
store double %252, double* %253
%254 = load double, double* %41
%255 = load double, double* %31
%256 = load double, double* %40
%257 = load double, double* %30
%258 = fmul double %256, %257
%259 = call double @llvm.fmuladd.f64(double %254, double %255, double %258)
%260 = load double*, double** %21
store double %259, double* %260
%261 = load double, double* %39
%262 = load double, double* %26
%263 = load double, double* %38
%264 = load double, double* %27
%265 = fmul double %263, %264
%266 = call double @llvm.fmuladd.f64(double %261, double %262, double %265)
%267 = load double*, double** %22
store double %266, double* %267
br label %369
268: ; preds = %48
%269 = load double, double* %41
%270 = load double, double* %37
%271 = load double, double* %40
%272 = load double, double* %36
%273 = fmul double %271, %272
%274 = call double @llvm.fmuladd.f64(double %269, double %270, double %273)
%275 = load double*, double** %19
store double %274, double* %275
%276 = load double, double* %39
%277 = load double, double* %38
%278 = fadd double %276, %277
%279 = load double, double* %33
%280 = fmul double %278, %279
%281 = load double*, double** %20
store double %280, double* %281
%282 = load double, double* %41
%283 = load double, double* %31
%284 = load double, double* %40
%285 = load double, double* %30
%286 = fmul double %284, %285
%287 = call double @llvm.fmuladd.f64(double %282, double %283, double %286)
%288 = load double*, double** %21
store double %287, double* %288
%289 = load double, double* %39
%290 = load double, double* %38
%291 = fadd double %289, %290
%292 = load double, double* %27
%293 = fmul double %291, %292
%294 = load double*, double** %22
store double %293, double* %294
br label %369
295: ; preds = %48
%296 = load double, double* %41
%297 = load double, double* %37
%298 = load double, double* %40
%299 = load double, double* %36
%300 = fmul double %298, %299
%301 = call double @llvm.fmuladd.f64(double %296, double %297, double %300)
%302 = load double*, double** %19
store double %301, double* %302
%303 = load double, double* %39
%304 = load double, double* %34
%305 = load double, double* %38
%306 = load double, double* %33
%307 = fmul double %305, %306
%308 = call double @llvm.fmuladd.f64(double %303, double %304, double %307)
%309 = load double*, double** %20
store double %308, double* %309
%310 = load double, double* %41
%311 = load double, double* %31
%312 = load double, double* %40
%313 = load double, double* %30
%314 = fmul double %312, %313
%315 = call double @llvm.fmuladd.f64(double %310, double %311, double %314)
%316 = load double*, double** %21
store double %315, double* %316
%317 = load double, double* %39
%318 = load double, double* %28
%319 = load double, double* %38
%320 = load double, double* %27
%321 = fmul double %319, %320
%322 = call double @llvm.fmuladd.f64(double %317, double %318, double %321)
%323 = load double*, double** %22
store double %322, double* %323
br label %369
324: ; preds = %48
%325 = load double, double* %35
%326 = load double, double* %12
%327 = fsub double %326, 1.000000e+00
%328 = load double, double* %36
%329 = call double @llvm.fmuladd.f64(double %327, double %328, double %325)
%330 = load double*, double** %19
store double %329, double* %330
%331 = load double, double* %12
%332 = load double, double* %33
%333 = fmul double %331, %332
%334 = load double*, double** %20
store double %333, double* %334
%335 = load double, double* %29
%336 = load double, double* %12
%337 = fsub double %336, 1.000000e+00
%338 = load double, double* %30
%339 = call double @llvm.fmuladd.f64(double %337, double %338, double %335)
%340 = load double*, double** %21
store double %339, double* %340
%341 = load double, double* %12
%342 = load double, double* %27
%343 = fmul double %341, %342
%344 = load double*, double** %22
store double %343, double* %344
br label %369
345: ; preds = %48
%346 = load double, double* %12
%347 = load double, double* %36
%348 = fmul double %346, %347
%349 = load double*, double** %19
store double %348, double* %349
%350 = load double, double* %32
%351 = load double, double* %12
%352 = fsub double %351, 1.000000e+00
%353 = load double, double* %33
%354 = call double @llvm.fmuladd.f64(double %352, double %353, double %350)
%355 = load double*, double** %20
store double %354, double* %355
%356 = load double, double* %12
%357 = load double, double* %30
%358 = fmul double %356, %357
%359 = load double*, double** %21
store double %358, double* %359
%360 = load double, double* %26
%361 = load double, double* %12
%362 = fsub double %361, 1.000000e+00
%363 = load double, double* %27
%364 = call double @llvm.fmuladd.f64(double %362, double %363, double %360)
%365 = load double*, double** %22
store double %364, double* %365
br label %369
366: ; preds = %48
%367 = load i32, i32* %13
%368 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str, i64 0, i64 0), i32 %367)
br label %369
369: ; preds = %366, %345, %324, %295, %268, %239, %212, %183, %158, %131, %104, %75
ret i32 0
}

LLVM IR (-O2):
@.str = [41 x i8] c"Warning: Specified GEO = %d not matched\0A\00"
define i32 @BSIM4PAeffGeo(double %0, i32 %1, i32 %2, double %3, double %4, double %5, double %6, double* nocapture writeonly %7, double* nocapture writeonly %8, double* nocapture writeonly %9, double* nocapture writeonly %10) {
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = bitcast double* %12 to i8*
store double 0.000000e+00, double* %12
%17 = bitcast double* %13 to i8*
store double 0.000000e+00, double* %13
%18 = bitcast double* %14 to i8*
store double 0.000000e+00, double* %14
%19 = bitcast double* %15 to i8*
store double 0.000000e+00, double* %15
%20 = icmp slt i32 %1, 9
br i1 %20, label %21, label %23
21: ; preds = %11
%22 = call i32 (double, i32, double*, double*, double*, double*, ...) bitcast (i32 (...)* @BSIM4NumFingerDiff to i32 (double, i32, double*, double*, double*, double*, ...)*)(double %0, i32 %2, double* %12, double* %13, double* %14, double* %15)
br label %23
23: ; preds = %21, %11
%24 = fadd double %4, %5
%25 = fadd double %4, %4
%26 = fadd double %6, %6
%27 = fadd double %24, %24
%28 = fadd double %27, %3
%29 = fmul double %24, %3
%30 = fmul double %3, %4
%31 = fmul double %3, %6
switch i32 %1, label %155 [
i32 0, label %32
i32 1, label %45
i32 2, label %57
i32 3, label %69
i32 4, label %80
i32 5, label %93
i32 6, label %105
i32 7, label %118
i32 8, label %130
i32 9, label %143
i32 10, label %149
]
32: ; preds = %23
%33 = load double, double* %15
%34 = load double, double* %14
%35 = fmul double %25, %34
%36 = call double @llvm.fmuladd.f64(double %33, double %28, double %35)
store double %36, double* %7
%37 = load double, double* %13
%38 = load double, double* %12
%39 = fmul double %25, %38
%40 = call double @llvm.fmuladd.f64(double %37, double %28, double %39)
store double %40, double* %8
%41 = fmul double %30, %34
%42 = call double @llvm.fmuladd.f64(double %33, double %29, double %41)
store double %42, double* %9
%43 = fmul double %30, %38
%44 = call double @llvm.fmuladd.f64(double %37, double %29, double %43)
store double %44, double* %10
br label %157
45: ; preds = %23
%46 = load double, double* %15
%47 = load double, double* %14
%48 = fmul double %25, %47
%49 = call double @llvm.fmuladd.f64(double %46, double %28, double %48)
store double %49, double* %7
%50 = load double, double* %13
%51 = load double, double* %12
%52 = fadd double %50, %51
%53 = fmul double %25, %52
store double %53, double* %8
%54 = fmul double %30, %47
%55 = call double @llvm.fmuladd.f64(double %46, double %29, double %54)
store double %55, double* %9
%56 = fmul double %30, %52
store double %56, double* %10
br label %157
57: ; preds = %23
%58 = load double, double* %15
%59 = load double, double* %14
%60 = fadd double %58, %59
%61 = fmul double %25, %60
store double %61, double* %7
%62 = load double, double* %13
%63 = load double, double* %12
%64 = fmul double %25, %63
%65 = call double @llvm.fmuladd.f64(double %62, double %28, double %64)
store double %65, double* %8
%66 = fmul double %30, %60
store double %66, double* %9
%67 = fmul double %30, %63
%68 = call double @llvm.fmuladd.f64(double %62, double %29, double %67)
store double %68, double* %10
br label %157
69: ; preds = %23
%70 = load double, double* %15
%71 = load double, double* %14
%72 = fadd double %70, %71
%73 = fmul double %25, %72
store double %73, double* %7
%74 = load double, double* %13
%75 = load double, double* %12
%76 = fadd double %74, %75
%77 = fmul double %25, %76
store double %77, double* %8
%78 = fmul double %30, %72
store double %78, double* %9
%79 = fmul double %30, %76
store double %79, double* %10
br label %157
80: ; preds = %23
%81 = load double, double* %15
%82 = load double, double* %14
%83 = fmul double %25, %82
%84 = call double @llvm.fmuladd.f64(double %81, double %28, double %83)
store double %84, double* %7
%85 = load double, double* %13
%86 = load double, double* %12
%87 = fmul double %25, %86
%88 = call double @llvm.fmuladd.f64(double %85, double %26, double %87)
store double %88, double* %8
%89 = fmul double %30, %82
%90 = call double @llvm.fmuladd.f64(double %81, double %29, double %89)
store double %90, double* %9
%91 = fmul double %30, %86
%92 = call double @llvm.fmuladd.f64(double %85, double %31, double %91)
store double %92, double* %10
br label %157
93: ; preds = %23
%94 = load double, double* %15
%95 = load double, double* %14
%96 = fadd double %94, %95
%97 = fmul double %25, %96
store double %97, double* %7
%98 = load double, double* %13
%99 = load double, double* %12
%100 = fmul double %25, %99
%101 = call double @llvm.fmuladd.f64(double %98, double %26, double %100)
store double %101, double* %8
%102 = fmul double %30, %96
store double %102, double* %9
%103 = fmul double %30, %99
%104 = call double @llvm.fmuladd.f64(double %98, double %31, double %103)
store double %104, double* %10
br label %157
105: ; preds = %23
%106 = load double, double* %15
%107 = load double, double* %14
%108 = fmul double %25, %107
%109 = call double @llvm.fmuladd.f64(double %106, double %26, double %108)
store double %109, double* %7
%110 = load double, double* %13
%111 = load double, double* %12
%112 = fmul double %25, %111
%113 = call double @llvm.fmuladd.f64(double %110, double %28, double %112)
store double %113, double* %8
%114 = fmul double %30, %107
%115 = call double @llvm.fmuladd.f64(double %106, double %31, double %114)
store double %115, double* %9
%116 = fmul double %30, %111
%117 = call double @llvm.fmuladd.f64(double %110, double %29, double %116)
store double %117, double* %10
br label %157
118: ; preds = %23
%119 = load double, double* %15
%120 = load double, double* %14
%121 = fmul double %25, %120
%122 = call double @llvm.fmuladd.f64(double %119, double %26, double %121)
store double %122, double* %7
%123 = load double, double* %13
%124 = load double, double* %12
%125 = fadd double %123, %124
%126 = fmul double %25, %125
store double %126, double* %8
%127 = fmul double %30, %120
%128 = call double @llvm.fmuladd.f64(double %119, double %31, double %127)
store double %128, double* %9
%129 = fmul double %30, %125
store double %129, double* %10
br label %157
130: ; preds = %23
%131 = load double, double* %15
%132 = load double, double* %14
%133 = fmul double %25, %132
%134 = call double @llvm.fmuladd.f64(double %131, double %26, double %133)
store double %134, double* %7
%135 = load double, double* %13
%136 = load double, double* %12
%137 = fmul double %25, %136
%138 = call double @llvm.fmuladd.f64(double %135, double %26, double %137)
store double %138, double* %8
%139 = fmul double %30, %132
%140 = call double @llvm.fmuladd.f64(double %131, double %31, double %139)
store double %140, double* %9
%141 = fmul double %30, %136
%142 = call double @llvm.fmuladd.f64(double %135, double %31, double %141)
store double %142, double* %10
br label %157
143: ; preds = %23
%144 = fadd double %0, -1.000000e+00
%145 = call double @llvm.fmuladd.f64(double %144, double %25, double %28)
store double %145, double* %7
%146 = fmul double %25, %0
store double %146, double* %8
%147 = call double @llvm.fmuladd.f64(double %144, double %30, double %29)
store double %147, double* %9
%148 = fmul double %30, %0
store double %148, double* %10
br label %157
149: ; preds = %23
%150 = fmul double %25, %0
store double %150, double* %7
%151 = fadd double %0, -1.000000e+00
%152 = call double @llvm.fmuladd.f64(double %151, double %25, double %28)
store double %152, double* %8
%153 = fmul double %30, %0
store double %153, double* %9
%154 = call double @llvm.fmuladd.f64(double %151, double %30, double %29)
store double %154, double* %10
br label %157
155: ; preds = %23
%156 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @.str, i64 0, i64 0), i32 %1)
br label %157
157: ; preds = %155, %149, %143, %130, %118, %105, %93, %80, %69, %57, %45, %32
ret i32 0
}