diff options
| author | 2015-09-17 21:43:46 +0000 | |
|---|---|---|
| committer | 2015-09-17 21:43:46 +0000 | |
| commit | 2c2cbfd34839e61ccecabab5b7e882f891d26be0 (patch) | |
| tree | 010a860a46e09a20b0664d3267cccb7f46ef3324 /compiler/utils/assembler.h | |
| parent | 188b1f546cebbf7407e671ab07ecd2b5265ff15b (diff) | |
| parent | 85b62f23fc6dfffe2ddd3ddfa74611666c9ff41d (diff) | |
Merge "ART: Refactor intrinsics slow-paths"
Diffstat (limited to 'compiler/utils/assembler.h')
| -rw-r--r-- | compiler/utils/assembler.h | 104 | 
1 files changed, 4 insertions, 100 deletions
| diff --git a/compiler/utils/assembler.h b/compiler/utils/assembler.h index 64d76b881d..1088cb1bbd 100644 --- a/compiler/utils/assembler.h +++ b/compiler/utils/assembler.h @@ -23,6 +23,7 @@  #include "base/logging.h"  #include "base/macros.h"  #include "arm/constants_arm.h" +#include "label.h"  #include "managed_register.h"  #include "memory_region.h"  #include "mips/constants_mips.h" @@ -35,106 +36,6 @@ namespace art {  class Assembler;  class AssemblerBuffer; -class AssemblerFixup; - -namespace arm { -  class ArmAssembler; -  class Arm32Assembler; -  class Thumb2Assembler; -} -namespace arm64 { -  class Arm64Assembler; -} -namespace mips { -  class MipsAssembler; -} -namespace mips64 { -  class Mips64Assembler; -} -namespace x86 { -  class X86Assembler; -  class NearLabel; -} -namespace x86_64 { -  class X86_64Assembler; -  class NearLabel; -} - -class ExternalLabel { - public: -  ExternalLabel(const char* name_in, uintptr_t address_in) -      : name_(name_in), address_(address_in) { -    DCHECK(name_in != nullptr); -  } - -  const char* name() const { return name_; } -  uintptr_t address() const { -    return address_; -  } - - private: -  const char* name_; -  const uintptr_t address_; -}; - -class Label { - public: -  Label() : position_(0) {} - -  ~Label() { -    // Assert if label is being destroyed with unresolved branches pending. -    CHECK(!IsLinked()); -  } - -  // Returns the position for bound and linked labels. Cannot be used -  // for unused labels. -  int Position() const { -    CHECK(!IsUnused()); -    return IsBound() ? -position_ - sizeof(void*) : position_ - sizeof(void*); -  } - -  int LinkPosition() const { -    CHECK(IsLinked()); -    return position_ - sizeof(void*); -  } - -  bool IsBound() const { return position_ < 0; } -  bool IsUnused() const { return position_ == 0; } -  bool IsLinked() const { return position_ > 0; } - - private: -  int position_; - -  void Reinitialize() { -    position_ = 0; -  } - -  void BindTo(int position) { -    CHECK(!IsBound()); -    position_ = -position - sizeof(void*); -    CHECK(IsBound()); -  } - -  void LinkTo(int position) { -    CHECK(!IsBound()); -    position_ = position + sizeof(void*); -    CHECK(IsLinked()); -  } - -  friend class arm::ArmAssembler; -  friend class arm::Arm32Assembler; -  friend class arm::Thumb2Assembler; -  friend class arm64::Arm64Assembler; -  friend class mips::MipsAssembler; -  friend class mips64::Mips64Assembler; -  friend class x86::X86Assembler; -  friend class x86::NearLabel; -  friend class x86_64::X86_64Assembler; -  friend class x86_64::NearLabel; - -  DISALLOW_COPY_AND_ASSIGN(Label); -}; -  // Assembler fixups are positions in generated code that require processing  // after the code has been copied to executable memory. This includes building @@ -534,6 +435,9 @@ class Assembler {    // and branch to a ExceptionSlowPath if it is.    virtual void ExceptionPoll(ManagedRegister scratch, size_t stack_adjust) = 0; +  virtual void Bind(Label* label) = 0; +  virtual void Jump(Label* label) = 0; +    virtual ~Assembler() {}    /** |