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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
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
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
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 }