Index: runtime/vm/code_patcher_arm.cc |
diff --git a/runtime/vm/code_patcher_arm.cc b/runtime/vm/code_patcher_arm.cc |
index 6c31af98759db3fa2e429107940c677bce08fac3..a9d5a102280785ae99517e45a88464475441b61a 100644 |
--- a/runtime/vm/code_patcher_arm.cc |
+++ b/runtime/vm/code_patcher_arm.cc |
@@ -89,48 +89,6 @@ RawCode* CodePatcher::GetNativeCallAt(uword return_address, |
return call.target(); |
} |
- |
-// This class pattern matches on a load from the object pool. Loading on |
-// ARM is complicated because it can take four possible different forms. 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 - FlowGraphCompiler::EdgeCounterIncrementSizeInBytes()), |
- 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_ARM |