Index: src/assembler.h |
diff --git a/src/assembler.h b/src/assembler.h |
index cd5867689efe0efde0ced8c0998964465f6f5cf8..27aab0eec6eae8c0c2122a1beaf5fcc389fa40e5 100644 |
--- a/src/assembler.h |
+++ b/src/assembler.h |
@@ -40,6 +40,7 @@ |
#include "src/deoptimize-reason.h" |
#include "src/globals.h" |
#include "src/isolate.h" |
+#include "src/label.h" |
#include "src/log.h" |
#include "src/register-configuration.h" |
#include "src/runtime/runtime.h" |
@@ -272,79 +273,6 @@ class CpuFeatures : public AllStatic { |
}; |
-// ----------------------------------------------------------------------------- |
-// Labels represent pc locations; they are typically jump or call targets. |
-// After declaration, a label can be freely used to denote known or (yet) |
-// unknown pc location. Assembler::bind() is used to bind a label to the |
-// current pc. A label can be bound only once. |
- |
-class Label { |
- public: |
- enum Distance { |
- kNear, kFar |
- }; |
- |
- INLINE(Label()) { |
- Unuse(); |
- UnuseNear(); |
- } |
- |
- INLINE(~Label()) { |
- DCHECK(!is_linked()); |
- DCHECK(!is_near_linked()); |
- } |
- |
- INLINE(void Unuse()) { pos_ = 0; } |
- INLINE(void UnuseNear()) { near_link_pos_ = 0; } |
- |
- INLINE(bool is_bound() const) { return pos_ < 0; } |
- INLINE(bool is_unused() const) { return pos_ == 0 && near_link_pos_ == 0; } |
- INLINE(bool is_linked() const) { return pos_ > 0; } |
- INLINE(bool is_near_linked() const) { return near_link_pos_ > 0; } |
- |
- // Returns the position of bound or linked labels. Cannot be used |
- // for unused labels. |
- int pos() const; |
- int near_link_pos() const { return near_link_pos_ - 1; } |
- |
- private: |
- // pos_ encodes both the binding state (via its sign) |
- // and the binding position (via its value) of a label. |
- // |
- // pos_ < 0 bound label, pos() returns the jump target position |
- // pos_ == 0 unused label |
- // pos_ > 0 linked label, pos() returns the last reference position |
- int pos_; |
- |
- // Behaves like |pos_| in the "> 0" case, but for near jumps to this label. |
- int near_link_pos_; |
- |
- void bind_to(int pos) { |
- pos_ = -pos - 1; |
- DCHECK(is_bound()); |
- } |
- void link_to(int pos, Distance distance = kFar) { |
- if (distance == kNear) { |
- near_link_pos_ = pos + 1; |
- DCHECK(is_near_linked()); |
- } else { |
- pos_ = pos + 1; |
- DCHECK(is_linked()); |
- } |
- } |
- |
- friend class Assembler; |
- friend class Displacement; |
- friend class RegExpMacroAssemblerIrregexp; |
- |
-#if V8_TARGET_ARCH_ARM64 |
- // On ARM64, the Assembler keeps track of pointers to Labels to resolve |
- // branches to distant targets. Copying labels would confuse the Assembler. |
- DISALLOW_COPY_AND_ASSIGN(Label); // NOLINT |
-#endif |
-}; |
- |
- |
enum SaveFPRegsMode { kDontSaveFPRegs, kSaveFPRegs }; |
enum ArgvMode { kArgvOnStack, kArgvInRegister }; |