| 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_MIPS64 | 9 #if V8_TARGET_ARCH_MIPS64 |
| 10 | 10 |
| (...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 Check(eq, | 230 Check(eq, |
| 231 kWrongAddressOrValuePassedToRecordWrite, | 231 kWrongAddressOrValuePassedToRecordWrite, |
| 232 dst, | 232 dst, |
| 233 Operand(isolate()->factory()->meta_map())); | 233 Operand(isolate()->factory()->meta_map())); |
| 234 } | 234 } |
| 235 | 235 |
| 236 if (!FLAG_incremental_marking) { | 236 if (!FLAG_incremental_marking) { |
| 237 return; | 237 return; |
| 238 } | 238 } |
| 239 | 239 |
| 240 // Count number of write barriers in generated code. | |
| 241 isolate()->counters()->write_barriers_static()->Increment(); | |
| 242 // TODO(mstarzinger): Dynamic counter missing. | |
| 243 | |
| 244 if (emit_debug_code()) { | 240 if (emit_debug_code()) { |
| 245 ld(at, FieldMemOperand(object, HeapObject::kMapOffset)); | 241 ld(at, FieldMemOperand(object, HeapObject::kMapOffset)); |
| 246 Check(eq, | 242 Check(eq, |
| 247 kWrongAddressOrValuePassedToRecordWrite, | 243 kWrongAddressOrValuePassedToRecordWrite, |
| 248 map, | 244 map, |
| 249 Operand(at)); | 245 Operand(at)); |
| 250 } | 246 } |
| 251 | 247 |
| 252 Label done; | 248 Label done; |
| 253 | 249 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 276 } | 272 } |
| 277 RecordWriteStub stub(isolate(), object, map, dst, OMIT_REMEMBERED_SET, | 273 RecordWriteStub stub(isolate(), object, map, dst, OMIT_REMEMBERED_SET, |
| 278 fp_mode); | 274 fp_mode); |
| 279 CallStub(&stub); | 275 CallStub(&stub); |
| 280 if (ra_status == kRAHasNotBeenSaved) { | 276 if (ra_status == kRAHasNotBeenSaved) { |
| 281 pop(ra); | 277 pop(ra); |
| 282 } | 278 } |
| 283 | 279 |
| 284 bind(&done); | 280 bind(&done); |
| 285 | 281 |
| 282 // Count number of write barriers in generated code. |
| 283 isolate()->counters()->write_barriers_static()->Increment(); |
| 284 IncrementCounter(isolate()->counters()->write_barriers_dynamic(), 1, at, dst); |
| 285 |
| 286 // Clobber clobbered registers when running with the debug-code flag | 286 // Clobber clobbered registers when running with the debug-code flag |
| 287 // turned on to provoke errors. | 287 // turned on to provoke errors. |
| 288 if (emit_debug_code()) { | 288 if (emit_debug_code()) { |
| 289 li(dst, Operand(BitCast<int64_t>(kZapValue + 12))); | 289 li(dst, Operand(BitCast<int64_t>(kZapValue + 12))); |
| 290 li(map, Operand(BitCast<int64_t>(kZapValue + 16))); | 290 li(map, Operand(BitCast<int64_t>(kZapValue + 16))); |
| 291 } | 291 } |
| 292 } | 292 } |
| 293 | 293 |
| 294 | 294 |
| 295 // Will clobber 4 registers: object, address, scratch, ip. The | 295 // Will clobber 4 registers: object, address, scratch, ip. The |
| (...skipping 15 matching lines...) Expand all Loading... |
| 311 ld(at, MemOperand(address)); | 311 ld(at, MemOperand(address)); |
| 312 Assert( | 312 Assert( |
| 313 eq, kWrongAddressOrValuePassedToRecordWrite, at, Operand(value)); | 313 eq, kWrongAddressOrValuePassedToRecordWrite, at, Operand(value)); |
| 314 } | 314 } |
| 315 | 315 |
| 316 if (remembered_set_action == OMIT_REMEMBERED_SET && | 316 if (remembered_set_action == OMIT_REMEMBERED_SET && |
| 317 !FLAG_incremental_marking) { | 317 !FLAG_incremental_marking) { |
| 318 return; | 318 return; |
| 319 } | 319 } |
| 320 | 320 |
| 321 // Count number of write barriers in generated code. | |
| 322 isolate()->counters()->write_barriers_static()->Increment(); | |
| 323 // TODO(mstarzinger): Dynamic counter missing. | |
| 324 | |
| 325 // First, check if a write barrier is even needed. The tests below | 321 // First, check if a write barrier is even needed. The tests below |
| 326 // catch stores of smis and stores into the young generation. | 322 // catch stores of smis and stores into the young generation. |
| 327 Label done; | 323 Label done; |
| 328 | 324 |
| 329 if (smi_check == INLINE_SMI_CHECK) { | 325 if (smi_check == INLINE_SMI_CHECK) { |
| 330 ASSERT_EQ(0, kSmiTag); | 326 ASSERT_EQ(0, kSmiTag); |
| 331 JumpIfSmi(value, &done); | 327 JumpIfSmi(value, &done); |
| 332 } | 328 } |
| 333 | 329 |
| 334 if (pointers_to_here_check_for_value != kPointersToHereAreAlwaysInteresting) { | 330 if (pointers_to_here_check_for_value != kPointersToHereAreAlwaysInteresting) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 350 } | 346 } |
| 351 RecordWriteStub stub(isolate(), object, value, address, remembered_set_action, | 347 RecordWriteStub stub(isolate(), object, value, address, remembered_set_action, |
| 352 fp_mode); | 348 fp_mode); |
| 353 CallStub(&stub); | 349 CallStub(&stub); |
| 354 if (ra_status == kRAHasNotBeenSaved) { | 350 if (ra_status == kRAHasNotBeenSaved) { |
| 355 pop(ra); | 351 pop(ra); |
| 356 } | 352 } |
| 357 | 353 |
| 358 bind(&done); | 354 bind(&done); |
| 359 | 355 |
| 356 // Count number of write barriers in generated code. |
| 357 isolate()->counters()->write_barriers_static()->Increment(); |
| 358 IncrementCounter(isolate()->counters()->write_barriers_dynamic(), 1, at, |
| 359 value); |
| 360 |
| 360 // Clobber clobbered registers when running with the debug-code flag | 361 // Clobber clobbered registers when running with the debug-code flag |
| 361 // turned on to provoke errors. | 362 // turned on to provoke errors. |
| 362 if (emit_debug_code()) { | 363 if (emit_debug_code()) { |
| 363 li(address, Operand(BitCast<int64_t>(kZapValue + 12))); | 364 li(address, Operand(BitCast<int64_t>(kZapValue + 12))); |
| 364 li(value, Operand(BitCast<int64_t>(kZapValue + 16))); | 365 li(value, Operand(BitCast<int64_t>(kZapValue + 16))); |
| 365 } | 366 } |
| 366 } | 367 } |
| 367 | 368 |
| 368 | 369 |
| 369 void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. | 370 void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. |
| (...skipping 5572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5942 } | 5943 } |
| 5943 if (ms.shift() > 0) sra(result, result, ms.shift()); | 5944 if (ms.shift() > 0) sra(result, result, ms.shift()); |
| 5944 srl(at, dividend, 31); | 5945 srl(at, dividend, 31); |
| 5945 Addu(result, result, Operand(at)); | 5946 Addu(result, result, Operand(at)); |
| 5946 } | 5947 } |
| 5947 | 5948 |
| 5948 | 5949 |
| 5949 } } // namespace v8::internal | 5950 } } // namespace v8::internal |
| 5950 | 5951 |
| 5951 #endif // V8_TARGET_ARCH_MIPS64 | 5952 #endif // V8_TARGET_ARCH_MIPS64 |
| OLD | NEW |