11
11
import org .graalvm .compiler .hotspot .meta .HotSpotForeignCallsProviderImpl ;
12
12
import org .graalvm .compiler .hotspot .meta .HotSpotProviders ;
13
13
import org .graalvm .compiler .hotspot .meta .HotSpotRegistersProvider ;
14
- import org .graalvm .compiler .hotspot .nodes .GraalHotSpotVMConfigNode ;
15
14
import org .graalvm .compiler .hotspot .nodes .HotSpotCompressionNode ;
16
15
import org .graalvm .compiler .nodes .ValueNode ;
17
- import org .graalvm .compiler .nodes .gc .G1ArrayRangePostWriteBarrier ;
18
- import org .graalvm .compiler .nodes .gc .G1ArrayRangePreWriteBarrier ;
19
- import org .graalvm .compiler .nodes .gc .G1PostWriteBarrier ;
20
- import org .graalvm .compiler .nodes .gc .G1PreWriteBarrier ;
21
- import org .graalvm .compiler .nodes .gc .G1ReferentFieldReadBarrier ;
22
16
import org .graalvm .compiler .nodes .gc .ShenandoahArrayRangePreWriteBarrier ;
17
+ import org .graalvm .compiler .nodes .gc .ShenandoahLoadReferenceBarrier ;
23
18
import org .graalvm .compiler .nodes .gc .ShenandoahPreWriteBarrier ;
24
19
import org .graalvm .compiler .nodes .gc .ShenandoahReferentFieldReadBarrier ;
25
20
import org .graalvm .compiler .nodes .spi .LoweringTool ;
26
21
import org .graalvm .compiler .options .OptionValues ;
27
22
import org .graalvm .compiler .replacements .ReplacementsUtil ;
28
23
import org .graalvm .compiler .replacements .SnippetCounter ;
29
24
import org .graalvm .compiler .replacements .SnippetTemplate ;
30
- import org .graalvm .compiler .replacements .gc .G1WriteBarrierSnippets ;
31
25
import org .graalvm .compiler .replacements .gc .ShenandoahBarrierSnippets ;
32
26
import org .graalvm .compiler .word .Word ;
33
- import org .graalvm .word .WordFactory ;
34
27
35
28
import static org .graalvm .compiler .hotspot .GraalHotSpotVMConfig .INJECTED_METAACCESS ;
36
29
import static org .graalvm .compiler .hotspot .GraalHotSpotVMConfig .INJECTED_VMCONFIG ;
37
30
38
31
public final class HotSpotShenandoahBarrierSnippets extends ShenandoahBarrierSnippets {
39
32
public static final ForeignCallDescriptor SHENANDOAHWBPRECALL = new ForeignCallDescriptor ("shenandoah_concmark_barrier" , void .class , Object .class );
33
+ public static final ForeignCallDescriptor SHENANDOAHLRBCALL = new ForeignCallDescriptor ("shenandoah_load_reference_barrier" , Object .class , Object .class );
40
34
public static final ForeignCallDescriptor VALIDATE_OBJECT = new ForeignCallDescriptor ("validate_object" , boolean .class , Word .class , Word .class );
41
35
42
36
private final GraalHotSpotVMConfig config ;
@@ -77,11 +71,21 @@ protected int satbQueueIndexOffset() {
77
71
return HotSpotReplacementsUtil .shenandoahSATBQueueIndexOffset (INJECTED_VMCONFIG );
78
72
}
79
73
74
+ @ Override
75
+ protected int gcStateOffset () {
76
+ return HotSpotReplacementsUtil .shenandoahGCStateOffset (INJECTED_VMCONFIG );
77
+ }
78
+
80
79
@ Override
81
80
protected ForeignCallDescriptor preWriteBarrierCallDescriptor () {
82
81
return SHENANDOAHWBPRECALL ;
83
82
}
84
83
84
+ @ Override
85
+ protected ForeignCallDescriptor loadReferenceBarrierCallDescriptor () {
86
+ return SHENANDOAHLRBCALL ;
87
+ }
88
+
85
89
@ Override
86
90
protected boolean verifyOops () {
87
91
return HotSpotReplacementsUtil .verifyOops (INJECTED_VMCONFIG );
@@ -126,6 +130,7 @@ public static class Templates extends SnippetTemplate.AbstractTemplates {
126
130
private final SnippetTemplate .SnippetInfo shenandoahPreWriteBarrier ;
127
131
private final SnippetTemplate .SnippetInfo shenandoahReferentReadBarrier ;
128
132
private final SnippetTemplate .SnippetInfo shenandoahArrayRangePreWriteBarrier ;
133
+ private final SnippetTemplate .SnippetInfo shenandoahLoadReferenceBarrier ;
129
134
130
135
private final ShenandoahBarrierLowerer lowerer ;
131
136
@@ -140,6 +145,7 @@ public Templates(OptionValues options, Iterable<DebugHandlersFactory> factories,
140
145
SATB_QUEUE_INDEX_LOCATION , SATB_QUEUE_BUFFER_LOCATION );
141
146
shenandoahArrayRangePreWriteBarrier = snippet (ShenandoahBarrierSnippets .class , "shenandoahArrayRangePreWriteBarrier" , null , receiver , GC_INDEX_LOCATION , GC_LOG_LOCATION , SATB_QUEUE_MARKING_LOCATION ,
142
147
SATB_QUEUE_INDEX_LOCATION , SATB_QUEUE_BUFFER_LOCATION );
148
+ shenandoahLoadReferenceBarrier = snippet (ShenandoahBarrierSnippets .class , "shenandoahLoadReferenceBarrier" , null , receiver , GC_STATE_LOCATION );
143
149
}
144
150
145
151
public void lower (ShenandoahPreWriteBarrier barrier , LoweringTool tool ) {
@@ -153,6 +159,10 @@ public void lower(ShenandoahReferentFieldReadBarrier barrier, LoweringTool tool)
153
159
public void lower (ShenandoahArrayRangePreWriteBarrier barrier , LoweringTool tool ) {
154
160
lowerer .lower (this , shenandoahArrayRangePreWriteBarrier , barrier , tool );
155
161
}
162
+
163
+ public void lower (ShenandoahLoadReferenceBarrier barrier , LoweringTool tool ) {
164
+ lowerer .lower (this , shenandoahLoadReferenceBarrier , barrier , tool );
165
+ }
156
166
}
157
167
158
168
static final class HotspotShenandoahBarrierLowerer extends ShenandoahBarrierLowerer {
0 commit comments