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_ARM_MACRO_ASSEMBLER_ARM_H_ | 5 #ifndef V8_ARM_MACRO_ASSEMBLER_ARM_H_ |
6 #define V8_ARM_MACRO_ASSEMBLER_ARM_H_ | 6 #define V8_ARM_MACRO_ASSEMBLER_ARM_H_ |
7 | 7 |
8 #include "assembler.h" | 8 #include "assembler.h" |
9 #include "frames.h" | 9 #include "frames.h" |
10 #include "globals.h" | 10 #include "globals.h" |
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 // The offset is the offset from the start of the object, not the offset from | 237 // The offset is the offset from the start of the object, not the offset from |
238 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). | 238 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). |
239 void RecordWriteField( | 239 void RecordWriteField( |
240 Register object, | 240 Register object, |
241 int offset, | 241 int offset, |
242 Register value, | 242 Register value, |
243 Register scratch, | 243 Register scratch, |
244 LinkRegisterStatus lr_status, | 244 LinkRegisterStatus lr_status, |
245 SaveFPRegsMode save_fp, | 245 SaveFPRegsMode save_fp, |
246 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 246 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
247 SmiCheck smi_check = INLINE_SMI_CHECK); | 247 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 248 bool value_is_in_new_space = false); |
| 249 |
| 250 void RecordWriteForMap( |
| 251 Register object, |
| 252 Register map, |
| 253 Register dst, |
| 254 LinkRegisterStatus lr_status, |
| 255 SaveFPRegsMode save_fp); |
248 | 256 |
249 // As above, but the offset has the tag presubtracted. For use with | 257 // As above, but the offset has the tag presubtracted. For use with |
250 // MemOperand(reg, off). | 258 // MemOperand(reg, off). |
251 inline void RecordWriteContextSlot( | 259 inline void RecordWriteContextSlot( |
252 Register context, | 260 Register context, |
253 int offset, | 261 int offset, |
254 Register value, | 262 Register value, |
255 Register scratch, | 263 Register scratch, |
256 LinkRegisterStatus lr_status, | 264 LinkRegisterStatus lr_status, |
257 SaveFPRegsMode save_fp, | 265 SaveFPRegsMode save_fp, |
258 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 266 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
259 SmiCheck smi_check = INLINE_SMI_CHECK) { | 267 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 268 bool value_is_in_new_space = false) { |
260 RecordWriteField(context, | 269 RecordWriteField(context, |
261 offset + kHeapObjectTag, | 270 offset + kHeapObjectTag, |
262 value, | 271 value, |
263 scratch, | 272 scratch, |
264 lr_status, | 273 lr_status, |
265 save_fp, | 274 save_fp, |
266 remembered_set_action, | 275 remembered_set_action, |
267 smi_check); | 276 smi_check, |
| 277 value_is_in_new_space); |
268 } | 278 } |
269 | 279 |
270 // For a given |object| notify the garbage collector that the slot |address| | 280 // For a given |object| notify the garbage collector that the slot |address| |
271 // has been written. |value| is the object being stored. The value and | 281 // has been written. |value| is the object being stored. The value and |
272 // address registers are clobbered by the operation. | 282 // address registers are clobbered by the operation. |
273 void RecordWrite( | 283 void RecordWrite( |
274 Register object, | 284 Register object, |
275 Register address, | 285 Register address, |
276 Register value, | 286 Register value, |
277 LinkRegisterStatus lr_status, | 287 LinkRegisterStatus lr_status, |
278 SaveFPRegsMode save_fp, | 288 SaveFPRegsMode save_fp, |
279 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, | 289 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, |
280 SmiCheck smi_check = INLINE_SMI_CHECK); | 290 SmiCheck smi_check = INLINE_SMI_CHECK, |
| 291 bool value_is_in_new_space = false); |
281 | 292 |
282 // Push a handle. | 293 // Push a handle. |
283 void Push(Handle<Object> handle); | 294 void Push(Handle<Object> handle); |
284 void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); } | 295 void Push(Smi* smi) { Push(Handle<Smi>(smi, isolate())); } |
285 | 296 |
286 // Push two registers. Pushes leftmost register first (to highest address). | 297 // Push two registers. Pushes leftmost register first (to highest address). |
287 void Push(Register src1, Register src2, Condition cond = al) { | 298 void Push(Register src1, Register src2, Condition cond = al) { |
288 ASSERT(!src1.is(src2)); | 299 ASSERT(!src1.is(src2)); |
289 if (src1.code() > src2.code()) { | 300 if (src1.code() > src2.code()) { |
290 stm(db_w, sp, src1.bit() | src2.bit(), cond); | 301 stm(db_w, sp, src1.bit() | src2.bit(), cond); |
(...skipping 1310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1601 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) | 1612 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) |
1602 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> | 1613 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> |
1603 #else | 1614 #else |
1604 #define ACCESS_MASM(masm) masm-> | 1615 #define ACCESS_MASM(masm) masm-> |
1605 #endif | 1616 #endif |
1606 | 1617 |
1607 | 1618 |
1608 } } // namespace v8::internal | 1619 } } // namespace v8::internal |
1609 | 1620 |
1610 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ | 1621 #endif // V8_ARM_MACRO_ASSEMBLER_ARM_H_ |
OLD | NEW |