Mercurial > hg > graal-jvmci-8
changeset 23997:9a740aa0d87b
use raw method name symbol for isConstructor and isClassInitializer
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Sat, 04 Feb 2017 15:24:10 +0100 |
parents | 11f0412408cd |
children | f161917eed57 9b69cec6d01b |
files | jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaFieldImpl.java jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfig.java src/share/vm/jvmci/jvmciCompilerToVM.cpp src/share/vm/jvmci/jvmciCompilerToVM.hpp src/share/vm/jvmci/vmStructs_jvmci.hpp |
diffstat | 7 files changed, 31 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java Fri Feb 03 21:08:05 2017 +0100 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotConstantPool.java Sat Feb 04 15:24:10 2017 +0100 @@ -298,7 +298,7 @@ * @param index constant pool index * @return constant pool entry */ - private long getEntryAt(int index) { + long getEntryAt(int index) { assert checkBounds(index); int offset = index * runtime().getHostJVMCIBackend().getTarget().wordSize; return UNSAFE.getAddress(getMetaspaceConstantPool() + config().constantPoolSize + offset);
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaFieldImpl.java Fri Feb 03 21:08:05 2017 +0100 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaFieldImpl.java Sat Feb 04 15:24:10 2017 +0100 @@ -138,7 +138,7 @@ @Override public boolean isSynthetic() { - return (config().syntheticFlag & modifiers) != 0; + return (config().jvmAccSynthetic & modifiers) != 0; } /**
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java Fri Feb 03 21:08:05 2017 +0100 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedJavaMethodImpl.java Sat Feb 04 15:24:10 2017 +0100 @@ -337,12 +337,24 @@ @Override public boolean isClassInitializer() { - return isStatic() && "<clinit>".equals(getName()); + if (isStatic()) { + final int nameIndex = UNSAFE.getChar(getConstMethod() + config().constMethodNameIndexOffset); + long nameSymbol = constantPool.getEntryAt(nameIndex); + long clinitSymbol = config().symbolClinit; + return nameSymbol == clinitSymbol; + } + return false; } @Override public boolean isConstructor() { - return !isStatic() && "<init>".equals(getName()); + if (!isStatic()) { + final int nameIndex = UNSAFE.getChar(getConstMethod() + config().constMethodNameIndexOffset); + long nameSymbol = constantPool.getEntryAt(nameIndex); + long initSymbol = config().symbolInit; + return nameSymbol == initSymbol; + } + return false; } @Override @@ -524,9 +536,6 @@ } public boolean isDefault() { - if (isConstructor()) { - return false; - } // Copied from java.lang.Method.isDefault() int mask = Modifier.ABSTRACT | Modifier.PUBLIC | Modifier.STATIC; return ((getModifiers() & mask) == Modifier.PUBLIC) && getDeclaringClass().isInterface();
--- a/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfig.java Fri Feb 03 21:08:05 2017 +0100 +++ b/jvmci/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotVMConfig.java Sat Feb 04 15:24:10 2017 +0100 @@ -200,6 +200,9 @@ final int vmSymbolsFirstSID = getConstant("vmSymbols::FIRST_SID", Integer.class); final int vmSymbolsSIDLimit = getConstant("vmSymbols::SID_LIMIT", Integer.class); + final long symbolInit = getFieldValue("CompilerToVM::Data::symbol_init", Long.class); + final long symbolClinit = getFieldValue("CompilerToVM::Data::symbol_clinit", Long.class); + /** * Returns the symbol in the {@code vmSymbols} table at position {@code index} as a * {@link String}. @@ -217,9 +220,6 @@ final int klassHasFinalizerFlag = getConstant("JVM_ACC_HAS_FINALIZER", Integer.class); - // Modifier.SYNTHETIC is not so we get it via vmStructs. - final int syntheticFlag = getConstant("JVM_ACC_SYNTHETIC", Integer.class); - final int klassVtableStartOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_start_offset", Integer.class, "int"); final int klassVtableLengthOffset = getFieldValue("CompilerToVM::Data::Klass_vtable_length_offset", Integer.class, "int"); final int universeBaseVtableSize = getFieldValue("CompilerToVM::Data::Universe_base_vtable_size", Integer.class, "int");
--- a/src/share/vm/jvmci/jvmciCompilerToVM.cpp Fri Feb 03 21:08:05 2017 +0100 +++ b/src/share/vm/jvmci/jvmciCompilerToVM.cpp Sat Feb 04 15:24:10 2017 +0100 @@ -138,10 +138,12 @@ address CompilerToVM::Data::dlog10; address CompilerToVM::Data::dpow; +address CompilerToVM::Data::symbol_init; +address CompilerToVM::Data::symbol_clinit; + void CompilerToVM::Data::initialize(TRAPS) { Klass_vtable_start_offset = InstanceKlass::vtable_start_offset() * HeapWordSize; Klass_vtable_length_offset = InstanceKlass::vtable_length_offset() * HeapWordSize; - Method_extra_stack_entries = Method::extra_stack_entries(); SharedRuntime_ic_miss_stub = SharedRuntime::get_ic_miss_stub(); @@ -176,6 +178,9 @@ CodeCache_low_bound = CodeCache::low_bound(); CodeCache_high_bound = CodeCache::high_bound(); + symbol_init = (address) vmSymbols::object_initializer_name(); + symbol_clinit = (address) vmSymbols::class_initializer_name(); + BarrierSet* bs = Universe::heap()->barrier_set(); switch (bs->kind()) { case BarrierSet::CardTableModRef:
--- a/src/share/vm/jvmci/jvmciCompilerToVM.hpp Fri Feb 03 21:08:05 2017 +0100 +++ b/src/share/vm/jvmci/jvmciCompilerToVM.hpp Sat Feb 04 15:24:10 2017 +0100 @@ -88,6 +88,9 @@ static address dlog10; static address dpow; + static address symbol_init; + static address symbol_clinit; + public: static void initialize(TRAPS);
--- a/src/share/vm/jvmci/vmStructs_jvmci.hpp Fri Feb 03 21:08:05 2017 +0100 +++ b/src/share/vm/jvmci/vmStructs_jvmci.hpp Sat Feb 04 15:24:10 2017 +0100 @@ -86,6 +86,9 @@ static_field(CompilerToVM::Data, dlog10, address) \ static_field(CompilerToVM::Data, dpow, address) \ \ + static_field(CompilerToVM::Data, symbol_init, address) \ + static_field(CompilerToVM::Data, symbol_clinit, address) \ + \ static_field(StubRoutines, _sha1_implCompress, address) \ static_field(StubRoutines, _sha1_implCompressMB, address) \ static_field(StubRoutines, _sha256_implCompress, address) \