mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 07:14:30 +02:00
8154473: Update for CompilerDirectives to control stub generation and intrinsics
Use -XX:DisableIntrinsic flag to control intrinsics usage in Interpreter. Reviewed-by: twisti, neliasso, kvn, simonis
This commit is contained in:
parent
6dfcf1dd81
commit
489b38091e
9 changed files with 144 additions and 298 deletions
|
@ -24,6 +24,7 @@
|
|||
|
||||
#include "precompiled.hpp"
|
||||
#include "classfile/vmSymbols.hpp"
|
||||
#include "compiler/compilerDirectives.hpp"
|
||||
#include "memory/oopFactory.hpp"
|
||||
#include "oops/oop.inline.hpp"
|
||||
#include "runtime/handles.inline.hpp"
|
||||
|
@ -418,9 +419,43 @@ int vmIntrinsics::predicates_needed(vmIntrinsics::ID id) {
|
|||
}
|
||||
}
|
||||
|
||||
bool vmIntrinsics::is_intrinsic_available(vmIntrinsics::ID id) {
|
||||
return !vmIntrinsics::is_intrinsic_disabled(id) &&
|
||||
!vmIntrinsics::is_disabled_by_flags(id);
|
||||
}
|
||||
|
||||
bool vmIntrinsics::is_intrinsic_disabled(vmIntrinsics::ID id) {
|
||||
assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
|
||||
|
||||
// Canonicalize DisableIntrinsic to contain only ',' as a separator.
|
||||
// Note, DirectiveSet may not be created at this point yet since this code
|
||||
// is called from initial stub geenration code.
|
||||
char* local_list = (char*)DirectiveSet::canonicalize_disableintrinsic(DisableIntrinsic);
|
||||
|
||||
bool found = false;
|
||||
char* token = strtok(local_list, ",");
|
||||
while (token != NULL) {
|
||||
if (strcmp(token, vmIntrinsics::name_at(id)) == 0) {
|
||||
found = true;
|
||||
break;
|
||||
} else {
|
||||
token = strtok(NULL, ",");
|
||||
}
|
||||
}
|
||||
|
||||
FREE_C_HEAP_ARRAY(char, local_list);
|
||||
return found;
|
||||
}
|
||||
|
||||
|
||||
bool vmIntrinsics::is_disabled_by_flags(const methodHandle& method) {
|
||||
vmIntrinsics::ID id = method->intrinsic_id();
|
||||
assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
|
||||
return is_disabled_by_flags(id);
|
||||
}
|
||||
|
||||
bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) {
|
||||
assert(id != vmIntrinsics::_none, "must be a VM intrinsic");
|
||||
|
||||
// -XX:-InlineNatives disables nearly all intrinsics except the ones listed in
|
||||
// the following switch statement.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue