hotspot/src/share/vm/classfile/vmSymbols.cpp
changeset 38699 f8bec5f6b09c
parent 38246 518c89421883
child 40899 d7140c75c2c6
child 41323 ddd5600d4762
equal deleted inserted replaced
38698:2f5f325d4e6d 38699:f8bec5f6b09c
    22  *
    22  *
    23  */
    23  */
    24 
    24 
    25 #include "precompiled.hpp"
    25 #include "precompiled.hpp"
    26 #include "classfile/vmSymbols.hpp"
    26 #include "classfile/vmSymbols.hpp"
       
    27 #include "compiler/compilerDirectives.hpp"
    27 #include "memory/oopFactory.hpp"
    28 #include "memory/oopFactory.hpp"
    28 #include "oops/oop.inline.hpp"
    29 #include "oops/oop.inline.hpp"
    29 #include "runtime/handles.inline.hpp"
    30 #include "runtime/handles.inline.hpp"
    30 #include "utilities/xmlstream.hpp"
    31 #include "utilities/xmlstream.hpp"
    31 
    32 
   416   default:
   417   default:
   417     return 0;
   418     return 0;
   418   }
   419   }
   419 }
   420 }
   420 
   421 
       
   422 bool vmIntrinsics::is_intrinsic_available(vmIntrinsics::ID id) {
       
   423   return !vmIntrinsics::is_intrinsic_disabled(id) &&
       
   424     !vmIntrinsics::is_disabled_by_flags(id);
       
   425 }
       
   426 
       
   427 bool vmIntrinsics::is_intrinsic_disabled(vmIntrinsics::ID id) {
       
   428   assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
       
   429 
       
   430   // Canonicalize DisableIntrinsic to contain only ',' as a separator.
       
   431   // Note, DirectiveSet may not be created at this point yet since this code
       
   432   // is called from initial stub geenration code.
       
   433   char* local_list = (char*)DirectiveSet::canonicalize_disableintrinsic(DisableIntrinsic);
       
   434 
       
   435   bool found = false;
       
   436   char* token = strtok(local_list, ",");
       
   437   while (token != NULL) {
       
   438     if (strcmp(token, vmIntrinsics::name_at(id)) == 0) {
       
   439       found = true;
       
   440       break;
       
   441     } else {
       
   442       token = strtok(NULL, ",");
       
   443     }
       
   444   }
       
   445 
       
   446   FREE_C_HEAP_ARRAY(char, local_list);
       
   447   return found;
       
   448 }
       
   449 
       
   450 
   421 bool vmIntrinsics::is_disabled_by_flags(const methodHandle& method) {
   451 bool vmIntrinsics::is_disabled_by_flags(const methodHandle& method) {
   422   vmIntrinsics::ID id = method->intrinsic_id();
   452   vmIntrinsics::ID id = method->intrinsic_id();
       
   453   assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
       
   454   return is_disabled_by_flags(id);
       
   455 }
       
   456 
       
   457 bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
   423   assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
   458   assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
   424 
   459 
   425   // -XX:-InlineNatives disables nearly all intrinsics except the ones listed in
   460   // -XX:-InlineNatives disables nearly all intrinsics except the ones listed in
   426   // the following switch statement.
   461   // the following switch statement.
   427   if (!InlineNatives) {
   462   if (!InlineNatives) {