< prev index next >

src/hotspot/share/opto/type.cpp

Print this page




 587   fsc[0] = TypeInt::CC;
 588   fsc[1] = Type::MEMORY;
 589   TypeTuple::STORECONDITIONAL = TypeTuple::make(2, fsc);
 590 
 591   TypeInstPtr::NOTNULL = TypeInstPtr::make(TypePtr::NotNull, current->env()->Object_klass());
 592   TypeInstPtr::BOTTOM  = TypeInstPtr::make(TypePtr::BotPTR,  current->env()->Object_klass());
 593   TypeInstPtr::MIRROR  = TypeInstPtr::make(TypePtr::NotNull, current->env()->Class_klass());
 594   TypeInstPtr::MARK    = TypeInstPtr::make(TypePtr::BotPTR,  current->env()->Object_klass(),
 595                                            false, 0, Offset(oopDesc::mark_offset_in_bytes()));
 596   TypeInstPtr::KLASS   = TypeInstPtr::make(TypePtr::BotPTR,  current->env()->Object_klass(),
 597                                            false, 0, Offset(oopDesc::klass_offset_in_bytes()));
 598   TypeOopPtr::BOTTOM  = TypeOopPtr::make(TypePtr::BotPTR, Offset::bottom, TypeOopPtr::InstanceBot);
 599 
 600   TypeMetadataPtr::BOTTOM = TypeMetadataPtr::make(TypePtr::BotPTR, NULL, Offset::bottom);
 601 
 602   TypeNarrowOop::NULL_PTR = TypeNarrowOop::make( TypePtr::NULL_PTR );
 603   TypeNarrowOop::BOTTOM   = TypeNarrowOop::make( TypeInstPtr::BOTTOM );
 604 
 605   TypeNarrowKlass::NULL_PTR = TypeNarrowKlass::make( TypePtr::NULL_PTR );
 606 
 607   TypeValueTypePtr::NOTNULL = (EnableValhalla || EnableMVT) ? TypeValueTypePtr::make(TypePtr::NotNull, current->env()->___Value_klass()->as_value_klass()) : NULL;

 608 
 609   mreg2type[Op_Node] = Type::BOTTOM;
 610   mreg2type[Op_Set ] = 0;
 611   mreg2type[Op_RegN] = TypeNarrowOop::BOTTOM;
 612   mreg2type[Op_RegI] = TypeInt::INT;
 613   mreg2type[Op_RegP] = TypePtr::BOTTOM;
 614   mreg2type[Op_RegF] = Type::FLOAT;
 615   mreg2type[Op_RegD] = Type::DOUBLE;
 616   mreg2type[Op_RegL] = TypeLong::LONG;
 617   mreg2type[Op_RegFlags] = TypeInt::CC;
 618 
 619   TypeAryPtr::RANGE   = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(Type::BOTTOM,TypeInt::POS), NULL /* current->env()->Object_klass() */, false, Offset(arrayOopDesc::length_offset_in_bytes()));
 620 
 621   TypeAryPtr::NARROWOOPS = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeNarrowOop::BOTTOM, TypeInt::POS), NULL /*ciArrayKlass::make(o)*/,  false,  Offset::bottom);
 622 
 623 #ifdef _LP64
 624   if (UseCompressedOops) {
 625     assert(TypeAryPtr::NARROWOOPS->is_ptr_to_narrowoop(), "array of narrow oops must be ptr to narrow oop");
 626     TypeAryPtr::OOPS  = TypeAryPtr::NARROWOOPS;
 627   } else
 628 #endif
 629   {
 630     // There is no shared klass for Object[].  See note in TypeAryPtr::klass().
 631     TypeAryPtr::OOPS  = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInstPtr::BOTTOM,TypeInt::POS), NULL /*ciArrayKlass::make(o)*/,  false,  Offset::bottom);
 632   }
 633   TypeAryPtr::BYTES   = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInt::BYTE      ,TypeInt::POS), ciTypeArrayKlass::make(T_BYTE),   true,  Offset::bottom);
 634   TypeAryPtr::SHORTS  = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInt::SHORT     ,TypeInt::POS), ciTypeArrayKlass::make(T_SHORT),  true,  Offset::bottom);
 635   TypeAryPtr::CHARS   = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInt::CHAR      ,TypeInt::POS), ciTypeArrayKlass::make(T_CHAR),   true,  Offset::bottom);
 636   TypeAryPtr::INTS    = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInt::INT       ,TypeInt::POS), ciTypeArrayKlass::make(T_INT),    true,  Offset::bottom);
 637   TypeAryPtr::LONGS   = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeLong::LONG     ,TypeInt::POS), ciTypeArrayKlass::make(T_LONG),   true,  Offset::bottom);
 638   TypeAryPtr::FLOATS  = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(Type::FLOAT        ,TypeInt::POS), ciTypeArrayKlass::make(T_FLOAT),  true,  Offset::bottom);
 639   TypeAryPtr::DOUBLES = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(Type::DOUBLE       ,TypeInt::POS), ciTypeArrayKlass::make(T_DOUBLE), true,  Offset::bottom);
 640 
 641   // Nobody should ask _array_body_type[T_NARROWOOP]. Use NULL as assert.
 642   TypeAryPtr::_array_body_type[T_NARROWOOP] = NULL;
 643   TypeAryPtr::_array_body_type[T_OBJECT]  = TypeAryPtr::OOPS;
 644   TypeAryPtr::_array_body_type[T_ARRAY]   = TypeAryPtr::OOPS; // arrays are stored in oop arrays
 645   TypeAryPtr::_array_body_type[T_VALUETYPE] = TypeAryPtr::OOPS;
 646   TypeAryPtr::_array_body_type[T_VALUETYPEPTR] = NULL;
 647   TypeAryPtr::_array_body_type[T_BYTE]    = TypeAryPtr::BYTES;
 648   TypeAryPtr::_array_body_type[T_BOOLEAN] = TypeAryPtr::BYTES;  // boolean[] is a byte array
 649   TypeAryPtr::_array_body_type[T_SHORT]   = TypeAryPtr::SHORTS;
 650   TypeAryPtr::_array_body_type[T_CHAR]    = TypeAryPtr::CHARS;
 651   TypeAryPtr::_array_body_type[T_INT]     = TypeAryPtr::INTS;
 652   TypeAryPtr::_array_body_type[T_LONG]    = TypeAryPtr::LONGS;
 653   TypeAryPtr::_array_body_type[T_FLOAT]   = TypeAryPtr::FLOATS;
 654   TypeAryPtr::_array_body_type[T_DOUBLE]  = TypeAryPtr::DOUBLES;
 655 
 656   TypeKlassPtr::OBJECT = TypeKlassPtr::make(TypePtr::NotNull, current->env()->Object_klass(), Offset(0) );
 657   TypeKlassPtr::OBJECT_OR_NULL = TypeKlassPtr::make(TypePtr::BotPTR, current->env()->Object_klass(), Offset(0) );
 658   TypeKlassPtr::BOTTOM = (EnableValhalla || EnableMVT) ? TypeKlassPtr::make(TypePtr::BotPTR, NULL, Offset(0)) : TypeKlassPtr::OBJECT_OR_NULL;
 659   TypeKlassPtr::VALUE = TypeKlassPtr::make(TypePtr::NotNull, current->env()->___Value_klass(), Offset(0));

 660 
 661   const Type **fi2c = TypeTuple::fields(2);
 662   fi2c[TypeFunc::Parms+0] = TypeInstPtr::BOTTOM; // Method*
 663   fi2c[TypeFunc::Parms+1] = TypeRawPtr::BOTTOM; // argument pointer
 664   TypeTuple::START_I2C = TypeTuple::make(TypeFunc::Parms+2, fi2c);
 665 
 666   const Type **intpair = TypeTuple::fields(2);
 667   intpair[0] = TypeInt::INT;
 668   intpair[1] = TypeInt::INT;
 669   TypeTuple::INT_PAIR = TypeTuple::make(2, intpair);
 670 
 671   const Type **longpair = TypeTuple::fields(2);
 672   longpair[0] = TypeLong::LONG;
 673   longpair[1] = TypeLong::LONG;
 674   TypeTuple::LONG_PAIR = TypeTuple::make(2, longpair);
 675 
 676   const Type **intccpair = TypeTuple::fields(2);
 677   intccpair[0] = TypeInt::INT;
 678   intccpair[1] = TypeInt::CC;
 679   TypeTuple::INT_CC_PAIR = TypeTuple::make(2, intccpair);
 680 
 681   const Type **longccpair = TypeTuple::fields(2);
 682   longccpair[0] = TypeLong::LONG;
 683   longccpair[1] = TypeInt::CC;
 684   TypeTuple::LONG_CC_PAIR = TypeTuple::make(2, longccpair);
 685 
 686   _const_basic_type[T_NARROWOOP]   = TypeNarrowOop::BOTTOM;
 687   _const_basic_type[T_NARROWKLASS] = Type::BOTTOM;
 688   _const_basic_type[T_BOOLEAN]     = TypeInt::BOOL;
 689   _const_basic_type[T_CHAR]        = TypeInt::CHAR;
 690   _const_basic_type[T_BYTE]        = TypeInt::BYTE;
 691   _const_basic_type[T_SHORT]       = TypeInt::SHORT;
 692   _const_basic_type[T_INT]         = TypeInt::INT;
 693   _const_basic_type[T_LONG]        = TypeLong::LONG;
 694   _const_basic_type[T_FLOAT]       = Type::FLOAT;
 695   _const_basic_type[T_DOUBLE]      = Type::DOUBLE;
 696   _const_basic_type[T_OBJECT]      = TypeInstPtr::BOTTOM;
 697   _const_basic_type[T_VALUETYPEPTR]= TypeInstPtr::BOTTOM;
 698   _const_basic_type[T_ARRAY]       = TypeInstPtr::BOTTOM; // there is no separate bottom for arrays
 699   _const_basic_type[T_VALUETYPE]   = TypeInstPtr::BOTTOM;
 700   _const_basic_type[T_VOID]        = TypePtr::NULL_PTR;   // reflection represents void this way
 701   _const_basic_type[T_ADDRESS]     = TypeRawPtr::BOTTOM;  // both interpreter return addresses & random raw ptrs
 702   _const_basic_type[T_CONFLICT]    = Type::BOTTOM;        // why not?
 703 
 704   _zero_type[T_NARROWOOP]   = TypeNarrowOop::NULL_PTR;
 705   _zero_type[T_NARROWKLASS] = TypeNarrowKlass::NULL_PTR;
 706   _zero_type[T_BOOLEAN]     = TypeInt::ZERO;     // false == 0
 707   _zero_type[T_CHAR]        = TypeInt::ZERO;     // '\0' == 0
 708   _zero_type[T_BYTE]        = TypeInt::ZERO;     // 0x00 == 0
 709   _zero_type[T_SHORT]       = TypeInt::ZERO;     // 0x0000 == 0
 710   _zero_type[T_INT]         = TypeInt::ZERO;
 711   _zero_type[T_LONG]        = TypeLong::ZERO;
 712   _zero_type[T_FLOAT]       = TypeF::ZERO;
 713   _zero_type[T_DOUBLE]      = TypeD::ZERO;
 714   _zero_type[T_OBJECT]      = TypePtr::NULL_PTR;
 715   _zero_type[T_VALUETYPEPTR]= TypePtr::NULL_PTR;
 716   _zero_type[T_ARRAY]       = TypePtr::NULL_PTR; // null array is null oop
 717   _zero_type[T_VALUETYPE]   = TypePtr::NULL_PTR;
 718   _zero_type[T_ADDRESS]     = TypePtr::NULL_PTR; // raw pointers use the same null
 719   _zero_type[T_VOID]        = Type::TOP;         // the only void value is no value at all
 720 
 721   // get_zero_type() should not happen for T_CONFLICT
 722   _zero_type[T_CONFLICT]= NULL;
 723 
 724   // Vector predefined types, it needs initialized _const_basic_type[].
 725   if (Matcher::vector_size_supported(T_BYTE,4)) {
 726     TypeVect::VECTS = TypeVect::make(T_BYTE,4);
 727   }
 728   if (Matcher::vector_size_supported(T_FLOAT,2)) {
 729     TypeVect::VECTD = TypeVect::make(T_FLOAT,2);
 730   }
 731   if (Matcher::vector_size_supported(T_FLOAT,4)) {
 732     TypeVect::VECTX = TypeVect::make(T_FLOAT,4);
 733   }
 734   if (Matcher::vector_size_supported(T_FLOAT,8)) {
 735     TypeVect::VECTY = TypeVect::make(T_FLOAT,8);
 736   }
 737   if (Matcher::vector_size_supported(T_FLOAT,16)) {




 587   fsc[0] = TypeInt::CC;
 588   fsc[1] = Type::MEMORY;
 589   TypeTuple::STORECONDITIONAL = TypeTuple::make(2, fsc);
 590 
 591   TypeInstPtr::NOTNULL = TypeInstPtr::make(TypePtr::NotNull, current->env()->Object_klass());
 592   TypeInstPtr::BOTTOM  = TypeInstPtr::make(TypePtr::BotPTR,  current->env()->Object_klass());
 593   TypeInstPtr::MIRROR  = TypeInstPtr::make(TypePtr::NotNull, current->env()->Class_klass());
 594   TypeInstPtr::MARK    = TypeInstPtr::make(TypePtr::BotPTR,  current->env()->Object_klass(),
 595                                            false, 0, Offset(oopDesc::mark_offset_in_bytes()));
 596   TypeInstPtr::KLASS   = TypeInstPtr::make(TypePtr::BotPTR,  current->env()->Object_klass(),
 597                                            false, 0, Offset(oopDesc::klass_offset_in_bytes()));
 598   TypeOopPtr::BOTTOM  = TypeOopPtr::make(TypePtr::BotPTR, Offset::bottom, TypeOopPtr::InstanceBot);
 599 
 600   TypeMetadataPtr::BOTTOM = TypeMetadataPtr::make(TypePtr::BotPTR, NULL, Offset::bottom);
 601 
 602   TypeNarrowOop::NULL_PTR = TypeNarrowOop::make( TypePtr::NULL_PTR );
 603   TypeNarrowOop::BOTTOM   = TypeNarrowOop::make( TypeInstPtr::BOTTOM );
 604 
 605   TypeNarrowKlass::NULL_PTR = TypeNarrowKlass::make( TypePtr::NULL_PTR );
 606 
 607   // TypeValueTypePtr::NOTNULL = (EnableValhalla || EnableMVT) ? TypeValueTypePtr::make(TypePtr::NotNull, current->env()->___Value_klass()->as_value_klass()) : NULL;
 608   TypeValueTypePtr::NOTNULL = NULL;
 609 
 610   mreg2type[Op_Node] = Type::BOTTOM;
 611   mreg2type[Op_Set ] = 0;
 612   mreg2type[Op_RegN] = TypeNarrowOop::BOTTOM;
 613   mreg2type[Op_RegI] = TypeInt::INT;
 614   mreg2type[Op_RegP] = TypePtr::BOTTOM;
 615   mreg2type[Op_RegF] = Type::FLOAT;
 616   mreg2type[Op_RegD] = Type::DOUBLE;
 617   mreg2type[Op_RegL] = TypeLong::LONG;
 618   mreg2type[Op_RegFlags] = TypeInt::CC;
 619 
 620   TypeAryPtr::RANGE   = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(Type::BOTTOM,TypeInt::POS), NULL /* current->env()->Object_klass() */, false, Offset(arrayOopDesc::length_offset_in_bytes()));
 621 
 622   TypeAryPtr::NARROWOOPS = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeNarrowOop::BOTTOM, TypeInt::POS), NULL /*ciArrayKlass::make(o)*/,  false,  Offset::bottom);
 623 
 624 #ifdef _LP64
 625   if (UseCompressedOops) {
 626     assert(TypeAryPtr::NARROWOOPS->is_ptr_to_narrowoop(), "array of narrow oops must be ptr to narrow oop");
 627     TypeAryPtr::OOPS  = TypeAryPtr::NARROWOOPS;
 628   } else
 629 #endif
 630   {
 631     // There is no shared klass for Object[].  See note in TypeAryPtr::klass().
 632     TypeAryPtr::OOPS  = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInstPtr::BOTTOM,TypeInt::POS), NULL /*ciArrayKlass::make(o)*/,  false,  Offset::bottom);
 633   }
 634   TypeAryPtr::BYTES   = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInt::BYTE      ,TypeInt::POS), ciTypeArrayKlass::make(T_BYTE),   true,  Offset::bottom);
 635   TypeAryPtr::SHORTS  = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInt::SHORT     ,TypeInt::POS), ciTypeArrayKlass::make(T_SHORT),  true,  Offset::bottom);
 636   TypeAryPtr::CHARS   = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInt::CHAR      ,TypeInt::POS), ciTypeArrayKlass::make(T_CHAR),   true,  Offset::bottom);
 637   TypeAryPtr::INTS    = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeInt::INT       ,TypeInt::POS), ciTypeArrayKlass::make(T_INT),    true,  Offset::bottom);
 638   TypeAryPtr::LONGS   = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(TypeLong::LONG     ,TypeInt::POS), ciTypeArrayKlass::make(T_LONG),   true,  Offset::bottom);
 639   TypeAryPtr::FLOATS  = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(Type::FLOAT        ,TypeInt::POS), ciTypeArrayKlass::make(T_FLOAT),  true,  Offset::bottom);
 640   TypeAryPtr::DOUBLES = TypeAryPtr::make(TypePtr::BotPTR, TypeAry::make(Type::DOUBLE       ,TypeInt::POS), ciTypeArrayKlass::make(T_DOUBLE), true,  Offset::bottom);
 641 
 642   // Nobody should ask _array_body_type[T_NARROWOOP]. Use NULL as assert.
 643   TypeAryPtr::_array_body_type[T_NARROWOOP] = NULL;
 644   TypeAryPtr::_array_body_type[T_OBJECT]  = TypeAryPtr::OOPS;
 645   TypeAryPtr::_array_body_type[T_ARRAY]   = TypeAryPtr::OOPS; // arrays are stored in oop arrays

 646   TypeAryPtr::_array_body_type[T_VALUETYPEPTR] = NULL;
 647   TypeAryPtr::_array_body_type[T_BYTE]    = TypeAryPtr::BYTES;
 648   TypeAryPtr::_array_body_type[T_BOOLEAN] = TypeAryPtr::BYTES;  // boolean[] is a byte array
 649   TypeAryPtr::_array_body_type[T_SHORT]   = TypeAryPtr::SHORTS;
 650   TypeAryPtr::_array_body_type[T_CHAR]    = TypeAryPtr::CHARS;
 651   TypeAryPtr::_array_body_type[T_INT]     = TypeAryPtr::INTS;
 652   TypeAryPtr::_array_body_type[T_LONG]    = TypeAryPtr::LONGS;
 653   TypeAryPtr::_array_body_type[T_FLOAT]   = TypeAryPtr::FLOATS;
 654   TypeAryPtr::_array_body_type[T_DOUBLE]  = TypeAryPtr::DOUBLES;
 655 
 656   TypeKlassPtr::OBJECT = TypeKlassPtr::make(TypePtr::NotNull, current->env()->Object_klass(), Offset(0) );
 657   TypeKlassPtr::OBJECT_OR_NULL = TypeKlassPtr::make(TypePtr::BotPTR, current->env()->Object_klass(), Offset(0) );
 658   TypeKlassPtr::BOTTOM = (EnableValhalla || EnableMVT) ? TypeKlassPtr::make(TypePtr::BotPTR, NULL, Offset(0)) : TypeKlassPtr::OBJECT_OR_NULL;
 659   // TypeKlassPtr::VALUE = TypeKlassPtr::make(TypePtr::NotNull, current->env()->___Value_klass(), Offset(0));
 660   TypeKlassPtr::VALUE = NULL;
 661 
 662   const Type **fi2c = TypeTuple::fields(2);
 663   fi2c[TypeFunc::Parms+0] = TypeInstPtr::BOTTOM; // Method*
 664   fi2c[TypeFunc::Parms+1] = TypeRawPtr::BOTTOM; // argument pointer
 665   TypeTuple::START_I2C = TypeTuple::make(TypeFunc::Parms+2, fi2c);
 666 
 667   const Type **intpair = TypeTuple::fields(2);
 668   intpair[0] = TypeInt::INT;
 669   intpair[1] = TypeInt::INT;
 670   TypeTuple::INT_PAIR = TypeTuple::make(2, intpair);
 671 
 672   const Type **longpair = TypeTuple::fields(2);
 673   longpair[0] = TypeLong::LONG;
 674   longpair[1] = TypeLong::LONG;
 675   TypeTuple::LONG_PAIR = TypeTuple::make(2, longpair);
 676 
 677   const Type **intccpair = TypeTuple::fields(2);
 678   intccpair[0] = TypeInt::INT;
 679   intccpair[1] = TypeInt::CC;
 680   TypeTuple::INT_CC_PAIR = TypeTuple::make(2, intccpair);
 681 
 682   const Type **longccpair = TypeTuple::fields(2);
 683   longccpair[0] = TypeLong::LONG;
 684   longccpair[1] = TypeInt::CC;
 685   TypeTuple::LONG_CC_PAIR = TypeTuple::make(2, longccpair);
 686 
 687   _const_basic_type[T_NARROWOOP]   = TypeNarrowOop::BOTTOM;
 688   _const_basic_type[T_NARROWKLASS] = Type::BOTTOM;
 689   _const_basic_type[T_BOOLEAN]     = TypeInt::BOOL;
 690   _const_basic_type[T_CHAR]        = TypeInt::CHAR;
 691   _const_basic_type[T_BYTE]        = TypeInt::BYTE;
 692   _const_basic_type[T_SHORT]       = TypeInt::SHORT;
 693   _const_basic_type[T_INT]         = TypeInt::INT;
 694   _const_basic_type[T_LONG]        = TypeLong::LONG;
 695   _const_basic_type[T_FLOAT]       = Type::FLOAT;
 696   _const_basic_type[T_DOUBLE]      = Type::DOUBLE;
 697   _const_basic_type[T_OBJECT]      = TypeInstPtr::BOTTOM;
 698   _const_basic_type[T_VALUETYPEPTR]= TypeInstPtr::BOTTOM;
 699   _const_basic_type[T_ARRAY]       = TypeInstPtr::BOTTOM; // there is no separate bottom for arrays

 700   _const_basic_type[T_VOID]        = TypePtr::NULL_PTR;   // reflection represents void this way
 701   _const_basic_type[T_ADDRESS]     = TypeRawPtr::BOTTOM;  // both interpreter return addresses & random raw ptrs
 702   _const_basic_type[T_CONFLICT]    = Type::BOTTOM;        // why not?
 703 
 704   _zero_type[T_NARROWOOP]   = TypeNarrowOop::NULL_PTR;
 705   _zero_type[T_NARROWKLASS] = TypeNarrowKlass::NULL_PTR;
 706   _zero_type[T_BOOLEAN]     = TypeInt::ZERO;     // false == 0
 707   _zero_type[T_CHAR]        = TypeInt::ZERO;     // '\0' == 0
 708   _zero_type[T_BYTE]        = TypeInt::ZERO;     // 0x00 == 0
 709   _zero_type[T_SHORT]       = TypeInt::ZERO;     // 0x0000 == 0
 710   _zero_type[T_INT]         = TypeInt::ZERO;
 711   _zero_type[T_LONG]        = TypeLong::ZERO;
 712   _zero_type[T_FLOAT]       = TypeF::ZERO;
 713   _zero_type[T_DOUBLE]      = TypeD::ZERO;
 714   _zero_type[T_OBJECT]      = TypePtr::NULL_PTR;
 715   _zero_type[T_VALUETYPEPTR]= TypePtr::NULL_PTR;
 716   _zero_type[T_ARRAY]       = TypePtr::NULL_PTR; // null array is null oop

 717   _zero_type[T_ADDRESS]     = TypePtr::NULL_PTR; // raw pointers use the same null
 718   _zero_type[T_VOID]        = Type::TOP;         // the only void value is no value at all
 719 
 720   // get_zero_type() should not happen for T_CONFLICT
 721   _zero_type[T_CONFLICT]= NULL;
 722 
 723   // Vector predefined types, it needs initialized _const_basic_type[].
 724   if (Matcher::vector_size_supported(T_BYTE,4)) {
 725     TypeVect::VECTS = TypeVect::make(T_BYTE,4);
 726   }
 727   if (Matcher::vector_size_supported(T_FLOAT,2)) {
 728     TypeVect::VECTD = TypeVect::make(T_FLOAT,2);
 729   }
 730   if (Matcher::vector_size_supported(T_FLOAT,4)) {
 731     TypeVect::VECTX = TypeVect::make(T_FLOAT,4);
 732   }
 733   if (Matcher::vector_size_supported(T_FLOAT,8)) {
 734     TypeVect::VECTY = TypeVect::make(T_FLOAT,8);
 735   }
 736   if (Matcher::vector_size_supported(T_FLOAT,16)) {


< prev index next >