|
32 | 32 | import org.graalvm.word.Pointer;
|
33 | 33 | import org.graalvm.word.UnsignedWord;
|
34 | 34 |
|
| 35 | +import com.oracle.svm.core.config.ObjectLayout; |
| 36 | + |
35 | 37 | /**
|
36 | 38 | * Means for accessing object references, explicitly distinguishing between compressed and
|
37 | 39 | * 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> |
38 | 72 | */
|
39 | 73 | public interface ReferenceAccess {
|
40 | 74 | @Fold
|
|
0 commit comments