void cdflib_f_noncentral_cdf_values(int *n_data, int *a, int *b, double *lambda,
                                    double *x, double *fx) {
  enum { N_MAX = 22 };
  static const int a_vec[N_MAX] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
                                   2, 3, 3, 4, 4, 5, 5, 6, 6, 8, 16};
  static const int b_vec[N_MAX] = {1,  5, 5, 5, 5, 5, 5, 5, 5,  5,  5,
                                   10, 5, 5, 5, 5, 1, 5, 6, 12, 16, 8};
  static const double fx_vec[N_MAX] = {
      0.500000E+00, 0.636783E+00, 0.584092E+00, 0.323443E+00, 0.450119E+00,
      0.607888E+00, 0.705928E+00, 0.772178E+00, 0.819105E+00, 0.317035E+00,
      0.432722E+00, 0.450270E+00, 0.426188E+00, 0.337744E+00, 0.422911E+00,
      0.692767E+00, 0.363217E+00, 0.421005E+00, 0.426667E+00, 0.446402E+00,
      0.844589E+00, 0.816368E+00};
  static const double lambda_vec[N_MAX] = {
      0.00E+00, 0.000E+00, 0.25E+00, 1.00E+00, 1.00E+00, 1.00E+00,
      1.00E+00, 1.00E+00,  1.00E+00, 2.00E+00, 1.00E+00, 1.00E+00,
      1.00E+00, 2.00E+00,  1.00E+00, 1.00E+00, 0.00E+00, 1.00E+00,
      1.00E+00, 1.00E+00,  1.00E+00, 1.00E+00};
  static const double x_vec[N_MAX] = {
      1.00E+00, 1.00E+00, 1.00E+00, 0.50E+00, 1.00E+00, 2.00E+00,
      3.00E+00, 4.00E+00, 5.00E+00, 1.00E+00, 1.00E+00, 1.00E+00,
      1.00E+00, 1.00E+00, 1.00E+00, 2.00E+00, 1.00E+00, 1.00E+00,
      1.00E+00, 1.00E+00, 2.00E+00, 2.00E+00};
  if (*n_data < 0) {
    *n_data = 0;
  }
  *n_data = *n_data + 1;
  if (N_MAX < *n_data) {
    *n_data = 0;
    *a = 0;
    *b = 0;
    *lambda = 0.0E+00;
    *x = 0.0E+00;
    *fx = 0.0E+00;
  } else {
    *a = a_vec[*n_data - 1];
    *b = b_vec[*n_data - 1];
    *lambda = lambda_vec[*n_data - 1];
    *x = x_vec[*n_data - 1];
    *fx = fx_vec[*n_data - 1];
  }
  return;
}


