double adipot(double t, double s, double p) {
  double a_a1 = 3.6504E-4, a_a2 = 8.3198E-5, a_a3 = 5.4065E-7, a_a4 = 4.0274E-9,
         a_b1 = 1.7439E-5, a_b2 = 2.9778E-7, a_c1 = 8.9309E-7, a_c2 = 3.1628E-8,
         a_c3 = 2.1987E-10, a_d = 4.1057E-9, a_e1 = 1.6056E-10,
         a_e2 = 5.0484E-12;
  double aa, bb, cc, cc1, dd, tpot, s_rel;
  s_rel = s - 35.0;
  aa = (a_a1 + t * (a_a2 - t * (a_a3 - a_a4 * t)));
  bb = s_rel * (a_b1 - a_b2 * t);
  cc = (a_c1 + t * (-a_c2 + a_c3 * t));
  cc1 = a_d * s_rel;
  dd = (-a_e1 + a_e2 * t);
  tpot = t - p * (aa + bb + p * (cc - cc1 + p * dd));
  return (tpot);
}


x86 assembly (clang, -O0):
<adipot>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
movsd  0xf41(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  0xf2c(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  0xf17(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xf02(%rip),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xeed(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xed8(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xec3(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xeae(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe99(%rip),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xe84(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xe6f(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe5a(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xe40(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x20(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm3
movsd  -0x8(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm5
movsd  -0x38(%rbp),%xmm4
movsd  -0x8(%rbp),%xmm6
movq   %xmm4,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm4
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm3
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm3
movsd  -0x60(%rbp),%xmm2
movsd  -0x8(%rbp),%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x78(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x8(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm3
addsd  -0x88(%rbp),%xmm3
ff
movsd  -0x18(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm5
ff
subsd  -0x98(%rbp),%xmm5
ff
movsd  -0x18(%rbp),%xmm4
movsd  -0xa0(%rbp),%xmm6
ff
mulsd  %xmm6,%xmm4
addsd  %xmm5,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm3,%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<adipot>:
addsd  0xef8(%rip),%xmm1
movsd  0xef8(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xef4(%rip),%xmm3
mulsd  %xmm0,%xmm3
movsd  0xef0(%rip),%xmm4
subsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm4
addsd  0xee8(%rip),%xmm4
movsd  0xee8(%rip),%xmm3
mulsd  %xmm0,%xmm3
addsd  0xee4(%rip),%xmm3
mulsd  %xmm1,%xmm3
movsd  0xee0(%rip),%xmm5
mulsd  %xmm0,%xmm5
addsd  0xedc(%rip),%xmm5
mulsd  %xmm0,%xmm5
addsd  0xed8(%rip),%xmm5
mulsd  0xed8(%rip),%xmm1
addsd  %xmm4,%xmm3
addsd  %xmm5,%xmm1
movsd  0xed0(%rip),%xmm4
mulsd  %xmm0,%xmm4
addsd  0xecc(%rip),%xmm4
mulsd  %xmm2,%xmm4
addsd  %xmm1,%xmm4
mulsd  %xmm2,%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm2,%xmm4
subsd  %xmm4,%xmm0
ret

LLVM IR (-O0):
define double @adipot(double %0, double %1, double %2) {
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca double
%14 = alloca double
%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
store double %0, double* %4
store double %1, double* %5
store double %2, double* %6
store double 3.650400e-04, double* %7
store double 8.319800e-05, double* %8
store double 5.406500e-07, double* %9
store double 4.027400e-09, double* %10
store double 1.743900e-05, double* %11
store double 2.977800e-07, double* %12
store double 8.930900e-07, double* %13
store double 3.162800e-08, double* %14
store double 2.198700e-10, double* %15
store double 4.105700e-09, double* %16
store double 1.605600e-10, double* %17
store double 5.048400e-12, double* %18
%26 = load double, double* %5
%27 = fsub double %26, 3.500000e+01
store double %27, double* %25
%28 = load double, double* %7
%29 = load double, double* %4
%30 = load double, double* %8
%31 = load double, double* %4
%32 = load double, double* %9
%33 = load double, double* %10
%34 = load double, double* %4
%35 = fneg double %33
%36 = call double @llvm.fmuladd.f64(double %35, double %34, double %32)
%37 = fneg double %31
%38 = call double @llvm.fmuladd.f64(double %37, double %36, double %30)
%39 = call double @llvm.fmuladd.f64(double %29, double %38, double %28)
store double %39, double* %19
%40 = load double, double* %25
%41 = load double, double* %11
%42 = load double, double* %12
%43 = load double, double* %4
%44 = fneg double %42
%45 = call double @llvm.fmuladd.f64(double %44, double %43, double %41)
%46 = fmul double %40, %45
store double %46, double* %20
%47 = load double, double* %13
%48 = load double, double* %4
%49 = load double, double* %14
%50 = fneg double %49
%51 = load double, double* %15
%52 = load double, double* %4
%53 = call double @llvm.fmuladd.f64(double %51, double %52, double %50)
%54 = call double @llvm.fmuladd.f64(double %48, double %53, double %47)
store double %54, double* %21
%55 = load double, double* %16
%56 = load double, double* %25
%57 = fmul double %55, %56
store double %57, double* %22
%58 = load double, double* %17
%59 = fneg double %58
%60 = load double, double* %18
%61 = load double, double* %4
%62 = call double @llvm.fmuladd.f64(double %60, double %61, double %59)
store double %62, double* %23
%63 = load double, double* %4
%64 = load double, double* %6
%65 = load double, double* %19
%66 = load double, double* %20
%67 = fadd double %65, %66
%68 = load double, double* %6
%69 = load double, double* %21
%70 = load double, double* %22
%71 = fsub double %69, %70
%72 = load double, double* %6
%73 = load double, double* %23
%74 = call double @llvm.fmuladd.f64(double %72, double %73, double %71)
%75 = call double @llvm.fmuladd.f64(double %68, double %74, double %67)
%76 = fneg double %64
%77 = call double @llvm.fmuladd.f64(double %76, double %75, double %63)
store double %77, double* %24
%78 = load double, double* %24
ret double %78
}

LLVM IR (-O2):
define double @adipot(double %0, double %1, double %2) {
%4 = fadd double %1, -3.500000e+01
%5 = tail call double @llvm.fmuladd.f64(double %0, double -4.027400e-09, double 5.406500e-07)
%6 = fneg double %0
%7 = tail call double @llvm.fmuladd.f64(double %6, double %5, double 8.319800e-05)
%8 = tail call double @llvm.fmuladd.f64(double %0, double %7, double 3.650400e-04)
%9 = tail call double @llvm.fmuladd.f64(double %0, double -2.977800e-07, double 1.743900e-05)
%10 = fmul double %9, %4
%11 = tail call double @llvm.fmuladd.f64(double %0, double 2.198700e-10, double -3.162800e-08)
%12 = tail call double @llvm.fmuladd.f64(double %0, double %11, double 8.930900e-07)
%13 = fmul double %4, 4.105700e-09
%14 = tail call double @llvm.fmuladd.f64(double %0, double 5.048400e-12, double -1.605600e-10)
%15 = fadd double %8, %10
%16 = fsub double %12, %13
%17 = tail call double @llvm.fmuladd.f64(double %2, double %14, double %16)
%18 = tail call double @llvm.fmuladd.f64(double %2, double %17, double %15)
%19 = fneg double %2
%20 = tail call double @llvm.fmuladd.f64(double %19, double %18, double %0)
ret double %20
}