| 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 #include <limits.h> // For LONG_MIN, LONG_MAX. | 5 #include <limits.h> // For LONG_MIN, LONG_MAX. |
| 6 | 6 |
| 7 #include "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #if V8_TARGET_ARCH_MIPS | 9 #if V8_TARGET_ARCH_MIPS |
| 10 | 10 |
| (...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 226 Check(eq, | 226 Check(eq, |
| 227 kWrongAddressOrValuePassedToRecordWrite, | 227 kWrongAddressOrValuePassedToRecordWrite, |
| 228 dst, | 228 dst, |
| 229 Operand(isolate()->factory()->meta_map())); | 229 Operand(isolate()->factory()->meta_map())); |
| 230 } | 230 } |
| 231 | 231 |
| 232 if (!FLAG_incremental_marking) { | 232 if (!FLAG_incremental_marking) { |
| 233 return; | 233 return; |
| 234 } | 234 } |
| 235 | 235 |
| 236 // Count number of write barriers in generated code. | |
| 237 isolate()->counters()->write_barriers_static()->Increment(); | |
| 238 // TODO(mstarzinger): Dynamic counter missing. | |
| 239 | |
| 240 if (emit_debug_code()) { | 236 if (emit_debug_code()) { |
| 241 lw(at, FieldMemOperand(object, HeapObject::kMapOffset)); | 237 lw(at, FieldMemOperand(object, HeapObject::kMapOffset)); |
| 242 Check(eq, | 238 Check(eq, |
| 243 kWrongAddressOrValuePassedToRecordWrite, | 239 kWrongAddressOrValuePassedToRecordWrite, |
| 244 map, | 240 map, |
| 245 Operand(at)); | 241 Operand(at)); |
| 246 } | 242 } |
| 247 | 243 |
| 248 Label done; | 244 Label done; |
| 249 | 245 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 272 } | 268 } |
| 273 RecordWriteStub stub(isolate(), object, map, dst, OMIT_REMEMBERED_SET, | 269 RecordWriteStub stub(isolate(), object, map, dst, OMIT_REMEMBERED_SET, |
| 274 fp_mode); | 270 fp_mode); |
| 275 CallStub(&stub); | 271 CallStub(&stub); |
| 276 if (ra_status == kRAHasNotBeenSaved) { | 272 if (ra_status == kRAHasNotBeenSaved) { |
| 277 pop(ra); | 273 pop(ra); |
| 278 } | 274 } |
| 279 | 275 |
| 280 bind(&done); | 276 bind(&done); |
| 281 | 277 |
| 278 // Count number of write barriers in generated code. |
| 279 isolate()->counters()->write_barriers_static()->Increment(); |
| 280 IncrementCounter(isolate()->counters()->write_barriers_dynamic(), 1, at, dst); |
| 281 |
| 282 // Clobber clobbered registers when running with the debug-code flag | 282 // Clobber clobbered registers when running with the debug-code flag |
| 283 // turned on to provoke errors. | 283 // turned on to provoke errors. |
| 284 if (emit_debug_code()) { | 284 if (emit_debug_code()) { |
| 285 li(dst, Operand(BitCast<int32_t>(kZapValue + 12))); | 285 li(dst, Operand(BitCast<int32_t>(kZapValue + 12))); |
| 286 li(map, Operand(BitCast<int32_t>(kZapValue + 16))); | 286 li(map, Operand(BitCast<int32_t>(kZapValue + 16))); |
| 287 } | 287 } |
| 288 } | 288 } |
| 289 | 289 |
| 290 | 290 |
| 291 // Will clobber 4 registers: object, address, scratch, ip. The | 291 // Will clobber 4 registers: object, address, scratch, ip. The |
| (...skipping 15 matching lines...) Expand all Loading... |
| 307 lw(at, MemOperand(address)); | 307 lw(at, MemOperand(address)); |
| 308 Assert( | 308 Assert( |
| 309 eq, kWrongAddressOrValuePassedToRecordWrite, at, Operand(value)); | 309 eq, kWrongAddressOrValuePassedToRecordWrite, at, Operand(value)); |
| 310 } | 310 } |
| 311 | 311 |
| 312 if (remembered_set_action == OMIT_REMEMBERED_SET && | 312 if (remembered_set_action == OMIT_REMEMBERED_SET && |
| 313 !FLAG_incremental_marking) { | 313 !FLAG_incremental_marking) { |
| 314 return; | 314 return; |
| 315 } | 315 } |
| 316 | 316 |
| 317 // Count number of write barriers in generated code. | |
| 318 isolate()->counters()->write_barriers_static()->Increment(); | |
| 319 // TODO(mstarzinger): Dynamic counter missing. | |
| 320 | |
| 321 // First, check if a write barrier is even needed. The tests below | 317 // First, check if a write barrier is even needed. The tests below |
| 322 // catch stores of smis and stores into the young generation. | 318 // catch stores of smis and stores into the young generation. |
| 323 Label done; | 319 Label done; |
| 324 | 320 |
| 325 if (smi_check == INLINE_SMI_CHECK) { | 321 if (smi_check == INLINE_SMI_CHECK) { |
| 326 ASSERT_EQ(0, kSmiTag); | 322 ASSERT_EQ(0, kSmiTag); |
| 327 JumpIfSmi(value, &done); | 323 JumpIfSmi(value, &done); |
| 328 } | 324 } |
| 329 | 325 |
| 330 if (pointers_to_here_check_for_value != kPointersToHereAreAlwaysInteresting) { | 326 if (pointers_to_here_check_for_value != kPointersToHereAreAlwaysInteresting) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 346 } | 342 } |
| 347 RecordWriteStub stub(isolate(), object, value, address, remembered_set_action, | 343 RecordWriteStub stub(isolate(), object, value, address, remembered_set_action, |
| 348 fp_mode); | 344 fp_mode); |
| 349 CallStub(&stub); | 345 CallStub(&stub); |
| 350 if (ra_status == kRAHasNotBeenSaved) { | 346 if (ra_status == kRAHasNotBeenSaved) { |
| 351 pop(ra); | 347 pop(ra); |
| 352 } | 348 } |
| 353 | 349 |
| 354 bind(&done); | 350 bind(&done); |
| 355 | 351 |
| 352 // Count number of write barriers in generated code. |
| 353 isolate()->counters()->write_barriers_static()->Increment(); |
| 354 IncrementCounter(isolate()->counters()->write_barriers_dynamic(), 1, at, |
| 355 value); |
| 356 |
| 356 // Clobber clobbered registers when running with the debug-code flag | 357 // Clobber clobbered registers when running with the debug-code flag |
| 357 // turned on to provoke errors. | 358 // turned on to provoke errors. |
| 358 if (emit_debug_code()) { | 359 if (emit_debug_code()) { |
| 359 li(address, Operand(BitCast<int32_t>(kZapValue + 12))); | 360 li(address, Operand(BitCast<int32_t>(kZapValue + 12))); |
| 360 li(value, Operand(BitCast<int32_t>(kZapValue + 16))); | 361 li(value, Operand(BitCast<int32_t>(kZapValue + 16))); |
| 361 } | 362 } |
| 362 } | 363 } |
| 363 | 364 |
| 364 | 365 |
| 365 void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. | 366 void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. |
| (...skipping 5388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5754 } | 5755 } |
| 5755 if (ms.shift() > 0) sra(result, result, ms.shift()); | 5756 if (ms.shift() > 0) sra(result, result, ms.shift()); |
| 5756 srl(at, dividend, 31); | 5757 srl(at, dividend, 31); |
| 5757 Addu(result, result, Operand(at)); | 5758 Addu(result, result, Operand(at)); |
| 5758 } | 5759 } |
| 5759 | 5760 |
| 5760 | 5761 |
| 5761 } } // namespace v8::internal | 5762 } } // namespace v8::internal |
| 5762 | 5763 |
| 5763 #endif // V8_TARGET_ARCH_MIPS | 5764 #endif // V8_TARGET_ARCH_MIPS |
| OLD | NEW |