Blame src/ctests/bgp/papi_1.c

Packit 577717
/*
Packit 577717
 * Basic PAPI Test for BG/P
Packit 577717
 *
Packit 577717
 *  NOTE:  If a PAPI function is not listed below, the function is
Packit 577717
 *         untested and user beware...
Packit 577717
 *
Packit 577717
 * The following high level functions are called...
Packit 577717
 *   PAPI_num_counters  - get the number of hardware counters available on the system
Packit 577717
 *   PAPI_flips  - simplified call to get Mflips/s (floating point instruction rate), real and processor time
Packit 577717
 *   PAPI_flops  - simplified call to get Mflops/s (floating point operation rate), real and processor time
Packit 577717
 *   PAPI_ipc  - gets instructions per cycle, real and processor time
Packit 577717
 *   PAPI_accum_counters  - add current counts to array and reset counters
Packit 577717
 *   PAPI_read_counters  - copy current counts to array and reset counters
Packit 577717
 *   PAPI_start_counters  - start counting hardware events
Packit 577717
 *   PAPI_stop_counters  - stop counters and return current counts
Packit 577717
 *
Packit 577717
 * The following low level functions are called...
Packit 577717
 *   PAPI_accum  - accumulate and reset hardware events from an event set
Packit 577717
 *   PAPI_add_event  - add single PAPI preset or native hardware event to an event set
Packit 577717
 *   PAPI_cleanup_eventset  - remove all PAPI events from an event set
Packit 577717
 *   PAPI_create_eventset  - create a new empty PAPI event set
Packit 577717
 *   PAPI_destroy_eventset  - deallocates memory associated with an empty PAPI event set
Packit 577717
 *   PAPI_enum_event  - return the event code for the next available preset or natvie event
Packit 577717
 *   PAPI_event_code_to_name  - translate an integer PAPI event code into an ASCII PAPI preset or native name
Packit 577717
 *   PAPI_event_name_to_code  - translate an ASCII PAPI preset or native name into an integer PAPI event code
Packit 577717
 *   PAPI_get_dmem_info  - get dynamic memory usage information
Packit 577717
 *   PAPI_get_event_info  - get the name and descriptions for a given preset or native event code
Packit 577717
 *   PAPI_get_executable_info  - get the executable’s address space information
Packit 577717
 *   PAPIF_get_exe_info  - Fortran version of PAPI_get_executable_info with different calling semantics
Packit 577717
 *   PAPI_get_hardware_info  - get information about the system hardware
Packit 577717
 *   PAPI_get_multiplex  - get the multiplexing status of specified event set
Packit 577717
 *   PAPI_get_real_cyc  - return the total number of cycles since some arbitrary starting point
Packit 577717
 *   PAPI_get_real_usec  - return the total number of microseconds since some arbitrary starting point
Packit 577717
 *   PAPI_get_shared_lib_info  - get information about the shared libraries used by the process
Packit 577717
 *   PAPI_get_virt_cyc  - return the process cycles since some arbitrary starting point
Packit 577717
 *   PAPI_get_virt_usec  - return the process microseconds since some arbitrary starting point
Packit 577717
 *   PAPI_is_initialized  - return the initialized state of the PAPI library
Packit 577717
 *   PAPI_library_init  - initialize the PAPI library
Packit 577717
 *   PAPI_list_events  - list the events that are members of an event set
Packit 577717
 *   PAPI_num_hwctrs  - return the number of hardware counters
Packit 577717
 *   PAPI_num_events  - return the number of events in an event set
Packit 577717
 *   PAPI_query_event  - query if a PAPI event exists
Packit 577717
 *   PAPI_read  - read hardware events from an event set with no reset
Packit 577717
 *   PAPI_remove_event  - remove a hardware event from a PAPI event set
Packit 577717
 *   PAPI_reset  - reset the hardware event counts in an event set
Packit 577717
 *   PAPI_shutdown  - finish using PAPI and free all related resources
Packit 577717
 *   PAPI_start  - start counting hardware events in an event set
Packit 577717
 *   PAPI_state  - return the counting state of an event set
Packit 577717
 *   PAPI_stop  - stop counting hardware events in an event set and return current events
Packit 577717
 *   PAPI_write  - write counter values into counters
Packit 577717
 *     NOTE:  Not supported when UPC is running, and when not running, only changes local PAPI memory.
Packit 577717
 */
Packit 577717
Packit 577717
#include <stdio.h>
Packit 577717
#include <stdint.h>
Packit 577717
#include <stdlib.h>
Packit 577717
Packit 577717
#include <common/alignment.h>
Packit 577717
Packit 577717
#include <spi/bgp_SPI.h>
Packit 577717
#include "papiStdEventDefs.h"
Packit 577717
#include "papi.h"
Packit 577717
#include "linux-bgp-native-events.h"
Packit 577717
Packit 577717
#define MAX_COUNTERS 256
Packit 577717
#define NUMBER_COUNTERS_PER_ROW 8
Packit 577717
/*
Packit 577717
 * Prototypes...
Packit 577717
 */
Packit 577717
void Do_Tests(void);
Packit 577717
void Do_Low_Level_Tests(void);
Packit 577717
void Do_High_Level_Tests(void);
Packit 577717
void Do_Multiplex_Tests(void);
Packit 577717
void Run_Cycle(const int pNumEvents);
Packit 577717
void Zero_Local_Counters(long long* pCounters);
Packit 577717
void FPUArith(void);
Packit 577717
void List_PAPI_Events(const int pEventSet, int* pEvents, int* xNumEvents);
Packit 577717
void Print_Native_Counters();
Packit 577717
void Print_Native_Counters_via_Buffer(const BGP_UPC_Read_Counters_Struct_t* pBuffer);
Packit 577717
void Print_Native_Counters_for_PAPI_Counters(const int pEventSet);
Packit 577717
void Print_Native_Counters_for_PAPI_Counters_From_List(const int* pEvents, const int pNumEvents);
Packit 577717
void Print_PAPI_Counters(const int pEventSet, const long long* pCounters);
Packit 577717
void Print_PAPI_Counters_From_List(const int* pEventList, const int pNumEvents, const long long* pCounters);
Packit 577717
void Print_Counters(const int pEventSet);
Packit 577717
void Print_Node_Info(void);
Packit 577717
void Read_Native_Counters(const int pLength);
Packit 577717
void Print_PAPI_Events(const int pEventSet);
Packit 577717
void Print_Counter_Values(const long long* pCounters, const int pNumCounters);
Packit 577717
void DumpInHex(const char* pBuffer, int pSize);
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Global variables...
Packit 577717
 */
