예제 #1
0
short BiArith::codeGen(Generator * generator)
{
  Attributes ** attr;
  ExpGenerator * eg = generator->getExpGenerator();
  
  if (eg->genItemExpr(this, &attr, (1+getArity()), -1) == 1)
    return 0;

  // if temp space is needed for this operation, set it.
  if (attr[0]->isComplexType())
    {
      eg->addTempsLength(((ComplexType *)attr[0])->setTempSpaceInfo(getOperatorType(),
#pragma nowarn(1506)   // warning elimination 
								    eg->getTempsLength()));
#pragma warn(1506)  // warning elimination 
    }
			      
  attr[0]->resetlastdaymonthflag();
  attr[0]->resetlastdayonerrflag();

// Check to see which type of rounding is needed for add_months, date_add
// functions.  Set flags here for use in executor datetime.cpp.
  if (isStandardNormalization())
     attr[0]->setlastdayonerrflag();
  if (isKeepLastDay())
     attr[0]->setlastdaymonthflag();

  ex_arith_clause * arith_clause =
    new(generator->getSpace()) 
    ex_arith_clause(getOperatorType(), attr, generator->getSpace(),
		    (short)getRoundingMode(),
		    getDivToDownscale());

  generator->getExpGenerator()->linkClause(this, arith_clause);

  return 0;
}
예제 #2
0
파일: zad1.c 프로젝트: rpieniazek/AK2Lab
int main()
{
  __asm("finit");
  int precision = getPrecision(); //sprawdzanie precyzji
	printf("Precision is: \t\t"); 
	switch(precision)
	{
	  case 0:
		  puts("Single Precision (24 bits)"); break; //pojedyncza
	  case 2:
		  puts("Double Precision (54 bits)"); break;//podwojna
		case 3:
		  puts("Double Extended Precision (64 bits)"); break;//rozszerzona
		default:
		  puts("Undefined"); break;//niezdefiniowana
	}
	
	__asm("finit");
	int rounding_mode = getRoundingMode();//sprawdzanie trybu zaokraglania
	printf("Rounding mode is: \t");
	switch(rounding_mode)
	{
	  case 0:
		  puts("Round to nearest (even)"); break; //zaokraglanie do najblizszej
		case 1:
		  puts("Round down"); break;//zaokraglanie w dol
	  case 2:
		  puts("Round up"); break;//zaokraglanie w gore
		case 3:
		  puts("Round toward zero (truncate)"); break; //zaokraglanie 'do zera'
		default:
		  puts("Undefined"); break;//niezdefiniowane
	}
	
	__asm("finit");
	int exceptions = getExceptions();//wyj�tki
	printf("Exceptions:\n");
	if (exceptions & 1)  puts("\t\t\tInvalid operation");//niewlasciwa operacja
	if (exceptions & 2)  puts("\t\t\tDenormalized operand");//zdenormalizowany argument
	if (exceptions & 4)  puts("\t\t\tDivide-by-zero");//dzielenie przez zero
	if (exceptions & 8)  puts("\t\t\tNumeric overflow");//nadmiar
	if (exceptions & 16) puts("\t\t\tNumeric underflow");//niedomiar
	if (exceptions & 32) puts("\t\t\tInexact result (precision)");//niedokladnosc
	if (exceptions == 0) puts("\t\t\tNo exceptions");//brak wyjatkow
	
	printf("Stack: \n");
	int i, j, stack_status;
	for(i=0, j=0; i<8; ++i)
	{
		__asm("finit");
		stack_status = getStackStatus(i);//stan rejest�w stosu
		if(stack_status == 3) continue;
		printf("\t\t\tst(%d) is: ", j);
	    switch(getStackStatus(i))
		{
		  case 0:
			  puts("Valid"); break;//poprawny
			case 1:
				puts("Zero"); break;//zero
			case 2:
			  puts("Special: invalid (NaN, unsupported), infinity, or denormal"); //specjalny
				break;
			case 3:
				puts("Empty"); break;
			default:
			  break;
		}
		++j;
	}
	return 0;
}