src/share/vm/opto/type.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/share/vm/opto

src/share/vm/opto/type.cpp

Print this page
rev 5513 : 8026844: Various Math functions needs intrinsification
Reviewed-by: duke


 418   const Type **fi2c = TypeTuple::fields(2);
 419   fi2c[TypeFunc::Parms+0] = TypeInstPtr::BOTTOM; // Method*
 420   fi2c[TypeFunc::Parms+1] = TypeRawPtr::BOTTOM; // argument pointer
 421   TypeTuple::START_I2C = TypeTuple::make(TypeFunc::Parms+2, fi2c);
 422 
 423   const Type **intpair = TypeTuple::fields(2);
 424   intpair[0] = TypeInt::INT;
 425   intpair[1] = TypeInt::INT;
 426   TypeTuple::INT_PAIR = TypeTuple::make(2, intpair);
 427 
 428   const Type **longpair = TypeTuple::fields(2);
 429   longpair[0] = TypeLong::LONG;
 430   longpair[1] = TypeLong::LONG;
 431   TypeTuple::LONG_PAIR = TypeTuple::make(2, longpair);
 432 
 433   const Type **intccpair = TypeTuple::fields(2);
 434   intccpair[0] = TypeInt::INT;
 435   intccpair[1] = TypeInt::CC;
 436   TypeTuple::INT_CC_PAIR = TypeTuple::make(2, intccpair);
 437 





 438   _const_basic_type[T_NARROWOOP]   = TypeNarrowOop::BOTTOM;
 439   _const_basic_type[T_NARROWKLASS] = Type::BOTTOM;
 440   _const_basic_type[T_BOOLEAN]     = TypeInt::BOOL;
 441   _const_basic_type[T_CHAR]        = TypeInt::CHAR;
 442   _const_basic_type[T_BYTE]        = TypeInt::BYTE;
 443   _const_basic_type[T_SHORT]       = TypeInt::SHORT;
 444   _const_basic_type[T_INT]         = TypeInt::INT;
 445   _const_basic_type[T_LONG]        = TypeLong::LONG;
 446   _const_basic_type[T_FLOAT]       = Type::FLOAT;
 447   _const_basic_type[T_DOUBLE]      = Type::DOUBLE;
 448   _const_basic_type[T_OBJECT]      = TypeInstPtr::BOTTOM;
 449   _const_basic_type[T_ARRAY]       = TypeInstPtr::BOTTOM; // there is no separate bottom for arrays
 450   _const_basic_type[T_VOID]        = TypePtr::NULL_PTR;   // reflection represents void this way
 451   _const_basic_type[T_ADDRESS]     = TypeRawPtr::BOTTOM;  // both interpreter return addresses & random raw ptrs
 452   _const_basic_type[T_CONFLICT]    = Type::BOTTOM;        // why not?
 453 
 454   _zero_type[T_NARROWOOP]   = TypeNarrowOop::NULL_PTR;
 455   _zero_type[T_NARROWKLASS] = TypeNarrowKlass::NULL_PTR;
 456   _zero_type[T_BOOLEAN]     = TypeInt::ZERO;     // false == 0
 457   _zero_type[T_CHAR]        = TypeInt::ZERO;     // '\0' == 0


1635   return _lo >= _hi;
1636 }
1637 
1638 bool TypeLong::empty(void) const {
1639   return _lo > _hi;
1640 }
1641 
1642 //=============================================================================
1643 // Convenience common pre-built types.
1644 const TypeTuple *TypeTuple::IFBOTH;     // Return both arms of IF as reachable
1645 const TypeTuple *TypeTuple::IFFALSE;
1646 const TypeTuple *TypeTuple::IFTRUE;
1647 const TypeTuple *TypeTuple::IFNEITHER;
1648 const TypeTuple *TypeTuple::LOOPBODY;
1649 const TypeTuple *TypeTuple::MEMBAR;
1650 const TypeTuple *TypeTuple::STORECONDITIONAL;
1651 const TypeTuple *TypeTuple::START_I2C;
1652 const TypeTuple *TypeTuple::INT_PAIR;
1653 const TypeTuple *TypeTuple::LONG_PAIR;
1654 const TypeTuple *TypeTuple::INT_CC_PAIR;

