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 } 103 104 enum SomeConstants { 105 number_of_result_handlers = 10 // number of result handlers for native calls 106 }; 107 108 protected: 109 static StubQueue* _code; // the interpreter code (codelets) 110 111 static bool _notice_safepoints; // true if safepoints are activated 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) | 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 java_lang_System_setBit, 93 java_lang_System_clrBit, 94 number_of_method_entries, 95 invalid = -1 96 }; 97 98 // Conversion from the part of the above enum to vmIntrinsics::_invokeExact, etc. 99 static vmIntrinsics::ID method_handle_intrinsic(MethodKind kind) { 100 if (kind >= method_handle_invoke_FIRST && kind <= method_handle_invoke_LAST) 101 return (vmIntrinsics::ID)( vmIntrinsics::FIRST_MH_SIG_POLY + (kind - method_handle_invoke_FIRST) ); 102 else 103 return vmIntrinsics::_none; 104 } 105 106 enum SomeConstants { 107 number_of_result_handlers = 10 // number of result handlers for native calls 108 }; 109 110 protected: 111 static StubQueue* _code; // the interpreter code (codelets) 112 113 static bool _notice_safepoints; // true if safepoints are activated 140 static address entry_for_cds_method(const methodHandle& m) { 141 MethodKind k = method_kind(m); 142 assert(0 <= k && k < number_of_method_entries, "illegal kind"); 143 return _cds_entry_table[k]; 144 } 145 146 // used by class data sharing 147 static void update_cds_entry_table(MethodKind kind) NOT_CDS_RETURN; 148 149 static address get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) NOT_CDS_RETURN_(0); 150 151 // used for bootstrapping method handles: 152 static void set_entry_for_kind(MethodKind k, address e); 153 154 static void print_method_kind(MethodKind kind) PRODUCT_RETURN; 155 156 // These should never be compiled since the interpreter will prefer 157 // the compiled version to the intrinsic version. 158 static bool can_be_compiled(const methodHandle& m) { 159 switch (m->intrinsic_id()) { 160 case vmIntrinsics::_setBit: // fall thru 161 case vmIntrinsics::_clrBit: // fall thru 162 case vmIntrinsics::_dsin : // fall thru 163 case vmIntrinsics::_dcos : // fall thru 164 case vmIntrinsics::_dtan : // fall thru 165 case vmIntrinsics::_dabs : // fall thru 166 case vmIntrinsics::_dsqrt : // fall thru 167 case vmIntrinsics::_dlog : // fall thru 168 case vmIntrinsics::_dlog10: // fall thru 169 case vmIntrinsics::_dpow : // fall thru 170 case vmIntrinsics::_dexp : // fall thru 171 case vmIntrinsics::_fmaD : // fall thru 172 case vmIntrinsics::_fmaF : // fall thru 173 return false; 174 default: 175 return true; 176 } 177 } 178 179 // Runtime support 180 181 // length = invoke bytecode length (to advance to next bytecode) |