715 assert(pair->oopmap_offset() + nr_of_bytes <= set->nr_of_bytes(), "check size + size");
716 }
717 }
718 #endif
719
720 ImmutableOopMapSet* ImmutableOopMapBuilder::generate_into(address buffer) {
721 DEBUG_ONLY(memset(&buffer[_required-8], 0xff, 8));
722
723 _new_set = new (buffer) ImmutableOopMapSet(_set, _required);
724 fill(_new_set, _required);
725
726 DEBUG_ONLY(verify(buffer, _required, _new_set));
727
728 return _new_set;
729 }
730
731 ImmutableOopMapSet* ImmutableOopMapBuilder::build() {
732 _required = heap_size();
733
734 // We need to allocate a chunk big enough to hold the ImmutableOopMapSet and all of its ImmutableOopMaps
735 address buffer = (address) NEW_C_HEAP_ARRAY(unsigned char, _required, mtCode);
736 return generate_into(buffer);
737 }
738
739 ImmutableOopMapSet* ImmutableOopMapSet::build_from(const OopMapSet* oopmap_set) {
740 ResourceMark mark;
741 ImmutableOopMapBuilder builder(oopmap_set);
742 return builder.build();
743 }
744
745
746 //------------------------------DerivedPointerTable---------------------------
747
748 #if COMPILER2_OR_JVMCI
749
750 class DerivedPointerTable::Entry : public CHeapObj<mtCompiler> {
751 oop* _location; // Location of derived pointer, also pointing to base
752 intptr_t _offset; // Offset from base pointer
753 Entry* volatile _next;
754
755 static Entry* volatile* next_ptr(Entry& entry) { return &entry._next; }
|
715 assert(pair->oopmap_offset() + nr_of_bytes <= set->nr_of_bytes(), "check size + size");
716 }
717 }
718 #endif
719
720 ImmutableOopMapSet* ImmutableOopMapBuilder::generate_into(address buffer) {
721 DEBUG_ONLY(memset(&buffer[_required-8], 0xff, 8));
722
723 _new_set = new (buffer) ImmutableOopMapSet(_set, _required);
724 fill(_new_set, _required);
725
726 DEBUG_ONLY(verify(buffer, _required, _new_set));
727
728 return _new_set;
729 }
730
731 ImmutableOopMapSet* ImmutableOopMapBuilder::build() {
732 _required = heap_size();
733
734 // We need to allocate a chunk big enough to hold the ImmutableOopMapSet and all of its ImmutableOopMaps
735 address buffer = NEW_C_HEAP_ARRAY(unsigned char, _required, mtCode);
736 return generate_into(buffer);
737 }
738
739 ImmutableOopMapSet* ImmutableOopMapSet::build_from(const OopMapSet* oopmap_set) {
740 ResourceMark mark;
741 ImmutableOopMapBuilder builder(oopmap_set);
742 return builder.build();
743 }
744
745
746 //------------------------------DerivedPointerTable---------------------------
747
748 #if COMPILER2_OR_JVMCI
749
750 class DerivedPointerTable::Entry : public CHeapObj<mtCompiler> {
751 oop* _location; // Location of derived pointer, also pointing to base
752 intptr_t _offset; // Offset from base pointer
753 Entry* volatile _next;
754
755 static Entry* volatile* next_ptr(Entry& entry) { return &entry._next; }
|