OLD | NEW |
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_IA32_MACRO_ASSEMBLER_IA32_H_ | 5 #ifndef V8_IA32_MACRO_ASSEMBLER_IA32_H_ |
6 #define V8_IA32_MACRO_ASSEMBLER_IA32_H_ | 6 #define V8_IA32_MACRO_ASSEMBLER_IA32_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 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 // stored. value and scratch registers are clobbered by the operation. | 137 // stored. value and scratch registers are clobbered by the operation. |
134 // The offset is the offset from the start of the object, not the offset from | 138 // The offset is the offset from the start of the object, not the offset from |
135 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). | 139 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). |
136 void RecordWriteField( | 140 void RecordWriteField( |
137 Register object, | 141 Register object, |
138 int offset, | 142 int offset, |
139 Register value, | 143 Register value, |
140 Register scratch, | 144 Register scratch, |
141 SaveFPRegsMode save_fp, | 145 SaveFPRegsMode save_fp, |
142 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 146 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
143 SmiCheck smi_check = INLINE_SMI_CHECK); | 147 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 148 PointersToHereCheck pointers_to_here_check_for_value = |
| 149 kPointersToHereMaybeInteresting); |
144 | 150 |
145 // As above, but the offset has the tag presubtracted. For use with | 151 // As above, but the offset has the tag presubtracted. For use with |
146 // Operand(reg, off). | 152 // Operand(reg, off). |
147 void RecordWriteContextSlot( | 153 void RecordWriteContextSlot( |
148 Register context, | 154 Register context, |
149 int offset, | 155 int offset, |
150 Register value, | 156 Register value, |
151 Register scratch, | 157 Register scratch, |
152 SaveFPRegsMode save_fp, | 158 SaveFPRegsMode save_fp, |
153 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 159 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
154 SmiCheck smi_check = INLINE_SMI_CHECK) { | 160 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 161 PointersToHereCheck pointers_to_here_check_for_value = |
| 162 kPointersToHereMaybeInteresting) { |
155 RecordWriteField(context, | 163 RecordWriteField(context, |
156 offset + kHeapObjectTag, | 164 offset + kHeapObjectTag, |
157 value, | 165 value, |
158 scratch, | 166 scratch, |
159 save_fp, | 167 save_fp, |
160 remembered_set_action, | 168 remembered_set_action, |
161 smi_check); | 169 smi_check, |
| 170 pointers_to_here_check_for_value); |
162 } | 171 } |
163 | 172 |
164 // Notify the garbage collector that we wrote a pointer into a fixed array. | 173 // Notify the garbage collector that we wrote a pointer into a fixed array. |
165 // |array| is the array being stored into, |value| is the | 174 // |array| is the array being stored into, |value| is the |
166 // object being stored. |index| is the array index represented as a | 175 // object being stored. |index| is the array index represented as a |
167 // Smi. All registers are clobbered by the operation RecordWriteArray | 176 // Smi. All registers are clobbered by the operation RecordWriteArray |
168 // filters out smis so it does not update the write barrier if the | 177 // filters out smis so it does not update the write barrier if the |
169 // value is a smi. | 178 // value is a smi. |
170 void RecordWriteArray( | 179 void RecordWriteArray( |
171 Register array, | 180 Register array, |
172 Register value, | 181 Register value, |
173 Register index, | 182 Register index, |
174 SaveFPRegsMode save_fp, | 183 SaveFPRegsMode save_fp, |
175 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 184 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
176 SmiCheck smi_check = INLINE_SMI_CHECK); | 185 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 186 PointersToHereCheck pointers_to_here_check_for_value = |
| 187 kPointersToHereMaybeInteresting); |
177 | 188 |
178 // For page containing |object| mark region covering |address| | 189 // For page containing |object| mark region covering |address| |
179 // dirty. |object| is the object being stored into, |value| is the | 190 // dirty. |object| is the object being stored into, |value| is the |
180 // object being stored. The address and value registers are clobbered by the | 191 // object being stored. The address and value registers are clobbered by the |
181 // operation. RecordWrite filters out smis so it does not update the | 192 // operation. RecordWrite filters out smis so it does not update the |
182 // write barrier if the value is a smi. | 193 // write barrier if the value is a smi. |
183 void RecordWrite( | 194 void RecordWrite( |
184 Register object, | 195 Register object, |
185 Register address, | 196 Register address, |
186 Register value, | 197 Register value, |
187 SaveFPRegsMode save_fp, | 198 SaveFPRegsMode save_fp, |
188 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 199 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
189 SmiCheck smi_check = INLINE_SMI_CHECK); | 200 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 201 PointersToHereCheck pointers_to_here_check_for_value = |
| 202 kPointersToHereMaybeInteresting); |
190 | 203 |
191 // For page containing |object| mark the region covering the object's map | 204 // For page containing |object| mark the region covering the object's map |
192 // dirty. |object| is the object being stored into, |map| is the Map object | 205 // dirty. |object| is the object being stored into, |map| is the Map object |
193 // that was stored. | 206 // that was stored. |
194 void RecordWriteForMap( | 207 void RecordWriteForMap( |
195 Register object, | 208 Register object, |
196 Handle<Map> map, | 209 Handle<Map> map, |
197 Register scratch1, | 210 Register scratch1, |
198 Register scratch2, | 211 Register scratch2, |
199 SaveFPRegsMode save_fp); | 212 SaveFPRegsMode save_fp); |
(...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1094 } \ | 1107 } \ |
1095 masm-> | 1108 masm-> |
1096 #else | 1109 #else |
1097 #define ACCESS_MASM(masm) masm-> | 1110 #define ACCESS_MASM(masm) masm-> |
1098 #endif | 1111 #endif |
1099 | 1112 |
1100 | 1113 |
1101 } } // namespace v8::internal | 1114 } } // namespace v8::internal |
1102 | 1115 |
1103 #endif // V8_IA32_MACRO_ASSEMBLER_IA32_H_ | 1116 #endif // V8_IA32_MACRO_ASSEMBLER_IA32_H_ |
OLD | NEW |