Ejemplo n.º 1
0
int
find_option (st_parameter_common *cmp, const char *s1, int s1_len,
	     const st_option * opts, const char *error_message)
{
  for (; opts->name; opts++)
    if (compare0 (s1, s1_len, opts->name))
      return opts->value;

  generate_error (cmp, ERROR_BAD_OPTION, error_message);

  return -1;
}
Ejemplo n.º 2
0
Archivo: gen.c Proyecto: Godzil/osXdk
void emitdag(sNode_t p) 
{
	a = p->kids[0];
	b = p->kids[1]; 
	r=p;

	switch (p->op) 
	{
		case BANDU:				
			binary("ANDW");   
			break;
		case BORU:				
			binary("ORW");   
			break;
		case BXORU:			
			binary("XORW");   
			break;
		case ADDD:  
		case ADDF:			
			binary("ADDF");  
			break;
		case ADDI:  
		case ADDP:  
		case ADDU:
			if (optimizelevel>=2 && strcmp(a->x.name,p->x.name)==0
					&& p->x.adrmode=='D'
					&& strcmp(b->x.name,"1")==0)
				print("\tINCW_%c(%s)\n"
					,(p->x.name[0]=='_' || p->x.name[0]=='L')? 'D':'Z'
					,p->x.name);
			else
				binary("ADDW");
			break;
		case SUBD:  
		case SUBF:			
			binary("SUBF");  
			break;
		case SUBI:  
		case SUBP:  
		case SUBU:
			if (optimizelevel>=2 && strcmp(a->x.name,p->x.name)==0
					&& p->x.adrmode=='D'
					&& strcmp(b->x.name,"1")==0)
			{
				print("\tDECW_%c(%s)\n"
					,(p->x.name[0]=='_' || p->x.name[0]=='L')? 'D':'Z'
					,p->x.name);
			}
			else
				binary("SUBW");
			break;
		case MULD:  
		case MULF:			
			binary("MULF");	 
			break;
		case MULI:				
			binary("MULI");   
			break;
		case MULU:				
			binary("MULU");   
			break;
		case DIVD:  
		case DIVF:			
			binary("DIVF");	 
			break;
		case DIVI:				
			binary("DIVI");   
			break;
		case DIVU:				
			binary("DIVU");   
			break;
		case MODI:				
			binary("MODI");   
			break;
		case MODU:				
			binary("MODU");   
			break;
		case RSHU:  
		case RSHI:			
			binary("RSHW");	 
			break;
		case LSHI:  
		case LSHU:
			if (optimizelevel>=2 && strcmp(b->x.name,"1")==0) 
			{
				unary("LSH1W");
			} 
			else 
				binary("LSHW");
			break;
		case INDIRC: 
		case INDIRS:
			if (!p->x.optimized)
				print("\tINDIRB_%c%c(%s,%s)\n"
					,adrmode(a)
					,r->x.adrmode
					,a->x.name
					,r->x.name);
			break;
		case INDIRI: 
		case INDIRP:
			if (!p->x.optimized)
				print("\tINDIRW_%c%c(%s,%s)\n"
					,adrmode(a)
					,r->x.adrmode
					,a->x.name
					,r->x.name);
			break;
		case INDIRD: 
		case INDIRF:
			if (!p->x.optimized)
				unary("INDIRF");
			break;
		case INDIRB:
			if (!p->x.optimized)
				unary("INDIRS");
			break;
		case BCOMU:				
			unary("COMW" );   
			break;
		case NEGD:  
		case NEGF:			
			unary("NEGF" );   
			break;
		case NEGI:				
			unary("NEGI" );   
			break;
		case CVCI: 
		case CVSI:			
			unary("CSBW");	
			break;
		case CVCU: 
		case CVSU:			
			unary("CZBW");  
			break;
		case CVUC: 
		case CVUS: 
		case CVIC: 
		case CVIS:
			if (optimizelevel<=1 || strcmp(a->x.name,p->x.name)!=0)
				unary("CWB");
			break;
		case CVPU: 
		case CVUP: 
		case CVIU: 
		case CVUI:
			if (optimizelevel<=1 || strcmp(a->x.name,p->x.name)!=0)
				unary("MOVW");
			break;
		case CVID:				
			unary("CIF" );  
			break;
		case CVDF: 
		case CVFD:
			if (optimizelevel<=1 || strcmp(a->x.name,p->x.name)!=0)
				unary("MOVF");
			break;
		case CVDI:				
			unary("CFI" );	
			break;
		case RETD: 
		case RETF:
			if (optimizelevel>=2 && omit_frame && nbregs==0)
				print("\tRETF_%c(%s)\n"
					,a->x.adrmode
					,a->x.name);
			else
				print("\tLEAVEF_%c(%s)\n"
					,a->x.adrmode
					,a->x.name);
			break;
		case RETI:
			if (optimizelevel>=2 && omit_frame && nbregs==0)
				print("\tRETW_%c(%s)\n"
					,a->x.adrmode
					,a->x.name);
			else
				print("\tLEAVEW_%c(%s)\n"
					,a->x.adrmode
					,a->x.name);
			break;
		case RETV:
			if (optimizelevel>=2 && omit_frame && nbregs==0)
				print("\tRET\n");
			else print("\tLEAVE\n");
			break;
		case ADDRGP: 
		case ADDRFP: 
		case ADDRLP:
			if (optimizelevel==0)
				print("\tADDR_%c%c(%s,%s)\n"
					,p->syms[0]->x.adrmode
					,p->x.adrmode
					,p->syms[0]->x.name
					,p->x.name);
			break;
		case CNSTC: 
		case CNSTS:
		case CNSTI: 
		case CNSTU:
		case CNSTP:
			if (optimizelevel==0)
				print("\tCNST_%c%c(%s,%s)\n"
					,p->syms[0]->x.adrmode
					,p->x.adrmode
					,p->syms[0]->name
					,p->x.name);
			break;
		case JUMPV:
			print("\tJUMP_%c(%s)\n"
					,a->x.adrmode, a->x.name);
			break;
		case ASGNB:
			print("\tASGNS_%c%c(%s,%s,%s)\n"
				,b->x.adrmode
				,a->x.adrmode
				,b->x.name
				,a->x.name
				,p->syms[0]->x.name);
			break;
		case ASGNC: 
		case ASGNS:
			if (!p->x.optimized)
				print("\tASGNB_%c%c(%s,%s)\n"
					,b->x.adrmode
					,adrmode(a)
					,b->x.name
					,a->x.name);
			break;
		case ASGND: 
		case ASGNF:
			if (!p->x.optimized)
				print("\tASGNF_%c%c(%s,%s)\n"
					,b->x.adrmode
					,adrmode(a)
					,b->x.name
					,a->x.name);
			break;
		case ASGNI: 
		case ASGNP:
			if (!p->x.optimized)
				print("\tASGNW_%c%c(%s,%s)\n"
					,b->x.adrmode
					,adrmode(a)
					,b->x.name
					,a->x.name);
			break;
		case ARGB:
			print("\tARGS_%c(%s,(sp),%d,%s)\n"
				,a->x.adrmode
				,a->x.name
				,p->x.argoffset
				,p->syms[0]->x.name);
			break;
		case ARGD: 
		case ARGF:
			if (!p->x.optimized)
				print("\tARGF_%c(%s,(sp),%d)\n"
					,a->x.adrmode
					,a->x.name
					,p->x.argoffset);
			break;
		case ARGI: 
		case ARGP:
			if (!p->x.optimized)
				print("\tARGW_%c(%s,(sp),%d)\n"
					,a->x.adrmode
					,a->x.name
					,p->x.argoffset);
			break;
		case CALLB:
			print("\tMOVW_%cD(%s,op1)\n"
				,b->x.adrmode
				,b->x.name);
		case CALLV:
			print("\tCALLV_%c(%s,%d)\n"
				,a->x.adrmode
				,a->x.name
				,p->x.argoffset);
			break;
		case CALLD: 
		case CALLF:
			print("\tCALLF_%c%c(%s,%d,%s)\n"
				,a->x.adrmode
				,p->x.adrmode
				,a->x.name
				,p->x.argoffset
				,p->x.name);
			break;
		case CALLI:
			print("\tCALLW_%c%c(%s,%d,%s)\n"
				,a->x.adrmode
				,p->x.adrmode
				,a->x.name
				,p->x.argoffset
				,p->x.name);
			break;
		case EQD:   
		case EQF: 			
			compare("EQF" ); 
			break;
		case EQI:
			if (optimizelevel>=2 && strcmp(b->x.name,"0")==0)
				compare0("EQ0W");
			else compare("EQW" );
			break;
		case GED:   
		case GEF:			
			compare("GEF" ); 
			break;
		case GEI:				
			compare("GEI" ); 
			break;
		case GEU:				
			compare("GEU" ); 
			break;
		case GTD:   
		case GTF:			
			compare("GTF" ); 
			break;
	 	case GTI:				
			compare("GTI" ); 
			break;
		case GTU:				
			compare("GTU" ); 
			break;
		case LED:   
		case LEF: 			
			compare("LEF" ); 
			break;
		case LEI:				
			compare("LEI" ); 
			break;
		case LEU:				
			compare("LEU" ); 
			break;
		case LTD:   
		case LTF: 			
			compare("LTF" ); 
			break;
		case LTI:				
			compare("LTI" ); 
			break;
		case LTU:				
			compare("LTU" ); 
			break;
		case NED:   
		case NEF:			
			compare("NEF" ); 
			break;
		case NEI:
			if (optimizelevel>=2 && strcmp(b->x.name,"0")==0)
				compare0("NE0W");
			else 
				compare("NEW" );
			break;
		case LABELV:
			print("%s\n", p->syms[0]->x.name); 
			break;
		default: 
			assert(0);
	}
}
Ejemplo n.º 3
0
//The comparison function for SJF.
int compare1(const void * a, const void * b)
{
  int remtm = ( ((job_t*)a)->running_time - ((job_t*)b)->running_time );

  return remtm == 0 ? compare0(a, b) : remtm;
}
Ejemplo n.º 4
0
//The comparison function for PRI.
int compare3(const void * a, const void * b)
{
  int pridiff = ( ((job_t*)a)->priority - ((job_t*)b)->priority );

  return pridiff == 0 ? compare0(a, b) : pridiff;
}