Mercurial > hg > graal-compiler
annotate graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/replacements/WriteBarrierSnippets.java @ 8571:0bacc5564d18
Revert WB refactoring
author | Christos Kotselidis <christos.kotselidis@oracle.com> |
---|---|
date | Fri, 29 Mar 2013 03:05:33 +0100 |
parents | 0d91be9af2bc |
children | 75db7afee829 |
rev | line source |
---|---|
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
1 /* |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
4 * |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
8 * |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
14 * |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
18 * |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
21 * questions. |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
22 */ |
8508
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
23 package com.oracle.graal.hotspot.replacements; |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
24 |
8508
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
25 import static com.oracle.graal.hotspot.replacements.HotSpotSnippetUtils.*; |
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
26 import static com.oracle.graal.replacements.SnippetTemplate.*; |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
27 |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
28 import com.oracle.graal.api.code.*; |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
29 import com.oracle.graal.api.meta.*; |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
30 import com.oracle.graal.hotspot.nodes.*; |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
31 import com.oracle.graal.nodes.spi.*; |
8508
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
32 import com.oracle.graal.replacements.*; |
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
33 import com.oracle.graal.replacements.Snippet.ConstantParameter; |
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
34 import com.oracle.graal.replacements.Snippet.Parameter; |
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
35 import com.oracle.graal.replacements.SnippetTemplate.AbstractTemplates; |
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
36 import com.oracle.graal.replacements.SnippetTemplate.Arguments; |
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
37 import com.oracle.graal.replacements.SnippetTemplate.Key; |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
38 import com.oracle.graal.word.*; |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
39 |
8508
ef97193256d0
-Merge with trunk
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8507
diff
changeset
|
40 public class WriteBarrierSnippets implements Snippets { |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
41 |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
42 @Snippet |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
43 public static void g1PreWriteBarrier(@Parameter("object") Object obj, @Parameter("expectedObject") Object expobj, @Parameter("location") Object location, |
8504
86b4965f0c9a
-Cleanup code
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8502
diff
changeset
|
44 @ConstantParameter("doLoad") boolean doLoad) { |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
45 Word thread = thread(); |
8502
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
46 Object object = FixedValueAnchorNode.getObject(obj); |
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
47 Object expectedObject = FixedValueAnchorNode.getObject(expobj); |
8516
c1385bb5851b
Replace Pointer accesses with Word
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8508
diff
changeset
|
48 Word field = (Word) Word.fromArray(object, location); |
c1385bb5851b
Replace Pointer accesses with Word
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8508
diff
changeset
|
49 Word previousOop = (Word) Word.fromObject(expectedObject); |
8502
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
50 byte markingValue = thread.readByte(HotSpotSnippetUtils.g1SATBQueueMarkingOffset()); |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
51 |
8493
9412b1915547
-More G1 WB Integration-Addition of GenerateLEANode for G1 previous value equalities
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8492
diff
changeset
|
52 Word bufferAddress = thread.readWord(HotSpotSnippetUtils.g1SATBQueueBufferOffset()); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
53 Word indexAddress = thread.add(HotSpotSnippetUtils.g1SATBQueueIndexOffset()); |
8502
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
54 Word indexValue = indexAddress.readWord(0); |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
55 |
8496
b089cde44076
-More porting and bug fixes
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8495
diff
changeset
|
56 if (markingValue != (byte) 0) { |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
57 if (doLoad) { |
8493
9412b1915547
-More G1 WB Integration-Addition of GenerateLEANode for G1 previous value equalities
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8492
diff
changeset
|
58 previousOop = field.readWord(0); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
59 } |
8517
79cc35a1c2e7
-Merge
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8516
diff
changeset
|
60 if (previousOop.notEqual(Word.zero())) { |
8495
9131c075be7b
-More porting to G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8494
diff
changeset
|
61 if (indexValue.notEqual(Word.zero())) { |
8498
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
62 Word nextIndex = indexValue.subtract(HotSpotSnippetUtils.wordSize()); |
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
63 Word logAddress = bufferAddress.add(nextIndex); |
8493
9412b1915547
-More G1 WB Integration-Addition of GenerateLEANode for G1 previous value equalities
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8492
diff
changeset
|
64 logAddress.writeWord(0, previousOop); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
65 indexAddress.writeWord(0, nextIndex); |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
66 } else { |
8495
9131c075be7b
-More porting to G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8494
diff
changeset
|
67 WriteBarrierPreStubCall.call(previousOop); |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
68 |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
69 } |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
70 } |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
71 } |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
72 } |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
73 |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
74 @Snippet |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
75 public static void g1PostWriteBarrier(@Parameter("object") Object obj, @Parameter("value") Object value, @Parameter("location") Object location, @ConstantParameter("usePrecise") boolean usePrecise) { |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
76 Word thread = thread(); |
8502
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
77 Object object = FixedValueAnchorNode.getObject(obj); |
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
78 Object wrObject = FixedValueAnchorNode.getObject(value); |
8516
c1385bb5851b
Replace Pointer accesses with Word
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8508
diff
changeset
|
79 Word oop = (Word) Word.fromObject(object); |
c1385bb5851b
Replace Pointer accesses with Word
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8508
diff
changeset
|
80 Word field; |
8502
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
81 if (usePrecise) { |
8516
c1385bb5851b
Replace Pointer accesses with Word
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8508
diff
changeset
|
82 field = (Word) Word.fromArray(object, location); |
8502
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
83 } else { |
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
84 field = oop; |
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
85 } |
8516
c1385bb5851b
Replace Pointer accesses with Word
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8508
diff
changeset
|
86 Word writtenValue = (Word) Word.fromObject(wrObject); |
8493
9412b1915547
-More G1 WB Integration-Addition of GenerateLEANode for G1 previous value equalities
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8492
diff
changeset
|
87 Word bufferAddress = thread.readWord(HotSpotSnippetUtils.g1CardQueueBufferOffset()); |
8495
9131c075be7b
-More porting to G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8494
diff
changeset
|
88 Word indexAddress = thread.add(HotSpotSnippetUtils.g1CardQueueIndexOffset()); |
8494
7c9dbc80fd7d
-Add more instrumentation
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8493
diff
changeset
|
89 Word indexValue = thread.readWord(HotSpotSnippetUtils.g1CardQueueIndexOffset()); |
8517
79cc35a1c2e7
-Merge
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8516
diff
changeset
|
90 Word xorResult = (field.xor(writtenValue)).unsignedShiftRight(HotSpotSnippetUtils.logOfHRGrainBytes()); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
91 |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
92 // Card Table |
8517
79cc35a1c2e7
-Merge
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8516
diff
changeset
|
93 Word cardBase = field.unsignedShiftRight(cardTableShift()); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
94 long startAddress = cardTableStart(); |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
95 int displacement = 0; |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
96 if (((int) startAddress) == startAddress) { |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
97 displacement = (int) startAddress; |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
98 } else { |
8498
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
99 cardBase = cardBase.add(Word.unsigned(cardTableStart())); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
100 } |
8498
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
101 Word cardAddress = cardBase.add(displacement); |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
102 |
8493
9412b1915547
-More G1 WB Integration-Addition of GenerateLEANode for G1 previous value equalities
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8492
diff
changeset
|
103 if (xorResult.notEqual(Word.zero())) { |
9412b1915547
-More G1 WB Integration-Addition of GenerateLEANode for G1 previous value equalities
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8492
diff
changeset
|
104 if (writtenValue.notEqual(Word.zero())) { |
8498
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
105 byte cardByte = cardAddress.readByte(0); |
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
106 if (cardByte != (byte) 0) { |
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
107 cardAddress.writeByte(0, (byte) 0); // smash zero into card |
8495
9131c075be7b
-More porting to G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8494
diff
changeset
|
108 if (indexValue.notEqual(Word.zero())) { |
9131c075be7b
-More porting to G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8494
diff
changeset
|
109 Word nextIndex = indexValue.subtract(HotSpotSnippetUtils.wordSize()); |
8498
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
110 Word logAddress = bufferAddress.add(nextIndex); |
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
111 logAddress.writeWord(0, cardAddress); |
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
112 indexAddress.writeWord(0, nextIndex); |
8493
9412b1915547
-More G1 WB Integration-Addition of GenerateLEANode for G1 previous value equalities
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8492
diff
changeset
|
113 } else { |
8498
c158d128fae9
-More porting and bug fixing
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8497
diff
changeset
|
114 WriteBarrierPostStubCall.call(object, cardAddress); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
115 } |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
116 } |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
117 } |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
118 } |
8502
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
119 } |
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
120 |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
121 @Snippet |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
122 public static void serialFieldWriteBarrier(@Parameter("object") Object obj) { |
8518
4a79f7c0d1a4
-Fix assertion errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8517
diff
changeset
|
123 Object object = FixedValueAnchorNode.getObject(obj); |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
124 Pointer oop = Word.fromObject(object); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
125 Word base = (Word) oop.unsignedShiftRight(cardTableShift()); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
126 long startAddress = cardTableStart(); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
127 int displacement = 0; |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
128 if (((int) startAddress) == startAddress) { |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
129 displacement = (int) startAddress; |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
130 } else { |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
131 base = base.add(Word.unsigned(cardTableStart())); |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
132 } |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
133 base.writeByte(displacement, (byte) 0); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
134 } |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
135 |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
136 @Snippet |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
137 public static void serialArrayWriteBarrier(@Parameter("object") Object obj, @Parameter("location") Object location) { |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
138 Object object = FixedValueAnchorNode.getObject(obj); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
139 Pointer oop = Word.fromArray(object, location); |
8518
4a79f7c0d1a4
-Fix assertion errors
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8517
diff
changeset
|
140 Word base = (Word) oop.unsignedShiftRight(cardTableShift()); |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
141 long startAddress = cardTableStart(); |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
142 int displacement = 0; |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
143 if (((int) startAddress) == startAddress) { |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
144 displacement = (int) startAddress; |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
145 } else { |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
146 base = base.add(Word.unsigned(cardTableStart())); |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
147 } |
8520
450abf358987
-Bug fix in card marking
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8518
diff
changeset
|
148 base.writeByte(displacement, (byte) 0); |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
149 } |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
150 |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
151 public static class Templates extends AbstractTemplates<WriteBarrierSnippets> { |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
152 |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
153 private final ResolvedJavaMethod serialFieldWriteBarrier; |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
154 private final ResolvedJavaMethod serialArrayWriteBarrier; |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
155 private final ResolvedJavaMethod g1PreWriteBarrier; |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
156 private final ResolvedJavaMethod g1PostWriteBarrier; |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
157 |
8504
86b4965f0c9a
-Cleanup code
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8502
diff
changeset
|
158 public Templates(CodeCacheProvider runtime, Assumptions assumptions, TargetDescription target) { |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
159 super(runtime, assumptions, target, WriteBarrierSnippets.class); |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
160 serialFieldWriteBarrier = snippet("serialFieldWriteBarrier", Object.class); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
161 serialArrayWriteBarrier = snippet("serialArrayWriteBarrier", Object.class, Object.class); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
162 g1PreWriteBarrier = snippet("g1PreWriteBarrier", Object.class, Object.class, Object.class, boolean.class); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
163 g1PostWriteBarrier = snippet("g1PostWriteBarrier", Object.class, Object.class, Object.class, boolean.class); |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
164 } |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
165 |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
166 public void lower(ArrayWriteBarrier arrayWriteBarrier, @SuppressWarnings("unused") LoweringTool tool) { |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
167 ResolvedJavaMethod method = serialArrayWriteBarrier; |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
168 Key key = new Key(method); |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
169 Arguments arguments = new Arguments(); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
170 arguments.add("object", arrayWriteBarrier.getObject()); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
171 arguments.add("location", arrayWriteBarrier.getLocation()); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
172 SnippetTemplate template = cache.get(key, assumptions); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
173 template.instantiate(runtime, arrayWriteBarrier, DEFAULT_REPLACER, arguments); |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
174 } |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
175 |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
176 public void lower(FieldWriteBarrier fieldWriteBarrier, @SuppressWarnings("unused") LoweringTool tool) { |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
177 ResolvedJavaMethod method = serialFieldWriteBarrier; |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
178 Key key = new Key(method); |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
179 Arguments arguments = new Arguments(); |
8521
6aa080855d7c
-Bug fixes
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8520
diff
changeset
|
180 arguments.add("object", fieldWriteBarrier.getObject()); |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
181 SnippetTemplate template = cache.get(key, assumptions); |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
182 template.instantiate(runtime, fieldWriteBarrier, DEFAULT_REPLACER, arguments); |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
183 } |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
184 |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
185 public void lower(WriteBarrierPre writeBarrierPre, @SuppressWarnings("unused") LoweringTool tool) { |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
186 ResolvedJavaMethod method = g1PreWriteBarrier; |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
187 Key key = new Key(method); |
8493
9412b1915547
-More G1 WB Integration-Addition of GenerateLEANode for G1 previous value equalities
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8492
diff
changeset
|
188 key.add("doLoad", writeBarrierPre.doLoad()); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
189 Arguments arguments = new Arguments(); |
8507
c92949b1ec8a
-Changes after CR-243
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8504
diff
changeset
|
190 arguments.add("object", writeBarrierPre.getObject()); |
c92949b1ec8a
-Changes after CR-243
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8504
diff
changeset
|
191 arguments.add("expectedObject", writeBarrierPre.getExpectedObject()); |
c92949b1ec8a
-Changes after CR-243
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8504
diff
changeset
|
192 arguments.add("location", writeBarrierPre.getLocation()); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
193 SnippetTemplate template = cache.get(key, assumptions); |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
194 template.instantiate(runtime, writeBarrierPre, DEFAULT_REPLACER, arguments); |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
195 } |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
196 |
8571
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
197 public void lower(WriteBarrierPost writeBarrierPost, @SuppressWarnings("unused") LoweringTool tool) { |
0bacc5564d18
Revert WB refactoring
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8531
diff
changeset
|
198 ResolvedJavaMethod method = g1PostWriteBarrier; |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
199 Key key = new Key(method); |
8502
ff4fa8b0516e
-Create push patch
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8501
diff
changeset
|
200 key.add("usePrecise", writeBarrierPost.usePrecise()); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
201 Arguments arguments = new Arguments(); |
8507
c92949b1ec8a
-Changes after CR-243
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8504
diff
changeset
|
202 arguments.add("object", writeBarrierPost.getObject()); |
c92949b1ec8a
-Changes after CR-243
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8504
diff
changeset
|
203 arguments.add("location", writeBarrierPost.getLocation()); |
c92949b1ec8a
-Changes after CR-243
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8504
diff
changeset
|
204 arguments.add("value", writeBarrierPost.getValue()); |
8490
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
205 SnippetTemplate template = cache.get(key, assumptions); |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
206 template.instantiate(runtime, writeBarrierPost, DEFAULT_REPLACER, arguments); |
1567c6cc6561
Towards porting G1 WBs
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8489
diff
changeset
|
207 } |
8492
286a49d423c9
-Snippetization of CMS WriteBarriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
8491
diff
changeset
|
208 |
8488
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
209 } |
225c984588ee
-Snippetization of CMS write barriers
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
diff
changeset
|
210 } |