< prev index next >

src/share/vm/oops/valueKlass.hpp

Print this page

        

*** 75,88 **** --- 75,107 ---- address adr_return_regs() const { return adr_extended_sig() + sizeof(intptr_t); } + // pack and unpack handlers for value types return + address adr_pack_handler() const { + return (address)this + in_bytes(pack_handler_offset()); + } + + address adr_unpack_handler() const { + return (address)this + in_bytes(unpack_handler_offset()); + } + + address pack_handler() const { + return *(address*)adr_pack_handler(); + } + + address unpack_handler() const { + return *(address*)adr_unpack_handler(); + } + // static Klass* array_klass_impl(InstanceKlass* this_k, bool or_null, int n, TRAPS); GrowableArray<SigEntry> collect_fields(int base_off = 0) const; + void cleanup_blobs(); + protected: // Returns the array class for the n'th dimension Klass* array_klass_impl(bool or_null, int n, TRAPS); // Returns the array class with this class as element type
*** 180,200 **** template <bool nv, typename T, class OopClosureType> inline void oop_iterate_specialized_bounded(const address oop_addr, OopClosureType* closure, void* lo, void* hi); // calling convention support void initialize_calling_convention(); ! const Array<SigEntry>* extended_sig() const { assert(this != SystemDictionary::___Value_klass(), "make no sense for __Value"); return *((Array<SigEntry>**)adr_extended_sig()); } ! const Array<VMRegPair>* return_regs() const { assert(this != SystemDictionary::___Value_klass(), "make no sense for __Value"); return *((Array<VMRegPair>**)adr_return_regs()); } void save_oop_fields(const RegisterMap& map, GrowableArray<Handle>& handles) const; bool save_oop_results(RegisterMap& map, GrowableArray<Handle>& handles) const; void restore_oop_results(RegisterMap& map, GrowableArray<Handle>& handles) const; ! oop realloc_result(const RegisterMap& reg_map, const GrowableArray<Handle>& handles, TRAPS); static ValueKlass* returned_value_type(const RegisterMap& reg_map); }; #endif /* SHARE_VM_OOPS_VALUEKLASS_HPP */ --- 199,232 ---- template <bool nv, typename T, class OopClosureType> inline void oop_iterate_specialized_bounded(const address oop_addr, OopClosureType* closure, void* lo, void* hi); // calling convention support void initialize_calling_convention(); ! Array<SigEntry>* extended_sig() const { assert(this != SystemDictionary::___Value_klass(), "make no sense for __Value"); return *((Array<SigEntry>**)adr_extended_sig()); } ! Array<VMRegPair>* return_regs() const { assert(this != SystemDictionary::___Value_klass(), "make no sense for __Value"); return *((Array<VMRegPair>**)adr_return_regs()); } void save_oop_fields(const RegisterMap& map, GrowableArray<Handle>& handles) const; bool save_oop_results(RegisterMap& map, GrowableArray<Handle>& handles) const; void restore_oop_results(RegisterMap& map, GrowableArray<Handle>& handles) const; ! oop realloc_result(const RegisterMap& reg_map, const GrowableArray<Handle>& handles, bool buffered, TRAPS); static ValueKlass* returned_value_type(const RegisterMap& reg_map); + + // pack and unpack handlers. Need to be loadable from generated code + // so at a fixed offset from the base of the klass pointer. + static ByteSize pack_handler_offset() { + return in_ByteSize(InstanceKlass::header_size() * wordSize); + } + + static ByteSize unpack_handler_offset() { + return in_ByteSize((InstanceKlass::header_size()+1) * wordSize); + } + + void deallocate_contents(ClassLoaderData* loader_data); + static void cleanup(ValueKlass* ik) ; }; #endif /* SHARE_VM_OOPS_VALUEKLASS_HPP */
< prev index next >