< prev index next >

src/hotspot/share/interpreter/abstractInterpreter.hpp

Print this page




  63     native_synchronized,                                        // native method & is synchronized
  64     empty,                                                      // empty method (code: _return)
  65     accessor,                                                   // accessor method (code: _aload_0, _getfield, _(a|i)return)
  66     abstract,                                                   // abstract method (throws an AbstractMethodException)
  67     method_handle_invoke_FIRST,                                 // java.lang.invoke.MethodHandles::invokeExact, etc.
  68     method_handle_invoke_LAST                                   = (method_handle_invoke_FIRST
  69                                                                    + (vmIntrinsics::LAST_MH_SIG_POLY
  70                                                                       - vmIntrinsics::FIRST_MH_SIG_POLY)),
  71     java_lang_math_sin,                                         // implementation of java.lang.Math.sin   (x)
  72     java_lang_math_cos,                                         // implementation of java.lang.Math.cos   (x)
  73     java_lang_math_tan,                                         // implementation of java.lang.Math.tan   (x)
  74     java_lang_math_abs,                                         // implementation of java.lang.Math.abs   (x)
  75     java_lang_math_sqrt,                                        // implementation of java.lang.Math.sqrt  (x)
  76     java_lang_math_log,                                         // implementation of java.lang.Math.log   (x)
  77     java_lang_math_log10,                                       // implementation of java.lang.Math.log10 (x)
  78     java_lang_math_pow,                                         // implementation of java.lang.Math.pow   (x,y)
  79     java_lang_math_exp,                                         // implementation of java.lang.Math.exp   (x)
  80     java_lang_math_fmaF,                                        // implementation of java.lang.Math.fma   (x, y, z)
  81     java_lang_math_fmaD,                                        // implementation of java.lang.Math.fma   (x, y, z)
  82     java_lang_ref_reference_get,                                // implementation of java.lang.ref.Reference.get()







  83     java_util_zip_CRC32_update,                                 // implementation of java.util.zip.CRC32.update()
  84     java_util_zip_CRC32_updateBytes,                            // implementation of java.util.zip.CRC32.updateBytes()
  85     java_util_zip_CRC32_updateByteBuffer,                       // implementation of java.util.zip.CRC32.updateByteBuffer()
  86     java_util_zip_CRC32C_updateBytes,                           // implementation of java.util.zip.CRC32C.updateBytes(crc, b[], off, end)
  87     java_util_zip_CRC32C_updateDirectByteBuffer,                // implementation of java.util.zip.CRC32C.updateDirectByteBuffer(crc, address, off, end)
  88     java_lang_Float_intBitsToFloat,                             // implementation of java.lang.Float.intBitsToFloat()
  89     java_lang_Float_floatToRawIntBits,                          // implementation of java.lang.Float.floatToRawIntBits()
  90     java_lang_Double_longBitsToDouble,                          // implementation of java.lang.Double.longBitsToDouble()
  91     java_lang_Double_doubleToRawLongBits,                       // implementation of java.lang.Double.doubleToRawLongBits()
  92     number_of_method_entries,
  93     invalid = -1
  94   };
  95 
  96   // Conversion from the part of the above enum to vmIntrinsics::_invokeExact, etc.
  97   static vmIntrinsics::ID method_handle_intrinsic(MethodKind kind) {
  98     if (kind >= method_handle_invoke_FIRST && kind <= method_handle_invoke_LAST)
  99       return (vmIntrinsics::ID)( vmIntrinsics::FIRST_MH_SIG_POLY + (kind - method_handle_invoke_FIRST) );
 100     else
 101       return vmIntrinsics::_none;
 102   }


 138   static address entry_for_cds_method(const methodHandle& m) {
 139     MethodKind k = method_kind(m);
 140     assert(0 <= k && k < number_of_method_entries, "illegal kind");
 141     return _cds_entry_table[k];
 142   }
 143 
 144   // used by class data sharing
 145   static void       update_cds_entry_table(MethodKind kind) NOT_CDS_RETURN;
 146 
 147   static address    get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) NOT_CDS_RETURN_(0);
 148 
 149   // used for bootstrapping method handles:
 150   static void       set_entry_for_kind(MethodKind k, address e);
 151 
 152   static void       print_method_kind(MethodKind kind)          PRODUCT_RETURN;
 153 
 154   // These should never be compiled since the interpreter will prefer
 155   // the compiled version to the intrinsic version.
 156   static bool       can_be_compiled(const methodHandle& m) {
 157     switch (m->intrinsic_id()) {
 158       case vmIntrinsics::_dsin  : // fall thru
 159       case vmIntrinsics::_dcos  : // fall thru
 160       case vmIntrinsics::_dtan  : // fall thru
 161       case vmIntrinsics::_dabs  : // fall thru
 162       case vmIntrinsics::_dsqrt : // fall thru
 163       case vmIntrinsics::_dlog  : // fall thru
 164       case vmIntrinsics::_dlog10: // fall thru
 165       case vmIntrinsics::_dpow  : // fall thru
 166       case vmIntrinsics::_dexp  : // fall thru
 167       case vmIntrinsics::_fmaD  : // fall thru
 168       case vmIntrinsics::_fmaF  : // fall thru







 169         return false;

 170       default:
 171         return true;
 172     }
 173   }
 174 
 175   // Runtime support
 176 
 177   // length = invoke bytecode length (to advance to next bytecode)
 178   static address deopt_entry(TosState state, int length) { ShouldNotReachHere(); return NULL; }
 179   static address return_entry(TosState state, int length, Bytecodes::Code code) { ShouldNotReachHere(); return NULL; }
 180 
 181   static address    rethrow_exception_entry()                   { return _rethrow_exception_entry; }
 182 
 183   // Activation size in words for a method that is just being called.
 184   // Parameters haven't been pushed so count them too.
 185   static int        size_top_interpreter_activation(Method* method);
 186 
 187   // Deoptimization support
 188   // Compute the entry address for continuation after
 189   static address deopt_continue_after_entry(Method* method,




  63     native_synchronized,                                        // native method & is synchronized
  64     empty,                                                      // empty method (code: _return)
  65     accessor,                                                   // accessor method (code: _aload_0, _getfield, _(a|i)return)
  66     abstract,                                                   // abstract method (throws an AbstractMethodException)
  67     method_handle_invoke_FIRST,                                 // java.lang.invoke.MethodHandles::invokeExact, etc.
  68     method_handle_invoke_LAST                                   = (method_handle_invoke_FIRST
  69                                                                    + (vmIntrinsics::LAST_MH_SIG_POLY
  70                                                                       - vmIntrinsics::FIRST_MH_SIG_POLY)),
  71     java_lang_math_sin,                                         // implementation of java.lang.Math.sin   (x)
  72     java_lang_math_cos,                                         // implementation of java.lang.Math.cos   (x)
  73     java_lang_math_tan,                                         // implementation of java.lang.Math.tan   (x)
  74     java_lang_math_abs,                                         // implementation of java.lang.Math.abs   (x)
  75     java_lang_math_sqrt,                                        // implementation of java.lang.Math.sqrt  (x)
  76     java_lang_math_log,                                         // implementation of java.lang.Math.log   (x)
  77     java_lang_math_log10,                                       // implementation of java.lang.Math.log10 (x)
  78     java_lang_math_pow,                                         // implementation of java.lang.Math.pow   (x,y)
  79     java_lang_math_exp,                                         // implementation of java.lang.Math.exp   (x)
  80     java_lang_math_fmaF,                                        // implementation of java.lang.Math.fma   (x, y, z)
  81     java_lang_math_fmaD,                                        // implementation of java.lang.Math.fma   (x, y, z)
  82     java_lang_ref_reference_get,                                // implementation of java.lang.ref.Reference.get()
  83     java_lang_continuation_getSP,                               // implementation of java.lang.Continuation.getSP()
  84     java_lang_continuation_getFP,                               // implementation of java.lang.Continuation.getFP()
  85     java_lang_continuation_getPC,                               // implementation of java.lang.Continuation.getPC()
  86     java_lang_continuation_doContinue,                          // implementation of java.lang.Continuation.doContinue()
  87     java_lang_continuation_doYield,                             // implementation of java.lang.Continuation.doYield()
  88     java_lang_continuation_jump,                                // implementation of java.lang.Continuation.jump()
  89     java_lang_continuation_runLevel,                            // implementation of java.lang.Continuation.runLevel()
  90     java_util_zip_CRC32_update,                                 // implementation of java.util.zip.CRC32.update()
  91     java_util_zip_CRC32_updateBytes,                            // implementation of java.util.zip.CRC32.updateBytes()
  92     java_util_zip_CRC32_updateByteBuffer,                       // implementation of java.util.zip.CRC32.updateByteBuffer()
  93     java_util_zip_CRC32C_updateBytes,                           // implementation of java.util.zip.CRC32C.updateBytes(crc, b[], off, end)
  94     java_util_zip_CRC32C_updateDirectByteBuffer,                // implementation of java.util.zip.CRC32C.updateDirectByteBuffer(crc, address, off, end)
  95     java_lang_Float_intBitsToFloat,                             // implementation of java.lang.Float.intBitsToFloat()
  96     java_lang_Float_floatToRawIntBits,                          // implementation of java.lang.Float.floatToRawIntBits()
  97     java_lang_Double_longBitsToDouble,                          // implementation of java.lang.Double.longBitsToDouble()
  98     java_lang_Double_doubleToRawLongBits,                       // implementation of java.lang.Double.doubleToRawLongBits()
  99     number_of_method_entries,
 100     invalid = -1
 101   };
 102 
 103   // Conversion from the part of the above enum to vmIntrinsics::_invokeExact, etc.
 104   static vmIntrinsics::ID method_handle_intrinsic(MethodKind kind) {
 105     if (kind >= method_handle_invoke_FIRST && kind <= method_handle_invoke_LAST)
 106       return (vmIntrinsics::ID)( vmIntrinsics::FIRST_MH_SIG_POLY + (kind - method_handle_invoke_FIRST) );
 107     else
 108       return vmIntrinsics::_none;
 109   }


 145   static address entry_for_cds_method(const methodHandle& m) {
 146     MethodKind k = method_kind(m);
 147     assert(0 <= k && k < number_of_method_entries, "illegal kind");
 148     return _cds_entry_table[k];
 149   }
 150 
 151   // used by class data sharing
 152   static void       update_cds_entry_table(MethodKind kind) NOT_CDS_RETURN;
 153 
 154   static address    get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) NOT_CDS_RETURN_(0);
 155 
 156   // used for bootstrapping method handles:
 157   static void       set_entry_for_kind(MethodKind k, address e);
 158 
 159   static void       print_method_kind(MethodKind kind)          PRODUCT_RETURN;
 160 
 161   // These should never be compiled since the interpreter will prefer
 162   // the compiled version to the intrinsic version.
 163   static bool       can_be_compiled(const methodHandle& m) {
 164     switch (m->intrinsic_id()) {
 165       // math intrinsics
 166       case vmIntrinsics::_dsin  :
 167       case vmIntrinsics::_dcos  :
 168       case vmIntrinsics::_dtan  :
 169       case vmIntrinsics::_dabs  :
 170       case vmIntrinsics::_dsqrt :
 171       case vmIntrinsics::_dlog  :
 172       case vmIntrinsics::_dlog10:
 173       case vmIntrinsics::_dpow  :
 174       case vmIntrinsics::_dexp  :
 175       case vmIntrinsics::_fmaD  :
 176       case vmIntrinsics::_fmaF  :
 177 
 178       // continuation intrinsics
 179       case vmIntrinsics::_Continuation_getSP      :
 180       case vmIntrinsics::_Continuation_doYield    :
 181       case vmIntrinsics::_Continuation_doContinue :
 182 
 183         return false;
 184 
 185       default:
 186         return true;
 187     }
 188   }
 189 
 190   // Runtime support
 191 
 192   // length = invoke bytecode length (to advance to next bytecode)
 193   static address deopt_entry(TosState state, int length) { ShouldNotReachHere(); return NULL; }
 194   static address return_entry(TosState state, int length, Bytecodes::Code code) { ShouldNotReachHere(); return NULL; }
 195 
 196   static address    rethrow_exception_entry()                   { return _rethrow_exception_entry; }
 197 
 198   // Activation size in words for a method that is just being called.
 199   // Parameters haven't been pushed so count them too.
 200   static int        size_top_interpreter_activation(Method* method);
 201 
 202   // Deoptimization support
 203   // Compute the entry address for continuation after
 204   static address deopt_continue_after_entry(Method* method,


< prev index next >