Skip to content

Commit a36a825

Browse files
committed
[GR-28867] Document object reference variants used in SubstrateVM.
PullRequest: graal/8192
2 parents 620bfc2 + 0fdc1a4 commit a36a825

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/ReferenceAccess.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,43 @@
3232
import org.graalvm.word.Pointer;
3333
import org.graalvm.word.UnsignedWord;
3434

35+
import com.oracle.svm.core.config.ObjectLayout;
36+
3537
/**
3638
* Means for accessing object references, explicitly distinguishing between compressed and
3739
* uncompressed references.
40+
* <p>
41+
* <p>
42+
* SubstrateVM uses the following object reference variants:
43+
* <p>
44+
* <ol>
45+
* <li>-H:-SpawnIsolates (explicitly disabled isolates support)
46+
* <ul>
47+
* <li>Regular reference: <code>address64 = val64</code>
48+
* <li>Reference to hub: <code>address64 = val64 & GC-bits_bitmask</code>
49+
* </ul>
50+
* <blockquote>where <code>GC-bits_bitmask</code> is
51+
* <code>~{@link ObjectHeader#getReservedBitsMask()}</code></blockquote> <br>
52+
* <li>-H:+SpawnIsolates and -H:-UseCompressedReferences (CE default)
53+
* <ul>
54+
* <li>Regular reference: <code>address64 = val64 + r14</code>
55+
* <li>Reference to hub:
56+
* <code>address64 = ((val64 >>> num_GC_bits) << objectAlignmentBits) + r14</code>
57+
* </ul>
58+
* <blockquote>where <code>objectAlignmentBits</code> is defined by
59+
* <code>Integer.bitCount({@link ObjectLayout#getAlignment()} - 1)</code></blockquote> <br>
60+
* <li>-H:+SpawnIsolates and -H:+UseCompressedReferences (EE default)
61+
* <ul>
62+
* <li>Regular reference: <code>address64 = (val32 << compressShift) + r14</code>
63+
* <li>Reference to hub: <code>address64 = ((val32 >>> num_GC_bits) << compressShift) + r14</code>
64+
* <br>
65+
* </ul>
66+
* <blockquote>where <code>compressShift</code> is defined by
67+
* {@link CompressEncoding#getShift()}</blockquote>
68+
* </ol>
69+
* <br>
70+
* <blockquote> In 2. and 3. <code>num_GC_bits</code> is
71+
* <code>Integer.bitCount({@link ObjectHeader#getReservedBitsMask()})</code> </blockquote>
3872
*/
3973
public interface ReferenceAccess {
4074
@Fold

0 commit comments

Comments
 (0)