Packit 577717
int PAPI_Events[MAX_COUNTERS];
Packit 577717
long long PAPI_Counters[MAX_COUNTERS];
Packit 577717
char Native_Buffer[BGP_UPC_MAXIMUM_LENGTH_READ_COUNTERS_STRUCTURE];
Packit 577717
double x[32] ALIGN_L3_CACHE;
Packit 577717
Packit 577717
Packit 577717
const int NumEventsPerSet = MAX_COUNTERS;
Packit 577717
const int MaxPresetEventId = 104;
Packit 577717
const int MaxNativeEventId = 511;
Packit 577717
Packit 577717
int main(int argc, char * argv[]) {
Packit 577717
  _BGP_Personality_t personality;
Packit 577717
  int pRank=0, pMode=-2, pCore=0, pEdge=1, xActiveCore=0, xActiveRank=0, xRC;
Packit 577717
Packit 577717
  /*
Packit 577717
   * Check args, print test inputs.
Packit 577717
   */
Packit 577717
Packit 577717
  if ( argc > 1 )
Packit 577717
    sscanf(argv[1], "%d", &pRank);
Packit 577717
  if ( argc > 2 )
Packit 577717
    sscanf(argv[2], "%d", &pMode);
Packit 577717
  if ( argc > 3 )
Packit 577717
    sscanf(argv[3], "%d", &pCore);
Packit 577717
  if ( argc > 4 )
Packit 577717
    sscanf(argv[4], "%d", &pEdge);
Packit 577717
Packit 577717
/*
Packit 577717
 * Check for valid rank...
Packit 577717
 */
Packit 577717
  if ( pRank < 0 || pRank > 31 ) {
Packit 577717
    printf("Invalid rank (%d) specified\n", pRank);
Packit 577717
    exit(1);
Packit 577717
  }
Packit 577717
/*
Packit 577717
 * Check for valid mode...
Packit 577717
 * Mode = -2 means use what was initialized by CNK
Packit 577717
 * Mode = -1 means to initialize with the default
Packit 577717
 * Mode = 0-3 means to initialize with mode 0-3
Packit 577717
 */
Packit 577717
  if ( pMode < -2 || pMode > 3 ) {
Packit 577717
    printf("Invalid mode (%d) specified\n", pMode);
Packit 577717
    exit(1);
Packit 577717
  }
Packit 577717
/*
Packit 577717
 * Check for valid core...
Packit 577717
 */
Packit 577717
  if ( pCore < 0 || pCore > 3 ) {
Packit 577717
    printf("Invalid core (%d) specified\n", pCore);
Packit 577717
    exit(1);
Packit 577717
  }
Packit 577717
/*
Packit 577717
 * Check for valid edge...
Packit 577717
 * Edge = 1  means initialize with the default edge
Packit 577717
 * Edge = 0  means initialize with level high
Packit 577717
 * Edge = 4  means initialize with edge rise
Packit 577717
 * Edge = 8  means initialize with edge fall
Packit 577717
 * Edge = 12 means initialize with level low
Packit 577717
 */
Packit 577717
  if ( pEdge != 0 && pEdge != 1 && pEdge != 4 && pEdge != 8 && pEdge != 12 ) {
Packit 577717
    printf("Invalid edge (%d) specified\n", pEdge);
Packit 577717
    exit(1);
Packit 577717
  }
Packit 577717
Packit 577717
/*
Packit 577717
 * Initialize the UPC environment...
Packit 577717
 * NOTE:  Must do this from all 'ranks'...
Packit 577717
 */
Packit 577717
//  BGP_UPC_Initialize();
Packit 577717
  xRC = PAPI_library_init(PAPI_VER_CURRENT);
Packit 577717
  if (xRC != 50921472) {
Packit 577717
    printf("PAPI_library_init failed:  xRC=%d, ending...\n", xRC);
Packit 577717
    exit(1);
Packit 577717
  }
Packit 577717
Packit 577717
/*
Packit 577717
 * Only run if this is specified rank...
Packit 577717
 */
Packit 577717
Packit 577717
  xRC = Kernel_GetPersonality(&personality, sizeof(_BGP_Personality_t));
Packit 577717
  if (xRC !=0) {
Packit 577717
    printf(" Kernel_GetPersonality returned %d\n",xRC) ;
Packit 577717
    exit(xRC);
Packit 577717
  }
Packit 577717
  xActiveRank = personality.Network_Config.Rank;
Packit 577717
  xActiveCore = Kernel_PhysicalProcessorID();
Packit 577717
Packit 577717
  printf("Rank %d, core %d reporting...\n", xActiveRank, xActiveCore);
Packit 577717
Packit 577717
  if (xActiveRank != pRank) {
Packit 577717
    printf("Rank %d is not to run...  Exiting...\n", xActiveRank);
Packit 577717
    exit(0);
Packit 577717
  }
Packit 577717
Packit 577717
  if ( xActiveCore == pCore ) {
Packit 577717
    printf("Program is to run on rank %d core %d, using mode= %d, edge= %d\n", pRank, xActiveCore, pMode, pEdge);
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("Program is NOT to run on rank %d core %d...  Exiting...\n", pRank, xActiveCore);
Packit 577717
    exit(0);
Packit 577717
  }
Packit 577717
Packit 577717
/*
Packit 577717
 * Main processing...
Packit 577717
 */
Packit 577717
  printf("************************************************************\n");
Packit 577717
  printf("* Configuration parameters used:                           *\n");
Packit 577717
  printf("*   Rank = %d                                              *\n", pRank);
Packit 577717
  printf("*   Mode = %d                                              *\n", pMode);
Packit 577717
  printf("*   Core = %d                                              *\n", pCore);
Packit 577717
  printf("*   Edge = %d                                              *\n", pEdge);
Packit 577717
  printf("************************************************************\n\n");
Packit 577717
Packit 577717
  printf("Print config after PAPI_library_init...\n");
Packit 577717
  BGP_UPC_Print_Config();
Packit 577717
Packit 577717
/*
Packit 577717
 * If we are to initialize, do so with user mode and edge...
Packit 577717
 * Otherwise, use what was initialized by CNK...
Packit 577717
 */
Packit 577717
  if (pMode > -2) {
Packit 577717
    BGP_UPC_Initialize_Counter_Config(pMode, pEdge);
Packit 577717
    printf("UPC unit(s) initialized with mode=%d, edge=%d...\n", pMode, pEdge);
Packit 577717
  }
Packit 577717
Packit 577717
  printf("Before running the main test procedure...\n");
Packit 577717
  BGP_UPC_Print_Config();
Packit 577717
  BGP_UPC_Print_Counter_Values(BGP_UPC_READ_EXCLUSIVE);
Packit 577717
Packit 577717
/*
Packit 577717
 * Perform the main test procedure...
Packit 577717
 */
Packit 577717
  Do_Tests();
Packit 577717
Packit 577717
/*
Packit 577717
 * Print out final configuration and results...
Packit 577717
 */
Packit 577717
  printf("After running the main test procedure...\n");
Packit 577717
  BGP_UPC_Print_Config();
Packit 577717
  BGP_UPC_Print_Counter_Values(BGP_UPC_READ_EXCLUSIVE);
Packit 577717
Packit 577717
  exit(0);
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Do_Tests
Packit 577717
 */
Packit 577717
Packit 577717
void Do_Tests(void) {
Packit 577717
  printf("==>  Do_Tests():  Beginning of the main body...\n");
Packit 577717
Packit 577717
  //  NOTE:  PAPI_library_init() has already been done for each participating node
Packit 577717
  //         prior to calling this routine...
Packit 577717
Packit 577717
  Do_Low_Level_Tests();
Packit 577717
  Do_High_Level_Tests();
Packit 577717
  Do_Multiplex_Tests(); // NOTE:  Not supported...
Packit 577717
  PAPI_shutdown();
Packit 577717
Packit 577717
  printf("==>  Do_Tests():  End of the main body...\n");
Packit 577717
  fflush(stdout);
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
/*
Packit 577717
 * Do_Low_Level_Tests
Packit 577717
 */
Packit 577717
Packit 577717
void Do_Low_Level_Tests(void) {
Packit 577717
  int xRC, xEventSet, xEventCode, xState;
Packit 577717
  long long xLLValue;
Packit 577717
  char xName[256];
Packit 577717
Packit 577717
  printf("==>  Do_Low_Level_Tests():  Beginning of the main body...\n");
Packit 577717
Packit 577717
  /*
Packit 577717
   * Low-level API tests...
Packit 577717
   */
Packit 577717
Packit 577717
  xRC = PAPI_is_initialized();
Packit 577717
  if (xRC == 1)
Packit 577717
    printf("SUCCESS:  PAPI has been low-level initialized by main()...\n");
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI has not been properly initialized by main(), xRC=%d, ending...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
Packit 577717
  /*
Packit 577717
   * Print out the node information with respect to UPC units...
Packit 577717
   */
Packit 577717
  Print_Node_Info();
Packit 577717
Packit 577717
  /*
Packit 577717
   * Zero the buffers for counters...
Packit 577717
   */
Packit 577717
  Zero_Local_Counters(PAPI_Counters);
Packit 577717
  BGP_UPC_Read_Counters_Struct_t* xTemp;
Packit 577717
  xTemp = (BGP_UPC_Read_Counters_Struct_t*)(void*)Native_Buffer;
Packit 577717
  Zero_Local_Counters(xTemp->counter);
Packit 577717
Packit 577717
  /*
Packit 577717
   * Start of real tests...
Packit 577717
   */
Packit 577717
  xLLValue = -1;
Packit 577717
  xLLValue = PAPI_get_real_cyc();
Packit 577717
  printf("PAPI_get_real_cyc:  xLLValue=%lld...\n", xLLValue);
Packit 577717
Packit 577717
  xLLValue = -1;
Packit 577717
  xLLValue = PAPI_get_virt_cyc();
Packit 577717
  printf("PAPI_get_virt_cyc:  xLLValue=%lld...\n", xLLValue);
Packit 577717
Packit 577717
  xLLValue = -1;
Packit 577717
  xLLValue = PAPI_get_real_usec();
Packit 577717
  printf("PAPI_get_real_usec:  xLLValue=%lld...\n", xLLValue);
Packit 577717
Packit 577717
  xLLValue = -1;
Packit 577717
  xLLValue = PAPI_get_virt_usec();
Packit 577717
  printf("PAPI_get_virt_usec:  xLLValue=%lld...\n", xLLValue);
Packit 577717
Packit 577717
  xRC = PAPI_num_hwctrs();
Packit 577717
  if (xRC == 256)
Packit 577717
    printf("SUCCESS:  PAPI_num_hwctrs returned 256 hardware counters...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_hwctrs failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  *xName = 0;
Packit 577717
  char* xEventName_1 = "PAPI_L3_LDM";
Packit 577717
  xRC = PAPI_event_code_to_name(PAPI_L3_LDM, xName);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    xRC = strcmp(xName,xEventName_1);
Packit 577717
    if (!xRC)
Packit 577717
      printf("SUCCESS:  PAPI_event_code_to_name for PAPI_L3_LDM...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_event_code_to_name returned incorrect name, xName=%s\n", xName);
Packit 577717
  }
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_event_code_to_name failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  *xName = 0;
Packit 577717
  char* xEventName_2 = "PNE_BGP_PU1_IPIPE_INSTRUCTIONS";
Packit 577717
  xRC = PAPI_event_code_to_name(PNE_BGP_PU1_IPIPE_INSTRUCTIONS, xName);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    xRC = strcmp(xName,xEventName_2);
Packit 577717
    if (!xRC)
Packit 577717
      printf("SUCCESS:  PAPI_event_code_to_name for PNE_BGP_PU1_IPIPE_INSTRUCTIONS...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_event_code_to_name returned incorrect name, xName=%s\n", xName);
Packit 577717
    }
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_event_code_to_name failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  strcpy(xName,"PAPI_L3_LDM");
Packit 577717
  xRC = PAPI_event_name_to_code(xName, &xEventCode);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x8000000E)
Packit 577717
      printf("SUCCESS:  PAPI_event_name_to_code for PAPI_L3_LDM...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_event_name_to_code returned incorrect code, xEventCode=%d\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_event_name_to_code failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  strcpy(xName,"PNE_BGP_PU1_IPIPE_INSTRUCTIONS");
Packit 577717
  xRC = PAPI_event_name_to_code(xName, &xEventCode);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x40000027)
Packit 577717
      printf("SUCCESS:  PAPI_event_name_to_code for PNE_BGP_PU1_IPIPE_INSTRUCTIONS...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_event_name_to_code returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_event_name_to_code failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x80000000;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_ENUM_ALL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x80000001)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x80000000 PAPI_PRESET_ENUM_ALL, returned 0x80000001...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x80000000 PAPI_PRESET_ENUM_ALL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x80000000 PAPI_PRESET_ENUM_ALL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x80000002;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_ENUM_ALL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x80000003)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x80000002 PAPI_PRESET_ENUM_ALL, returned 0x80000003...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x80000002 PAPI_PRESET_ENUM_ALL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x80000002 PAPI_PRESET_ENUM_ALL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x80000067;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_ENUM_ALL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x80000068)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x80000067 PAPI_PRESET_ENUM_ALL, returned 0x80000068...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x80000067 PAPI_PRESET_ENUM_ALL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x80000067 PAPI_PRESET_ENUM_ALL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x80000068;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_ENUM_ALL);
Packit 577717
  if (xRC == PAPI_ENOEVNT)
Packit 577717
    printf("SUCCESS:  PAPI_enum_event for 0x80000068 PAPI_PRESET_ENUM_ALL, no next event...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x80000068 PAPI_PRESET_ENUM_ALL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x40000000;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_ENUM_ALL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x40000001)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x40000000 PAPI_PRESET_ENUM_ALL, returned 0x40000001...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x40000000 PAPI_PRESET_ENUM_ALL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x40000000 PAPI_PRESET_ENUM_ALL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x40000001;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_ENUM_ALL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x40000002)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x40000001 PAPI_PRESET_ENUM_ALL, returned 0x40000002...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x40000001 PAPI_PRESET_ENUM_ALL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x40000001 PAPI_PRESET_ENUM_ALL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x400000FC;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_ENUM_ALL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x400000FF)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x400000FC PAPI_PRESET_ENUM_ALL, returned 0x400000FF...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x400000FC PAPI_PRESET_ENUM_ALL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x400000FC PAPI_PRESET_ENUM_ALL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x400001FD;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_ENUM_ALL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x400001FF)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x400001FD PAPI_ENUM_ALL, returned 0x400001FF...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x400001FD PAPI_ENUM_ALL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x400001FD PAPI_ENUM_ALL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x400001FF;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_ENUM_ALL);
Packit 577717
  if (xRC == PAPI_ENOEVNT)
Packit 577717
    printf("SUCCESS:  PAPI_enum_event for 0x400001FF PAPI_PRESET_ENUM_ALL, no next event...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x400001FF PAPI_PRESET_ENUM_ALL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x80000000;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_PRESET_ENUM_AVAIL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x80000001)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x80000000 PAPI_PRESET_ENUM_AVAIL, returned 0x80000001...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x80000000PAPI_PRESET_ENUM_AVAIL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x80000000PAPI_PRESET_ENUM_AVAIL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x80000002;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_PRESET_ENUM_AVAIL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x80000006)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x80000002 PAPI_PRESET_ENUM_AVAIL, returned 0x80000006...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x80000002 PAPI_PRESET_ENUM_AVAIL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x80000002 PAPI_PRESET_ENUM_AVAIL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x80000067;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_PRESET_ENUM_AVAIL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x80000068)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x80000067 PAPI_PRESET_ENUM_AVAIL, returned 0x80000068...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x80000067 PAPI_PRESET_ENUM_AVAIL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x80000067 PAPI_PRESET_ENUM_AVAIL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x80000068;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_PRESET_ENUM_AVAIL);
Packit 577717
  if (xRC == PAPI_ENOEVNT)
Packit 577717
    printf("SUCCESS:  PAPI_enum_event for 0x80000068 PAPI_PRESET_ENUM_AVAIL, no next event...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x80000068 PAPI_PRESET_ENUM_AVAIL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x40000000;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_PRESET_ENUM_AVAIL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x40000001)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x40000000 PAPI_PRESET_ENUM_AVAIL, returned 0x40000001...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x40000000 PAPI_PRESET_ENUM_AVAIL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x40000000 PAPI_PRESET_ENUM_AVAIL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x40000001;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_PRESET_ENUM_AVAIL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x40000002)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x40000001 PAPI_PRESET_ENUM_AVAIL, returned 0x40000002...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x40000001 PAPI_PRESET_ENUM_AVAIL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x40000001 PAPI_PRESET_ENUM_AVAIL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("NOTE:  Might get two messages indicating invalid event id specified for 253 and 254.  These are OK...\n");
Packit 577717
  xEventCode = 0x400000FC;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_PRESET_ENUM_AVAIL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x400000FF)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x400000FC PAPI_PRESET_ENUM_AVAIL, returned 0x400000FF...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x400000FC PAPI_PRESET_ENUM_AVAIL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x400000FC PAPI_PRESET_ENUM_AVAIL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("NOTE:  Might get one message indicating invalid event id specified for 510.  This is OK...\n");
Packit 577717
  xEventCode = 0x400001FD;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_PRESET_ENUM_AVAIL);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    if (xEventCode == 0x400001FF)
Packit 577717
      printf("SUCCESS:  PAPI_enum_event for 0x400001FD PAPI_PRESET_ENUM_AVAIL, returned 0x400001FF...\n");
Packit 577717
    else
Packit 577717
      printf("FAILURE:  PAPI_enum_event for 0x400001FD PAPI_PRESET_ENUM_AVAIL returned incorrect code, xEventCode=%8.8x\n", xEventCode);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x400001FD PAPI_PRESET_ENUM_AVAIL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventCode = 0x400001FF;
Packit 577717
  xRC = PAPI_enum_event(&xEventCode, PAPI_PRESET_ENUM_AVAIL);
Packit 577717
  if (xRC == PAPI_ENOEVNT)
Packit 577717
    printf("SUCCESS:  PAPI_enum_event for 0x400001FF PAPI_PRESET_ENUM_AVAIL, no next event...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_enum_event for 0x400001FF PAPI_PRESET_ENUM_AVAIL failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  PAPI_dmem_info_t xDmemSpace;
Packit 577717
  xRC = PAPI_get_dmem_info(&xDmemSpace);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    DumpInHex((char*)&xDmemSpace, sizeof( PAPI_dmem_info_t));
Packit 577717
    printf("SUCCESS:  PAPI_get_dmem_info...\n");
Packit 577717
  }
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_get_dmem_info failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  PAPI_event_info_t xInfoSpace;
Packit 577717
  xRC = PAPI_get_event_info(PAPI_L3_LDM, &xInfoSpace);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    DumpInHex((char*)&xInfoSpace, sizeof( PAPI_event_info_t));
Packit 577717
    printf("SUCCESS:  PAPI_get_event_info for PAPI_L3_LDM...\n");
Packit 577717
  }
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_get_event_info failed for PAPI_L3_LDM, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  const PAPI_exe_info_t* xExeInfo = NULL;
Packit 577717
  if ((xExeInfo = PAPI_get_executable_info()) != NULL) {
Packit 577717
    DumpInHex((char*)xExeInfo, sizeof( PAPI_exe_info_t));
Packit 577717
    printf("SUCCESS:  PAPI_get_executable_info...\n");
Packit 577717
  }
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_get_executable_info failed, returned null pointer...\n");
Packit 577717
Packit 577717
  const PAPI_hw_info_t* xHwInfo = NULL;
Packit 577717
  if ((xHwInfo = PAPI_get_hardware_info()) != NULL) {
Packit 577717
    DumpInHex((char*)xHwInfo, sizeof( PAPI_hw_info_t));
Packit 577717
    printf("SUCCESS:  PAPI_get_hardware_info...\n");
Packit 577717
  }
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_get_hardware_info failed, returned null pointer...\n");
Packit 577717
Packit 577717
  const PAPI_shlib_info_t* xShLibInfo = NULL;
Packit 577717
  if ((xShLibInfo = PAPI_get_shared_lib_info()) != NULL) {
Packit 577717
    DumpInHex((char*)xShLibInfo, sizeof( PAPI_shlib_info_t));
Packit 577717
    printf("SUCCESS:  PAPI_get_shared_lib_info...\n");
Packit 577717
  }
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_get_shared_lib_info failed, returned null pointer...\n");
Packit 577717
Packit 577717
  xEventSet = PAPI_NULL;
Packit 577717
  xRC = PAPI_create_eventset(&xEventSet);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_create_eventset created...\n");
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_create_eventset failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
Packit 577717
  printf("==>  No events should be in the event set...\n");
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 0)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 0...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_add_event(xEventSet, PAPI_L1_DCM);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_add_event PAPI_L1_DCM...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_add_event PAPI_L1_DCM failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 1)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 1...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_add_event(xEventSet, PNE_BGP_PU3_L2_MEMORY_WRITES);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_add_event PNE_BGP_PU3_L2_MEMORY_WRITES...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_add_event PNE_BGP_PU3_L2_MEMORY_WRITES failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 2)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 2...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_add_event(xEventSet, BGP_PU3_L2_MEMORY_WRITES);
Packit 577717
  if (xRC == PAPI_EINVAL)
