Index: runtime/vm/code_patcher_arm64.cc |
diff --git a/runtime/vm/code_patcher_arm64.cc b/runtime/vm/code_patcher_arm64.cc |
index 3aa2982682956e3ab2ba4f47bd861570482a5a5c..4e0bbee3319ec94c4adca0bb221ca63c0e1a9158 100644 |
--- a/runtime/vm/code_patcher_arm64.cc |
+++ b/runtime/vm/code_patcher_arm64.cc |
@@ -129,48 +129,6 @@ RawCode* CodePatcher::GetNativeCallAt(uword return_address, |
return call.target(); |
} |
- |
-// This class pattern matches on a load from the object pool. Loading on |
-// ARM64 is complicated because it can take more than one form. We |
-// match backwards from the end of the sequence so we can reuse the code for |
-// matching object pool loads at calls. |
-class EdgeCounter : public ValueObject { |
- public: |
- EdgeCounter(uword pc, const Code& code) |
- : end_(pc - kAdjust), |
- object_pool_(ObjectPool::Handle(code.GetObjectPool())) { |
- // An IsValid predicate is complicated and duplicates the code in the |
- // decoding function. Instead we rely on decoding the pattern which |
- // will assert partial validity. |
- } |
- |
- RawObject* edge_counter() const { |
- Register ignored; |
- intptr_t index; |
- InstructionPattern::DecodeLoadWordFromPool(end_, &ignored, &index); |
- ASSERT(ignored == R0); |
- return object_pool_.ObjectAt(index); |
- } |
- |
- private: |
- // The object pool load is followed by the fixed-size edge counter |
- // incrementing code: |
- // ldr ip, [r0, #+11] |
- // adds ip, ip, #2 |
- // str ip, [r0, #+11] |
- static const intptr_t kAdjust = 3 * Instr::kInstrSize; |
- |
- uword end_; |
- const ObjectPool& object_pool_; |
-}; |
- |
- |
-RawObject* CodePatcher::GetEdgeCounterAt(uword pc, const Code& code) { |
- ASSERT(code.ContainsInstructionAt(pc)); |
- EdgeCounter counter(pc, code); |
- return counter.edge_counter(); |
-} |
- |
} // namespace dart |
#endif // defined TARGET_ARCH_ARM64 |