double cdflib_gamma_ln1(double *a) {
  static const double p0 = .577215664901533e+00;
  static const double p1 = .844203922187225e+00;
  static const double p2 = -.168860593646662e+00;
  static const double p3 = -.780427615533591e+00;
  static const double p4 = -.402055799310489e+00;
  static const double p5 = -.673562214325671e-01;
  static const double p6 = -.271935708322958e-02;
  static const double q1 = .288743195473681e+01;
  static const double q2 = .312755088914843e+01;
  static const double q3 = .156875193295039e+01;
  static const double q4 = .361951990101499e+00;
  static const double q5 = .325038868253937e-01;
  static const double q6 = .667465618796164e-03;
  static const double r0 = .422784335098467e+00;
  static const double r1 = .848044614534529e+00;
  static const double r2 = .565221050691933e+00;
  static const double r3 = .156513060486551e+00;
  static const double r4 = .170502484022650e-01;
  static const double r5 = .497958207639485e-03;
  static const double s1 = .124313399877507e+01;
  static const double s2 = .548042109832463e+00;
  static const double s3 = .101552187439830e+00;
  static const double s4 = .713309612391000e-02;
  static const double s5 = .116165475989616e-03;
  double gamln1, w, x;
  if (*a >= 0.6e0) {
    goto S10;
  }
  w = ((((((p6 * *a + p5) * *a + p4) * *a + p3) * *a + p2) * *a + p1) * *a +
       p0) /
      ((((((q6 * *a + q5) * *a + q4) * *a + q3) * *a + q2) * *a + q1) * *a +
       1.0e0);
  gamln1 = -(*a * w);
  return gamln1;
S10:
  x = *a - 0.5e0 - 0.5e0;
  w = (((((r5 * x + r4) * x + r3) * x + r2) * x + r1) * x + r0) /
      (((((s5 * x + s4) * x + s3) * x + s2) * x + s1) * x + 1.0e0);
  gamln1 = x * w;
  return gamln1;
}


