void cdflib_gamma_inc_values(int *n_data, double *a, double *x, double *fx) {
  enum { N_MAX = 20 };
  static const double a_vec[N_MAX] = {
      0.1E+00, 0.1E+00, 0.1E+00, 0.5E+00,  0.5E+00,  0.5E+00, 1.0E+00,
      1.0E+00, 1.0E+00, 1.1E+00, 1.1E+00,  1.1E+00,  2.0E+00, 2.0E+00,
      2.0E+00, 6.0E+00, 6.0E+00, 11.0E+00, 26.0E+00, 41.0E+00};
  static const double fx_vec[N_MAX] = {
      0.7420263E+00, 0.9119753E+00, 0.9898955E+00, 0.2931279E+00,
      0.7656418E+00, 0.9921661E+00, 0.0951626E+00, 0.6321206E+00,
      0.9932621E+00, 0.0757471E+00, 0.6076457E+00, 0.9933425E+00,
      0.0091054E+00, 0.4130643E+00, 0.9931450E+00, 0.0387318E+00,
      0.9825937E+00, 0.9404267E+00, 0.4863866E+00, 0.7359709E+00};
  static const double x_vec[N_MAX] = {
      3.1622777E-02, 3.1622777E-01, 1.5811388E+00, 7.0710678E-02,
      7.0710678E-01, 3.5355339E+00, 0.1000000E+00, 1.0000000E+00,
      5.0000000E+00, 1.0488088E-01, 1.0488088E+00, 5.2440442E+00,
      1.4142136E-01, 1.4142136E+00, 7.0710678E+00, 2.4494897E+00,
      1.2247449E+01, 1.6583124E+01, 2.5495098E+01, 4.4821870E+01};
  if (*n_data < 0) {
    *n_data = 0;
  }
  *n_data = *n_data + 1;
  if (N_MAX < *n_data) {
    *n_data = 0;
    *a = 0.0E+00;
    *x = 0.0E+00;
    *fx = 0.0E+00;
  } else {
    *a = a_vec[*n_data - 1];
    *x = x_vec[*n_data - 1];
    *fx = fx_vec[*n_data - 1];
  }
  return;
}


