void cdflib_negative_binomial_cdf_values(int *n_data, int *f, int *s, double *p,
                                         double *cdf) {
  enum { N_MAX = 27 };
  static const double cdf_vec[N_MAX] = {
      0.6367, 0.3633, 0.1445, 0.5000, 0.2266, 0.0625, 0.3438, 0.1094, 0.0156,
      0.1792, 0.0410, 0.0041, 0.0705, 0.0109, 0.0007, 0.9862, 0.9150, 0.7472,
      0.8499, 0.5497, 0.2662, 0.6513, 0.2639, 0.0702, 1.0000, 0.0199, 0.0001};
  static const int f_vec[N_MAX] = {4,  3,  2,  3, 2, 1, 2,  1,  0,
                                   2,  1,  0,  2, 1, 0, 11, 10, 9,
                                   17, 16, 15, 9, 8, 7, 2,  1,  0};
  static const double p_vec[N_MAX] = {0.50, 0.50, 0.50, 0.50, 0.50, 0.50, 0.50,
                                      0.50, 0.50, 0.40, 0.40, 0.40, 0.30, 0.30,
                                      0.30, 0.30, 0.30, 0.30, 0.10, 0.10, 0.10,
                                      0.10, 0.10, 0.10, 0.01, 0.01, 0.01};
  static const int s_vec[N_MAX] = {4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5,
                                   6, 1, 2, 3, 1, 2, 3, 1, 2, 3, 0, 1, 2};
  if (n_data < 0) {
    *n_data = 0;
  }
  *n_data = *n_data + 1;
  if (N_MAX < *n_data) {
    *n_data = 0;
    *f = 0;
    *s = 0;
    *p = 0.0E+00;
    *cdf = 0.0E+00;
  } else {
    *f = f_vec[*n_data - 1];
    *s = s_vec[*n_data - 1];
    *p = p_vec[*n_data - 1];
    *cdf = cdf_vec[*n_data - 1];
  }
  return;
}


