# HG changeset patch # User Tom Rodriguez # Date 1417462313 28800 # Node ID c640f804dbad9ac10305a98a13e8fc8c74540c0b # Parent 3f63ea587d2b30fa7b1faaa53f4eac2d8eb55bce Intrinsify Reflection.getClassAccessFlags diff -r 3f63ea587d2b -r c640f804dbad graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotVMConfig.java --- 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; diff -r 3f63ea587d2b -r c640f804dbad graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/HotSpotReplacementsUtil.java --- 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 diff -r 3f63ea587d2b -r c640f804dbad graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/ReflectionSubstitutions.java --- 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(); + } + } }