comparison src/share/vm/classfile/javaClasses.hpp @ 165:437d03ea40b1

6703888: Compressed Oops: use the 32-bits gap after klass in a object Summary: Use the gap also for a narrow oop field and a boxing object value. Reviewed-by: coleenp, never
author kvn
date Wed, 21 May 2008 16:31:35 -0700
parents 60b728ec77c1
children d1605aabd0a1
comparison
equal deleted inserted replaced
164:c436414a719e 165:437d03ea40b1
651 private: 651 private:
652 enum { 652 enum {
653 hc_value_offset = 0 653 hc_value_offset = 0
654 }; 654 };
655 static int value_offset; 655 static int value_offset;
656 static int long_value_offset;
656 657
657 static oop initialize_and_allocate(BasicType type, TRAPS); 658 static oop initialize_and_allocate(BasicType type, TRAPS);
658 public: 659 public:
659 // Allocation. Returns a boxed value, or NULL for invalid type. 660 // Allocation. Returns a boxed value, or NULL for invalid type.
660 static oop create(BasicType type, jvalue* value, TRAPS); 661 static oop create(BasicType type, jvalue* value, TRAPS);
663 static BasicType set_value(oop box, jvalue* value); 664 static BasicType set_value(oop box, jvalue* value);
664 static BasicType basic_type(oop box); 665 static BasicType basic_type(oop box);
665 static bool is_instance(oop box) { return basic_type(box) != T_ILLEGAL; } 666 static bool is_instance(oop box) { return basic_type(box) != T_ILLEGAL; }
666 static bool is_instance(oop box, BasicType type) { return basic_type(box) == type; } 667 static bool is_instance(oop box, BasicType type) { return basic_type(box) == type; }
667 668
668 static int value_offset_in_bytes() { return value_offset; } 669 static int value_offset_in_bytes(BasicType type) {
670 return ( type == T_LONG || type == T_DOUBLE ) ? long_value_offset :
671 value_offset;
672 }
669 673
670 // Debugging 674 // Debugging
671 friend class JavaClasses; 675 friend class JavaClasses;
672 }; 676 };
673 677
745 749
746 class java_lang_ref_SoftReference: public java_lang_ref_Reference { 750 class java_lang_ref_SoftReference: public java_lang_ref_Reference {
747 public: 751 public:
748 enum { 752 enum {
749 // The timestamp is a long field and may need to be adjusted for alignment. 753 // The timestamp is a long field and may need to be adjusted for alignment.
750 hc_timestamp_offset = align_object_offset_(hc_discovered_offset + 1) 754 hc_timestamp_offset = hc_discovered_offset + 1
751 }; 755 };
752 enum { 756 enum {
753 hc_static_clock_offset = 0 757 hc_static_clock_offset = 0
754 }; 758 };
755 759