x86 assembly (clang, -O0):
<cdflib_f_noncentral_cdf_values>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rax
cmpl   $0x0,(%rax)
jge    1133 <cdflib_f_noncentral_cdf_values+0x33>
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    $0x16,%eax
cmp    (%rcx),%eax
jge    1197 <cdflib_f_noncentral_cdf_values+0x97>
mov    -0x8(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x20(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
jmp    122f <cdflib_f_noncentral_cdf_values+0x12f>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0xe56(%rip),%rax
mov    (%rax,%rcx,4),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0xe9a(%rip),%rax
mov    (%rax,%rcx,4),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0xf8e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0x101e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0xe9e(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<cdflib_f_noncentral_cdf_values>:
mov    (%rdi),%r10d
test   %r10d,%r10d
js     113d <cdflib_f_noncentral_cdf_values+0x3d>
lea    0x1(%r10),%eax
mov    %eax,(%rdi)
cmp    $0x16,%r10d
jb     1146 <cdflib_f_noncentral_cdf_values+0x46>
movl   $0x0,(%rdi)
movl   $0x0,(%rsi)
movl   $0x0,(%rdx)
movq   $0x0,(%rcx)
movq   $0x0,(%r8)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%r9)
ret
movl   $0x1,(%rdi)
xor    %r10d,%r10d
mov    %r10d,%r10d
lea    0xeb0(%rip),%rax
mov    (%rax,%r10,4),%eax
mov    %eax,(%rsi)
movslq (%rdi),%rax
lea    0xf00(%rip),%rsi
mov    -0x4(%rsi,%rax,4),%eax
mov    %eax,(%rdx)
movslq (%rdi),%rax
lea    0x1000(%rip),%rdx
movsd  -0x8(%rdx,%rax,8),%xmm0
movsd  %xmm0,(%rcx)
lea    0x109f(%rip),%rcx
movsd  -0x8(%rcx,%rax,8),%xmm0
movsd  %xmm0,(%r8)
lea    0xf2d(%rip),%rcx
movsd  -0x8(%rcx,%rax,8),%xmm0
movsd  %xmm0,(%r9)
ret

LLVM IR (-O0):
@cdflib_f_noncentral_cdf_values.a_vec = internal constant [22 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3, i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 8, i32 16]
@cdflib_f_noncentral_cdf_values.b_vec = internal constant [22 x i32] [i32 1, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 10, i32 5, i32 5, i32 5, i32 5, i32 1, i32 5, i32 6, i32 12, i32 16, i32 8]
@cdflib_f_noncentral_cdf_values.fx_vec = internal constant [22 x double] [double 5.000000e-01, double 6.367830e-01, double 5.840920e-01, double 3.234430e-01, double 4.501190e-01, double 6.078880e-01, double 7.059280e-01, double 7.721780e-01, double 0x3FEA361BB05FAEBC, double 3.170350e-01, double 4.327220e-01, double 4.502700e-01, double 4.261880e-01, double 3.377440e-01, double 4.229110e-01, double 6.927670e-01, double 3.632170e-01, double 4.210050e-01, double 4.266670e-01, double 4.464020e-01, double 8.445890e-01, double 0x3FEA1FAFC8B0079A]
@cdflib_f_noncentral_cdf_values.lambda_vec = internal constant [22 x double] [double 0.000000e+00, double 0.000000e+00, double 2.500000e-01, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 2.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 2.000000e+00, double 1.000000e+00, double 1.000000e+00, double 0.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00]
@cdflib_f_noncentral_cdf_values.x_vec = internal constant [22 x double] [double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 5.000000e-01, double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 2.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 2.000000e+00, double 2.000000e+00]
define void @cdflib_f_noncentral_cdf_values(i32* %0, i32* %1, i32* %2, double* %3, double* %4, double* %5) {
%7 = alloca i32*
%8 = alloca i32*
%9 = alloca i32*
%10 = alloca double*
%11 = alloca double*
%12 = alloca double*
store i32* %0, i32** %7
store i32* %1, i32** %8
store i32* %2, i32** %9
store double* %3, double** %10
store double* %4, double** %11
store double* %5, double** %12
%13 = load i32*, i32** %7
%14 = load i32, i32* %13
%15 = icmp slt i32 %14, 0
br i1 %15, label %16, label %18
16: ; preds = %6
%17 = load i32*, i32** %7
store i32 0, i32* %17
br label %18
18: ; preds = %16, %6
%19 = load i32*, i32** %7
%20 = load i32, i32* %19
%21 = add nsw i32 %20, 1
%22 = load i32*, i32** %7
store i32 %21, i32* %22
%23 = load i32*, i32** %7
%24 = load i32, i32* %23
%25 = icmp slt i32 22, %24
br i1 %25, label %26, label %33
26: ; preds = %18
%27 = load i32*, i32** %7
store i32 0, i32* %27
%28 = load i32*, i32** %8
store i32 0, i32* %28
%29 = load i32*, i32** %9
store i32 0, i32* %29
%30 = load double*, double** %10
store double 0.000000e+00, double* %30
%31 = load double*, double** %11
store double 0.000000e+00, double* %31
%32 = load double*, double** %12
store double 0.000000e+00, double* %32
br label %69
33: ; preds = %18
%34 = load i32*, i32** %7
%35 = load i32, i32* %34
%36 = sub nsw i32 %35, 1
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds [22 x i32], [22 x i32]* @cdflib_f_noncentral_cdf_values.a_vec, i64 0, i64 %37
%39 = load i32, i32* %38
%40 = load i32*, i32** %8
store i32 %39, i32* %40
%41 = load i32*, i32** %7
%42 = load i32, i32* %41
%43 = sub nsw i32 %42, 1
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds [22 x i32], [22 x i32]* @cdflib_f_noncentral_cdf_values.b_vec, i64 0, i64 %44
%46 = load i32, i32* %45
%47 = load i32*, i32** %9
store i32 %46, i32* %47
%48 = load i32*, i32** %7
%49 = load i32, i32* %48
%50 = sub nsw i32 %49, 1
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds [22 x double], [22 x double]* @cdflib_f_noncentral_cdf_values.lambda_vec, i64 0, i64 %51
%53 = load double, double* %52
%54 = load double*, double** %10
store double %53, double* %54
%55 = load i32*, i32** %7
%56 = load i32, i32* %55
%57 = sub nsw i32 %56, 1
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [22 x double], [22 x double]* @cdflib_f_noncentral_cdf_values.x_vec, i64 0, i64 %58
%60 = load double, double* %59
%61 = load double*, double** %11
store double %60, double* %61
%62 = load i32*, i32** %7
%63 = load i32, i32* %62
%64 = sub nsw i32 %63, 1
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds [22 x double], [22 x double]* @cdflib_f_noncentral_cdf_values.fx_vec, i64 0, i64 %65
%67 = load double, double* %66
%68 = load double*, double** %12
store double %67, double* %68
br label %69
69: ; preds = %33, %26
ret void
}

LLVM IR (-O2):
@cdflib_f_noncentral_cdf_values.a_vec = internal unnamed_addr constant [22 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 2, i32 2, i32 3, i32 3, i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 8, i32 16]
@cdflib_f_noncentral_cdf_values.b_vec = internal unnamed_addr constant [22 x i32] [i32 1, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 10, i32 5, i32 5, i32 5, i32 5, i32 1, i32 5, i32 6, i32 12, i32 16, i32 8]
@cdflib_f_noncentral_cdf_values.fx_vec = internal unnamed_addr constant [22 x double] [double 5.000000e-01, double 6.367830e-01, double 5.840920e-01, double 3.234430e-01, double 4.501190e-01, double 6.078880e-01, double 7.059280e-01, double 7.721780e-01, double 0x3FEA361BB05FAEBC, double 3.170350e-01, double 4.327220e-01, double 4.502700e-01, double 4.261880e-01, double 3.377440e-01, double 4.229110e-01, double 6.927670e-01, double 3.632170e-01, double 4.210050e-01, double 4.266670e-01, double 4.464020e-01, double 8.445890e-01, double 0x3FEA1FAFC8B0079A]
@cdflib_f_noncentral_cdf_values.lambda_vec = internal unnamed_addr constant [22 x double] [double 0.000000e+00, double 0.000000e+00, double 2.500000e-01, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 2.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 2.000000e+00, double 1.000000e+00, double 1.000000e+00, double 0.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00]
@cdflib_f_noncentral_cdf_values.x_vec = internal unnamed_addr constant [22 x double] [double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 5.000000e-01, double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00, double 5.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 2.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 2.000000e+00, double 2.000000e+00]
define void @cdflib_f_noncentral_cdf_values(i32* nocapture %0, i32* nocapture writeonly %1, i32* nocapture writeonly %2, double* nocapture writeonly %3, double* nocapture writeonly %4, double* nocapture writeonly %5) {
%7 = load i32, i32* %0
%8 = icmp slt i32 %7, 0
br i1 %8, label %9, label %10
9: ; preds = %6
store i32 1, i32* %0
br label %14
10: ; preds = %6
%11 = add nuw nsw i32 %7, 1
store i32 %11, i32* %0
%12 = icmp ugt i32 %7, 21
br i1 %12, label %13, label %14
13: ; preds = %10
store i32 0, i32* %0
store i32 0, i32* %1
store i32 0, i32* %2
store double 0.000000e+00, double* %3
store double 0.000000e+00, double* %4
br label %33
14: ; preds = %9, %10
%15 = phi i32 [ 0, %9 ], [ %7, %10 ]
%16 = zext i32 %15 to i64
%17 = getelementptr inbounds [22 x i32], [22 x i32]* @cdflib_f_noncentral_cdf_values.a_vec, i64 0, i64 %16
%18 = load i32, i32* %17
store i32 %18, i32* %1
%19 = load i32, i32* %0
%20 = add nsw i32 %19, -1
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [22 x i32], [22 x i32]* @cdflib_f_noncentral_cdf_values.b_vec, i64 0, i64 %21
%23 = load i32, i32* %22
store i32 %23, i32* %2
%24 = load i32, i32* %0
%25 = add nsw i32 %24, -1
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds [22 x double], [22 x double]* @cdflib_f_noncentral_cdf_values.lambda_vec, i64 0, i64 %26
%28 = load double, double* %27
store double %28, double* %3
%29 = getelementptr inbounds [22 x double], [22 x double]* @cdflib_f_noncentral_cdf_values.x_vec, i64 0, i64 %26
%30 = load double, double* %29
store double %30, double* %4
%31 = getelementptr inbounds [22 x double], [22 x double]* @cdflib_f_noncentral_cdf_values.fx_vec, i64 0, i64 %26
%32 = load double, double* %31
br label %33
33: ; preds = %14, %13
%34 = phi double [ %32, %14 ], [ 0.000000e+00, %13 ]
store double %34, double* %5
ret void
}