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:
|