x86 assembly (clang, -O0):
<cdflib_negative_binomial_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)
cmpq   $0x0,-0x8(%rbp)
jae    112d <cdflib_negative_binomial_cdf_values+0x2d>
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    $0x1b,%eax
cmp    (%rcx),%eax
jge    1186 <cdflib_negative_binomial_cdf_values+0x86>
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)
jmp    11fe <cdflib_negative_binomial_cdf_values+0xfe>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    0xf47(%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    0x107b(%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    0xf7f(%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    0xe0f(%rip),%rax
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<cdflib_negative_binomial_cdf_values>:
movslq (%rdi),%r9
lea    0x1(%r9),%eax
mov    %eax,(%rdi)
cmp    $0x1b,%r9
jl     1131 <cdflib_negative_binomial_cdf_values+0x31>
movl   $0x0,(%rdi)
movl   $0x0,(%rsi)
movl   $0x0,(%rdx)
movq   $0x0,(%rcx)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%r8)
ret
lea    0xfa8(%rip),%rax
mov    (%rax,%r9,4),%eax
mov    %eax,(%rsi)
movslq (%rdi),%rax
lea    0x10e8(%rip),%rsi
mov    -0x4(%rsi,%rax,4),%eax
mov    %eax,(%rdx)
movslq (%rdi),%rax
lea    0xff8(%rip),%rdx
movsd  -0x8(%rdx,%rax,8),%xmm0
movsd  %xmm0,(%rcx)
lea    0xe97(%rip),%rcx
movsd  -0x8(%rcx,%rax,8),%xmm0
movsd  %xmm0,(%r8)
ret

LLVM IR (-O0):
@cdflib_negative_binomial_cdf_values.cdf_vec = internal constant [27 x double] [double 6.367000e-01, double 3.633000e-01, double 1.445000e-01, double 5.000000e-01, double 2.266000e-01, double 6.250000e-02, double 3.438000e-01, double 1.094000e-01, double 1.560000e-02, double 1.792000e-01, double 4.100000e-02, double 4.100000e-03, double 0x3FB20C49BA5E353F, double 1.090000e-02, double 7.000000e-04, double 0x3FEF8EF34D6A161E, double 9.150000e-01, double 7.472000e-01, double 8.499000e-01, double 5.497000e-01, double 2.662000e-01, double 6.513000e-01, double 2.639000e-01, double 0x3FB1F8A0902DE00D, double 1.000000e+00, double 1.990000e-02, double 1.000000e-04]
@cdflib_negative_binomial_cdf_values.f_vec = internal constant [27 x i32] [i32 4, i32 3, i32 2, i32 3, i32 2, i32 1, i32 2, i32 1, i32 0, i32 2, i32 1, i32 0, i32 2, i32 1, i32 0, i32 11, i32 10, i32 9, i32 17, i32 16, i32 15, i32 9, i32 8, i32 7, i32 2, i32 1, i32 0]
@cdflib_negative_binomial_cdf_values.p_vec = internal constant [27 x double] [double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 4.000000e-01, double 4.000000e-01, double 4.000000e-01, double 3.000000e-01, double 3.000000e-01, double 3.000000e-01, double 3.000000e-01, double 3.000000e-01, double 3.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-02, double 1.000000e-02, double 1.000000e-02]
@cdflib_negative_binomial_cdf_values.s_vec = internal constant [27 x i32] [i32 4, i32 5, i32 6, i32 4, i32 5, i32 6, i32 4, i32 5, i32 6, i32 4, i32 5, i32 6, i32 4, i32 5, i32 6, i32 1, i32 2, i32 3, i32 1, i32 2, i32 3, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2]
define void @cdflib_negative_binomial_cdf_values(i32* %0, i32* %1, i32* %2, double* %3, double* %4) {
%6 = alloca i32*
%7 = alloca i32*
%8 = alloca i32*
%9 = alloca double*
%10 = alloca double*
store i32* %0, i32** %6
store i32* %1, i32** %7
store i32* %2, i32** %8
store double* %3, double** %9
store double* %4, double** %10
%11 = load i32*, i32** %6
%12 = icmp ult i32* %11, null
br i1 %12, label %13, label %15
13: ; preds = %5
%14 = load i32*, i32** %6
store i32 0, i32* %14
br label %15
15: ; preds = %13, %5
%16 = load i32*, i32** %6
%17 = load i32, i32* %16
%18 = add nsw i32 %17, 1
%19 = load i32*, i32** %6
store i32 %18, i32* %19
%20 = load i32*, i32** %6
%21 = load i32, i32* %20
%22 = icmp slt i32 27, %21
br i1 %22, label %23, label %29
23: ; preds = %15
%24 = load i32*, i32** %6
store i32 0, i32* %24
%25 = load i32*, i32** %7
store i32 0, i32* %25
%26 = load i32*, i32** %8
store i32 0, i32* %26
%27 = load double*, double** %9
store double 0.000000e+00, double* %27
%28 = load double*, double** %10
store double 0.000000e+00, double* %28
br label %58
29: ; preds = %15
%30 = load i32*, i32** %6
%31 = load i32, i32* %30
%32 = sub nsw i32 %31, 1
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [27 x i32], [27 x i32]* @cdflib_negative_binomial_cdf_values.f_vec, i64 0, i64 %33
%35 = load i32, i32* %34
%36 = load i32*, i32** %7
store i32 %35, i32* %36
%37 = load i32*, i32** %6
%38 = load i32, i32* %37
%39 = sub nsw i32 %38, 1
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [27 x i32], [27 x i32]* @cdflib_negative_binomial_cdf_values.s_vec, i64 0, i64 %40
%42 = load i32, i32* %41
%43 = load i32*, i32** %8
store i32 %42, i32* %43
%44 = load i32*, i32** %6
%45 = load i32, i32* %44
%46 = sub nsw i32 %45, 1
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [27 x double], [27 x double]* @cdflib_negative_binomial_cdf_values.p_vec, i64 0, i64 %47
%49 = load double, double* %48
%50 = load double*, double** %9
store double %49, double* %50
%51 = load i32*, i32** %6
%52 = load i32, i32* %51
%53 = sub nsw i32 %52, 1
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [27 x double], [27 x double]* @cdflib_negative_binomial_cdf_values.cdf_vec, i64 0, i64 %54
%56 = load double, double* %55
%57 = load double*, double** %10
store double %56, double* %57
br label %58
58: ; preds = %29, %23
ret void
}

LLVM IR (-O2):
@cdflib_negative_binomial_cdf_values.cdf_vec = internal unnamed_addr constant [27 x double] [double 6.367000e-01, double 3.633000e-01, double 1.445000e-01, double 5.000000e-01, double 2.266000e-01, double 6.250000e-02, double 3.438000e-01, double 1.094000e-01, double 1.560000e-02, double 1.792000e-01, double 4.100000e-02, double 4.100000e-03, double 0x3FB20C49BA5E353F, double 1.090000e-02, double 7.000000e-04, double 0x3FEF8EF34D6A161E, double 9.150000e-01, double 7.472000e-01, double 8.499000e-01, double 5.497000e-01, double 2.662000e-01, double 6.513000e-01, double 2.639000e-01, double 0x3FB1F8A0902DE00D, double 1.000000e+00, double 1.990000e-02, double 1.000000e-04]
@cdflib_negative_binomial_cdf_values.f_vec = internal unnamed_addr constant [27 x i32] [i32 4, i32 3, i32 2, i32 3, i32 2, i32 1, i32 2, i32 1, i32 0, i32 2, i32 1, i32 0, i32 2, i32 1, i32 0, i32 11, i32 10, i32 9, i32 17, i32 16, i32 15, i32 9, i32 8, i32 7, i32 2, i32 1, i32 0]
@cdflib_negative_binomial_cdf_values.p_vec = internal unnamed_addr constant [27 x double] [double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 5.000000e-01, double 4.000000e-01, double 4.000000e-01, double 4.000000e-01, double 3.000000e-01, double 3.000000e-01, double 3.000000e-01, double 3.000000e-01, double 3.000000e-01, double 3.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-01, double 1.000000e-02, double 1.000000e-02, double 1.000000e-02]
@cdflib_negative_binomial_cdf_values.s_vec = internal unnamed_addr constant [27 x i32] [i32 4, i32 5, i32 6, i32 4, i32 5, i32 6, i32 4, i32 5, i32 6, i32 4, i32 5, i32 6, i32 4, i32 5, i32 6, i32 1, i32 2, i32 3, i32 1, i32 2, i32 3, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2]
define void @cdflib_negative_binomial_cdf_values(i32* nocapture %0, i32* nocapture writeonly %1, i32* nocapture writeonly %2, double* nocapture writeonly %3, double* nocapture writeonly %4) {
%6 = load i32, i32* %0
%7 = add nsw i32 %6, 1
store i32 %7, i32* %0
%8 = icmp sgt i32 %6, 26
br i1 %8, label %9, label %10
9: ; preds = %5
store i32 0, i32* %0
store i32 0, i32* %1
store i32 0, i32* %2
store double 0.000000e+00, double* %3
br label %26
10: ; preds = %5
%11 = sext i32 %6 to i64
%12 = getelementptr inbounds [27 x i32], [27 x i32]* @cdflib_negative_binomial_cdf_values.f_vec, i64 0, i64 %11
%13 = load i32, i32* %12
store i32 %13, i32* %1
%14 = load i32, i32* %0
%15 = add nsw i32 %14, -1
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds [27 x i32], [27 x i32]* @cdflib_negative_binomial_cdf_values.s_vec, i64 0, i64 %16
%18 = load i32, i32* %17
store i32 %18, i32* %2
%19 = load i32, i32* %0
%20 = add nsw i32 %19, -1
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds [27 x double], [27 x double]* @cdflib_negative_binomial_cdf_values.p_vec, i64 0, i64 %21
%23 = load double, double* %22
store double %23, double* %3
%24 = getelementptr inbounds [27 x double], [27 x double]* @cdflib_negative_binomial_cdf_values.cdf_vec, i64 0, i64 %21
%25 = load double, double* %24
br label %26
26: ; preds = %10, %9
%27 = phi double [ %25, %10 ], [ 0.000000e+00, %9 ]
store double %27, double* %4
ret void
}