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