x86 assembly (clang, -O0):
<cdflib_gamma_ln1>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xee8(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1127 <cdflib_gamma_ln1+0x27>
jmp    1298 <cdflib_gamma_ln1+0x198>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xf31(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf2d(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xf05(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xee5(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xec5(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xea5(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe85(%rip),%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0xe61(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe5d(%rip),%xmm2
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe35(%rip),%xmm2
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe15(%rip),%xmm2
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xdf5(%rip),%xmm2
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xdd5(%rip),%xmm2
addsd  %xmm2,%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xdb5(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    13c1 <cdflib_gamma_ln1+0x2c1>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xe28(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0xe1c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  0xdf6(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdf2(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdcd(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdb0(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd93(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd76(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x28(%rbp),%xmm1
movsd  0xd55(%rip),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd51(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd2c(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xd0f(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xcf2(%rip),%xmm2
addsd  %xmm2,%xmm1
movsd  -0x28(%rbp),%xmm2
mulsd  %xmm2,%xmm1
movsd  0xc6d(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x28(%rbp),%xmm0
mulsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<cdflib_gamma_ln1>:
movsd  (%rdi),%xmm0
ucomisd 0xef4(%rip),%xmm0
jae    117f <cdflib_gamma_ln1+0x7f>
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xf52(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf56(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf5a(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf5e(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf62(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf66(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xf6a(%rip),%xmm2
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
divsd  %xmm1,%xmm2
xorpd  0xf66(%rip),%xmm0
mulsd  %xmm2,%xmm0
ret
movsd  0xe81(%rip),%xmm1
addsd  %xmm1,%xmm0
addsd  %xmm1,%xmm0
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movapd 0xe71(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe75(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe79(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe7d(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe81(%rip),%xmm2
mulpd  %xmm1,%xmm2
addpd  0xe85(%rip),%xmm2
movapd %xmm2,%xmm1
unpckhpd %xmm2,%xmm1
divsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm0
ret

LLVM IR (-O0):
@cdflib_gamma_ln1.p0 = internal constant double 0x3FE2788CFC6FB61A
@cdflib_gamma_ln1.p1 = internal constant double 0x3FEB03B7F19E5EB3
@cdflib_gamma_ln1.p2 = internal constant double 0xBFC59D3953A5D4DE
@cdflib_gamma_ln1.p3 = internal constant double 0xBFE8F94355B395CA
@cdflib_gamma_ln1.p4 = internal constant double 0xBFD9BB483F4D2A05
@cdflib_gamma_ln1.p5 = internal constant double 0xBFB13E41E03C299D
@cdflib_gamma_ln1.p6 = internal constant double 0xBF6646E7B7A2C01C
@cdflib_gamma_ln1.q1 = internal constant double 0x40071975ECB828DC
@cdflib_gamma_ln1.q2 = internal constant double 0x40090539668BBEEE
@cdflib_gamma_ln1.q3 = internal constant double 0x3FF9199BA078F07A
@cdflib_gamma_ln1.q4 = internal constant double 0x3FD72A38AE0D50C1
@cdflib_gamma_ln1.q5 = internal constant double 0x3FA0A45975D0DEFB
@cdflib_gamma_ln1.q6 = internal constant double 0x3F45DF1B8080E82C
@cdflib_gamma_ln1.r0 = internal constant double 0x3FDB0EE6072093CC
@cdflib_gamma_ln1.r1 = internal constant double 0x3FEB232E759F30F9
@cdflib_gamma_ln1.r2 = internal constant double 0x3FE2164A74F7718B
@cdflib_gamma_ln1.r3 = internal constant double 0x3FC4089EB617E2B8
@cdflib_gamma_ln1.r4 = internal constant double 0x3F91759ECD1B09C3
@cdflib_gamma_ln1.r5 = internal constant double 0x3F40512D1BB91A1E
@cdflib_gamma_ln1.s1 = internal constant double 0x3FF3E3E079D48DD8
@cdflib_gamma_ln1.s2 = internal constant double 0x3FE1898F9B51F5EA
@cdflib_gamma_ln1.s3 = internal constant double 0x3FB9FF52FBE42E52
@cdflib_gamma_ln1.s4 = internal constant double 0x3F7D3797E9248701
@cdflib_gamma_ln1.s5 = internal constant double 0x3F1E73BBAE6309A9
define double @cdflib_gamma_ln1(double* %0) {
%2 = alloca double
%3 = alloca double*
%4 = alloca double
%5 = alloca double
%6 = alloca double
store double* %0, double** %3
%7 = load double*, double** %3
%8 = load double, double* %7
%9 = fcmp oge double %8, 6.000000e-01
br i1 %9, label %10, label %11
10: ; preds = %1
br label %55
11: ; preds = %1
%12 = load double*, double** %3
%13 = load double, double* %12
%14 = call double @llvm.fmuladd.f64(double 0xBF6646E7B7A2C01C, double %13, double 0xBFB13E41E03C299D)
%15 = load double*, double** %3
%16 = load double, double* %15
%17 = call double @llvm.fmuladd.f64(double %14, double %16, double 0xBFD9BB483F4D2A05)
%18 = load double*, double** %3
%19 = load double, double* %18
%20 = call double @llvm.fmuladd.f64(double %17, double %19, double 0xBFE8F94355B395CA)
%21 = load double*, double** %3
%22 = load double, double* %21
%23 = call double @llvm.fmuladd.f64(double %20, double %22, double 0xBFC59D3953A5D4DE)
%24 = load double*, double** %3
%25 = load double, double* %24
%26 = call double @llvm.fmuladd.f64(double %23, double %25, double 0x3FEB03B7F19E5EB3)
%27 = load double*, double** %3
%28 = load double, double* %27
%29 = call double @llvm.fmuladd.f64(double %26, double %28, double 0x3FE2788CFC6FB61A)
%30 = load double*, double** %3
%31 = load double, double* %30
%32 = call double @llvm.fmuladd.f64(double 0x3F45DF1B8080E82C, double %31, double 0x3FA0A45975D0DEFB)
%33 = load double*, double** %3
%34 = load double, double* %33
%35 = call double @llvm.fmuladd.f64(double %32, double %34, double 0x3FD72A38AE0D50C1)
%36 = load double*, double** %3
%37 = load double, double* %36
%38 = call double @llvm.fmuladd.f64(double %35, double %37, double 0x3FF9199BA078F07A)
%39 = load double*, double** %3
%40 = load double, double* %39
%41 = call double @llvm.fmuladd.f64(double %38, double %40, double 0x40090539668BBEEE)
%42 = load double*, double** %3
%43 = load double, double* %42
%44 = call double @llvm.fmuladd.f64(double %41, double %43, double 0x40071975ECB828DC)
%45 = load double*, double** %3
%46 = load double, double* %45
%47 = call double @llvm.fmuladd.f64(double %44, double %46, double 1.000000e+00)
%48 = fdiv double %29, %47
store double %48, double* %5
%49 = load double*, double** %3
%50 = load double, double* %49
%51 = load double, double* %5
%52 = fmul double %50, %51
%53 = fneg double %52
store double %53, double* %4
%54 = load double, double* %4
store double %54, double* %2
br label %85
55: ; preds = %10
%56 = load double*, double** %3
%57 = load double, double* %56
%58 = fsub double %57, 5.000000e-01
%59 = fsub double %58, 5.000000e-01
store double %59, double* %6
%60 = load double, double* %6
%61 = call double @llvm.fmuladd.f64(double 0x3F40512D1BB91A1E, double %60, double 0x3F91759ECD1B09C3)
%62 = load double, double* %6
%63 = call double @llvm.fmuladd.f64(double %61, double %62, double 0x3FC4089EB617E2B8)
%64 = load double, double* %6
%65 = call double @llvm.fmuladd.f64(double %63, double %64, double 0x3FE2164A74F7718B)
%66 = load double, double* %6
%67 = call double @llvm.fmuladd.f64(double %65, double %66, double 0x3FEB232E759F30F9)
%68 = load double, double* %6
%69 = call double @llvm.fmuladd.f64(double %67, double %68, double 0x3FDB0EE6072093CC)
%70 = load double, double* %6
%71 = call double @llvm.fmuladd.f64(double 0x3F1E73BBAE6309A9, double %70, double 0x3F7D3797E9248701)
%72 = load double, double* %6
%73 = call double @llvm.fmuladd.f64(double %71, double %72, double 0x3FB9FF52FBE42E52)
%74 = load double, double* %6
%75 = call double @llvm.fmuladd.f64(double %73, double %74, double 0x3FE1898F9B51F5EA)
%76 = load double, double* %6
%77 = call double @llvm.fmuladd.f64(double %75, double %76, double 0x3FF3E3E079D48DD8)
%78 = load double, double* %6
%79 = call double @llvm.fmuladd.f64(double %77, double %78, double 1.000000e+00)
%80 = fdiv double %69, %79
store double %80, double* %5
%81 = load double, double* %6
%82 = load double, double* %5
%83 = fmul double %81, %82
store double %83, double* %4
%84 = load double, double* %4
store double %84, double* %2
br label %85
85: ; preds = %55, %11
%86 = load double, double* %2
ret double %86
}

LLVM IR (-O2):
define double @cdflib_gamma_ln1(double* nocapture %0) {
%2 = load double, double* %0
%3 = fcmp ult double %2, 6.000000e-01
br i1 %3, label %4, label %18
4: ; preds = %1
%5 = insertelement <2 x double> poison, double %2, i64 0
%6 = shufflevector <2 x double> %5, <2 x double> poison, <2 x i32> zeroinitializer
%7 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %6, <2 x double> <double 0xBF6646E7B7A2C01C, double 0x3F45DF1B8080E82C>, <2 x double> <double 0xBFB13E41E03C299D, double 0x3FA0A45975D0DEFB>)
%8 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %7, <2 x double> %6, <2 x double> <double 0xBFD9BB483F4D2A05, double 0x3FD72A38AE0D50C1>)
%9 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %8, <2 x double> %6, <2 x double> <double 0xBFE8F94355B395CA, double 0x3FF9199BA078F07A>)
%10 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %9, <2 x double> %6, <2 x double> <double 0xBFC59D3953A5D4DE, double 0x40090539668BBEEE>)
%11 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %10, <2 x double> %6, <2 x double> <double 0x3FEB03B7F19E5EB3, double 0x40071975ECB828DC>)
%12 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %11, <2 x double> %6, <2 x double> <double 0x3FE2788CFC6FB61A, double 1.000000e+00>)
%13 = extractelement <2 x double> %12, i64 0
%14 = extractelement <2 x double> %12, i64 1
%15 = fdiv double %13, %14
%16 = fneg double %2
%17 = fmul double %15, %16
br label %32
18: ; preds = %1
%19 = fadd double %2, -5.000000e-01
%20 = fadd double %19, -5.000000e-01
%21 = insertelement <2 x double> poison, double %20, i64 0
%22 = shufflevector <2 x double> %21, <2 x double> poison, <2 x i32> zeroinitializer
%23 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %22, <2 x double> <double 0x3F40512D1BB91A1E, double 0x3F1E73BBAE6309A9>, <2 x double> <double 0x3F91759ECD1B09C3, double 0x3F7D3797E9248701>)
%24 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %23, <2 x double> %22, <2 x double> <double 0x3FC4089EB617E2B8, double 0x3FB9FF52FBE42E52>)
%25 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %24, <2 x double> %22, <2 x double> <double 0x3FE2164A74F7718B, double 0x3FE1898F9B51F5EA>)
%26 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %25, <2 x double> %22, <2 x double> <double 0x3FEB232E759F30F9, double 0x3FF3E3E079D48DD8>)
%27 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %26, <2 x double> %22, <2 x double> <double 0x3FDB0EE6072093CC, double 1.000000e+00>)
%28 = extractelement <2 x double> %27, i64 0
%29 = extractelement <2 x double> %27, i64 1
%30 = fdiv double %28, %29
%31 = fmul double %20, %30
br label %32
32: ; preds = %18, %4
%33 = phi double [ %31, %18 ], [ %17, %4 ]
ret double %33
}