| Index: src/x64/assembler-x64-inl.h
|
| ===================================================================
|
| --- src/x64/assembler-x64-inl.h (revision 6800)
|
| +++ src/x64/assembler-x64-inl.h (working copy)
|
| @@ -199,8 +199,10 @@
|
| if (IsInternalReference(rmode_)) {
|
| // absolute code pointer inside code object moves with the code object.
|
| Memory::Address_at(pc_) += static_cast<int32_t>(delta);
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| } else if (IsCodeTarget(rmode_)) {
|
| Memory::int32_at(pc_) -= static_cast<int32_t>(delta);
|
| + CPU::FlushICache(pc_, sizeof(int32_t));
|
| }
|
| }
|
|
|
| @@ -236,6 +238,7 @@
|
| Assembler::set_target_address_at(pc_, target);
|
| } else {
|
| Memory::Address_at(pc_) = target;
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| }
|
| }
|
|
|
| @@ -271,6 +274,7 @@
|
| void RelocInfo::set_target_object(Object* target) {
|
| ASSERT(IsCodeTarget(rmode_) || rmode_ == EMBEDDED_OBJECT);
|
| *reinterpret_cast<Object**>(pc_) = target;
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| }
|
|
|
|
|
| @@ -295,6 +299,7 @@
|
| ASSERT(rmode_ == RelocInfo::GLOBAL_PROPERTY_CELL);
|
| Address address = cell->address() + JSGlobalPropertyCell::kValueOffset;
|
| Memory::Address_at(pc_) = address;
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| }
|
|
|
|
|
| @@ -331,6 +336,8 @@
|
| (IsDebugBreakSlot(rmode()) && IsPatchedDebugBreakSlotSequence()));
|
| Memory::Address_at(pc_ + Assembler::kRealPatchReturnSequenceAddressOffset) =
|
| target;
|
| + CPU::FlushICache(pc_ + Assembler::kRealPatchReturnSequenceAddressOffset,
|
| + sizeof(Address));
|
| }
|
|
|
|
|
| @@ -356,10 +363,14 @@
|
| RelocInfo::Mode mode = rmode();
|
| if (mode == RelocInfo::EMBEDDED_OBJECT) {
|
| visitor->VisitPointer(target_object_address());
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| } else if (RelocInfo::IsCodeTarget(mode)) {
|
| visitor->VisitCodeTarget(this);
|
| + } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
|
| + visitor->VisitGlobalPropertyCell(this);
|
| } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
|
| visitor->VisitExternalReference(target_reference_address());
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| #ifdef ENABLE_DEBUGGER_SUPPORT
|
| } else if (Debug::has_break_points() &&
|
| ((RelocInfo::IsJSReturn(mode) &&
|
| @@ -379,10 +390,14 @@
|
| RelocInfo::Mode mode = rmode();
|
| if (mode == RelocInfo::EMBEDDED_OBJECT) {
|
| StaticVisitor::VisitPointer(target_object_address());
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| } else if (RelocInfo::IsCodeTarget(mode)) {
|
| StaticVisitor::VisitCodeTarget(this);
|
| + } else if (mode == RelocInfo::GLOBAL_PROPERTY_CELL) {
|
| + StaticVisitor::VisitGlobalPropertyCell(this);
|
| } else if (mode == RelocInfo::EXTERNAL_REFERENCE) {
|
| StaticVisitor::VisitExternalReference(target_reference_address());
|
| + CPU::FlushICache(pc_, sizeof(Address));
|
| #ifdef ENABLE_DEBUGGER_SUPPORT
|
| } else if (Debug::has_break_points() &&
|
| ((RelocInfo::IsJSReturn(mode) &&
|
| @@ -414,7 +429,7 @@
|
| // Use SIB with no index register only for base rsp or r12. Otherwise we
|
| // would skip the SIB byte entirely.
|
| ASSERT(!index.is(rsp) || base.is(rsp) || base.is(r12));
|
| - buf_[1] = scale << 6 | index.low_bits() << 3 | base.low_bits();
|
| + buf_[1] = (scale << 6) | (index.low_bits() << 3) | base.low_bits();
|
| rex_ |= index.high_bit() << 1 | base.high_bit();
|
| len_ = 2;
|
| }
|
|
|