libraries/v8/mips/macro-assembler-mips.cc
// Will clobber 4 registers: object, address, scratch, ip.  The
// register 'object' contains a heap object pointer.  The heap object
// tag is shifted away.
Will clobber 4 registers: object, address, scratch, ip.  The
register 'object' contains a heap object pointer.  The heap object
tag is shifted away.
Will clobber 4 registers : object address scratch ip . The register ' object ' contains a heap object pointer . The heap object tag is shifted away .
void MacroAssembler::RecordWrite(Register object,
                                 Register address,
                                 Register value,
                                 RAStatus ra_status,
                                 SaveFPRegsMode fp_mode,
                                 RememberedSetAction remembered_set_action,
                                 SmiCheck smi_check) {
  ASSERT(!AreAliased(object, address, value, t8));
  ASSERT(!AreAliased(object, address, value, t9));
  if (emit_debug_code()) {
    lw(at, MemOperand(address));
    Assert(
        eq, kWrongAddressOrValuePassedToRecordWrite, at, Operand(value));
  }
  Label done;
  if (smi_check == INLINE_SMI_CHECK) {
    ASSERT_EQ(0, kSmiTag);
    JumpIfSmi(value, &done);
  }
  CheckPageFlag(value,
                value,  
                MemoryChunk::kPointersToHereAreInterestingMask,
                eq,
                &done);
  CheckPageFlag(object,
                value,  
                MemoryChunk::kPointersFromHereAreInterestingMask,
                eq,
                &done);
  if (ra_status == kRAHasNotBeenSaved) {
    push(ra);
  }
  RecordWriteStub stub(object, value, address, remembered_set_action, fp_mode);
  CallStub(&stub);
  if (ra_status == kRAHasNotBeenSaved) {
    pop(ra);
  }
  bind(&done);
  if (emit_debug_code()) {
    li(address, Operand(BitCast<int32_t>(kZapValue + 12)));
    li(value, Operand(BitCast<int32_t>(kZapValue + 16)));
  }
}
void MacroAssembler :: RecordWrite ( Register object , Register address , Register value , RAStatus ra_status , SaveFPRegsMode fp_mode , RememberedSetAction remembered_set_action , SmiCheck smi_check ) { ASSERT ( ! AreAliased ( object , address , value , t8 ) ) ; ASSERT ( ! AreAliased ( object , address , value , t9 ) ) ; if ( emit_debug_code ( ) ) { lw ( at , MemOperand ( address ) ) ; Assert ( eq , kWrongAddressOrValuePassedToRecordWrite , at , Operand ( value ) ) ; } Label done ; if ( smi_check == INLINE_SMI_CHECK ) { ASSERT_EQ ( 0 , kSmiTag ) ; JumpIfSmi ( value , & done ) ; } CheckPageFlag ( value , value , MemoryChunk :: kPointersToHereAreInterestingMask , eq , & done ) ; CheckPageFlag ( object , value , MemoryChunk :: kPointersFromHereAreInterestingMask , eq , & done ) ; if ( ra_status == kRAHasNotBeenSaved ) { push ( ra ) ; } RecordWriteStub stub ( object , value , address , remembered_set_action , fp_mode ) ; CallStub ( & stub ) ; if ( ra_status == kRAHasNotBeenSaved ) { pop ( ra ) ; } bind ( & done ) ; if ( emit_debug_code ( ) ) { li ( address , Operand ( BitCast < int32_t > ( kZapValue + 12 ) ) ) ; li ( value , Operand ( BitCast < int32_t > ( kZapValue + 16 ) ) ) ; } }
Will clobber 4 registers: object, address, scratch, ip.
Will clobber 4 registers : object address scratch ip .
// Used as scratch. // Used as scratch. // Record the actual write. // Clobber clobbered registers when running with the debug-code flag // turned on to provoke errors.