| 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;
|
|
|