#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int /*<<< orphan*/ count;

/* Variables and functions */
int /*<<< orphan*/ printf(char *, double, double, double, double, double);
double *sampleStats(int *, int, int *);
int main() {
  int count[] = {
      264,   912,   1416,  1903,  2515,  3080,  3598,  4099,  4757,  5270,
      5748,  6451,  7074,  7367,  7847,  8653,  9318,  9601,  10481, 10787,
      11563, 11869, 12278, 12939, 13737, 13909, 14621, 15264, 15833, 16562,
      17135, 17491, 17982, 18731, 19127, 19579, 20524, 20941, 21347, 21800,
      22342, 21567, 21063, 20683, 20204, 19818, 19351, 18971, 18496, 17974,
      17677, 17034, 16701, 16223, 15671, 15167, 14718, 14552, 14061, 13448,
      13199, 12539, 12265, 11912, 10931, 10947, 10516, 10177, 9582,  9102,
      8699,  8091,  7864,  7330,  6915,  6492,  6013,  5513,  5140,  4701,
      4111,  3725,  3321,  2947,  2357,  1988,  1535,  1124,  664,   206,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0};
  int retsize;
  double *rec = sampleStats(count, sizeof(count) / sizeof(int), &retsize);
  printf("%f %f %f %f %f\n", rec[0], rec[1], rec[2], rec[3], rec[4]);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x420,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x410(%rbp),%rdi
lea    0xeb0(%rip),%rsi
mov    $0x400,%edx
call   1050 <memcpy@plt>
lea    -0x410(%rbp),%rdi
mov    $0x100,%esi
lea    -0x414(%rbp),%rdx
call   1040 <sampleStats@plt>
mov    %rax,-0x420(%rbp)
mov    -0x420(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x420(%rbp),%rax
movsd  0x8(%rax),%xmm1
mov    -0x420(%rbp),%rax
movsd  0x10(%rax),%xmm2
mov    -0x420(%rbp),%rax
movsd  0x18(%rax),%xmm3
mov    -0x420(%rbp),%rax
movsd  0x20(%rax),%xmm4
lea    0x1245(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x420,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x410,%rsp
lea    0xec1(%rip),%rsi
lea    0x10(%rsp),%rbx
mov    $0x400,%edx
mov    %rbx,%rdi
call   1050 <memcpy@plt>
lea    0xc(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x100,%esi
call   1040 <sampleStats@plt>
movsd  (%rax),%xmm0
movsd  0x8(%rax),%xmm1
movsd  0x10(%rax),%xmm2
movsd  0x18(%rax),%xmm3
movsd  0x20(%rax),%xmm4
lea    0x127e(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x410,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@__const.main.count = <{ [90 x i32], [166 x i32] }> <{ [90 x i32] [i32 264, i32 912, i32 1416, i32 1903, i32 2515, i32 3080, i32 3598, i32 4099, i32 4757, i32 5270, i32 5748, i32 6451, i32 7074, i32 7367, i32 7847, i32 8653, i32 9318, i32 9601, i32 10481, i32 10787, i32 11563, i32 11869, i32 12278, i32 12939, i32 13737, i32 13909, i32 14621, i32 15264, i32 15833, i32 16562, i32 17135, i32 17491, i32 17982, i32 18731, i32 19127, i32 19579, i32 20524, i32 20941, i32 21347, i32 21800, i32 22342, i32 21567, i32 21063, i32 20683, i32 20204, i32 19818, i32 19351, i32 18971, i32 18496, i32 17974, i32 17677, i32 17034, i32 16701, i32 16223, i32 15671, i32 15167, i32 14718, i32 14552, i32 14061, i32 13448, i32 13199, i32 12539, i32 12265, i32 11912, i32 10931, i32 10947, i32 10516, i32 10177, i32 9582, i32 9102, i32 8699, i32 8091, i32 7864, i32 7330, i32 6915, i32 6492, i32 6013, i32 5513, i32 5140, i32 4701, i32 4111, i32 3725, i32 3321, i32 2947, i32 2357, i32 1988, i32 1535, i32 1124, i32 664, i32 206], [166 x i32] zeroinitializer }>
@.str = [16 x i8] c"%f %f %f %f %f\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca [256 x i32]
%3 = alloca i32
%4 = alloca double*
store i32 0, i32* %1
%5 = bitcast [256 x i32]* %2 to i8*
%6 = getelementptr inbounds [256 x i32], [256 x i32]* %2, i64 0, i64 0
%7 = call double* @sampleStats(i32* %6, i32 256, i32* %3)
store double* %7, double** %4
%8 = load double*, double** %4
%9 = getelementptr inbounds double, double* %8, i64 0
%10 = load double, double* %9
%11 = load double*, double** %4
%12 = getelementptr inbounds double, double* %11, i64 1
%13 = load double, double* %12
%14 = load double*, double** %4
%15 = getelementptr inbounds double, double* %14, i64 2
%16 = load double, double* %15
%17 = load double*, double** %4
%18 = getelementptr inbounds double, double* %17, i64 3
%19 = load double, double* %18
%20 = load double*, double** %4
%21 = getelementptr inbounds double, double* %20, i64 4
%22 = load double, double* %21
%23 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str, i64 0, i64 0), double %10, double %13, double %16, double %19, double %22)
ret i32 0
}

LLVM IR (-O2):
@__const.main.count = <{ [90 x i32], [166 x i32] }> <{ [90 x i32] [i32 264, i32 912, i32 1416, i32 1903, i32 2515, i32 3080, i32 3598, i32 4099, i32 4757, i32 5270, i32 5748, i32 6451, i32 7074, i32 7367, i32 7847, i32 8653, i32 9318, i32 9601, i32 10481, i32 10787, i32 11563, i32 11869, i32 12278, i32 12939, i32 13737, i32 13909, i32 14621, i32 15264, i32 15833, i32 16562, i32 17135, i32 17491, i32 17982, i32 18731, i32 19127, i32 19579, i32 20524, i32 20941, i32 21347, i32 21800, i32 22342, i32 21567, i32 21063, i32 20683, i32 20204, i32 19818, i32 19351, i32 18971, i32 18496, i32 17974, i32 17677, i32 17034, i32 16701, i32 16223, i32 15671, i32 15167, i32 14718, i32 14552, i32 14061, i32 13448, i32 13199, i32 12539, i32 12265, i32 11912, i32 10931, i32 10947, i32 10516, i32 10177, i32 9582, i32 9102, i32 8699, i32 8091, i32 7864, i32 7330, i32 6915, i32 6492, i32 6013, i32 5513, i32 5140, i32 4701, i32 4111, i32 3725, i32 3321, i32 2947, i32 2357, i32 1988, i32 1535, i32 1124, i32 664, i32 206], [166 x i32] zeroinitializer }>
@.str = [16 x i8] c"%f %f %f %f %f\0A\00"
define i32 @main() {
%1 = alloca [256 x i32]
%2 = alloca i32
%3 = bitcast [256 x i32]* %1 to i8*
%4 = bitcast i32* %2 to i8*
%5 = getelementptr inbounds [256 x i32], [256 x i32]* %1, i64 0, i64 0
%6 = call double* @sampleStats(i32* %5, i32 256, i32* %2)
%7 = load double, double* %6
%8 = getelementptr inbounds double, double* %6, i64 1
%9 = load double, double* %8
%10 = getelementptr inbounds double, double* %6, i64 2
%11 = load double, double* %10
%12 = getelementptr inbounds double, double* %6, i64 3
%13 = load double, double* %12
%14 = getelementptr inbounds double, double* %6, i64 4
%15 = load double, double* %14
%16 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str, i64 0, i64 0), double %7, double %9, double %11, double %13, double %15)
ret i32 0
}