double P0(x)
double x;
{
  static double p[9] = {
      0.9999999999999999999999995647e+00, 0.5638253933310769952531889297e+01,
      0.1124846237418285392887270013e+02, 0.1009280644639441488899111404e+02,
      0.4290591487686900980651458361e+01, 0.8374209971661497198619102718e+00,
      0.6702347074465611456598882534e-01, 0.1696260729396856143084502774e-02,
      0.6463970103128382090713889584e-05};
  static double q[9] = {
      0.9999999999999999999999999999e+00, 0.5639352566123269952531467562e+01,
      0.1125463057106955935416066535e+02, 0.1010501892629524191262518048e+02,
      0.4301396985171094350444425443e+01, 0.8418926086780046799127094223e+00,
      0.6784915305473610998681570734e-01, 0.1754416614608056207958880988e-02,
      0.7482977995134121064747276923e-05};
  double zsq = 64.0 / (x * x);
  return POLYNOM8(zsq, p) / POLYNOM8(zsq, q);
}


x86 assembly (clang, -O0):
<P0>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm1
mulsd  -0x8(%rbp),%xmm1
movsd  0xed1(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x10(%rbp),%xmm0
lea    0x2eec(%rip),%rdi
mov    $0x1,%al
call   1030 <POLYNOM8@plt>
mov    %eax,-0x14(%rbp)
movsd  -0x10(%rbp),%xmm0
lea    0x2f26(%rip),%rdi
mov    $0x1,%al
call   1030 <POLYNOM8@plt>
mov    %eax,%ecx
mov    -0x14(%rbp),%eax
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<P0>:
push   %rbx
sub    $0x10,%rsp
mulsd  %xmm0,%xmm0
movsd  0xedf(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
lea    0x2efe(%rip),%rdi
movapd %xmm1,%xmm0
mov    $0x1,%al
call   1030 <POLYNOM8@plt>
mov    %eax,%ebx
lea    0x2f3a(%rip),%rdi
movsd  0x8(%rsp),%xmm0
mov    $0x1,%al
call   1030 <POLYNOM8@plt>
mov    %eax,%ecx
mov    %ebx,%eax
cltd
idiv   %ecx
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
add    $0x10,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@P0.p = internal global [9 x double] [double 1.000000e+00, double 0x40168D92706873D6, double 0x40267F3675D6CDC2, double 0x40242F8453983E75, double 0x40112990D0A071E5, double 0x3FEACC271E79FE8A, double 0x3FB128733EE9A76A, double 0x3F5BCAA216ED8B8C, double 0x3EDB1CA2928F21CD]
@P0.q = internal global [9 x double] [double 1.000000e+00, double 0x40168EB2706873D6, double 0x4026825EF02E9C73, double 0x402435C50A6BCC57, double 0x401134A16949B0FF, double 0x3FEAF0C8C4A08459, double 0x3FB15E8FE56E6F95, double 0x3F5CBE8E7EEE65CC, double 0x3EDF62C9543A07D5]
define double @P0(double %0) {
%2 = alloca double
%3 = alloca double
store double %0, double* %2
%4 = load double, double* %2
%5 = load double, double* %2
%6 = fmul double %4, %5
%7 = fdiv double 6.400000e+01, %6
store double %7, double* %3
%8 = load double, double* %3
%9 = call i32 (double, double*, ...) bitcast (i32 (...)* @POLYNOM8 to i32 (double, double*, ...)*)(double %8, double* getelementptr inbounds ([9 x double], [9 x double]* @P0.p, i64 0, i64 0))
%10 = load double, double* %3
%11 = call i32 (double, double*, ...) bitcast (i32 (...)* @POLYNOM8 to i32 (double, double*, ...)*)(double %10, double* getelementptr inbounds ([9 x double], [9 x double]* @P0.q, i64 0, i64 0))
%12 = sdiv i32 %9, %11
%13 = sitofp i32 %12 to double
ret double %13
}

LLVM IR (-O2):
@P0.p = internal global [9 x double] [double 1.000000e+00, double 0x40168D92706873D6, double 0x40267F3675D6CDC2, double 0x40242F8453983E75, double 0x40112990D0A071E5, double 0x3FEACC271E79FE8A, double 0x3FB128733EE9A76A, double 0x3F5BCAA216ED8B8C, double 0x3EDB1CA2928F21CD]
@P0.q = internal global [9 x double] [double 1.000000e+00, double 0x40168EB2706873D6, double 0x4026825EF02E9C73, double 0x402435C50A6BCC57, double 0x401134A16949B0FF, double 0x3FEAF0C8C4A08459, double 0x3FB15E8FE56E6F95, double 0x3F5CBE8E7EEE65CC, double 0x3EDF62C9543A07D5]
define double @P0(double %0) {
%2 = fmul double %0, %0
%3 = fdiv double 6.400000e+01, %2
%4 = tail call i32 (double, double*, ...) bitcast (i32 (...)* @POLYNOM8 to i32 (double, double*, ...)*)(double %3, double* getelementptr inbounds ([9 x double], [9 x double]* @P0.p, i64 0, i64 0))
%5 = tail call i32 (double, double*, ...) bitcast (i32 (...)* @POLYNOM8 to i32 (double, double*, ...)*)(double %3, double* getelementptr inbounds ([9 x double], [9 x double]* @P0.q, i64 0, i64 0))
%6 = sdiv i32 %4, %5
%7 = sitofp i32 %6 to double
ret double %7
}