< 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 >