Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/x87/macro-assembler-x87.h

Issue 314983002: X87: Improve write barriers in optimized code. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/x87/lithium-codegen-x87.cc ('k') | src/x87/macro-assembler-x87.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_X87_MACRO_ASSEMBLER_X87_H_ 5 #ifndef V8_X87_MACRO_ASSEMBLER_X87_H_
6 #define V8_X87_MACRO_ASSEMBLER_X87_H_ 6 #define V8_X87_MACRO_ASSEMBLER_X87_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/frames.h" 9 #include "src/frames.h"
10 #include "src/globals.h" 10 #include "src/globals.h"
11 11
12 namespace v8 { 12 namespace v8 {
13 namespace internal { 13 namespace internal {
14 14
15 // Convenience for platform-independent signatures. We do not normally 15 // Convenience for platform-independent signatures. We do not normally
16 // distinguish memory operands from other operands on ia32. 16 // distinguish memory operands from other operands on ia32.
17 typedef Operand MemOperand; 17 typedef Operand MemOperand;
18 18
19 enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; 19 enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET };
20 enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; 20 enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK };
21 enum PointersToHereCheck {
22 kPointersToHereMaybeInteresting,
23 kPointersToHereAreAlwaysInteresting
24 };
21 25
22 26
23 enum RegisterValueType { 27 enum RegisterValueType {
24 REGISTER_VALUE_IS_SMI, 28 REGISTER_VALUE_IS_SMI,
25 REGISTER_VALUE_IS_INT32 29 REGISTER_VALUE_IS_INT32
26 }; 30 };
27 31
28 32
29 bool AreAliased(Register r1, Register r2, Register r3, Register r4); 33 bool AreAliased(Register r1, Register r2, Register r3, Register r4);
30 34
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 // |object| is the object being stored into, |value| is the object being 135 // |object| is the object being stored into, |value| is the object being
132 // stored. value and scratch registers are clobbered by the operation. 136 // stored. value and scratch registers are clobbered by the operation.
133 // The offset is the offset from the start of the object, not the offset from 137 // The offset is the offset from the start of the object, not the offset from
134 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). 138 // the tagged HeapObject pointer. For use with FieldOperand(reg, off).
135 void RecordWriteField( 139 void RecordWriteField(
136 Register object, 140 Register object,
137 int offset, 141 int offset,
138 Register value, 142 Register value,
139 Register scratch, 143 Register scratch,
140 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, 144 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET,
141 SmiCheck smi_check = INLINE_SMI_CHECK); 145 SmiCheck smi_check = INLINE_SMI_CHECK,
146 PointersToHereCheck pointers_to_here_check_for_value =
147 kPointersToHereMaybeInteresting);
142 148
143 // As above, but the offset has the tag presubtracted. For use with 149 // As above, but the offset has the tag presubtracted. For use with
144 // Operand(reg, off). 150 // Operand(reg, off).
145 void RecordWriteContextSlot( 151 void RecordWriteContextSlot(
146 Register context, 152 Register context,
147 int offset, 153 int offset,
148 Register value, 154 Register value,
149 Register scratch, 155 Register scratch,
150 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, 156 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET,
151 SmiCheck smi_check = INLINE_SMI_CHECK) { 157 SmiCheck smi_check = INLINE_SMI_CHECK,
158 PointersToHereCheck pointers_to_here_check_for_value =
159 kPointersToHereMaybeInteresting) {
152 RecordWriteField(context, 160 RecordWriteField(context,
153 offset + kHeapObjectTag, 161 offset + kHeapObjectTag,
154 value, 162 value,
155 scratch, 163 scratch,
156 remembered_set_action, 164 remembered_set_action,
157 smi_check); 165 smi_check,
166 pointers_to_here_check_for_value);
158 } 167 }
159 168
160 // Notify the garbage collector that we wrote a pointer into a fixed array. 169 // Notify the garbage collector that we wrote a pointer into a fixed array.
161 // |array| is the array being stored into, |value| is the 170 // |array| is the array being stored into, |value| is the
162 // object being stored. |index| is the array index represented as a 171 // object being stored. |index| is the array index represented as a
163 // Smi. All registers are clobbered by the operation RecordWriteArray 172 // Smi. All registers are clobbered by the operation RecordWriteArray
164 // filters out smis so it does not update the write barrier if the 173 // filters out smis so it does not update the write barrier if the
165 // value is a smi. 174 // value is a smi.
166 void RecordWriteArray( 175 void RecordWriteArray(
167 Register array, 176 Register array,
168 Register value, 177 Register value,
169 Register index, 178 Register index,
170 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, 179 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET,
171 SmiCheck smi_check = INLINE_SMI_CHECK); 180 SmiCheck smi_check = INLINE_SMI_CHECK,
181 PointersToHereCheck pointers_to_here_check_for_value =
182 kPointersToHereMaybeInteresting);
172 183
173 // For page containing |object| mark region covering |address| 184 // For page containing |object| mark region covering |address|
174 // dirty. |object| is the object being stored into, |value| is the 185 // dirty. |object| is the object being stored into, |value| is the
175 // object being stored. The address and value registers are clobbered by the 186 // object being stored. The address and value registers are clobbered by the
176 // operation. RecordWrite filters out smis so it does not update the 187 // operation. RecordWrite filters out smis so it does not update the
177 // write barrier if the value is a smi. 188 // write barrier if the value is a smi.
178 void RecordWrite( 189 void RecordWrite(
179 Register object, 190 Register object,
180 Register address, 191 Register address,
181 Register value, 192 Register value,
182 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, 193 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET,
183 SmiCheck smi_check = INLINE_SMI_CHECK); 194 SmiCheck smi_check = INLINE_SMI_CHECK,
195 PointersToHereCheck pointers_to_here_check_for_value =
196 kPointersToHereMaybeInteresting);
184 197
185 // For page containing |object| mark the region covering the object's map 198 // For page containing |object| mark the region covering the object's map
186 // dirty. |object| is the object being stored into, |map| is the Map object 199 // dirty. |object| is the object being stored into, |map| is the Map object
187 // that was stored. 200 // that was stored.
188 void RecordWriteForMap( 201 void RecordWriteForMap(
189 Register object, 202 Register object,
190 Handle<Map> map, 203 Handle<Map> map,
191 Register scratch1, 204 Register scratch1,
192 Register scratch2); 205 Register scratch2);
193 206
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 } \ 1081 } \
1069 masm-> 1082 masm->
1070 #else 1083 #else
1071 #define ACCESS_MASM(masm) masm-> 1084 #define ACCESS_MASM(masm) masm->
1072 #endif 1085 #endif
1073 1086
1074 1087
1075 } } // namespace v8::internal 1088 } } // namespace v8::internal
1076 1089
1077 #endif // V8_X87_MACRO_ASSEMBLER_X87_H_ 1090 #endif // V8_X87_MACRO_ASSEMBLER_X87_H_
OLDNEW
« no previous file with comments | « src/x87/lithium-codegen-x87.cc ('k') | src/x87/macro-assembler-x87.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698