1655 
1656 
1657 //------------------------------make-------------------------------------------
1658 // Make a TypeTuple from the range of a method signature
1659 const TypeTuple *TypeTuple::make_range(ciSignature* sig) {
1660   ciType* return_type = sig->return_type();
1661   uint total_fields = TypeFunc::Parms + return_type->size();
1662   const Type **field_array = fields(total_fields);
1663   switch (return_type->basic_type()) {
1664   case T_LONG:
1665     field_array[TypeFunc::Parms]   = TypeLong::LONG;
1666     field_array[TypeFunc::Parms+1] = Type::HALF;
1667     break;
1668   case T_DOUBLE:
1669     field_array[TypeFunc::Parms]   = Type::DOUBLE;
1670     field_array[TypeFunc::Parms+1] = Type::HALF;
1671     break;
1672   case T_OBJECT:
1673   case T_ARRAY:
1674   case T_BOOLEAN:




 418   const Type **fi2c = TypeTuple::fields(2);
 419   fi2c[TypeFunc::Parms+0] = TypeInstPtr::BOTTOM; // Method*
 420   fi2c[TypeFunc::Parms+1] = TypeRawPtr::BOTTOM; // argument pointer
 421   TypeTuple::START_I2C = TypeTuple::make(TypeFunc::Parms+2, fi2c);
 422 
 423   const Type **intpair = TypeTuple::fields(2);
 424   intpair[0] = TypeInt::INT;
 425   intpair[1] = TypeInt::INT;
 426   TypeTuple::INT_PAIR = TypeTuple::make(2, intpair);
 427 
 428   const Type **longpair = TypeTuple::fields(2);
 429   longpair[0] = TypeLong::LONG;
 430   longpair[1] = TypeLong::LONG;
 431   TypeTuple::LONG_PAIR = TypeTuple::make(2, longpair);
 432 
 433   const Type **intccpair = TypeTuple::fields(2);
 434   intccpair[0] = TypeInt::INT;
 435   intccpair[1] = TypeInt::CC;
 436   TypeTuple::INT_CC_PAIR = TypeTuple::make(2, intccpair);
 437 
 438   const Type **longccpair = TypeTuple::fields(2);
 439   longccpair[0] = TypeLong::LONG;
 440   longccpair[1] = TypeInt::CC;
 441   TypeTuple::LONG_CC_PAIR = TypeTuple::make(2, longccpair);
 442 
 443   _const_basic_type[T_NARROWOOP]   = TypeNarrowOop::BOTTOM;
 444   _const_basic_type[T_NARROWKLASS] = Type::BOTTOM;
 445   _const_basic_type[T_BOOLEAN]     = TypeInt::BOOL;
 446   _const_basic_type[T_CHAR]        = TypeInt::CHAR;
 447   _const_basic_type[T_BYTE]        = TypeInt::BYTE;
 448   _const_basic_type[T_SHORT]       = TypeInt::SHORT;
 449   _const_basic_type[T_INT]         = TypeInt::INT;
 450   _const_basic_type[T_LONG]        = TypeLong::LONG;
 451   _const_basic_type[T_FLOAT]       = Type::FLOAT;
 452   _const_basic_type[T_DOUBLE]      = Type::DOUBLE;
 453   _const_basic_type[T_OBJECT]      = TypeInstPtr::BOTTOM;
 454   _const_basic_type[T_ARRAY]       = TypeInstPtr::BOTTOM; // there is no separate bottom for arrays
 455   _const_basic_type[T_VOID]        = TypePtr::NULL_PTR;   // reflection represents void this way
 456   _const_basic_type[T_ADDRESS]     = TypeRawPtr::BOTTOM;  // both interpreter return addresses & random raw ptrs
 457   _const_basic_type[T_CONFLICT]    = Type::BOTTOM;        // why not?
 458 
 459   _zero_type[T_NARROWOOP]   = TypeNarrowOop::NULL_PTR;
 460   _zero_type[T_NARROWKLASS] = TypeNarrowKlass::NULL_PTR;
 461   _zero_type[T_BOOLEAN]     = TypeInt::ZERO;     // false == 0
 462   _zero_type[T_CHAR]        = TypeInt::ZERO;     // '\0' == 0


1640   return _lo >= _hi;
1641 }
1642 
1643 bool TypeLong::empty(void) const {
1644   return _lo > _hi;
1645 }
1646 
1647 //=============================================================================
1648 // Convenience common pre-built types.
1649 const TypeTuple *TypeTuple::IFBOTH;     // Return both arms of IF as reachable
1650 const TypeTuple *TypeTuple::IFFALSE;
1651 const TypeTuple *TypeTuple::IFTRUE;
1652 const TypeTuple *TypeTuple::IFNEITHER;
1653 const TypeTuple *TypeTuple::LOOPBODY;
1654 const TypeTuple *TypeTuple::MEMBAR;
1655 const TypeTuple *TypeTuple::STORECONDITIONAL;
1656 const TypeTuple *TypeTuple::START_I2C;
1657 const TypeTuple *TypeTuple::INT_PAIR;
1658 const TypeTuple *TypeTuple::LONG_PAIR;
1659 const TypeTuple *TypeTuple::INT_CC_PAIR;
1660 const TypeTuple *TypeTuple::LONG_CC_PAIR;
1661 
1662 
1663 //------------------------------make-------------------------------------------
1664 // Make a TypeTuple from the range of a method signature
1665 const TypeTuple *TypeTuple::make_range(ciSignature* sig) {
1666   ciType* return_type = sig->return_type();
1667   uint total_fields = TypeFunc::Parms + return_type->size();
1668   const Type **field_array = fields(total_fields);
1669   switch (return_type->basic_type()) {
1670   case T_LONG:
1671     field_array[TypeFunc::Parms]   = TypeLong::LONG;
1672     field_array[TypeFunc::Parms+1] = Type::HALF;
1673     break;
1674   case T_DOUBLE:
1675     field_array[TypeFunc::Parms]   = Type::DOUBLE;
1676     field_array[TypeFunc::Parms+1] = Type::HALF;
1677     break;
1678   case T_OBJECT:
1679   case T_ARRAY:
1680   case T_BOOLEAN:


src/share/vm/opto/type.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File