x86 assembly (clang, -O0):
<cdflib_gamma_inc_values>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x8(%rbp),%rax
cmpl   $0x0,(%rax)
jge    112b <cdflib_gamma_inc_values+0x2b>
mov    -0x8(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    -0x8(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rcx
mov    $0x14,%eax
cmp    (%rcx),%eax
jge    117b <cdflib_gamma_inc_values+0x7b>
mov    -0x8(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
jmp    11db <cdflib_gamma_inc_values+0xdb>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0xe72(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0xf92(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0xed2(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<cdflib_gamma_inc_values>:
mov    (%rdi),%r8d
test   %r8d,%r8d
js     1130 <cdflib_gamma_inc_values+0x30>
lea    0x1(%r8),%eax
mov    %eax,(%rdi)
cmp    $0x14,%r8d
jb     1139 <cdflib_gamma_inc_values+0x39>
movl   $0x0,(%rdi)
movq   $0x0,(%rsi)
movq   $0x0,(%rdx)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rcx)
ret
movl   $0x1,(%rdi)
xor    %r8d,%r8d
mov    %r8d,%eax
lea    0xebd(%rip),%rdi
movsd  (%rdi,%rax,8),%xmm0
movsd  %xmm0,(%rsi)
lea    0xfed(%rip),%rsi
movsd  (%rsi,%rax,8),%xmm0
movsd  %xmm0,(%rdx)
lea    0xf3d(%rip),%rdx
movsd  (%rdx,%rax,8),%xmm0
movsd  %xmm0,(%rcx)
ret

LLVM IR (-O0):
@cdflib_gamma_inc_values.a_vec = internal constant [20 x double] [double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.100000e+00, double 1.100000e+00, double 1.100000e+00, double 2.000000e+00, double 2.000000e+00, double 2.000000e+00, double 6.000000e+00, double 6.000000e+00, double 1.100000e+01, double 2.600000e+01, double 4.100000e+01]
@cdflib_gamma_inc_values.fx_vec = internal constant [20 x double] [double 0x3FE7BEADF068B348, double 0x3FED2EE6D3085031, double 0x3FEFAD3953DEA466, double 0x3FD2C29B8602E3E0, double 0x3FE880233B6E6B18, double 0x3FEFBFD31EF6654D, double 0x3FB85C937ECD6579, double 0x3FE43A54FB0417BD, double 0x3FEFC8CD997B66A9, double 0x3FB3642975444FBB, double 0x3FE371D56521C2C8, double 0x3FEFC97635E7429A, double 0x3F82A5DA19BC69A8, double 0x3FDA6FA53EE949DB, double 0x3FEFC7D805E5F30E, double 3.873180e-02, double 0x3FEF716857D82E2A, double 0x3FEE17F9BC192062, double 0x3FDF20F5430D9BCA, double 0x3FE78D12D849D891]
@cdflib_gamma_inc_values.x_vec = internal constant [20 x double] [double 0x3FA030DC520C2289, double 0x3FD43D13668F2B2C, double 0x3FF94C5832C6FCA9, double 0x3FB21A18517CECB2, double 0x3FE6A09E65DC27DF, double 0x400C48C5FF5331D6, double 1.000000e-01, double 1.000000e+00, double 5.000000e+00, double 0x3FBAD9792D93611B, double 0x3FF0C7EBBC7C1CB1, double 0x4014F9E6B9071D2B, double 0x3FC21A185A13F2A6, double 0x3FF6A09E7098EF50, double 0x401C48C5FF5331D6, double 0x4003988E0E4B1C5E, double 0x40287EB1A2A4DB16, double 0x403095479D4D8341, double 0x40397EBEBE1650A4, double 0x404669330941C821]
define void @cdflib_gamma_inc_values(i32* %0, double* %1, double* %2, double* %3) {
%5 = alloca i32*
%6 = alloca double*
%7 = alloca double*
%8 = alloca double*
store i32* %0, i32** %5
store double* %1, double** %6
store double* %2, double** %7
store double* %3, double** %8
%9 = load i32*, i32** %5
%10 = load i32, i32* %9
%11 = icmp slt i32 %10, 0
br i1 %11, label %12, label %14
12: ; preds = %4
%13 = load i32*, i32** %5
store i32 0, i32* %13
br label %14
14: ; preds = %12, %4
%15 = load i32*, i32** %5
%16 = load i32, i32* %15
%17 = add nsw i32 %16, 1
%18 = load i32*, i32** %5
store i32 %17, i32* %18
%19 = load i32*, i32** %5
%20 = load i32, i32* %19
%21 = icmp slt i32 20, %20
br i1 %21, label %22, label %27
22: ; preds = %14
%23 = load i32*, i32** %5
store i32 0, i32* %23
%24 = load double*, double** %6
store double 0.000000e+00, double* %24
%25 = load double*, double** %7
store double 0.000000e+00, double* %25
%26 = load double*, double** %8
store double 0.000000e+00, double* %26
br label %49
27: ; preds = %14
%28 = load i32*, i32** %5
%29 = load i32, i32* %28
%30 = sub nsw i32 %29, 1
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds [20 x double], [20 x double]* @cdflib_gamma_inc_values.a_vec, i64 0, i64 %31
%33 = load double, double* %32
%34 = load double*, double** %6
store double %33, double* %34
%35 = load i32*, i32** %5
%36 = load i32, i32* %35
%37 = sub nsw i32 %36, 1
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds [20 x double], [20 x double]* @cdflib_gamma_inc_values.x_vec, i64 0, i64 %38
%40 = load double, double* %39
%41 = load double*, double** %7
store double %40, double* %41
%42 = load i32*, i32** %5
%43 = load i32, i32* %42
%44 = sub nsw i32 %43, 1
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds [20 x double], [20 x double]* @cdflib_gamma_inc_values.fx_vec, i64 0, i64 %45
%47 = load double, double* %46
%48 = load double*, double** %8
store double %47, double* %48
br label %49
49: ; preds = %27, %22
ret void
}

LLVM IR (-O2):
@cdflib_gamma_inc_values.a_vec = internal unnamed_addr constant [20 x double] [double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.100000e+00, double 1.100000e+00, double 1.100000e+00, double 2.000000e+00, double 2.000000e+00, double 2.000000e+00, double 6.000000e+00, double 6.000000e+00, double 1.100000e+01, double 2.600000e+01, double 4.100000e+01]
@cdflib_gamma_inc_values.fx_vec = internal unnamed_addr constant [20 x double] [double 0x3FE7BEADF068B348, double 0x3FED2EE6D3085031, double 0x3FEFAD3953DEA466, double 0x3FD2C29B8602E3E0, double 0x3FE880233B6E6B18, double 0x3FEFBFD31EF6654D, double 0x3FB85C937ECD6579, double 0x3FE43A54FB0417BD, double 0x3FEFC8CD997B66A9, double 0x3FB3642975444FBB, double 0x3FE371D56521C2C8, double 0x3FEFC97635E7429A, double 0x3F82A5DA19BC69A8, double 0x3FDA6FA53EE949DB, double 0x3FEFC7D805E5F30E, double 3.873180e-02, double 0x3FEF716857D82E2A, double 0x3FEE17F9BC192062, double 0x3FDF20F5430D9BCA, double 0x3FE78D12D849D891]
@cdflib_gamma_inc_values.x_vec = internal unnamed_addr constant [20 x double] [double 0x3FA030DC520C2289, double 0x3FD43D13668F2B2C, double 0x3FF94C5832C6FCA9, double 0x3FB21A18517CECB2, double 0x3FE6A09E65DC27DF, double 0x400C48C5FF5331D6, double 1.000000e-01, double 1.000000e+00, double 5.000000e+00, double 0x3FBAD9792D93611B, double 0x3FF0C7EBBC7C1CB1, double 0x4014F9E6B9071D2B, double 0x3FC21A185A13F2A6, double 0x3FF6A09E7098EF50, double 0x401C48C5FF5331D6, double 0x4003988E0E4B1C5E, double 0x40287EB1A2A4DB16, double 0x403095479D4D8341, double 0x40397EBEBE1650A4, double 0x404669330941C821]
define void @cdflib_gamma_inc_values(i32* nocapture %0, double* nocapture writeonly %1, double* nocapture writeonly %2, double* nocapture writeonly %3) {
%5 = load i32, i32* %0
%6 = icmp slt i32 %5, 0
br i1 %6, label %7, label %8
7: ; preds = %4
store i32 1, i32* %0
br label %12
8: ; preds = %4
%9 = add nuw nsw i32 %5, 1
store i32 %9, i32* %0
%10 = icmp ugt i32 %5, 19
br i1 %10, label %11, label %12
11: ; preds = %8
store i32 0, i32* %0
store double 0.000000e+00, double* %1
store double 0.000000e+00, double* %2
br label %21
12: ; preds = %7, %8
%13 = phi i32 [ 0, %7 ], [ %5, %8 ]
%14 = zext i32 %13 to i64
%15 = getelementptr inbounds [20 x double], [20 x double]* @cdflib_gamma_inc_values.a_vec, i64 0, i64 %14
%16 = load double, double* %15
store double %16, double* %1
%17 = getelementptr inbounds [20 x double], [20 x double]* @cdflib_gamma_inc_values.x_vec, i64 0, i64 %14
%18 = load double, double* %17
store double %18, double* %2
%19 = getelementptr inbounds [20 x double], [20 x double]* @cdflib_gamma_inc_values.fx_vec, i64 0, i64 %14
%20 = load double, double* %19
br label %21
21: ; preds = %12, %11
%22 = phi double [ %20, %12 ], [ 0.000000e+00, %11 ]
store double %22, double* %3
ret void
}