Exemple #1
0
void dump_instruction_fus(FILE *fp, void *pknobs)

{

	int num_of_insts,iid,dummy;
	kapi_fu_t fu;
	knobs_t *pIknobs;

	typedef struct {
		int x;
		int *ix;
		char *gogo;
		int nx[2];
	} xtest;
	typedef struct {
		int nxs;
		xtest *pxtest;
		xtest *ppx[2];
		char *dx;
	} ytest;

	static int yy[]={5,5};


	static xtest xx[]= {{2,yy,"gogo",{0,0}},
						{2,yy,"gogo",{0,0}}};
	static xtest zz[2]= {{2,yy,"gogo",{0,0}},
						{2,yy,"gogo",{0,0}}};

	static ytest ylast={2,
						&(zz[1]),
						{xx,zz},
						"gugunza",
	};

	char *str;
	char *cIdx;
	char buffer[100];
	int idx;
	int iVal;
	FILE *fpTab=fopen("tryTab.c","w");
	int expressions=KAPI_EnumCardinality(pknobs,"expressions");
	int i0,i1,m0,m1;
	i0=KAPI_EnumIndex(pknobs,"port_t","portI0");
	i1=KAPI_EnumIndex(pknobs,"port_t","portI1");
	m0=KAPI_EnumIndex(pknobs,"port_t","portM0");
	m1=KAPI_EnumIndex(pknobs,"port_t","portM1");
	dummy=KAPI_cportMask4ut(pknobs,0,kapi_utI);
	iVal=(1 << i0) | (1 << i1);
/*	dummy=KAPI_portMask4ut(pknobs,0,kapi_utI); */
	dummy=KAPI_cportMask4ut(pknobs,0,kapi_utM);
	iVal=(1 << m0) | (1 << m1);
	dummy=KAPI_cportMask4ut(pknobs,0,kapi_utF);
	dummy=KAPI_cportMask4ut(pknobs,0,kapi_utB);
	
	
	dummy=KAPI_fuCount(pknobs);
	num_of_insts=KAPI_iidCount(pknobs);
	_strset(buffer,0);
	str="#include \"tryhead.h\"\n\ninst_info_tab_t infoTab[] = {\n";
	fwrite(str,sizeof(char),strlen(str),fp);
	for (iid=0;iid<num_of_insts;iid++)
	{
		_strset(buffer,0);
		str=KAPI_iid2uniqueName(pknobs,iid,dummy);
		fwrite(str,sizeof(char),strlen(str),fp);
		fwrite(",",sizeof(char),1,fp);
		fu=KAPI_iid2fu(pknobs,iid,dummy);
		strcat(buffer,"/* ");
		strcat(buffer,KAPI_fu2fuName(pknobs,fu,dummy));
		strcat(buffer," */");
		fwrite(buffer,sizeof(char),strlen(buffer),fp);
		*buffer='\0';
		_itoa(fu,buffer,10);
		fwrite(buffer,sizeof(char),strlen(buffer),fp);
		fwrite(",",sizeof(char),1,fp);
		fwrite("\n",sizeof(char),1,fp);
	}
	_strset(buffer,0);
	str="0,0\n};\n/*";
	fwrite(str,sizeof(char),strlen(str),fp);
	
	for (idx=0;idx<expressions;idx++)
	{
		*buffer='\0';
		cIdx=KAPI_EnumName(pknobs,idx,"expressions");
		iVal=KAPI_GetIntegerVariable(pknobs,"expr",idx);
		sprintf(buffer,"[%s] = %d\n",cIdx,iVal);
		fwrite(buffer,sizeof(char),strlen(buffer),fp);
	}
	_strset(buffer,0);
	str="*/\n\n";
	fwrite(str,sizeof(char),strlen(str),fp);
	printf("finished Try\n");
	fclose(fp);
	fp=fopen("T1.c","w");
	KAPI_save_as_header_all_IA64_info( fp, pknobs , "trying123");
	printf("finished T1\n");
	fclose(fp);
	fclose(fpTab);
	//KAPI_fEnableIA64call_from_header(&pknobs,&trying123,0);
	fp=fopen("T2.c","w");
	KAPI_save_as_header_all_IA64_info( fp, pknobs , "trying123");
	fclose(fp);
	printf("finished T2\n");

//	pKmapiInfo=KMAPI_initialize(pknobs);
	if (pKmapiInfo!=NULL)
		printf("Kmapi initialized!\n");
	else 
	{
		printf("Kmapi Initialization Failed!\n");
	}
	//_getch();
}
/* Split issue format:
BID:T0:T1:<fu(fff,fff)>/<none>
where BID is bundle template, 
T is yes or no, T0 indicating split before, T1 indicating split after
f is either * for any or a specific fuClass, indicating exception to the rule, or none
  to indicate no execptions.
Currently only one syllable can contain exception.
Sample: 
"bidMMB:no:yes:fu(* / * /fuBRP,* / * /fuNOP)"
*/
kmapi_result kmapi_parse_split(kmapi_knobs_t *pKMnobs,char *pchSplitRule,kapi_bid_t *pbid)
{
	char *pchWalker;
	char *pchRule;
	char *pchBid;
	char *pchTmp;
	int iSlot=0;
	kapi_bid_t bid;
	bundle_fus_t *pbfu;
	kapi_fu_t fu;
	int fEND=FALSE;

	pchRule=strdup(pchSplitRule);
	pchBid=pchWalker=pchRule;
	pchWalker=strchr(pchWalker,':');
	*pchWalker='\0';
	bid=KAPI_EnumIndex(pKMnobs->pKnobs,"bid_t",pchBid);
	if (bid==-1)
	{
		kmapi_Error_pch1(0,"no such bundle template %s",pchBid);
		return kmapi_failure;
	}
	pchTmp=++pchWalker;
	pchWalker=strchr(pchWalker,':');
	*pchWalker='\0';
	if (strstr(pchTmp,"yes")!=NULL)
		pKMnobs->dmpSplitRules[bid].bvSplits|=kmapi_implicit_break_before;
	else 
	{
		if (strstr(pchTmp,"no")==NULL)
		{
			kmapi_Error_pch1(0,"wrong format for split issue rule: %s",pchSplitRule);
			return kmapi_failure;
		}
	}
			
	pchTmp=++pchWalker;
	pchWalker=strchr(pchWalker,':');
	*pchWalker='\0';
	if (strstr(pchTmp,"yes")!=NULL)
		pKMnobs->dmpSplitRules[bid].bvSplits|=kmapi_implicit_break_after;
	else 
	{
		if (strstr(pchTmp,"no")==NULL)
		{
			kmapi_Error_pch1(0,"wrong format for split issue rule: %s",pchSplitRule);
			return kmapi_failure;
		}
	}
	pchWalker++;
	if (strstr(pchWalker,"none")!=NULL)
		return kmapi_success;
	pchWalker=strchr(pchWalker,'(');
	pchTmp=++pchWalker;
	pbfu=bundle_fus_AddNode(&(pKMnobs->dmpSplitRules[bid].pSplitExeptions));
	while (!fEND)
	{
		pchWalker++;
		switch (*pchWalker)
		{
		case ')':
			fEND=TRUE;
		case '/':
			*pchWalker='\0';
			if (*pchTmp!='*')
			{
				fu=KAPI_EnumIndex(pKMnobs->pKnobs,"fu_t",pchTmp);
				if (fu==-1) {
					kmapi_Error_pch2(0,"No such fu %s in rule %s",pchTmp,pchSplitRule);
				}
				SETBIT_bv128(pbfu->bvSlots[iSlot],fu);
			}
			pchTmp=++pchWalker;
			iSlot++;
			break;
		case ',':
			*pchWalker='\0';
			fu=KAPI_EnumIndex(pKMnobs->pKnobs,"fu_t",pchTmp);
			SETBIT_bv128(pbfu->bvSlots[iSlot],fu);
			pchTmp=++pchWalker;
			iSlot=0;
			pbfu=bundle_fus_AddNode(&(pKMnobs->dmpSplitRules[bid].pSplitExeptions));
			break;
		default:
			break;
		}
	}
	return kmapi_success;
}
Exemple #3
0
int main( int argc, char *argv[] )
{
   void *pvoid1;
   FILE *fp1=NULL,*fp2=NULL;
   FILE *outp=NULL;
   FILE *Ferr=NULL;

   char *toolname;



   if (( (toolname=strrchr(argv[ 0],'\\')) ==NULL) && 
	   ( (toolname=strrchr(argv[ 0],'/')) ==NULL) )
	   toolname=argv[ 0];

 

	   
   if ( argc < 2 ) {
      printf("%s knobs toolname [delta knobs]\n", toolname );
      exit(1);
   } 

   if ( 5 <= argc )
	   freopen(argv[4],"w",stderr);
   if ( 4 <= argc ) /*delta file exists*/
	fp2 = fopen( argv[ 3 ], "r" );
   fp1 = fopen( argv[ 1 ], "r" );
   outp = fopen( "try.c", "w" );
   if ((fp1==NULL) && (fp2==NULL)) 
   {
	   printf("Could not open knobsfiles!\n");
	   return 2;
   }
   pvoid1 = KAPI_Initialize( fp2, fp1, argv[ 2 ]);
   fclose( fp1 );
   if (pvoid1!=NULL)
	   pvoid1=KAPI_ia64_Initialize(pvoid1);

   if (NULL!=fp2) fclose( fp2 );
   if ((5 <=argc ) && (NULL!=Ferr)) fclose( Ferr );

   if ( pvoid1 ) {
      int fuLD,tmp;
/*
      KDebug_DumpMachineDescription( stdout,  pvoid1, 0 );

      KDebug_DumpInterClusterBypass( stdout, pvoid1 );
      KDebug_DumpClusterDistances( stdout, pvoid1 );
      KDebug_DumpIntraClusterBypass( stdout, pvoid1 );
      KDebug_DumpLatencies( stdout, pvoid1 );
      KDebug_DumpTotalLatency( stdout, pvoid1 );

      printf( "fuLD has %d ports\n", 
             KAPI_cportCount4fu( pvoid1, -1, fuLD ) );
*/
      fuLD = KAPI_EnumIndex( pvoid1, "fu_t", "fuLD" );
  	  tmp = KAPI_IntraClusterBypass(pvoid1,0
									,0,0,0,0,
									7,0,0,0);


//	  dump_instruction_fus(outp,pvoid1);
      KAPI_Finalize( pvoid1 );
   } else {
      fprintf( stderr, "KAPI_Initialize failed\n" );
   }

#if 0
   Test_bv128Rtns();
   Test_bv64Rtns();
   Test_bv32Rtns();
#endif

   return 0;
}