Mercurial > hg > graal-jvmci-8
changeset 18589:c640f804dbad
Intrinsify Reflection.getClassAccessFlags
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Mon, 01 Dec 2014 11:31:53 -0800 |
parents | 3f63ea587d2b |
children | 15224d4c0347 caad1a70312d |
files | graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionSubstitutions.java |
diffstat | 3 files changed, 22 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Mon Dec 01 17:12:45 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java Mon Dec 01 11:31:53 2014 -0800 @@ -896,6 +896,7 @@ @HotSpotVMConstant(name = "JVM_ACC_FIELD_INTERNAL") @Stable public int jvmAccFieldInternal; @HotSpotVMConstant(name = "JVM_ACC_FIELD_STABLE") @Stable public int jvmAccFieldStable; @HotSpotVMConstant(name = "JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE") @Stable public int jvmAccFieldHasGenericSignature; + @HotSpotVMConstant(name = "JVM_ACC_WRITTEN_FLAGS") @Stable public int jvmAccWrittenFlags; @HotSpotVMField(name = "Thread::_tlab", type = "ThreadLocalAllocBuffer", get = HotSpotVMField.Type.OFFSET) @Stable public int threadTlabOffset;
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Mon Dec 01 17:12:45 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java Mon Dec 01 11:31:53 2014 -0800 @@ -290,6 +290,11 @@ return config().klassAccessFlagsOffset; } + @Fold + public static int jvmAccWrittenFlags() { + return config().jvmAccWrittenFlags; + } + public static final LocationIdentity KLASS_LAYOUT_HELPER_LOCATION = NamedLocationIdentity.immutable("Klass::_layout_helper"); @Fold
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionSubstitutions.java Mon Dec 01 17:12:45 2014 +0100 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionSubstitutions.java Mon Dec 01 11:31:53 2014 -0800 @@ -22,7 +22,13 @@ */ package com.oracle.graal.hotspot.replacements; +import static com.oracle.graal.hotspot.replacements.HotSpotReplacementsUtil.*; + +import java.lang.reflect.*; + import com.oracle.graal.api.replacements.*; +import com.oracle.graal.hotspot.word.*; +import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; /** @@ -34,4 +40,14 @@ @MacroSubstitution(macro = ReflectionGetCallerClassNode.class, optional = true) public static native Class<?> getCallerClass(); + @MethodSubstitution + public static int getClassAccessFlags(Class<?> aClass) { + KlassPointer klass = ClassGetHubNode.readClass(GuardingPiNode.guardingNonNull(aClass)); + if (klass.isNull()) { + // Class for primitive type + return Modifier.ABSTRACT | Modifier.FINAL | Modifier.PUBLIC; + } else { + return klass.readInt(klassAccessFlagsOffset(), KLASS_ACCESS_FLAGS_LOCATION) & jvmAccWrittenFlags(); + } + } }