On Thu, 29 Aug 2024 18:50:42 GMT, Coleen Phillimore <cole...@openjdk.org> wrote:
>> Move JVM implementation access flags that are not specified by the classfile >> format into Klass so we can shrink AccessFlags to u2 in a future change. >> >> Tested with tier1-7. >> >> NOTE: there are arm, ppc and s390 changes to this that are just a guess. >> Also, graal changes. > > Coleen Phillimore has updated the pull request incrementally with one > additional commit since the last revision: > > Add in graal flags and a comment. src/hotspot/share/jvmci/vmStructs_jvmci.cpp line 274: > 272: nonstatic_field(Klass, _bitmap, > uintx) \ > 273: nonstatic_field(Klass, _hash_slot, > uint8_t) \ > 274: nonstatic_field(Klass, _misc_flags._flags, > u1) \ Can we export `_misc_flags` instead, similar to `_access_flags`? diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index 9d65268f0fe..6170647186c 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -268,10 +268,10 @@ nonstatic_field(Klass, _java_mirror, OopHandle) \ nonstatic_field(Klass, _modifier_flags, jint) \ nonstatic_field(Klass, _access_flags, AccessFlags) \ + nonstatic_field(Klass, _misc_flags, KlassFlags) \ nonstatic_field(Klass, _class_loader_data, ClassLoaderData*) \ nonstatic_field(Klass, _bitmap, uintx) \ nonstatic_field(Klass, _hash_slot, uint8_t) \ - nonstatic_field(Klass, _misc_flags._flags, u1) \ \ nonstatic_field(LocalVariableTableElement, start_bci, u2) \ nonstatic_field(LocalVariableTableElement, length, u2) \ diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java index 3de4de7d42d..91c9e73b532 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java @@ -170,6 +170,11 @@ public int getAccessFlags() { return UNSAFE.getInt(getKlassPointer() + config.klassAccessFlagsOffset); } + public int getMiscFlags() { + HotSpotVMConfig config = config(); + return UNSAFE.getInt(getKlassPointer() + config.klassMiscFlagsOffset); + } + @Override public ResolvedJavaType getComponentType() { if (componentType == null) { @@ -373,9 +378,7 @@ public AssumptionResult<Boolean> hasFinalizableSubclass() { @Override public boolean hasFinalizer() { - HotSpotVMConfig config = config(); - int miscFlags = UNSAFE.getByte(getKlassPointer() + config.klassMiscFlagsOffset); - return (miscFlags & config().jvmAccHasFinalizer) != 0; + return (getMiscFlags() & config().jvmAccHasFinalizer) != 0; } @Override @@ -1112,9 +1115,7 @@ public ResolvedJavaField resolveField(UnresolvedJavaField unresolvedJavaField, R @Override public boolean isCloneableWithAllocation() { - HotSpotVMConfig config = config(); - int miscFlags = UNSAFE.getByte(getKlassPointer() + config.klassMiscFlagsOffset); - return (miscFlags & config().jvmAccIsCloneableFast) != 0; + return (getMiscFlags() & config().jvmAccIsCloneableFast) != 0; } @Override diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfig.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfig.java index 16d9cf3625e..6f1c325ee47 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfig.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotVMConfig.java @@ -85,6 +85,7 @@ String getHostArchitectureName() { final int javaMirrorOffset = getFieldOffset("Klass::_java_mirror", Integer.class, "OopHandle"); final int klassAccessFlagsOffset = getFieldOffset("Klass::_access_flags", Integer.class, "AccessFlags"); + final int klassMiscFlagsOffset = getFieldOffset("Klass::_misc_flags", Integer.class, "KlassFlags"); final int klassLayoutHelperOffset = getFieldOffset("Klass::_layout_helper", Integer.class, "jint"); final int klassLayoutHelperNeutralValue = getConstant("Klass::_lh_neutral_value", Integer.class); @@ -98,7 +99,6 @@ String getHostArchitectureName() { final int instanceKlassFieldInfoStreamOffset = getFieldOffset("InstanceKlass::_fieldinfo_stream", Integer.class, "Array<u1>*"); final int instanceKlassAnnotationsOffset = getFieldOffset("InstanceKlass::_annotations", Integer.class, "Annotations*"); final int instanceKlassMiscFlagsOffset = getFieldOffset("InstanceKlass::_misc_flags._flags", Integer.class, "u2"); - final int klassMiscFlagsOffset = getFieldOffset("Klass::_misc_flags._flags", Integer.class, "u1"); 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"); ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/20719#discussion_r1738703831