< prev index next >

src/share/vm/code/codeBlob.hpp

Print this page

        

@@ -118,10 +118,11 @@
   virtual bool is_safepoint_stub() const              { return false; }
   virtual bool is_adapter_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; };
   inline bool is_compiled_by_shark() const { return _type == compiler_shark; };

@@ -358,10 +359,11 @@
 
 class BufferBlob: public RuntimeBlob {
   friend class VMStructs;
   friend class AdapterBlob;
   friend class MethodHandlesAdapterBlob;
+  friend class BufferedValueTypeBlob;
   friend class WhiteBox;
 
  private:
   // Creation support
   BufferBlob(const char* name, int size);

@@ -424,10 +426,30 @@
 
   // 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 >