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

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

Issue 297763006: Improve write barriers in optimized code. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: REBASE 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
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_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
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
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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698