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 |