float BlkSchlsEqEuroNoDiv(float sptprice, float strike, float rate,
                          float volatility, float time, int otype,
                          float timet) {
  float OptionPrice;
  float xStockPrice;
  float xStrikePrice;
  float xRiskFreeRate;
  float xVolatility;
  float xTime;
  float xSqrtTime;
  float logValues;
  float xLogTerm;
  float xD1;
  float xD2;
  float xPowerTerm;
  float xDen;
  float d1;
  float d2;
  float FutureValueX;
  float NofXd1;
  float NofXd2;
  float NegNofXd1;
  float NegNofXd2;
  xStockPrice = sptprice;
  xStrikePrice = strike;
  xRiskFreeRate = rate;
  xVolatility = volatility;
  xTime = time;
  xSqrtTime = sqrt(xTime);
  logValues = log(sptprice / strike);
  xLogTerm = logValues;
  xPowerTerm = xVolatility * xVolatility;
  xPowerTerm = xPowerTerm * 0.5;
  xD1 = xRiskFreeRate + xPowerTerm;
  xD1 = xD1 * xTime;
  xD1 = xD1 + xLogTerm;
  xDen = xVolatility * xSqrtTime;
  xD1 = xD1 / xDen;
  xD2 = xD1 - xDen;
  d1 = xD1;
  d2 = xD2;
  NofXd1 = CNDF(d1);
  NofXd2 = CNDF(d2);
  FutureValueX = strike * (exp(-(rate) * (time)));
  if (otype == 0) {
    OptionPrice = (sptprice * NofXd1) - (FutureValueX * NofXd2);
  } else {
    NegNofXd1 = (1.0 - NofXd1);
    NegNofXd2 = (1.0 - NofXd2);
    OptionPrice = (FutureValueX * NegNofXd2) - (sptprice * NegNofXd1);
  }
  return OptionPrice;
}


