Skip to content

Commit fe0fdb7

Browse files
[GR-62672] Refactorings for the identity hashcode support.
PullRequest: graal/20294
2 parents 37c52ac + a0b4e3d commit fe0fdb7

32 files changed

+425
-211
lines changed

substratevm/src/com.oracle.objectfile/src/com/oracle/objectfile/debugentry/DebugInfoBase.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,11 @@ public abstract class DebugInfoBase {
171171
/**
172172
* Bit mask used for tagging oops.
173173
*/
174-
private int reservedBitsMask;
174+
private int reservedHubBitsMask;
175175
/**
176176
* Number of low order bits used for tagging oops.
177177
*/
178-
private int numReservedBits;
178+
private int numReservedHubBits;
179179
/**
180180
* Number of bytes used to store an oop reference.
181181
*/
@@ -211,8 +211,8 @@ public abstract class DebugInfoBase {
211211
public DebugInfoBase(ByteOrder byteOrder) {
212212
this.byteOrder = byteOrder;
213213
this.useHeapBase = true;
214-
this.reservedBitsMask = 0;
215-
this.numReservedBits = 0;
214+
this.reservedHubBitsMask = 0;
215+
this.numReservedHubBits = 0;
216216
this.compressionShift = 0;
217217
this.referenceSize = 0;
218218
this.pointerSize = 0;
@@ -250,12 +250,12 @@ public void installDebugInfo(DebugInfoProvider debugInfoProvider) {
250250
/*
251251
* Save count of low order tag bits that may appear in references.
252252
*/
253-
reservedBitsMask = debugInfoProvider.reservedBitsMask();
253+
reservedHubBitsMask = debugInfoProvider.reservedHubBitsMask();
254254

255255
/* Mask must be contiguous from bit 0. */
256-
assert ((reservedBitsMask + 1) & reservedBitsMask) == 0;
256+
assert ((reservedHubBitsMask + 1) & reservedHubBitsMask) == 0;
257257

258-
numReservedBits = Integer.bitCount(reservedBitsMask);
258+
numReservedHubBits = Integer.bitCount(reservedHubBitsMask);
259259

260260
/* Save amount we need to shift references by when loading from an object field. */
261261
compressionShift = debugInfoProvider.compressionShift();
@@ -705,12 +705,12 @@ public boolean useHeapBase() {
705705
return useHeapBase;
706706
}
707707

708-
public int reservedBitsMask() {
709-
return reservedBitsMask;
708+
public int reservedHubBitsMask() {
709+
return reservedHubBitsMask;
710710
}
711711

712-
public int numReservedBits() {
713-
return numReservedBits;
712+
public int numReservedHubBits() {
713+
return numReservedHubBits;
714714
}
715715

716716
public int compressionShift() {

substratevm/src/com.oracle.objectfile/src/com/oracle/objectfile/debuginfo/DebugInfoProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public interface DebugInfoProvider {
5252
/**
5353
* Mask selecting low order bits used for tagging oops.
5454
*/
55-
int reservedBitsMask();
55+
int reservedHubBitsMask();
5656

5757
/**
5858
* Number of bytes used to store an oop reference.

substratevm/src/com.oracle.objectfile/src/com/oracle/objectfile/elf/dwarf/DwarfInfoSectionImpl.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2132,8 +2132,8 @@ public int writeCompressedOopConversionExpression(boolean isHub, byte[] buffer,
21322132
*/
21332133

21342134
boolean useHeapBase = dwarfSections.useHeapBase();
2135-
int reservedBitsMask = dwarfSections.reservedBitsMask();
2136-
int numReservedBits = dwarfSections.numReservedBits();
2135+
int reservedHubBitsMask = dwarfSections.reservedHubBitsMask();
2136+
int numReservedHubBits = dwarfSections.numReservedHubBits();
21372137
int compressionShift = dwarfSections.compressionShift();
21382138
int numAlignmentBits = dwarfSections.numAlignmentBits();
21392139

@@ -2143,12 +2143,12 @@ public int writeCompressedOopConversionExpression(boolean isHub, byte[] buffer,
21432143
* The required expression will be one of these paths:
21442144
*
21452145
* push object address ................................ (1 byte) ..... [offset] ............
2146-
* IF reservedBitsMask != 0 ................................................................
2147-
* . push reservedBitsMask ............................ (1 byte) ..... [offset, mask] ......
2146+
* IF reservedHubBitsMask != 0 .............................................................
2147+
* . push reservedHubBitsMask.......................... (1 byte) ..... [offset, mask] ......
21482148
* . NOT .............................................. (1 byte) ..... [offset, ~mask] .....
21492149
* . AND .............................................. (1 byte) ..... [offset] ............
2150-
* . IF numReservedBits == numAlignmentBits && compressionShift == 0 .......................
2151-
* ... push numReservedBits ........................... (1 byte) ..... [offset, right shift]
2150+
* . IF numReservedHubBits == numAlignmentBits && compressionShift == 0 ....................
2151+
* ... push numReservedHubBits ........................ (1 byte) ..... [offset, right shift]
21522152
* ... LSHR ........................................... (1 byte) ..... [offset] ............
21532153
* ... IF compressionShift != numAlignmentBits .............................................
21542154
* ..... push numAlignmentBits - compressionShift ..... (1 byte) ..... [offset, left shift]
@@ -2176,13 +2176,13 @@ public int writeCompressedOopConversionExpression(boolean isHub, byte[] buffer,
21762176
pos = writeULEB(0, buffer, pos);
21772177
int exprStart = pos;
21782178
pos = writeExprOpcode(DwarfExpressionOpcode.DW_OP_push_object_address, buffer, pos);
2179-
if (isHub && reservedBitsMask != 0) {
2180-
if (numReservedBits == numAlignmentBits && compressionShift == 0) {
2181-
pos = writeExprOpcodeLiteral(reservedBitsMask, buffer, pos);
2179+
if (isHub && reservedHubBitsMask != 0) {
2180+
if (numReservedHubBits == numAlignmentBits && compressionShift == 0) {
2181+
pos = writeExprOpcodeLiteral(reservedHubBitsMask, buffer, pos);
21822182
pos = writeExprOpcode(DwarfExpressionOpcode.DW_OP_not, buffer, pos);
21832183
pos = writeExprOpcode(DwarfExpressionOpcode.DW_OP_and, buffer, pos);
21842184
} else {
2185-
pos = writeExprOpcodeLiteral(numReservedBits, buffer, pos);
2185+
pos = writeExprOpcodeLiteral(numReservedHubBits, buffer, pos);
21862186
pos = writeExprOpcode(DwarfExpressionOpcode.DW_OP_shr, buffer, pos);
21872187
if (compressionShift != numAlignmentBits) {
21882188
pos = writeExprOpcodeLiteral(numAlignmentBits - compressionShift, buffer, pos);

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/CompactingOldGeneration.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.oracle.svm.core.genscavenge.remset.BrickTable;
4949
import com.oracle.svm.core.genscavenge.remset.RememberedSet;
5050
import com.oracle.svm.core.graal.RuntimeCompilation;
51+
import com.oracle.svm.core.heap.Heap;
5152
import com.oracle.svm.core.heap.ObjectHeader;
5253
import com.oracle.svm.core.heap.ObjectVisitor;
5354
import com.oracle.svm.core.log.Log;
@@ -180,7 +181,8 @@ public Object promoteAlignedObject(Object original, AlignedHeapChunk.AlignedHead
180181
return space.copyAlignedObject(original, originalSpace);
181182
}
182183
assert originalSpace == space;
183-
Word header = ObjectHeader.readHeaderFromObject(original);
184+
ObjectHeader oh = Heap.getHeap().getObjectHeader();
185+
Word header = oh.readHeaderFromObject(original);
184186
if (ObjectHeaderImpl.isMarkedHeader(header)) {
185187
return original;
186188
}
@@ -194,7 +196,7 @@ public Object promoteAlignedObject(Object original, AlignedHeapChunk.AlignedHead
194196
* object's size. The easiest way to handle this is to copy the object.
195197
*/
196198
result = space.copyAlignedObject(original, originalSpace);
197-
assert !ObjectHeaderImpl.hasIdentityHashFromAddressInline(ObjectHeader.readHeaderFromObject(result));
199+
assert !ObjectHeaderImpl.hasIdentityHashFromAddressInline(oh.readHeaderFromObject(result));
198200
}
199201
ObjectHeaderImpl.setMarked(result);
200202
markStack.push(result);

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/GreyToBlackObjRefVisitor.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.oracle.svm.core.AlwaysInline;
3232
import com.oracle.svm.core.Uninterruptible;
3333
import com.oracle.svm.core.genscavenge.remset.RememberedSet;
34-
import com.oracle.svm.core.heap.ObjectHeader;
3534
import com.oracle.svm.core.heap.ObjectReferenceVisitor;
3635
import com.oracle.svm.core.heap.ReferenceAccess;
3736
import com.oracle.svm.core.hub.LayoutEncoding;
@@ -91,7 +90,7 @@ public boolean visitObjectReferenceInline(Pointer objRef, int innerOffset, boole
9190
// This is the most expensive check as it accesses the heap fairly randomly, which results
9291
// in a lot of cache misses.
9392
ObjectHeaderImpl ohi = ObjectHeaderImpl.getObjectHeaderImpl();
94-
Word header = ObjectHeader.readHeaderFromPointer(p);
93+
Word header = ohi.readHeaderFromPointer(p);
9594
if (GCImpl.getGCImpl().isCompleteCollection() || !RememberedSet.get().hasRememberedSet(header)) {
9695

9796
if (ObjectHeaderImpl.isForwardedHeader(header)) {

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/HeapImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,7 @@ public int maxInvocationCount() {
867867
@RestrictHeapAccess(access = RestrictHeapAccess.Access.NO_ALLOCATION, reason = "Must not allocate while printing diagnostics.")
868868
public void printDiagnostics(Log log, ErrorContext context, int maxDiagnosticLevel, int invocationCount) {
869869
log.string("Heap settings and statistics:").indent(true);
870-
log.string("Reserved object header bits: 0b").number(Heap.getHeap().getObjectHeader().getReservedBitsMask(), 2, false).newline();
870+
log.string("Reserved hub pointer bits: 0b").number(Heap.getHeap().getObjectHeader().getReservedHubBitsMask(), 2, false).newline();
871871

872872
log.string("Aligned chunk size: ").unsigned(HeapParameters.getAlignedHeapChunkSize()).newline();
873873
log.string("Large array threshold: ").unsigned(HeapParameters.getLargeArrayThreshold()).newline();

substratevm/src/com.oracle.svm.core.genscavenge/src/com/oracle/svm/core/genscavenge/HeapVerifier.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import com.oracle.svm.core.genscavenge.AlignedHeapChunk.AlignedHeader;
3636
import com.oracle.svm.core.genscavenge.UnalignedHeapChunk.UnalignedHeader;
3737
import com.oracle.svm.core.genscavenge.remset.RememberedSet;
38+
import com.oracle.svm.core.heap.Heap;
3839
import com.oracle.svm.core.heap.ObjectHeader;
3940
import com.oracle.svm.core.heap.ObjectReferenceVisitor;
4041
import com.oracle.svm.core.heap.ObjectVisitor;
@@ -241,7 +242,8 @@ private static boolean verifyObject(Object obj, AlignedHeader aChunk, UnalignedH
241242
return false;
242243
}
243244

244-
Word header = ObjectHeader.readHeaderFromPointer(ptr);
245+
ObjectHeader oh = Heap.getHeap().getObjectHeader();
246+
Word header = oh.readHeaderFromPointer(ptr);
245247
if (ObjectHeaderImpl.isProducedHeapChunkZapped(header) || ObjectHeaderImpl.isConsumedHeapChunkZapped(header)) {
246248
Log.log().string("Object ").zhex(ptr).string(" has a zapped header: ").zhex(header).newline();
247249
return false;
@@ -352,7 +354,8 @@ private static boolean verifyReference(Object parentObject, Pointer reference, P
352354
return false;
353355
}
354356

355-
Word header = ObjectHeader.readHeaderFromPointer(referencedObject);
357+
ObjectHeader oh = Heap.getHeap().getObjectHeader();
358+
Word header = oh.readHeaderFromPointer(referencedObject);
356359
if (!ObjectHeaderImpl.getObjectHeaderImpl().isEncodedObjectHeader(header)) {
357360
Log.log().string("Object reference at ").zhex(reference).string(" does not point to a Java object or the object header of the Java object is invalid: ").zhex(referencedObject)
358361
.string(". ");

0 commit comments

Comments
 (0)