/*----------------------------------------------------------------------------*/

/*
 * Performance-Monitoring Counters Library, for Intel/AMD Processors and Linux
 * Author:  Don Heller, dheller@scl.ameslab.gov
 * Last revised:  19 January 2001
 */

/*----------------------------------------------------------------------------*/

#include <stdio.h>

#define len (10000*3)

static double bar[len];

int main(int argc, char *argv[])
{
  int i = 0, j = 0;
  int k = 0;
  float kf = 0;
  double kd = 0;

  if (argc == 1)
  {
    for (i = 0; i < len; i++)
      {
	for (j = 0; j < len; j++)
	  {
	    k += i + j;
	  }
      }
    printf("%d %d %d int \n", i, j, k);
  }

  else if (argv[1][0] == 'f')
  {
    for (i = 0; i < len; i++)
      {
	for (j = 0; j < len; j++)
	  {
	    kf += i + j;
	  }
      }
    printf("%d %d %f float\n", i, j, kf);
  }

  else if (argv[1][0] == 'd')
  {
    for (i = 0; i < len; i++)
      {
	for (j = 0; j < len; j++)
	  {
	    kd += i + j;
	  }
      }
    printf("%d %d %f double\n", i, j, kd);
  }

  else if (argv[1][0] == 'm')
  {
    for (i = 0; i < len; i++) bar[i] = i;
    for (i = 0; i < len; i++)
      {
	for (j = 0; j < len; j++)
	  {
	    kd += bar[i] + bar[j];
	  }
      }
    printf("%d %d %f double write + sum\n", i, j, kd);
  }

  else if (argv[1][0] == 'n')
  { register double Bar;
    for (i = 0; i < len; i++) bar[i] = i;
    for (i = 0; i < len; i++)
      { Bar = bar[i];
	for (j = 0; j < len; j++)
	  {
	    kd += Bar + bar[j];
	  }
      }
    printf("%d %d %f double write + sum\n", i, j, kd);
  }


  return 0x87654321;
}
