< prev index next >

src/hotspot/share/jvmci/jvmciCompilerToVM.hpp

Print this page




 153 
 154   static inline Klass* asKlass(jlong metaspaceKlass) {
 155     return (Klass*) (address) metaspaceKlass;
 156   }
 157 
 158   static inline MethodData* asMethodData(jlong metaspaceMethodData) {
 159     return (MethodData*) (address) metaspaceMethodData;
 160   }
 161 
 162   static oop get_jvmci_method(const methodHandle& method, TRAPS);
 163 
 164   static oop get_jvmci_type(Klass* klass, TRAPS);
 165 };
 166 
 167 class JavaArgumentUnboxer : public SignatureIterator {
 168  protected:
 169   JavaCallArguments*  _jca;
 170   arrayOop _args;
 171   int _index;
 172 
 173   Handle next_arg(BasicType expectedType) {
 174     assert(_index < _args->length(), "out of bounds");
 175     oop arg=((objArrayOop) (_args))->obj_at(_index++);
 176     assert(expectedType == T_OBJECT || java_lang_boxing_object::is_instance(arg, expectedType), "arg type mismatch");
 177     return Handle(Thread::current(), arg);
 178   }
 179 
 180  public:
 181   JavaArgumentUnboxer(Symbol* signature, JavaCallArguments*  jca, arrayOop args, bool is_static) : SignatureIterator(signature) {
 182     this->_return_type = T_ILLEGAL;
 183     _jca = jca;
 184     _index = 0;
 185     _args = args;
 186     if (!is_static) {
 187       _jca->push_oop(next_arg(T_OBJECT));
 188     }
 189     iterate();
 190     assert(_index == args->length(), "arg count mismatch with signature");
 191   }
 192 
 193   inline void do_bool()   { if (!is_return_type()) _jca->push_int(next_arg(T_BOOLEAN)->bool_field(java_lang_boxing_object::value_offset_in_bytes(T_BOOLEAN))); }
 194   inline void do_char()   { if (!is_return_type()) _jca->push_int(next_arg(T_CHAR)->char_field(java_lang_boxing_object::value_offset_in_bytes(T_CHAR))); }
 195   inline void do_short()  { if (!is_return_type()) _jca->push_int(next_arg(T_SHORT)->short_field(java_lang_boxing_object::value_offset_in_bytes(T_SHORT))); }
 196   inline void do_byte()   { if (!is_return_type()) _jca->push_int(next_arg(T_BYTE)->byte_field(java_lang_boxing_object::value_offset_in_bytes(T_BYTE))); }
 197   inline void do_int()    { if (!is_return_type()) _jca->push_int(next_arg(T_INT)->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT))); }
 198 




 153 
 154   static inline Klass* asKlass(jlong metaspaceKlass) {
 155     return (Klass*) (address) metaspaceKlass;
 156   }
 157 
 158   static inline MethodData* asMethodData(jlong metaspaceMethodData) {
 159     return (MethodData*) (address) metaspaceMethodData;
 160   }
 161 
 162   static oop get_jvmci_method(const methodHandle& method, TRAPS);
 163 
 164   static oop get_jvmci_type(Klass* klass, TRAPS);
 165 };
 166 
 167 class JavaArgumentUnboxer : public SignatureIterator {
 168  protected:
 169   JavaCallArguments*  _jca;
 170   arrayOop _args;
 171   int _index;
 172 
 173   Handle next_arg(BasicType expectedType);





 174 
 175  public:
 176   JavaArgumentUnboxer(Symbol* signature, JavaCallArguments*  jca, arrayOop args, bool is_static) : SignatureIterator(signature) {
 177     this->_return_type = T_ILLEGAL;
 178     _jca = jca;
 179     _index = 0;
 180     _args = args;
 181     if (!is_static) {
 182       _jca->push_oop(next_arg(T_OBJECT));
 183     }
 184     iterate();
 185     assert(_index == args->length(), "arg count mismatch with signature");
 186   }
 187 
 188   inline void do_bool()   { if (!is_return_type()) _jca->push_int(next_arg(T_BOOLEAN)->bool_field(java_lang_boxing_object::value_offset_in_bytes(T_BOOLEAN))); }
 189   inline void do_char()   { if (!is_return_type()) _jca->push_int(next_arg(T_CHAR)->char_field(java_lang_boxing_object::value_offset_in_bytes(T_CHAR))); }
 190   inline void do_short()  { if (!is_return_type()) _jca->push_int(next_arg(T_SHORT)->short_field(java_lang_boxing_object::value_offset_in_bytes(T_SHORT))); }
 191   inline void do_byte()   { if (!is_return_type()) _jca->push_int(next_arg(T_BYTE)->byte_field(java_lang_boxing_object::value_offset_in_bytes(T_BYTE))); }
 192   inline void do_int()    { if (!is_return_type()) _jca->push_int(next_arg(T_INT)->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT))); }
 193 


< prev index next >