Packit 577717
    printf("SUCCESS:  PAPI_add_event BGP_PU3_L2_MEMORY_WRITES not allowed...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_add_event BGP_PU3_L2_MEMORY_WRITES allowed, or failed incorrectly..., xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 2)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 2...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_add_event(xEventSet, 0x40000208);
Packit 577717
  if (xRC == PAPI_ENOEVNT)
Packit 577717
    printf("SUCCESS:  PAPI_add_event 0x40000208 not allowed...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_add_event 0x40000208 allowed, or failed incorrectly..., xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 2)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 2...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_add_event(xEventSet, PAPI_L1_ICM);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_add_event PAPI_L1_ICM...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_add_event PAPI_L1_ICM failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 3)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 3...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_add_event(xEventSet, PAPI_L1_TCM);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_add_event PAPI_L1_TCM...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_add_event PAPI_L1_TCM failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 4)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 4...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_add_event(xEventSet, PAPI_L1_DCM);
Packit 577717
  if (xRC == PAPI_ECNFLCT)
Packit 577717
    printf("SUCCESS:  PAPI_add_event, redundantly adding PAPI_L1_DCM not allowed...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_add_event PAPI_L1_DCM failed incorrectly, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_add_event(xEventSet, PNE_BGP_PU3_L2_MEMORY_WRITES);
Packit 577717
  if (xRC == PAPI_ECNFLCT)
Packit 577717
    printf("SUCCESS:  PAPI_add_event, redundantly adding PNE_BGP_PU3_L2_MEMORY_WRITES not allowed...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_add_event PNE_BGP_PU3_L2_MEMORY_WRITES failed incorectly, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("\n==>  All events added... Perform a read now...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("\n==>  Perform a reset now...\n");
Packit 577717
  xRC = PAPI_reset(xEventSet);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_reset...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_reset failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("\n==>  Perform another read now...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("\n==>  Should be 4 counters below, preset, native, preset, and preset.  All counter values should be zero.\n");
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Stop the UPC now...\n");
Packit 577717
  xRC = PAPI_stop(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_ENOTRUN)
Packit 577717
    printf("SUCCESS:  PAPI_stop, but not running...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_stop failed incorectly, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("\n==>  Start the UPC now...\n");
Packit 577717
  xRC = PAPI_start(xEventSet);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_start...\n");
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_start failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
Packit 577717
  printf("\n==>  Try to start it again...\n");
Packit 577717
  xRC = PAPI_start(xEventSet);
Packit 577717
  if (xRC == PAPI_EISRUN)
Packit 577717
    printf("SUCCESS:  PAPI_start, but already running...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_start failed incorectly, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  printf("\n==>  Stop the UPC after the arithmetic was performed...  The individual native counter values will be greater than the PAPI counters because the PAPI counters are read prior to the UPC(s) being stopped...\n");
Packit 577717
  xRC = PAPI_stop(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_stop...\n");
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_stop failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a read of the counters after performing arithmetic, UPC is stopped...  Values should be the same as right after the prior PAPI_Stop()...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Zero local counters.  Perform a PAPI_accum, UPC is stopped...  Native values should be zero, and the local PAPI counters the same as the previous read...\n");
Packit 577717
  Zero_Local_Counters(PAPI_Counters);
Packit 577717
  xRC = PAPI_accum(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_accum...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_accum failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a PAPI_read, UPC is stopped...  All values should be zero...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a reset after performing arithmetic, UPC is stopped...  All values should be zero...\n");
Packit 577717
  xRC = PAPI_reset(xEventSet);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_reset...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_reset failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform another read of the counters after resetting the counters, UPC is stopped...  All values should be zero...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform another PAPI_accum after resetting the counters, UPC is stopped...  All values should be zero...\n");
Packit 577717
  Zero_Local_Counters(PAPI_Counters);
Packit 577717
  xRC = PAPI_accum(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_accum...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_accum failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform another PAPI_read after accumulating and resetting the UPC, UPC is stopped...  All values should be zero...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Start the UPC again...\n");
Packit 577717
  xRC = PAPI_start(xEventSet);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_start...\n");
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_start failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  printf("\n==>  Get the state of the event set...\n");
Packit 577717
  xRC = PAPI_state(xEventSet, &xState);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    if (xState == PAPI_RUNNING) {
Packit 577717
      printf("SUCCESS:  PAPI_state is RUNNING...\n");
Packit 577717
    }
Packit 577717
    else {
Packit 577717
      printf("FAILURE:  PAPI_state failed, incorrect state, xState=%d...\n", xState);
Packit 577717
    }
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_state failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
Packit 577717
  printf("\n==>  Perform a read of the counters, UPC is running...  The individual native counter values will be greater than the PAPI counters because the PAPI counters are read prior to the reads for the individual counter values...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  printf("\n==>  Perform another read of the counters, UPC is running...  Values should be increasing...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  printf("\n==>  Perform another read of the counters, UPC is running...  Values should continue increasing...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a reset after performing arithmetic, UPC is still running...  Native counter values should be less than prior read, but PAPI counter values should be identical to the prior read (local buffer was not changed)...\n");
Packit 577717
  xRC = PAPI_reset(xEventSet);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_reset...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_reset failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Zero local counters.  Perform a PAPI_accum, UPC is still running...\n");
Packit 577717
  Zero_Local_Counters(PAPI_Counters);
Packit 577717
  xRC = PAPI_accum(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_accum...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_accum failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  printf("\n==>  Accumulate local counters.  Perform a PAPI_accum, UPC is still running...  PAPI counters should show an increase from prior accumulate...\n");
Packit 577717
  xRC = PAPI_accum(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_accum...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_accum failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  printf("\n==>  Accumulate local counters.  Perform another PAPI_accum, UPC is still running...  PAPI counters should show an increase from prior accumulate...\n");
Packit 577717
  xRC = PAPI_accum(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_accum...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_accum failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Zero local counters.  Perform a PAPI_accum, UPC is still running...  PAPI counters should be less than the prior accumulate...\n");
Packit 577717
  Zero_Local_Counters(PAPI_Counters);
Packit 577717
  xRC = PAPI_accum(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_accum...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_accum failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a PAPI_read, UPC is still running...  Native counters and PAPI counters should have both increased from prior accumulate...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a PAPI_write (not supported when UPC is running)...\n");
Packit 577717
  xRC = PAPI_write(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_ECMP) {
Packit 577717
    printf("SUCCESS:  PAPI_write, not allowed...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_write failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
Packit 577717
  printf("\n==>  Stop the UPC...  The individual native counter values will be greater than the PAPI counters because the PAPI counters are read prior to the UPC(s) being stopped...\n");
Packit 577717
  xRC = PAPI_stop(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_stop...\n");
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_stop failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a PAPI_read with the UPC stopped...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("\n==>  Should be same 4 counters below, with the same native and PAPI counters as after the PAPI_stop...\n");
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a PAPI_accum with the UPC stopped...  Native counters sould be zeroed, with the PAPI counters unchanged from prior read (with the UPC already stopped, the accumulate does not add any counter values to the local buffer)...\n");
Packit 577717
  Zero_Local_Counters(PAPI_Counters);
Packit 577717
  xRC = PAPI_accum(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_accum...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_accum failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a PAPI_read with the UPC stopped...  Native and PAPI counters are zero...\n");
Packit 577717
  xRC = PAPI_read(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read failed, xRC=%d...\n", xRC);
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a reset, UPC is stopped...  Native and PAPI counters are zero...\n");
Packit 577717
  xRC = PAPI_reset(xEventSet);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_reset...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_reset failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
  Print_Counters(xEventSet);
Packit 577717
Packit 577717
  printf("\n==>  Perform a PAPI_write, but only to local memory...\n");
Packit 577717
  xRC = PAPI_write(xEventSet, PAPI_Counters);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_write, but only to local memory...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_write failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
Packit 577717
  printf("\n==>  Get the state of the event set...\n");
Packit 577717
  xRC = PAPI_state(xEventSet, &xState);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    if (xState == PAPI_STOPPED) {
Packit 577717
      printf("SUCCESS:  PAPI_state is STOPPED...\n");
Packit 577717
    }
Packit 577717
    else {
Packit 577717
      printf("FAILURE:  PAPI_state failed, incorrect state, xState=%d...\n", xState);
Packit 577717
    }
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_state failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
Packit 577717
  printf("\n==>  Get the multiplex status of the eventset...\n");
Packit 577717
  xRC = PAPI_get_multiplex(xEventSet);
Packit 577717
  if (xRC == PAPI_OK) {
Packit 577717
    printf("SUCCESS:  PAPI_get_multiplex (NOTE:  The rest of the multiplex path is untested)...\n");
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("FAILURE:  PAPI_get_multiplex failed, xRC=%d...\n", xRC);
Packit 577717
    return;
Packit 577717
  }
Packit 577717
Packit 577717
  printf("\n==>  Remove the events, and clean up the event set...\n");
Packit 577717
  xRC = PAPI_remove_event(xEventSet, PNE_BGP_PU1_IPIPE_INSTRUCTIONS);
Packit 577717
  if (xRC == PAPI_EINVAL)
Packit 577717
    printf("SUCCESS:  PAPI_remove_event could not find PNE_BGP_PU1_IPIPE_INSTRUCTIONS...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_remove_event PNE_BGP_PU1_IPIPE_INSTRUCTIONS failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_remove_event(xEventSet, PAPI_L3_LDM);
Packit 577717
  if (xRC == PAPI_EINVAL)
Packit 577717
    printf("SUCCESS:  PAPI_remove_event could not find PAPI_L3_LDM...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_remove_event PAPI_L3_LDM failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_remove_event(xEventSet, PAPI_L1_TCM);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_remove_event PAPI_L1_TCM...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_remove_event PAPI_L1_TCM failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 3)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 3...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_remove_event(xEventSet, PAPI_L1_ICM);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_remove_event PAPI_L1_ICM...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_remove_event PAPI_L1_ICM failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 2)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 2...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_remove_event(xEventSet, PNE_BGP_PU3_L2_MEMORY_WRITES);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_remove_event PNE_BGP_PU3_L2_MEMORY_WRITES...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_remove_event PNE_BGP_PU3_L2_MEMORY_WRITES failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 1)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 1...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_remove_event(xEventSet, PAPI_L1_DCM);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_remove_event PAPI_L1_DCM...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_remove_event PAPI_L1_DCM failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_events(xEventSet);
Packit 577717
  if (xRC == 0)
Packit 577717
    printf("SUCCESS:  PAPI_num_events returned 0...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_events failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_cleanup_eventset(xEventSet);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_cleanup_eventset...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_cleanup_eventset failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_destroy_eventset(&xEventSet);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_destroy_eventset...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_destroy_eventset failed, xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("==>  Do_Low_Level_Tests():  End of the main body...\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
/*
Packit 577717
 * Do_High_Level_Tests
Packit 577717
 */
Packit 577717
Packit 577717
void Do_High_Level_Tests(void) {
Packit 577717
  uint xEventId, xEventCode;
Packit 577717
  int xRC, xNumEvents;
Packit 577717
Packit 577717
  printf("==>  Do_High_Level_Tests():  Beginning of the main body...\n");
Packit 577717
Packit 577717
  xRC = PAPI_num_counters();
Packit 577717
  if (xRC == 256)
Packit 577717
    printf("SUCCESS:  PAPI_num_counters returned 256 hardware counters...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_counters failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_num_components();
Packit 577717
  if (xRC == 1)
Packit 577717
    printf("SUCCESS:  PAPI_num_components returned 256 hardware counters...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_num_components failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xEventId = 0;
Packit 577717
  while (xEventId < MaxPresetEventId) {
Packit 577717
    xNumEvents = 0;
Packit 577717
    while (xEventId <= MaxPresetEventId && xNumEvents < NumEventsPerSet) {
Packit 577717
      xEventCode = xEventId | 0x80000000;
Packit 577717
      xRC = PAPI_query_event(xEventCode);
Packit 577717
      if (xRC == PAPI_OK) {
Packit 577717
        switch(xEventCode) {
Packit 577717
          case 0x80000003:
Packit 577717
          case 0x80000004:
Packit 577717
          case 0x80000005:
Packit 577717
          case 0x80000007:
Packit 577717
          case 0x80000008:
Packit 577717
          case 0x8000000A:
Packit 577717
          case 0x8000000B:
Packit 577717
          case 0x8000000C:
Packit 577717
          case 0x8000000D:
Packit 577717
          case 0x8000000F:
Packit 577717
          case 0x80000010:
Packit 577717
          case 0x80000011:
Packit 577717
          case 0x80000012:
Packit 577717
          case 0x80000013:
Packit 577717
          case 0x80000014:
Packit 577717
          case 0x80000015:
Packit 577717
          case 0x80000016:
Packit 577717
          case 0x80000017:
Packit 577717
          case 0x80000018:
Packit 577717
          case 0x80000019:
Packit 577717
          case 0x8000001A:
Packit 577717
          case 0x8000001B:
Packit 577717
          case 0x8000001D:
Packit 577717
          case 0x8000001E:
Packit 577717
          case 0x8000001F:
Packit 577717
          case 0x80000020:
Packit 577717
          case 0x80000021:
Packit 577717
          case 0x80000022:
Packit 577717
          case 0x80000023:
Packit 577717
          case 0x80000024:
Packit 577717
          case 0x80000025:
Packit 577717
          case 0x80000026:
Packit 577717
          case 0x80000027:
Packit 577717
          case 0x80000028:
Packit 577717
          case 0x80000029:
Packit 577717
          case 0x8000002A:
Packit 577717
          case 0x8000002B:
Packit 577717
          case 0x8000002C:
Packit 577717
          case 0x8000002D:
Packit 577717
          case 0x8000002E:
Packit 577717
          case 0x8000002F:
Packit 577717
          case 0x80000031:
Packit 577717
          case 0x80000032:
Packit 577717
          case 0x80000033:
Packit 577717
          case 0x80000037:
Packit 577717
          case 0x80000038:
Packit 577717
          case 0x80000039:
Packit 577717
          case 0x8000003A:
Packit 577717
          case 0x8000003D:
Packit 577717
          case 0x80000042:
Packit 577717
          case 0x80000045:
Packit 577717
          case 0x80000046:
Packit 577717
          case 0x80000048:
Packit 577717
          case 0x8000004A:
Packit 577717
          case 0x8000004B:
Packit 577717
          case 0x8000004D:
Packit 577717
          case 0x8000004E:
Packit 577717
          case 0x80000050:
Packit 577717
          case 0x80000051:
Packit 577717
          case 0x80000053:
Packit 577717
          case 0x80000054:
Packit 577717
          case 0x80000056:
Packit 577717
          case 0x80000057:
Packit 577717
          case 0x80000059:
Packit 577717
          case 0x8000005c:
Packit 577717
          case 0x8000005f:
Packit 577717
          case 0x80000061:
Packit 577717
          case 0x80000062:
Packit 577717
          case 0x80000063:
Packit 577717
          case 0x80000064:
Packit 577717
          case 0x80000065:
Packit 577717
            printf("FAILURE:  Do_High_Level_Tests, preset event code %#8.8x added to list of events to be started, but should not be allowed...\n", xEventCode);
Packit 577717
            break;
Packit 577717
          default:
Packit 577717
            printf("SUCCESS:  Do_High_Level_Tests, preset event code %#8.8x added to list of events to be started...\n", xEventCode);
Packit 577717
        }
Packit 577717
        PAPI_Events[xNumEvents] = xEventCode;
Packit 577717
        xNumEvents++;
Packit 577717
      }
Packit 577717
      else {
Packit 577717
        switch(xEventCode) {
Packit 577717
          case 0x80000003:
Packit 577717
          case 0x80000004:
Packit 577717
          case 0x80000005:
Packit 577717
          case 0x80000007:
Packit 577717
          case 0x80000008:
Packit 577717
          case 0x8000000A:
Packit 577717
          case 0x8000000B:
Packit 577717
          case 0x8000000C:
Packit 577717
          case 0x8000000D:
Packit 577717
          case 0x8000000F:
Packit 577717
          case 0x80000010:
Packit 577717
          case 0x80000011:
Packit 577717
          case 0x80000012:
Packit 577717
          case 0x80000013:
Packit 577717
          case 0x80000014:
Packit 577717
          case 0x80000015:
Packit 577717
          case 0x80000016:
Packit 577717
          case 0x80000017:
Packit 577717
          case 0x80000018:
Packit 577717
          case 0x80000019:
Packit 577717
          case 0x8000001A:
Packit 577717
          case 0x8000001B:
Packit 577717
          case 0x8000001D:
Packit 577717
          case 0x8000001E:
Packit 577717
          case 0x8000001F:
Packit 577717
          case 0x80000020:
Packit 577717
          case 0x80000021:
Packit 577717
          case 0x80000022:
Packit 577717
          case 0x80000023:
Packit 577717
          case 0x80000024:
Packit 577717
          case 0x80000025:
Packit 577717
          case 0x80000026:
Packit 577717
          case 0x80000027:
Packit 577717
          case 0x80000028:
Packit 577717
          case 0x80000029:
Packit 577717
          case 0x8000002A:
Packit 577717
          case 0x8000002B:
Packit 577717
          case 0x8000002C:
Packit 577717
          case 0x8000002D:
Packit 577717
          case 0x8000002E:
Packit 577717
          case 0x8000002F:
Packit 577717
          case 0x80000031:
Packit 577717
          case 0x80000032:
Packit 577717
          case 0x80000033:
Packit 577717
          case 0x80000037:
Packit 577717
          case 0x80000038:
Packit 577717
          case 0x80000039:
Packit 577717
          case 0x8000003A:
Packit 577717
          case 0x8000003D:
Packit 577717
          case 0x80000042:
Packit 577717
          case 0x80000045:
Packit 577717
          case 0x80000046:
Packit 577717
          case 0x80000048:
Packit 577717
          case 0x8000004A:
Packit 577717
          case 0x8000004B:
Packit 577717
          case 0x8000004D:
Packit 577717
          case 0x8000004E:
Packit 577717
          case 0x80000050:
Packit 577717
          case 0x80000051:
Packit 577717
          case 0x80000053:
Packit 577717
          case 0x80000054:
Packit 577717
          case 0x80000056:
Packit 577717
          case 0x80000057:
Packit 577717
          case 0x80000059:
Packit 577717
          case 0x8000005c:
Packit 577717
          case 0x8000005f:
Packit 577717
          case 0x80000061:
Packit 577717
          case 0x80000062:
Packit 577717
          case 0x80000063:
Packit 577717
          case 0x80000064:
Packit 577717
          case 0x80000065:
Packit 577717
            printf("SUCCESS:  Do_High_Level_Tests, preset event code %#8.8x cannot be added to list of events to be started, xRC = %d...\n", xEventCode, xRC);
Packit 577717
            break;
Packit 577717
          default:
Packit 577717
            printf("FAILURE:  Do_High_Level_Tests, preset event code %#8.8x cannot be added to list of events to be started, xRC = %d...\n", xEventCode, xRC);
Packit 577717
        }
Packit 577717
      }
Packit 577717
      xEventId++;
Packit 577717
    }
Packit 577717
    if (xNumEvents)
Packit 577717
      Run_Cycle(xNumEvents);
Packit 577717
  }
Packit 577717
Packit 577717
  xEventId = 0;
Packit 577717
  while (xEventId < MaxNativeEventId) {
Packit 577717
    xNumEvents = 0;
Packit 577717
    while (xEventId <= MaxNativeEventId && xNumEvents < NumEventsPerSet) {
Packit 577717
      xEventCode = xEventId | 0x40000000;
Packit 577717
      xRC = PAPI_query_event(xEventCode);
Packit 577717
      if (xRC == PAPI_OK) {
Packit 577717
        switch(xEventCode) {
Packit 577717
          case 0x4000005C:
Packit 577717
          case 0x4000005D:
Packit 577717
          case 0x4000005E:
Packit 577717
          case 0x4000005F:
Packit 577717
          case 0x40000060:
Packit 577717
          case 0x40000061:
Packit 577717
          case 0x40000062:
Packit 577717
          case 0x40000063:
Packit 577717
          case 0x40000064:
Packit 577717
          case 0x4000007C:
Packit 577717
          case 0x4000007D:
Packit 577717
          case 0x4000007E:
Packit 577717
          case 0x4000007F:
Packit 577717
          case 0x40000080:
Packit 577717
          case 0x40000081:
Packit 577717
          case 0x40000082:
Packit 577717
          case 0x40000083:
Packit 577717
          case 0x40000084:
Packit 577717
          case 0x400000D8:
Packit 577717
          case 0x400000D9:
Packit 577717
          case 0x400000DA:
Packit 577717
          case 0x400000DB:
Packit 577717
          case 0x400000DC:
Packit 577717
          case 0x400000DD:
Packit 577717
          case 0x400000FD:
Packit 577717
          case 0x400000FE:
Packit 577717
          case 0x40000198:
Packit 577717
          case 0x40000199:
Packit 577717
          case 0x4000019A:
Packit 577717
          case 0x4000019B:
Packit 577717
          case 0x4000019C:
Packit 577717
          case 0x4000019D:
Packit 577717
          case 0x4000019E:
Packit 577717
          case 0x4000019F:
Packit 577717
          case 0x400001A0:
Packit 577717
          case 0x400001B8:
Packit 577717
          case 0x400001B9:
Packit 577717
          case 0x400001BA:
Packit 577717
          case 0x400001BB:
Packit 577717
          case 0x400001BC:
Packit 577717
          case 0x400001BD:
Packit 577717
          case 0x400001BE:
Packit 577717
          case 0x400001BF:
Packit 577717
          case 0x400001C0:
Packit 577717
          case 0x400001D2:
Packit 577717
          case 0x400001D3:
Packit 577717
          case 0x400001D4:
Packit 577717
          case 0x400001D5:
Packit 577717
          case 0x400001D6:
Packit 577717
          case 0x400001D7:
Packit 577717
          case 0x400001E6:
Packit 577717
          case 0x400001E7:
Packit 577717
          case 0x400001E8:
Packit 577717
          case 0x400001E9:
Packit 577717
          case 0x400001EA:
Packit 577717
          case 0x400001EB:
Packit 577717
          case 0x400001FE:
Packit 577717
            printf("FAILURE:  Do_High_Level_Tests, native event code %#8.8x added to list of events to be started, but should not be allowed...\n", xEventCode);
Packit 577717
            break;
Packit 577717
          default:
Packit 577717
            printf("SUCCESS:  Do_High_Level_Tests, native event code %#8.8x added to list of events to be started...\n", xEventCode);
Packit 577717
        }
Packit 577717
        PAPI_Events[xNumEvents] = xEventCode;
Packit 577717
        xNumEvents++;
Packit 577717
      }
Packit 577717
      else {
Packit 577717
        switch(xEventCode) {
Packit 577717
          case 0x4000005C:
Packit 577717
          case 0x4000005D:
Packit 577717
          case 0x4000005E:
Packit 577717
          case 0x4000005F:
Packit 577717
          case 0x40000060:
Packit 577717
          case 0x40000061:
Packit 577717
          case 0x40000062:
Packit 577717
          case 0x40000063:
Packit 577717
          case 0x40000064:
Packit 577717
          case 0x4000007C:
Packit 577717
          case 0x4000007D:
Packit 577717
          case 0x4000007E:
Packit 577717
          case 0x4000007F:
Packit 577717
          case 0x40000080:
Packit 577717
          case 0x40000081:
Packit 577717
          case 0x40000082:
Packit 577717
          case 0x40000083:
Packit 577717
          case 0x40000084:
Packit 577717
          case 0x400000D8:
Packit 577717
          case 0x400000D9:
Packit 577717
          case 0x400000DA:
Packit 577717
          case 0x400000DB:
Packit 577717
          case 0x400000DC:
Packit 577717
          case 0x400000DD:
Packit 577717
          case 0x400000FD:
Packit 577717
          case 0x400000FE:
Packit 577717
          case 0x40000198:
Packit 577717
          case 0x40000199:
Packit 577717
          case 0x4000019A:
Packit 577717
          case 0x4000019B:
Packit 577717
          case 0x4000019C:
Packit 577717
          case 0x4000019D:
Packit 577717
          case 0x4000019E:
Packit 577717
          case 0x4000019F:
Packit 577717
          case 0x400001A0:
Packit 577717
          case 0x400001B8:
Packit 577717
          case 0x400001B9:
Packit 577717
          case 0x400001BA:
Packit 577717
          case 0x400001BB:
Packit 577717
          case 0x400001BC:
Packit 577717
          case 0x400001BD:
Packit 577717
          case 0x400001BE:
Packit 577717
          case 0x400001BF:
Packit 577717
          case 0x400001C0:
Packit 577717
          case 0x400001D2:
Packit 577717
          case 0x400001D3:
Packit 577717
          case 0x400001D4:
Packit 577717
          case 0x400001D5:
Packit 577717
          case 0x400001D6:
Packit 577717
          case 0x400001D7:
Packit 577717
          case 0x400001E6:
Packit 577717
          case 0x400001E7:
Packit 577717
          case 0x400001E8:
Packit 577717
          case 0x400001E9:
Packit 577717
          case 0x400001EA:
Packit 577717
          case 0x400001EB:
Packit 577717
          case 0x400001FE:
Packit 577717
            printf("SUCCESS:  Do_High_Level_Tests, native event code %#8.8x cannot be added to list of events to be started, xRC = %d...\n", xEventCode, xRC);
Packit 577717
            break;
Packit 577717
          default:
Packit 577717
            printf("FAILURE:  Do_High_Level_Tests, native event code %#8.8x cannot be added to list of events to be started, xRC = %d...\n", xEventCode, xRC);
Packit 577717
        }
Packit 577717
      }
Packit 577717
      xEventId++;
Packit 577717
    }
Packit 577717
    if (xNumEvents)
Packit 577717
      Run_Cycle(xNumEvents);
Packit 577717
  }
Packit 577717
Packit 577717
  float xRtime, xPtime, xMflips, xMflops, xIpc;
Packit 577717
  long long xFlpins, xFlpops, xIns;
Packit 577717
  long long values[3] = {PAPI_FP_INS, PAPI_FP_OPS, PAPI_TOT_CYC};
Packit 577717
Packit 577717
  xRC = PAPI_flips(&xRtime, &xPtime, &xFlpins, &xMflips);
Packit 577717
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_flips started.\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_flips failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  xRC = PAPI_flips(&xRtime, &xPtime, &xFlpins, &xMflips);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_flips Rtime=%e Ptime=%e, Flpins=%lld, Mflips=%e\n", xRtime, xPtime, xFlpins, xMflips);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_flips failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  xRC = PAPI_flips(&xRtime, &xPtime, &xFlpins, &xMflips);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_flips Rtime=%e Ptime=%e, Flpins=%lld, Mflips=%e\n", xRtime, xPtime, xFlpins, xMflips);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_flips failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_stop_counters(values, 3);
Packit 577717
  if (xRC ==  PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_stop_counters stopped counters.\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_stop_counters failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
Packit 577717
  xRC = PAPI_flops(&xRtime, &xPtime, &xFlpops, &xMflops);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_flops started.\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_flops failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
 
Packit 577717
  xRC = PAPI_flops(&xRtime, &xPtime, &xFlpops, &xMflops);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_flops Rtime=%e Ptime=%e Flpops=%lld Mflops=%e\n", xRtime, xPtime, xFlpops, xMflops);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_flops failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  xRC = PAPI_flops(&xRtime, &xPtime, &xFlpops, &xMflops);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_flops Rtime=%e Ptime=%e Flpops=%lld Mflops=%e\n", xRtime, xPtime, xFlpops, xMflops);
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_flops failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_stop_counters(values, 3);
Packit 577717
  if (xRC ==  PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_stop_counters stopped counters.\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_stop_counters failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  xRC = PAPI_ipc(&xRtime, &xPtime, &xIns, &xIpc);
Packit 577717
  if (xRC == PAPI_ENOEVNT)
Packit 577717
    printf("SUCCESS:  PAPI_ipc, no event found...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_ipc failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("==>  Do_High_Level_Tests():  End of the main body...\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Do_Multiplex_Tests
Packit 577717
 */
Packit 577717
Packit 577717
void Do_Multiplex_Tests(void) {
Packit 577717
  int xRC;
Packit 577717
Packit 577717
  printf("==>  Do_Multiplex_Tests():  Beginning of the main body...\n");
Packit 577717
Packit 577717
  xRC = PAPI_multiplex_init();
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_multiplex_init...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_multiplex_init failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  printf("==>  Do_Multiplex_Tests():  End of the main body...\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
void Run_Cycle(const int pNumEvents) {
Packit 577717
  int xRC;
Packit 577717
Packit 577717
//  BGP_UPC_Zero_Counter_Values();
Packit 577717
  Zero_Local_Counters(PAPI_Counters);
Packit 577717
  xRC = PAPI_start_counters(PAPI_Events, pNumEvents);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_start_counters...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_start_counters failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  Print_Native_Counters();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  FPUArith();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  Print_PAPI_Counters_From_List(PAPI_Events, pNumEvents, PAPI_Counters);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  xRC = PAPI_read_counters(PAPI_Counters, pNumEvents);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read_counters...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read_counters failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  Print_Native_Counters();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  FPUArith();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  Print_PAPI_Counters_From_List(PAPI_Events, pNumEvents, PAPI_Counters);
Packit 577717
  
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  Zero_Local_Counters(PAPI_Counters);
Packit 577717
  xRC = PAPI_accum_counters(PAPI_Counters, pNumEvents);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_accum_counters...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_accum_counters failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  Print_Native_Counters();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  FPUArith();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  Print_PAPI_Counters_From_List(PAPI_Events, pNumEvents, PAPI_Counters);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  xRC = PAPI_read_counters(PAPI_Counters, pNumEvents);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_read_counters...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_read_counters failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  Print_Native_Counters();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  FPUArith();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  Print_PAPI_Counters_From_List(PAPI_Events, pNumEvents, PAPI_Counters);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  xRC = PAPI_stop_counters(PAPI_Counters, pNumEvents);
Packit 577717
  if (xRC == PAPI_OK)
Packit 577717
    printf("SUCCESS:  PAPI_stop_counters...\n");
Packit 577717
  else
Packit 577717
    printf("FAILURE:  PAPI_stop_counters failed, returned xRC=%d...\n", xRC);
Packit 577717
Packit 577717
  Print_Native_Counters();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  FPUArith();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, pNumEvents);
Packit 577717
  Print_PAPI_Counters_From_List(PAPI_Events, pNumEvents, PAPI_Counters);
Packit 577717
Packit 577717
  FPUArith();
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Zero_Local_Counters
Packit 577717
 */
Packit 577717
Packit 577717
void Zero_Local_Counters(long long* pCounters) {
Packit 577717
  int i;
Packit 577717
  for (i=0; i<255; i++)
Packit 577717
  	pCounters[i] = 0;
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * FPU Arithmetic...
Packit 577717
 */
Packit 577717
void FPUArith(void) {
Packit 577717
  int i;
Packit 577717
Packit 577717
  printf("\n==>  Start:  Performing arithmetic...\n");
Packit 577717
  register unsigned int zero = 0;
Packit 577717
  register double *x_p = &x[0];
Packit 577717
Packit 577717
  for ( i = 0; i < 32; i++ )
Packit 577717
    x[i] = 1.0;
Packit 577717
Packit 577717
  // Single Hummer Instructions:
Packit 577717
Packit 577717
  #if 1
Packit 577717
Packit 577717
  asm volatile ("fabs       1,2");
Packit 577717
  asm volatile ("fmr        1,2");
Packit 577717
  asm volatile ("fnabs      1,2");
Packit 577717
  asm volatile ("fneg       1,2");
Packit 577717
Packit 577717
  asm volatile ("fadd       1,2,3");
Packit 577717
  asm volatile ("fadds      1,2,3");
Packit 577717
  asm volatile ("fdiv       1,2,3");
Packit 577717
  asm volatile ("fdivs      1,2,3");
Packit 577717
  asm volatile ("fmul       1,2,3");
Packit 577717
  asm volatile ("fmuls      1,2,3");
Packit 577717
  asm volatile ("fres       1,2");
Packit 577717
  asm volatile ("frsqrte    1,2");
Packit 577717
  //asm volatile ("fsqrt      1,2");          // gives exception
Packit 577717
  //asm volatile ("fsqrts     1,2");          // gives exception
Packit 577717
  asm volatile ("fsub       1,2,3");
Packit 577717
  asm volatile ("fsubs      1,2,3");
Packit 577717
Packit 577717
  asm volatile ("fmadd      3,4,5,6");
Packit 577717
  asm volatile ("fmadds     3,4,5,6");
Packit 577717
  asm volatile ("fmsub      3,4,5,6");
Packit 577717
  asm volatile ("fmsubs     3,4,5,6");
Packit 577717
  asm volatile ("fnmadd     3,4,5,6");
Packit 577717
  asm volatile ("fnmadds    3,4,5,6");
Packit 577717
  asm volatile ("fnmsub     3,4,5,6");
Packit 577717
  asm volatile ("fnmsubs    3,4,5,6");
Packit 577717
Packit 577717
  //asm volatile ("fcfid      5,6");          // invalid instruction
Packit 577717
  //asm volatile ("fctid      5,6");          // invalid instruction
Packit 577717
  //asm volatile ("fctidz     5,6");          // invalid instruction
Packit 577717
  asm volatile ("fctiw      5,6");
Packit 577717
  asm volatile ("fctiwz     5,6");
Packit 577717
  asm volatile ("frsp       5,6");
Packit 577717
Packit 577717
  asm volatile ("fcmpo   0,1,2");
Packit 577717
  asm volatile ("fcmpu   0,1,2");
Packit 577717
  asm volatile ("fsel    0,1,2,3");
Packit 577717
Packit 577717
  #endif
Packit 577717
Packit 577717
  #if 1
Packit 577717
Packit 577717
  asm volatile("fpadd             9,10,11");
Packit 577717
  asm volatile("fpsub             9,10,11");
Packit 577717
Packit 577717
  #endif
Packit 577717
Packit 577717
Packit 577717
  #if 1
Packit 577717
Packit 577717
  asm volatile("fpmul            23,24,25");
Packit 577717
  asm volatile("fxmul            26, 27, 28");
Packit 577717
  asm volatile("fxpmul           28, 29, 30");
Packit 577717
  asm volatile("fxsmul            2, 3, 4");
Packit 577717
  #endif
Packit 577717
Packit 577717
  #if 1
Packit 577717
Packit 577717
  asm volatile("fpmadd           10,11,12,13");
Packit 577717
  asm volatile("fpmsub           18, 19, 20, 21");
Packit 577717
  asm volatile("fpnmadd          26, 27, 28, 29");
Packit 577717
  asm volatile("fpnmsub          16,17,18,19");
Packit 577717
Packit 577717
  asm volatile("fxmadd           10,11,12,13");
Packit 577717
  asm volatile("fxmsub           18, 19, 20, 21");
Packit 577717
  asm volatile("fxnmadd          26, 27, 28, 29");
Packit 577717
  asm volatile("fxnmsub          16,17,18,19");
Packit 577717
Packit 577717
  asm volatile("fxcpmadd           10,11,12,13");
Packit 577717
  asm volatile("fxcpmsub           18, 19, 20, 21");
Packit 577717
  asm volatile("fxcpnmadd          26, 27, 28, 29");
Packit 577717
  asm volatile("fxcpnmsub          16,17,18,19");
Packit 577717
Packit 577717
  asm volatile("fxcsmadd           10,11,12,13");
Packit 577717
  asm volatile("fxcsmsub           18, 19, 20, 21");
Packit 577717
  asm volatile("fxcsnmadd          26, 27, 28, 29");
Packit 577717
  asm volatile("fxcsnmsub          16,17,18,19");
Packit 577717
Packit 577717
  asm volatile("fxcpnpma           1,2,3,4");
Packit 577717
  asm volatile("fxcsnpma           5,6,7,8");
Packit 577717
  asm volatile("fxcpnsma           9,10,11,12");
Packit 577717
  asm volatile("fxcsnsma           3,4,5,6");
Packit 577717
Packit 577717
  asm volatile("fxcxnpma           9,10,11,12");
Packit 577717
  asm volatile("fxcxnsma           8,9,10,11");
Packit 577717
  asm volatile("fxcxma             3,4,5,6");
Packit 577717
  asm volatile("fxcxnms            8,9,10,11");
Packit 577717
Packit 577717
  #endif
Packit 577717
Packit 577717
Packit 577717
  #if 1
Packit 577717
Packit 577717
  asm volatile("fpre               12, 13");
Packit 577717
  asm volatile("fprsqrte           15, 16");
Packit 577717
  asm volatile("fpsel              17, 18, 19, 20");
Packit 577717
  asm volatile("fpctiw             1,2");
Packit 577717
  asm volatile("fpctiwz            3,4");
Packit 577717
  asm volatile("fprsp              5,6");
Packit 577717
  asm volatile("fscmp              1,2,3");
Packit 577717
  asm volatile("fpmr               1,2");
Packit 577717
  asm volatile("fpneg              1,2");
Packit 577717
  asm volatile("fpabs              1,2");
Packit 577717
  asm volatile("fpnabs             1,2");
Packit 577717
  asm volatile("fsmr               1,2");
Packit 577717
  asm volatile("fsneg              1,2");
Packit 577717
  asm volatile("fsabs              1,2");
Packit 577717
  asm volatile("fsnabs             1,2");
Packit 577717
  asm volatile("fxmr               1,2");
Packit 577717
  asm volatile("fsmfp              1,2");
Packit 577717
  asm volatile("fsmtp              1,2");
Packit 577717
Packit 577717
  #endif
Packit 577717
Packit 577717
  #if 1
Packit 577717
  asm volatile("lfdx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfdux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfsx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfsux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
Packit 577717
  asm volatile("lfsdx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfsdux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfssx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfssux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
Packit 577717
  asm volatile("lfpsx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfpsux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfxsx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfxsux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  #endif
Packit 577717
Packit 577717
  #if 1
Packit 577717
  asm volatile("lfpdx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfpdux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfxdx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("lfxdux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  #endif
Packit 577717
Packit 577717
  #if 1
Packit 577717
  asm volatile("stfdx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfdux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfsx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfsux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
Packit 577717
  asm volatile("stfsdx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfsdux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfssx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  //asm volatile("stfssux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
Packit 577717
  asm volatile("stfpsx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfpsux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfxsx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfxsux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  #endif
Packit 577717
Packit 577717
  #if 1
Packit 577717
  asm volatile("stfpdx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfpdux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfxdx       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  asm volatile("stfxdux       16,%0,%1" : "+b"(x_p) : "b"(zero));
Packit 577717
  #endif
Packit 577717
  printf("==>  End:    Performing arithmetic...\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Print_Counters
Packit 577717
 */
Packit 577717
void Print_Counters(const int pEventSet) {
Packit 577717
  printf("\n***** Start Print Counter Values *****\n");
Packit 577717
//  Print_Native_Counters_via_Buffer((BGP_UPC_Read_Counters_Struct_t*)Native_Buffer);
Packit 577717
//  Print_Native_Counters();
Packit 577717
  Print_Native_Counters_for_PAPI_Counters(pEventSet);
Packit 577717
  Print_PAPI_Counters(pEventSet, PAPI_Counters);
Packit 577717
  printf("\n*****  End Print Counter Values  *****\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Print_Native_Counters
Packit 577717
 */
Packit 577717
Packit 577717
void Print_Native_Counters() {
Packit 577717
  printf("\n***** Start Print of Native Counter Values *****\n");
Packit 577717
  BGP_UPC_Print_Counter_Values(BGP_UPC_READ_EXCLUSIVE);
Packit 577717
  printf("*****  End Print of Native Counter Values  *****\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Print_Native_Counters_for_PAPI_Counters
Packit 577717
 */
Packit 577717
Packit 577717
void Print_Native_Counters_for_PAPI_Counters(const int pEventSet) {
Packit 577717
  printf("\n***** Start Print of Native Counter Values for PAPI Counters *****\n");
Packit 577717
  int xNumEvents = PAPI_num_events(pEventSet);
Packit 577717
  if (xNumEvents) {
Packit 577717
    List_PAPI_Events(pEventSet, PAPI_Events, &xNumEvents);
Packit 577717
    Print_Native_Counters_for_PAPI_Counters_From_List(PAPI_Events, xNumEvents);
Packit 577717
  }
Packit 577717
  else {
Packit 577717
    printf("No events are present in the event set.\n");
Packit 577717
  }
Packit 577717
  printf("*****  End Print of Native Counter Values for PAPI Counters  *****\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Print_Native_Counters_for_PAPI_Counters_From_List
Packit 577717
 */
Packit 577717
void Print_Native_Counters_for_PAPI_Counters_From_List(const int* pEvents, const int pNumEvents) {
Packit 577717
  int i, j, xRC;
Packit 577717
  char xName[256];
Packit 577717
  BGP_UPC_Event_Id_t xNativeEventId;
Packit 577717
  PAPI_event_info_t xEventInfo;
Packit 577717
Packit 577717
//  BGP_UPC_Print_Counter_Values(); // DLH
Packit 577717
  for (i=0; i
Packit 577717
    xRC = PAPI_event_code_to_name(PAPI_Events[i], xName);
Packit 577717
    if (!xRC) {
Packit 577717
      xRC = PAPI_get_event_info(PAPI_Events[i], &xEventInfo);
Packit 577717
      if (xRC) {
Packit 577717
        printf("FAILURE:  PAPI_get_event_info failed for %s, xRC=%d\n", xName, xRC);
Packit 577717
        exit(1);
Packit 577717
      }
Packit 577717
      printf("\n     *** PAPI Counter Location %3.3d:  %#8.8x %s\n", i, PAPI_Events[i], xName);
Packit 577717
      if (PAPI_Events[i] & 0x80000000) {
Packit 577717
        // Preset event
Packit 577717
        for (j=0; j
Packit 577717
          xNativeEventId = (BGP_UPC_Event_Id_t)(xEventInfo.code[j]&0xBFFFFFFF);
Packit 577717
//          printf("Preset:  j=%d, xEventInfo.code[j]=%#8.8x, xNativeEventId=%#8.8x\n", j, xEventInfo.code[j], xNativeEventId);
Packit 577717
          BGP_UPC_Print_Counter_Value(xNativeEventId, BGP_UPC_READ_EXCLUSIVE);
Packit 577717
        }
Packit 577717
      }
Packit 577717
      else {
Packit 577717
        // Native event
Packit 577717
        xNativeEventId = (BGP_UPC_Event_Id_t)(PAPI_Events[i]&0xBFFFFFFF);
Packit 577717
//        printf("Native:  i=%d, PAPI_Events[i]=%#8.8x, xNativeEventId=%#8.8x\n", i, PAPI_Events[i], xNativeEventId);
Packit 577717
        BGP_UPC_Print_Counter_Value(xNativeEventId, BGP_UPC_READ_EXCLUSIVE);
Packit 577717
      }
Packit 577717
    }
Packit 577717
    else {
Packit 577717
      printf("\n     *** PAPI Counter Location %3.3d:  Not mapped\n", i);
Packit 577717
    }
Packit 577717
  }
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Print_Native_Counters_via_Buffer
Packit 577717
 */
Packit 577717
Packit 577717
void Print_Native_Counters_via_Buffer(const BGP_UPC_Read_Counters_Struct_t* pBuffer) {
Packit 577717
  Read_Native_Counters(BGP_UPC_MAXIMUM_LENGTH_READ_COUNTERS_STRUCTURE);
Packit 577717
  printf("\n***** Start Print of Native Counter Values *****\n");
Packit 577717
  printf("Elapsed Running Time (native) = %lld\n", (*pBuffer).elapsed_time);
Packit 577717
//  printf("Print_Native_Counters_via_Buffer:  Native_Buffer*=%p, pBuffer=%p, (*pBuffer).counter=%p\n", Native_Buffer, pBuffer, (*pBuffer).counter);
Packit 577717
  Print_Counter_Values((long long*)(*pBuffer).counter, pBuffer->number_of_counters);
Packit 577717
  printf("*****  End Print of Native Counter Values  *****\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Print_PAPI_Counters
Packit 577717
 */
Packit 577717
Packit 577717
void Print_PAPI_Counters(const int pEventSet, const long long* pCounters) {
Packit 577717
  int i;
Packit 577717
  char xName[256];
Packit 577717
  printf("\n***** Start Print of PAPI Counter Values *****\n");
Packit 577717
//  printf("Print_PAPI_Counters:  PAPI_Counters*=%p, pCounters*=%p\n", PAPI_Counters, pCounters);
Packit 577717
  int pNumEvents = PAPI_num_events(pEventSet);
Packit 577717
  printf("Number of Counters = %d\n", pNumEvents);
Packit 577717
  if (pNumEvents) {
Packit 577717
    printf("    Calculated Value Location Event Number Event Name\n");
Packit 577717
    printf("-------------------- -------- ------------ --------------------------------------------\n");
Packit 577717
    List_PAPI_Events(pEventSet, PAPI_Events, &pNumEvents);
Packit 577717
    for (i=0; i
Packit 577717
      if (PAPI_event_code_to_name(PAPI_Events[i], xName)) {
Packit 577717
        printf("PAPI_event_code_to_name failed on event code %d\n", PAPI_Events[i]);
Packit 577717
        exit(1);
Packit 577717
      }
Packit 577717
      printf("%20llu      %3d   %#8.8x %s\n", pCounters[i], i, PAPI_Events[i], xName);
Packit 577717
    }
Packit 577717
  }
Packit 577717
  printf("*****  End Print of PAPI Counter Values  *****\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Print_PAPI_Counters_From_List
Packit 577717
 */
Packit 577717
Packit 577717
void Print_PAPI_Counters_From_List(const int* pEventList, const int pNumEvents, const long long* pCounters) {
Packit 577717
  int i;
Packit 577717
  char xName[256];
Packit 577717
  printf("\n***** Start Print of PAPI Counter Values *****\n");
Packit 577717
  printf("Number of Counters = %d\n", pNumEvents);
Packit 577717
  if (pNumEvents) {
Packit 577717
    printf("    Calculated Value Location Event Number Event Name\n");
Packit 577717
    printf("-------------------- -------- ------------ --------------------------------------------\n");
Packit 577717
    for (i=0; i
Packit 577717
      if (PAPI_event_code_to_name(pEventList[i], xName)) {
Packit 577717
        printf("PAPI_event_code_to_name failed on event code %d\n", pEventList[i]);
Packit 577717
        exit(1);
Packit 577717
      }
Packit 577717
      printf("%20llu      %3d   %#8.8x %s\n", pCounters[i], i, pEventList[i], xName);
Packit 577717
    }
Packit 577717
  }
Packit 577717
  printf("*****  End Print of PAPI Counter Values  *****\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Print_Counter_Values
Packit 577717
 */
Packit 577717
Packit 577717
void Print_Counter_Values(const long long* pCounters, const int pNumCounters) {
Packit 577717
  int i=0, j, xEnd;
Packit 577717
  long long xCounters[NUMBER_COUNTERS_PER_ROW];
Packit 577717
  printf("Print_Counter_Values:  Native_Buffer*=%p, pCounters*=%p\n", Native_Buffer, pCounters);
Packit 577717
  printf("Number of Counters = %d\n", pNumCounters);
Packit 577717
  if (pNumCounters) {
Packit 577717
    printf("                     +0        +1        +2        +3        +4        +5        +6        +7\n");
Packit 577717
    printf("---------------------------------------------------------------------------------------------\n");
Packit 577717
    xEnd = (((pNumCounters-1)/NUMBER_COUNTERS_PER_ROW)*NUMBER_COUNTERS_PER_ROW)+NUMBER_COUNTERS_PER_ROW;
Packit 577717
    while (i < xEnd) {
Packit 577717
      for (j=0; j
Packit 577717
        if (i+j < pNumCounters) {
Packit 577717
          xCounters[j] = pCounters[i+j];
Packit 577717
        }
Packit 577717
        else
Packit 577717
          xCounters[j] = -1;
Packit 577717
      }
Packit 577717
      printf("Ctrs %3.3d-%3.3d:  %8lld  %8lld  %8lld  %8lld  %8lld  %8lld  %8lld  %8lld\n",
Packit 577717
               i, i+7, xCounters[0], xCounters[1], xCounters[2], xCounters[3], xCounters[4],
Packit 577717
               xCounters[5], xCounters[6], xCounters[7]);
Packit 577717
      i += NUMBER_COUNTERS_PER_ROW;
Packit 577717
    }
Packit 577717
  }
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
/*
Packit 577717
 * Print_Node_info
Packit 577717
 */
Packit 577717
Packit 577717
void Print_Node_Info(void) {
Packit 577717
  Read_Native_Counters(BGP_UPC_MINIMUM_LENGTH_READ_COUNTERS_STRUCTURE);
Packit 577717
  BGP_UPC_Read_Counters_Struct_t* xTemp;
Packit 577717
  xTemp = (BGP_UPC_Read_Counters_Struct_t*)(void*)Native_Buffer;
Packit 577717
  printf("***** Start Print of Node Information *****\n");
Packit 577717
  printf("Rank = %d\n", xTemp->rank);
Packit 577717
  printf("Core = %d\n", xTemp->core);
Packit 577717
  printf("UPC Number = %d\n", xTemp->upc_number);
Packit 577717
  printf("Number of Processes per UPC = %d\n", xTemp->number_processes_per_upc);
Packit 577717
  printf("User Mode = %d\n", (int) xTemp->mode);
Packit 577717
  printf("Location = %s\n", xTemp->location);
Packit 577717
  printf("\n*****  End Print of Node Information *****\n\n");
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * Read_Native_Counters
Packit 577717
 */
Packit 577717
Packit 577717
void Read_Native_Counters(const int pLength) {
Packit 577717
Packit 577717
  int xRC = BGP_UPC_Read_Counter_Values(Native_Buffer, pLength, BGP_UPC_READ_EXCLUSIVE);
Packit 577717
  if (xRC < 0) {
Packit 577717
    printf("FAILURE:  BGP_UPC_Read_Counter_Values failed, xRC=%d...\n", xRC);
Packit 577717
    exit(1);
Packit 577717
  }
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
/*
Packit 577717
 * Print_PAPI_Events
Packit 577717
 */
Packit 577717
Packit 577717
void Print_PAPI_Events(const int pEventSet) {
Packit 577717
  int i;
Packit 577717
  char xName[256];
Packit 577717
  int pNumEvents = PAPI_num_events(pEventSet);
Packit 577717
  List_PAPI_Events(pEventSet, PAPI_Events, &pNumEvents);
Packit 577717
  for (i=0; i
Packit 577717
    if (!PAPI_event_code_to_name(PAPI_Events[i], xName))
Packit 577717
      printf("PAPI Counter Location %3.3d:  %#8.8x %s\n", i, PAPI_Events[i], xName);
Packit 577717
    else
Packit 577717
      printf("PAPI Counter Location %3.3d:  Not mapped\n", i);
Packit 577717
  }
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * List_PAPI_Events
Packit 577717
 */
Packit 577717
void List_PAPI_Events(const int pEventSet, int* pEvents, int* pNumEvents) {
Packit 577717
  int xRC = PAPI_list_events(pEventSet, pEvents, pNumEvents);
Packit 577717
  if (xRC != PAPI_OK) {
Packit 577717
    printf("FAILURE:  PAPI_list_events failed, returned xRC=%d...\n", xRC);
Packit 577717
    exit(1);
Packit 577717
  }
Packit 577717
Packit 577717
  return;
Packit 577717
}
Packit 577717
Packit 577717
Packit 577717
/*
Packit 577717
 * DumpInHex
Packit 577717
 */
Packit 577717
void DumpInHex(const char* pBuffer, int pSize) {
Packit 577717
Packit 577717
  return;
Packit 577717
}