x86 assembly (clang, -O0):
<BlkSchlsEqEuroNoDiv>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm3,-0x10(%rbp)
movss  %xmm4,-0x14(%rbp)
mov    %edi,-0x18(%rbp)
movss  %xmm5,-0x1c(%rbp)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1060 <sqrt@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x4(%rbp),%xmm0
divss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1050 <log@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x30(%rbp),%xmm0
mulss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe05(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x2c(%rbp),%xmm0
addss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
mulss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
addss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x30(%rbp),%xmm0
mulss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x44(%rbp),%xmm0
divss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
subss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <CNDF@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x58(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <CNDF@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1040 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
cmpl   $0x0,-0x18(%rbp)
jne    1328 <BlkSchlsEqEuroNoDiv+0x1e8>
movss  -0x4(%rbp),%xmm0
movss  -0x60(%rbp),%xmm2
movss  -0x5c(%rbp),%xmm1
mulss  -0x64(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
jmp    1392 <BlkSchlsEqEuroNoDiv+0x252>
movss  -0x60(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xccf(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x64(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xcb1(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  -0x6c(%rbp),%xmm2
movss  -0x4(%rbp),%xmm1
mulss  -0x68(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<BlkSchlsEqEuroNoDiv>:
push   %rbx
sub    $0x30,%rsp
mov    %edi,%ebx
movaps %xmm0,%xmm5
xorps  %xmm0,%xmm0
ucomiss %xmm0,%xmm4
movss  %xmm5,0x10(%rsp)
movss  %xmm4,0x14(%rsp)
movaps %xmm2,0x20(%rsp)
movss  %xmm1,0x18(%rsp)
movss  %xmm3,0x8(%rsp)
jb     1178 <BlkSchlsEqEuroNoDiv+0x38>
xorps  %xmm0,%xmm0
sqrtss %xmm4,%xmm0
jmp    118c <BlkSchlsEqEuroNoDiv+0x4c>
movaps %xmm4,%xmm0
call   1050 <sqrtf@plt>
movss  0x18(%rsp),%xmm1
movss  0x10(%rsp),%xmm5
movss  %xmm0,0xc(%rsp)
divss  %xmm1,%xmm5
xorps  %xmm0,%xmm0
cvtss2sd %xmm5,%xmm0
call   1060 <log@plt>
cvtsd2ss %xmm0,%xmm0
movss  0x8(%rsp),%xmm2
movss  0xc(%rsp),%xmm1
mulss  %xmm2,%xmm1
mulss  %xmm2,%xmm2
mulss  0xe3e(%rip),%xmm2
addss  0x20(%rsp),%xmm2
mulss  0x14(%rsp),%xmm2
addss  %xmm0,%xmm2
divss  %xmm1,%xmm2
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
subss  %xmm1,%xmm2
movss  %xmm2,0x8(%rsp)
mov    $0x1,%al
call   1030 <CNDF@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movss  %xmm0,0xc(%rsp)
movss  0x8(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   1030 <CNDF@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movss  %xmm0,0x8(%rsp)
movss  0x18(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
movaps 0x20(%rsp),%xmm0
xorps  0xddb(%rip),%xmm0
mulss  0x14(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1040 <exp@plt>
mulsd  0x18(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
test   %ebx,%ebx
je     1279 <BlkSchlsEqEuroNoDiv+0x139>
movss  0xdaa(%rip),%xmm1
movaps %xmm1,%xmm2
subss  0xc(%rsp),%xmm2
subss  0x8(%rsp),%xmm1
mulss  0x10(%rsp),%xmm2
mulss  %xmm1,%xmm0
subss  %xmm2,%xmm0
jmp    1293 <BlkSchlsEqEuroNoDiv+0x153>
movss  0x8(%rsp),%xmm1
mulss  %xmm0,%xmm1
movss  0x10(%rsp),%xmm0
mulss  0xc(%rsp),%xmm0
subss  %xmm1,%xmm0
add    $0x30,%rsp
pop    %rbx
ret

LLVM IR (-O0):
define float @BlkSchlsEqEuroNoDiv(float %0, float %1, float %2, float %3, float %4, i32 %5, float %6) {
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca i32
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float
%24 = alloca float
%25 = alloca float
%26 = alloca float
%27 = alloca float
%28 = alloca float
%29 = alloca float
%30 = alloca float
%31 = alloca float
%32 = alloca float
%33 = alloca float
%34 = alloca float
store float %0, float* %8
store float %1, float* %9
store float %2, float* %10
store float %3, float* %11
store float %4, float* %12
store i32 %5, i32* %13
store float %6, float* %14
%35 = load float, float* %8
store float %35, float* %16
%36 = load float, float* %9
store float %36, float* %17
%37 = load float, float* %10
store float %37, float* %18
%38 = load float, float* %11
store float %38, float* %19
%39 = load float, float* %12
store float %39, float* %20
%40 = load float, float* %20
%41 = fpext float %40 to double
%42 = call double @sqrt(double %41)
%43 = fptrunc double %42 to float
store float %43, float* %21
%44 = load float, float* %8
%45 = load float, float* %9
%46 = fdiv float %44, %45
%47 = fpext float %46 to double
%48 = call double @log(double %47)
%49 = fptrunc double %48 to float
store float %49, float* %22
%50 = load float, float* %22
store float %50, float* %23
%51 = load float, float* %19
%52 = load float, float* %19
%53 = fmul float %51, %52
store float %53, float* %26
%54 = load float, float* %26
%55 = fpext float %54 to double
%56 = fmul double %55, 5.000000e-01
%57 = fptrunc double %56 to float
store float %57, float* %26
%58 = load float, float* %18
%59 = load float, float* %26
%60 = fadd float %58, %59
store float %60, float* %24
%61 = load float, float* %24
%62 = load float, float* %20
%63 = fmul float %61, %62
store float %63, float* %24
%64 = load float, float* %24
%65 = load float, float* %23
%66 = fadd float %64, %65
store float %66, float* %24
%67 = load float, float* %19
%68 = load float, float* %21
%69 = fmul float %67, %68
store float %69, float* %27
%70 = load float, float* %24
%71 = load float, float* %27
%72 = fdiv float %70, %71
store float %72, float* %24
%73 = load float, float* %24
%74 = load float, float* %27
%75 = fsub float %73, %74
store float %75, float* %25
%76 = load float, float* %24
store float %76, float* %28
%77 = load float, float* %25
store float %77, float* %29
%78 = load float, float* %28
%79 = fpext float %78 to double
%80 = call i32 (double, ...) bitcast (i32 (...)* @CNDF to i32 (double, ...)*)(double %79)
%81 = sitofp i32 %80 to float
store float %81, float* %31
%82 = load float, float* %29
%83 = fpext float %82 to double
%84 = call i32 (double, ...) bitcast (i32 (...)* @CNDF to i32 (double, ...)*)(double %83)
%85 = sitofp i32 %84 to float
store float %85, float* %32
%86 = load float, float* %9
%87 = fpext float %86 to double
%88 = load float, float* %10
%89 = fneg float %88
%90 = load float, float* %12
%91 = fmul float %89, %90
%92 = fpext float %91 to double
%93 = call double @exp(double %92)
%94 = fmul double %87, %93
%95 = fptrunc double %94 to float
store float %95, float* %30
%96 = load i32, i32* %13
%97 = icmp eq i32 %96, 0
br i1 %97, label %98, label %106
98: ; preds = %7
%99 = load float, float* %8
%100 = load float, float* %31
%101 = load float, float* %30
%102 = load float, float* %32
%103 = fmul float %101, %102
%104 = fneg float %103
%105 = call float @llvm.fmuladd.f32(float %99, float %100, float %104)
store float %105, float* %15
br label %122
106: ; preds = %7
%107 = load float, float* %31
%108 = fpext float %107 to double
%109 = fsub double 1.000000e+00, %108
%110 = fptrunc double %109 to float
store float %110, float* %33
%111 = load float, float* %32
%112 = fpext float %111 to double
%113 = fsub double 1.000000e+00, %112
%114 = fptrunc double %113 to float
store float %114, float* %34
%115 = load float, float* %30
%116 = load float, float* %34
%117 = load float, float* %8
%118 = load float, float* %33
%119 = fmul float %117, %118
%120 = fneg float %119
%121 = call float @llvm.fmuladd.f32(float %115, float %116, float %120)
store float %121, float* %15
br label %122
122: ; preds = %106, %98
%123 = load float, float* %15
ret float %123
}

LLVM IR (-O2):
define float @BlkSchlsEqEuroNoDiv(float %0, float %1, float %2, float %3, float %4, i32 %5, float %6) {
%8 = tail call float @sqrtf(float %4)
%9 = fdiv float %0, %1
%10 = fpext float %9 to double
%11 = tail call double @log(double %10)
%12 = fptrunc double %11 to float
%13 = fmul float %3, %3
%14 = fmul float %13, 5.000000e-01
%15 = fadd float %14, %2
%16 = fmul float %15, %4
%17 = fadd float %16, %12
%18 = fmul float %8, %3
%19 = fdiv float %17, %18
%20 = fsub float %19, %18
%21 = fpext float %19 to double
%22 = tail call i32 (double, ...) bitcast (i32 (...)* @CNDF to i32 (double, ...)*)(double %21)
%23 = sitofp i32 %22 to float
%24 = fpext float %20 to double
%25 = tail call i32 (double, ...) bitcast (i32 (...)* @CNDF to i32 (double, ...)*)(double %24)
%26 = sitofp i32 %25 to float
%27 = fpext float %1 to double
%28 = fneg float %2
%29 = fmul float %28, %4
%30 = fpext float %29 to double
%31 = tail call double @exp(double %30)
%32 = fmul double %31, %27
%33 = fptrunc double %32 to float
%34 = icmp eq i32 %5, 0
br i1 %34, label %35, label %39
35: ; preds = %7
%36 = fneg float %33
%37 = fmul float %26, %36
%38 = tail call float @llvm.fmuladd.f32(float %0, float %23, float %37)
br label %45
39: ; preds = %7
%40 = fsub float 1.000000e+00, %23
%41 = fsub float 1.000000e+00, %26
%42 = fneg float %40
%43 = fmul float %42, %0
%44 = tail call float @llvm.fmuladd.f32(float %33, float %41, float %43)
br label %45
45: ; preds = %39, %35
%46 = phi float [ %38, %35 ], [ %44, %39 ]
ret float %46
}