#include "cpucycles.h"
#include <stdlib.h>
#include <stdio.h>

void f(unsigned long long *c, 
       const unsigned long long *t0, 
       const unsigned long long *t1, 
       const unsigned long long *t2, 
       const unsigned long long *t3, 
       const unsigned long long *t4, 
       const unsigned long long *t5, 
       const unsigned long long *t6, 
       const unsigned long long *t7,
       size_t n);

int main(int argc, char **argv) {
  const size_t n = (2048>>6);
  const size_t m = 50;

  size_t i, j;
  unsigned long long *t0 = malloc(sizeof(unsigned long long)*n);
  unsigned long long *t1 = malloc(sizeof(unsigned long long)*n);
  unsigned long long *t2 = malloc(sizeof(unsigned long long)*n);
  unsigned long long *t3 = malloc(sizeof(unsigned long long)*n);
  unsigned long long *t4 = malloc(sizeof(unsigned long long)*n);
  unsigned long long *t5 = malloc(sizeof(unsigned long long)*n);
  unsigned long long *t6 = malloc(sizeof(unsigned long long)*n);
  unsigned long long *t7 = malloc(sizeof(unsigned long long)*n);
  unsigned long long *t8 = malloc(sizeof(unsigned long long)*n);
  unsigned long long *c = malloc(sizeof(unsigned long long)*n);

  unsigned long long t = cpucycles();

  for(j=0; j<m; j++) {
    f(c,t0,t1,t2,t3,t4,t5,t6,t7,n);
  }
  double cycles = ((double)(cpucycles() - t)) / (n*m);
  printf("%lf\n",cycles);
}
