float very_fast_exp(float x) {
  return 1 - x * (0.9999999995f -
                  x * (0.4999999206f -
                       x * (0.1666653019f -
                            x * (0.0416573475f -
                                 x * (0.0083013598f -
                                      x * (0.0013298820f -
                                           x * (0.0001413161f)))))));
}


x86 assembly (clang, -O0):
<very_fast_exp>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
movss  -0x4(%rbp),%xmm1
movss  -0x4(%rbp),%xmm2
movss  -0x4(%rbp),%xmm3
movss  -0x4(%rbp),%xmm4
movss  -0x4(%rbp),%xmm5
movss  -0x4(%rbp),%xmm6
movd   %xmm6,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm6
movss  0xed3(%rip),%xmm7
mulss  %xmm7,%xmm6
movss  0xecb(%rip),%xmm7
addss  %xmm7,%xmm6
movd   %xmm5,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm5
mulss  %xmm6,%xmm5
movss  0xea6(%rip),%xmm6
addss  %xmm6,%xmm5
movd   %xmm4,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm4
mulss  %xmm5,%xmm4
movss  0xe85(%rip),%xmm5
addss  %xmm5,%xmm4
movd   %xmm3,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm3
mulss  %xmm4,%xmm3
movss  0xe64(%rip),%xmm4
addss  %xmm4,%xmm3
movd   %xmm2,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm2
mulss  %xmm3,%xmm2
movss  0xe43(%rip),%xmm3
addss  %xmm3,%xmm2
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm1
movss  0xe22(%rip),%xmm2
addss  %xmm2,%xmm1
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm1,%xmm0
movss  0xe05(%rip),%xmm1
addss  %xmm1,%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<very_fast_exp>:
movss  0xef8(%rip),%xmm1
mulss  %xmm0,%xmm1
addss  0xef0(%rip),%xmm1
mulss  %xmm0,%xmm1
movss  0xee8(%rip),%xmm2
subss  %xmm1,%xmm2
mulss  %xmm0,%xmm2
movss  0xedc(%rip),%xmm1
subss  %xmm2,%xmm1
mulss  %xmm0,%xmm1
movss  0xed0(%rip),%xmm2
subss  %xmm1,%xmm2
mulss  %xmm0,%xmm2
movss  0xec4(%rip),%xmm3
subss  %xmm2,%xmm3
mulss  %xmm0,%xmm3
movss  0xeb8(%rip),%xmm1
movaps %xmm1,%xmm2
subss  %xmm3,%xmm2
mulss  %xmm0,%xmm2
subss  %xmm2,%xmm1
movaps %xmm1,%xmm0
ret

LLVM IR (-O0):
define float @very_fast_exp(float %0) {
%2 = alloca float
store float %0, float* %2
%3 = load float, float* %2
%4 = load float, float* %2
%5 = load float, float* %2
%6 = load float, float* %2
%7 = load float, float* %2
%8 = load float, float* %2
%9 = load float, float* %2
%10 = fneg float %9
%11 = call float @llvm.fmuladd.f32(float %10, float 0x3F2285C800000000, float 0x3F55C9EDE0000000)
%12 = fneg float %8
%13 = call float @llvm.fmuladd.f32(float %12, float %11, float 0x3F81004DA0000000)
%14 = fneg float %7
%15 = call float @llvm.fmuladd.f32(float %14, float %13, float 0x3FA5541CA0000000)
%16 = fneg float %6
%17 = call float @llvm.fmuladd.f32(float %16, float %15, float 0x3FC55549E0000000)
%18 = fneg float %5
%19 = call float @llvm.fmuladd.f32(float %18, float %17, float 0x3FDFFFFFA0000000)
%20 = fneg float %4
%21 = call float @llvm.fmuladd.f32(float %20, float %19, float 1.000000e+00)
%22 = fneg float %3
%23 = call float @llvm.fmuladd.f32(float %22, float %21, float 1.000000e+00)
ret float %23
}

LLVM IR (-O2):
define float @very_fast_exp(float %0) {
%2 = fneg float %0
%3 = tail call float @llvm.fmuladd.f32(float %2, float 0x3F2285C800000000, float 0x3F55C9EDE0000000)
%4 = tail call float @llvm.fmuladd.f32(float %2, float %3, float 0x3F81004DA0000000)
%5 = tail call float @llvm.fmuladd.f32(float %2, float %4, float 0x3FA5541CA0000000)
%6 = tail call float @llvm.fmuladd.f32(float %2, float %5, float 0x3FC55549E0000000)
%7 = tail call float @llvm.fmuladd.f32(float %2, float %6, float 0x3FDFFFFFA0000000)
%8 = tail call float @llvm.fmuladd.f32(float %2, float %7, float 1.000000e+00)
%9 = tail call float @llvm.fmuladd.f32(float %2, float %8, float 1.000000e+00)
ret float %9
}