| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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 #if V8_TARGET_ARCH_ARM64 | 5 #if V8_TARGET_ARCH_ARM64 |
| 6 | 6 |
| 7 #include "src/code-stubs.h" | 7 #include "src/code-stubs.h" |
| 8 #include "src/api-arguments.h" | 8 #include "src/api-arguments.h" |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
| (...skipping 3137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3148 | 3148 |
| 3149 | 3149 |
| 3150 void RecordWriteStub::CheckNeedsToInformIncrementalMarker( | 3150 void RecordWriteStub::CheckNeedsToInformIncrementalMarker( |
| 3151 MacroAssembler* masm, | 3151 MacroAssembler* masm, |
| 3152 OnNoNeedToInformIncrementalMarker on_no_need, | 3152 OnNoNeedToInformIncrementalMarker on_no_need, |
| 3153 Mode mode) { | 3153 Mode mode) { |
| 3154 Label on_black; | 3154 Label on_black; |
| 3155 Label need_incremental; | 3155 Label need_incremental; |
| 3156 Label need_incremental_pop_scratch; | 3156 Label need_incremental_pop_scratch; |
| 3157 | 3157 |
| 3158 Register mem_chunk = regs_.scratch0(); | |
| 3159 Register counter = regs_.scratch1(); | |
| 3160 __ Bic(mem_chunk, regs_.object(), Page::kPageAlignmentMask); | |
| 3161 __ Ldr(counter, | |
| 3162 MemOperand(mem_chunk, MemoryChunk::kWriteBarrierCounterOffset)); | |
| 3163 __ Subs(counter, counter, 1); | |
| 3164 __ Str(counter, | |
| 3165 MemOperand(mem_chunk, MemoryChunk::kWriteBarrierCounterOffset)); | |
| 3166 __ B(mi, &need_incremental); | |
| 3167 | |
| 3168 // If the object is not black we don't have to inform the incremental marker. | 3158 // If the object is not black we don't have to inform the incremental marker. |
| 3169 __ JumpIfBlack(regs_.object(), regs_.scratch0(), regs_.scratch1(), &on_black); | 3159 __ JumpIfBlack(regs_.object(), regs_.scratch0(), regs_.scratch1(), &on_black); |
| 3170 | 3160 |
| 3171 regs_.Restore(masm); // Restore the extra scratch registers we used. | 3161 regs_.Restore(masm); // Restore the extra scratch registers we used. |
| 3172 if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { | 3162 if (on_no_need == kUpdateRememberedSetOnNoNeedToInformIncrementalMarker) { |
| 3173 __ RememberedSetHelper(object(), address(), | 3163 __ RememberedSetHelper(object(), address(), |
| 3174 value(), // scratch1 | 3164 value(), // scratch1 |
| 3175 save_fp_regs_mode(), MacroAssembler::kReturnAtEnd); | 3165 save_fp_regs_mode(), MacroAssembler::kReturnAtEnd); |
| 3176 } else { | 3166 } else { |
| 3177 __ Ret(); | 3167 __ Ret(); |
| (...skipping 2357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5535 kStackUnwindSpace, NULL, spill_offset, | 5525 kStackUnwindSpace, NULL, spill_offset, |
| 5536 return_value_operand, NULL); | 5526 return_value_operand, NULL); |
| 5537 } | 5527 } |
| 5538 | 5528 |
| 5539 #undef __ | 5529 #undef __ |
| 5540 | 5530 |
| 5541 } // namespace internal | 5531 } // namespace internal |
| 5542 } // namespace v8 | 5532 } // namespace v8 |
| 5543 | 5533 |
| 5544 #endif // V8_TARGET_ARCH_ARM64 | 5534 #endif // V8_TARGET_ARCH_ARM64 |
| OLD | NEW |