< prev index next >

src/hotspot/share/interpreter/abstractInterpreter.cpp

Print this page
rev 50307 : [mq]: cont


 168   // Special intrinsic method?
 169   // Note: This test must come _after_ the test for native methods,
 170   //       otherwise we will run into problems with JDK 1.2, see also
 171   //       TemplateInterpreterGenerator::generate_method_entry() for
 172   //       for details.
 173   switch (m->intrinsic_id()) {
 174     case vmIntrinsics::_dsin  : return java_lang_math_sin  ;
 175     case vmIntrinsics::_dcos  : return java_lang_math_cos  ;
 176     case vmIntrinsics::_dtan  : return java_lang_math_tan  ;
 177     case vmIntrinsics::_dabs  : return java_lang_math_abs  ;
 178     case vmIntrinsics::_dsqrt : return java_lang_math_sqrt ;
 179     case vmIntrinsics::_dlog  : return java_lang_math_log  ;
 180     case vmIntrinsics::_dlog10: return java_lang_math_log10;
 181     case vmIntrinsics::_dpow  : return java_lang_math_pow  ;
 182     case vmIntrinsics::_dexp  : return java_lang_math_exp  ;
 183     case vmIntrinsics::_fmaD  : return java_lang_math_fmaD ;
 184     case vmIntrinsics::_fmaF  : return java_lang_math_fmaF ;
 185 
 186     case vmIntrinsics::_Reference_get
 187                               : return java_lang_ref_reference_get;












 188     default                   : break;
 189   }
 190 
 191   // Accessor method?
 192   if (m->is_getter()) {
 193     // TODO: We should have used ::is_accessor above, but fast accessors in Zero expect only getters.
 194     // See CppInterpreter::accessor_entry in cppInterpreter_zero.cpp. This should be fixed in Zero,
 195     // then the call above updated to ::is_accessor
 196     assert(m->size_of_parameters() == 1, "fast code for accessors assumes parameter size = 1");
 197     return accessor;
 198   }
 199 








 200   // Note: for now: zero locals for all non-empty methods
 201   return zerolocals;
 202 }
 203 
 204 #if INCLUDE_CDS
 205 
 206 address AbstractInterpreter::get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) {
 207   const size_t trampoline_size = SharedRuntime::trampoline_size();
 208   address addr = MetaspaceShared::cds_i2i_entry_code_buffers((size_t)(AbstractInterpreter::number_of_method_entries) * trampoline_size);
 209   addr += (size_t)(kind) * trampoline_size;
 210 
 211   return addr;
 212 }
 213 
 214 void AbstractInterpreter::update_cds_entry_table(AbstractInterpreter::MethodKind kind) {
 215   if (DumpSharedSpaces || UseSharedSpaces) {
 216     address trampoline = get_trampoline_code_buffer(kind);
 217     _cds_entry_table[kind] = trampoline;
 218 
 219     CodeBuffer buffer(trampoline, (int)(SharedRuntime::trampoline_size()));




 168   // Special intrinsic method?
 169   // Note: This test must come _after_ the test for native methods,
 170   //       otherwise we will run into problems with JDK 1.2, see also
 171   //       TemplateInterpreterGenerator::generate_method_entry() for
 172   //       for details.
 173   switch (m->intrinsic_id()) {
 174     case vmIntrinsics::_dsin  : return java_lang_math_sin  ;
 175     case vmIntrinsics::_dcos  : return java_lang_math_cos  ;
 176     case vmIntrinsics::_dtan  : return java_lang_math_tan  ;
 177     case vmIntrinsics::_dabs  : return java_lang_math_abs  ;
 178     case vmIntrinsics::_dsqrt : return java_lang_math_sqrt ;
 179     case vmIntrinsics::_dlog  : return java_lang_math_log  ;
 180     case vmIntrinsics::_dlog10: return java_lang_math_log10;
 181     case vmIntrinsics::_dpow  : return java_lang_math_pow  ;
 182     case vmIntrinsics::_dexp  : return java_lang_math_exp  ;
 183     case vmIntrinsics::_fmaD  : return java_lang_math_fmaD ;
 184     case vmIntrinsics::_fmaF  : return java_lang_math_fmaF ;
 185 
 186     case vmIntrinsics::_Reference_get
 187                               : return java_lang_ref_reference_get;
 188     case vmIntrinsics::_Continuation_getSP
 189                               : return java_lang_continuation_getSP;
 190     case vmIntrinsics::_Continuation_getFP
 191                               : return java_lang_continuation_getFP;
 192     case vmIntrinsics::_Continuation_getPC
 193                               : return java_lang_continuation_getPC;
 194     case vmIntrinsics::_Continuation_doContinue
 195                               : return java_lang_continuation_doContinue;
 196     case vmIntrinsics::_Continuation_doYield
 197                               : return java_lang_continuation_doYield;
 198     case vmIntrinsics::_Continuation_runLevel
 199                               : return java_lang_continuation_runLevel;
 200     default                   : break;
 201   }
 202 
 203   // Accessor method?
 204   if (m->is_getter()) {
 205     // TODO: We should have used ::is_accessor above, but fast accessors in Zero expect only getters.
 206     // See CppInterpreter::accessor_entry in cppInterpreter_zero.cpp. This should be fixed in Zero,
 207     // then the call above updated to ::is_accessor
 208     assert(m->size_of_parameters() == 1, "fast code for accessors assumes parameter size = 1");
 209     return accessor;
 210   }
 211 
 212   // Symbol* kname = m->klass_name();
 213   // Symbol* name = m->name();
 214   // if (kname == vmSymbols::java_lang_Continuation()) {
 215   //   if (name == vmSymbols::enter_name()) {
 216   //     return java_lang_continuation_enter;
 217   //   }
 218   // }
 219 
 220   // Note: for now: zero locals for all non-empty methods
 221   return zerolocals;
 222 }
 223 
 224 #if INCLUDE_CDS
 225 
 226 address AbstractInterpreter::get_trampoline_code_buffer(AbstractInterpreter::MethodKind kind) {
 227   const size_t trampoline_size = SharedRuntime::trampoline_size();
 228   address addr = MetaspaceShared::cds_i2i_entry_code_buffers((size_t)(AbstractInterpreter::number_of_method_entries) * trampoline_size);
 229   addr += (size_t)(kind) * trampoline_size;
 230 
 231   return addr;
 232 }
 233 
 234 void AbstractInterpreter::update_cds_entry_table(AbstractInterpreter::MethodKind kind) {
 235   if (DumpSharedSpaces || UseSharedSpaces) {
 236     address trampoline = get_trampoline_code_buffer(kind);
 237     _cds_entry_table[kind] = trampoline;
 238 
 239     CodeBuffer buffer(trampoline, (int)(SharedRuntime::trampoline_size()));


< prev index next >