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) { |