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

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

Issue 315653002: MIPS: Improve write barriers in optimized code. (Closed) Base URL: git@github.com:paul99/v8m-rb.git@master
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
« no previous file with comments | « src/mips/lithium-codegen-mips.cc ('k') | src/mips/macro-assembler-mips.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_MIPS_MACRO_ASSEMBLER_MIPS_H_ 5 #ifndef V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
6 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ 6 #define V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
7 7
8 #include "src/assembler.h" 8 #include "src/assembler.h"
9 #include "src/mips/assembler-mips.h" 9 #include "src/mips/assembler-mips.h"
10 #include "src/globals.h" 10 #include "src/globals.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 // optimize the li to use a single instruction, rather than lui/ori pair. 64 // optimize the li to use a single instruction, rather than lui/ori pair.
65 OPTIMIZE_SIZE = 0, 65 OPTIMIZE_SIZE = 0,
66 // Always use 2 instructions (lui/ori pair), even if the constant could 66 // Always use 2 instructions (lui/ori pair), even if the constant could
67 // be loaded with just one, so that this value is patchable later. 67 // be loaded with just one, so that this value is patchable later.
68 CONSTANT_SIZE = 1 68 CONSTANT_SIZE = 1
69 }; 69 };
70 70
71 71
72 enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET }; 72 enum RememberedSetAction { EMIT_REMEMBERED_SET, OMIT_REMEMBERED_SET };
73 enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK }; 73 enum SmiCheck { INLINE_SMI_CHECK, OMIT_SMI_CHECK };
74 enum PointersToHereCheck {
75 kPointersToHereMaybeInteresting,
76 kPointersToHereAreAlwaysInteresting
77 };
74 enum RAStatus { kRAHasNotBeenSaved, kRAHasBeenSaved }; 78 enum RAStatus { kRAHasNotBeenSaved, kRAHasBeenSaved };
75 79
76 Register GetRegisterThatIsNotOneOf(Register reg1, 80 Register GetRegisterThatIsNotOneOf(Register reg1,
77 Register reg2 = no_reg, 81 Register reg2 = no_reg,
78 Register reg3 = no_reg, 82 Register reg3 = no_reg,
79 Register reg4 = no_reg, 83 Register reg4 = no_reg,
80 Register reg5 = no_reg, 84 Register reg5 = no_reg,
81 Register reg6 = no_reg); 85 Register reg6 = no_reg);
82 86
83 bool AreAliased(Register r1, Register r2, Register r3, Register r4); 87 bool AreAliased(Register r1, Register r2, Register r3, Register r4);
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 // The offset is the offset from the start of the object, not the offset from 362 // The offset is the offset from the start of the object, not the offset from
359 // the tagged HeapObject pointer. For use with FieldOperand(reg, off). 363 // the tagged HeapObject pointer. For use with FieldOperand(reg, off).
360 void RecordWriteField( 364 void RecordWriteField(
361 Register object, 365 Register object,
362 int offset, 366 int offset,
363 Register value, 367 Register value,
364 Register scratch, 368 Register scratch,
365 RAStatus ra_status, 369 RAStatus ra_status,
366 SaveFPRegsMode save_fp, 370 SaveFPRegsMode save_fp,
367 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, 371 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET,
368 SmiCheck smi_check = INLINE_SMI_CHECK); 372 SmiCheck smi_check = INLINE_SMI_CHECK,
373 PointersToHereCheck pointers_to_here_check_for_value =
374 kPointersToHereMaybeInteresting);
369 375
370 // As above, but the offset has the tag presubtracted. For use with 376 // As above, but the offset has the tag presubtracted. For use with
371 // MemOperand(reg, off). 377 // MemOperand(reg, off).
372 inline void RecordWriteContextSlot( 378 inline void RecordWriteContextSlot(
373 Register context, 379 Register context,
374 int offset, 380 int offset,
375 Register value, 381 Register value,
376 Register scratch, 382 Register scratch,
377 RAStatus ra_status, 383 RAStatus ra_status,
378 SaveFPRegsMode save_fp, 384 SaveFPRegsMode save_fp,
379 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, 385 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET,
380 SmiCheck smi_check = INLINE_SMI_CHECK) { 386 SmiCheck smi_check = INLINE_SMI_CHECK,
387 PointersToHereCheck pointers_to_here_check_for_value =
388 kPointersToHereMaybeInteresting) {
381 RecordWriteField(context, 389 RecordWriteField(context,
382 offset + kHeapObjectTag, 390 offset + kHeapObjectTag,
383 value, 391 value,
384 scratch, 392 scratch,
385 ra_status, 393 ra_status,
386 save_fp, 394 save_fp,
387 remembered_set_action, 395 remembered_set_action,
388 smi_check); 396 smi_check,
397 pointers_to_here_check_for_value);
389 } 398 }
390 399
400 void RecordWriteForMap(
401 Register object,
402 Register map,
403 Register dst,
404 RAStatus ra_status,
405 SaveFPRegsMode save_fp);
406
391 // For a given |object| notify the garbage collector that the slot |address| 407 // For a given |object| notify the garbage collector that the slot |address|
392 // has been written. |value| is the object being stored. The value and 408 // has been written. |value| is the object being stored. The value and
393 // address registers are clobbered by the operation. 409 // address registers are clobbered by the operation.
394 void RecordWrite( 410 void RecordWrite(
395 Register object, 411 Register object,
396 Register address, 412 Register address,
397 Register value, 413 Register value,
398 RAStatus ra_status, 414 RAStatus ra_status,
399 SaveFPRegsMode save_fp, 415 SaveFPRegsMode save_fp,
400 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET, 416 RememberedSetAction remembered_set_action = EMIT_REMEMBERED_SET,
401 SmiCheck smi_check = INLINE_SMI_CHECK); 417 SmiCheck smi_check = INLINE_SMI_CHECK,
418 PointersToHereCheck pointers_to_here_check_for_value =
419 kPointersToHereMaybeInteresting);
402 420
403 421
404 // --------------------------------------------------------------------------- 422 // ---------------------------------------------------------------------------
405 // Inline caching support. 423 // Inline caching support.
406 424
407 // Generate code for checking access rights - used for security checks 425 // Generate code for checking access rights - used for security checks
408 // on access to global objects across environments. The holder register 426 // on access to global objects across environments. The holder register
409 // is left untouched, whereas both scratch registers are clobbered. 427 // is left untouched, whereas both scratch registers are clobbered.
410 void CheckAccessGlobalProxy(Register holder_reg, 428 void CheckAccessGlobalProxy(Register holder_reg,
411 Register scratch, 429 Register scratch,
(...skipping 1258 matching lines...) Expand 10 before | Expand all | Expand 10 after
1670 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) 1688 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
1671 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) 1689 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
1672 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> 1690 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm->
1673 #else 1691 #else
1674 #define ACCESS_MASM(masm) masm-> 1692 #define ACCESS_MASM(masm) masm->
1675 #endif 1693 #endif
1676 1694
1677 } } // namespace v8::internal 1695 } } // namespace v8::internal
1678 1696
1679 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_ 1697 #endif // V8_MIPS_MACRO_ASSEMBLER_MIPS_H_
OLDNEW
« no previous file with comments | « src/mips/lithium-codegen-mips.cc ('k') | src/mips/macro-assembler-mips.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698