< prev index next >

src/hotspot/share/code/codeBlob.hpp

Print this page

        

*** 140,149 **** --- 140,150 ---- virtual bool is_adapter_blob() const { return false; } virtual bool is_vtable_blob() const { return false; } virtual bool is_method_handles_adapter_blob() const { return false; } virtual bool is_aot() const { return false; } virtual bool is_compiled() const { return false; } + virtual bool is_buffered_value_type_blob() const { return false; } inline bool is_compiled_by_c1() const { return _type == compiler_c1; }; inline bool is_compiled_by_c2() const { return _type == compiler_c2; }; inline bool is_compiled_by_jvmci() const { return _type == compiler_jvmci; }; const char* compiler_name() const;
*** 389,404 **** --- 390,407 ---- class BufferBlob: public RuntimeBlob { friend class VMStructs; friend class AdapterBlob; friend class VtableBlob; friend class MethodHandlesAdapterBlob; + friend class BufferedValueTypeBlob; friend class WhiteBox; private: // Creation support BufferBlob(const char* name, int size); BufferBlob(const char* name, int size, CodeBuffer* cb); + BufferBlob(const char* name, int size, CodeBuffer* cb, int frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments = false); // This ordinary operator delete is needed even though not used, so the // below two-argument operator delete will be treated as a placement // delete rather than an ordinary sized delete; see C++14 3.7.4.2/p2. void operator delete(void* p);
*** 427,444 **** //---------------------------------------------------------------------------------------------------- // AdapterBlob: used to hold C2I/I2C adapters class AdapterBlob: public BufferBlob { private: ! AdapterBlob(int size, CodeBuffer* cb); public: // Creation ! static AdapterBlob* create(CodeBuffer* cb); // Typing virtual bool is_adapter_blob() const { return true; } }; //--------------------------------------------------------------------------------------------------- class VtableBlob: public BufferBlob { private: --- 430,453 ---- //---------------------------------------------------------------------------------------------------- // AdapterBlob: used to hold C2I/I2C adapters class AdapterBlob: public BufferBlob { private: ! AdapterBlob(int size, CodeBuffer* cb, int frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments = false); public: // Creation ! static AdapterBlob* create(CodeBuffer* cb, ! int frame_complete, ! int frame_size, ! OopMapSet* oop_maps, ! bool caller_must_gc_arguments = false); // Typing virtual bool is_adapter_blob() const { return true; } + + bool caller_must_gc_arguments(JavaThread* thread) const { return true; } }; //--------------------------------------------------------------------------------------------------- class VtableBlob: public BufferBlob { private:
*** 465,474 **** --- 474,503 ---- // Typing virtual bool is_method_handles_adapter_blob() const { return true; } }; + //---------------------------------------------------------------------------------------------------- + // BufferedValueTypeBlob : used for pack/unpack handlers + + class BufferedValueTypeBlob: public BufferBlob { + private: + const int _pack_fields_off; + const int _unpack_fields_off; + + BufferedValueTypeBlob(int size, CodeBuffer* cb, int pack_fields_off, int unpack_fields_off); + + public: + // Creation + static BufferedValueTypeBlob* create(CodeBuffer* cb, int pack_fields_off, int unpack_fields_off); + + address pack_fields() const { return code_begin() + _pack_fields_off; } + address unpack_fields() const { return code_begin() + _unpack_fields_off; } + + // Typing + virtual bool is_buffered_value_type_blob() const { return true; } + }; //---------------------------------------------------------------------------------------------------- // RuntimeStub: describes stubs used by compiled code to call a (static) C++ runtime routine class RuntimeStub: public RuntimeBlob {
< prev index next >