Index: runtime/vm/instructions_x64.cc |
diff --git a/runtime/vm/instructions_x64.cc b/runtime/vm/instructions_x64.cc |
index dc691a4359893994a939ae6409da42a088e6ffc4..83f427dbb5500c8eafc9d6ed699503c06bf79812 100644 |
--- a/runtime/vm/instructions_x64.cc |
+++ b/runtime/vm/instructions_x64.cc |
@@ -11,6 +11,27 @@ |
namespace dart { |
+intptr_t IndexFromPPLoad(uword start) { |
+ int32_t offset = *reinterpret_cast<int32_t*>(start); |
+ return ObjectPool::IndexFromOffset(offset); |
+} |
+ |
+ |
+uword JumpPattern::TargetAddress() const { |
+ ASSERT(IsValid()); |
+ int index = IndexFromPPLoad(start() + 3); |
+ return object_pool_.RawValueAt(index); |
+} |
+ |
+ |
+void JumpPattern::SetTargetAddress(uword target) const { |
+ ASSERT(IsValid()); |
+ int index = IndexFromPPLoad(start() + 3); |
+ object_pool_.SetRawValueAt(index, target); |
+ // No need to flush the instruction cache, since the code is not modified. |
+} |
+ |
+ |
void ShortCallPattern::SetTargetAddress(uword target) const { |
ASSERT(IsValid()); |
*reinterpret_cast<uint32_t*>(start() + 1) = target - start() - kLengthInBytes; |