Index: src/assembler_ia32.h |
diff --git a/src/assembler_ia32.h b/src/assembler_ia32.h |
index 6ad8faebbd32594e9a32183f344c3eb6427cc824..bb3f0ab63b2e439eecf7411720f0bc9fa9c44deb 100644 |
--- a/src/assembler_ia32.h |
+++ b/src/assembler_ia32.h |
@@ -1,10 +1,11 @@ |
+//===- subzero/src/assembler_ia32.h - Assembler for x86-32 ------*- C++ -*-===// |
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
// |
// Modified by the Subzero authors. |
// |
-//===- subzero/src/assembler_ia32.h - Assembler for x86-32 ----------------===// |
+//===----------------------------------------------------------------------===// |
// |
// The Subzero Code Generator |
// |
@@ -45,6 +46,9 @@ const int MAX_NOP_SIZE = 8; |
enum ScaleFactor { TIMES_1 = 0, TIMES_2 = 1, TIMES_4 = 2, TIMES_8 = 3 }; |
class DisplacementRelocation : public AssemblerFixup { |
+ DisplacementRelocation(const DisplacementRelocation &) = delete; |
+ DisplacementRelocation &operator=(const DisplacementRelocation &) = delete; |
+ |
public: |
static DisplacementRelocation *create(Assembler *Asm, FixupKind Kind, |
const ConstantRelocatable *Sym) { |
@@ -61,17 +65,15 @@ public: |
private: |
DisplacementRelocation(FixupKind Kind, const ConstantRelocatable *Sym) |
: AssemblerFixup(Kind, Sym) {} |
- DisplacementRelocation(const DisplacementRelocation &) = delete; |
- DisplacementRelocation &operator=(const DisplacementRelocation &) = delete; |
}; |
class Immediate { |
+ Immediate(const Immediate &) = delete; |
+ Immediate &operator=(const Immediate &) = delete; |
+ |
public: |
explicit Immediate(int32_t value) : value_(value), fixup_(NULL) {} |
- explicit Immediate(const Immediate &other) |
- : value_(other.value_), fixup_(other.fixup_) {} |
- |
explicit Immediate(AssemblerFixup *fixup) |
: value_(fixup->value()->getOffset()), fixup_(fixup) { |
// Use the Offset in the "value" for now. If the symbol is part of |
@@ -98,6 +100,17 @@ private: |
class Operand { |
public: |
+ Operand(const Operand &other) : length_(other.length_), fixup_(other.fixup_) { |
+ memmove(&encoding_[0], &other.encoding_[0], other.length_); |
+ } |
+ |
+ Operand &operator=(const Operand &other) { |
+ length_ = other.length_; |
+ fixup_ = other.fixup_; |
+ memmove(&encoding_[0], &other.encoding_[0], other.length_); |
+ return *this; |
+ } |
+ |
uint8_t mod() const { return (encoding_at(0) >> 6) & 3; } |
GPRRegister rm() const { |
@@ -128,17 +141,6 @@ public: |
AssemblerFixup *fixup() const { return fixup_; } |
- Operand(const Operand &other) : length_(other.length_), fixup_(other.fixup_) { |
- memmove(&encoding_[0], &other.encoding_[0], other.length_); |
- } |
- |
- Operand &operator=(const Operand &other) { |
- length_ = other.length_; |
- fixup_ = other.fixup_; |
- memmove(&encoding_[0], &other.encoding_[0], other.length_); |
- return *this; |
- } |
- |
protected: |
Operand() : length_(0), fixup_(NULL) {} // Needed by subclass Address. |
@@ -194,6 +196,13 @@ private: |
class Address : public Operand { |
public: |
+ Address(const Address &other) : Operand(other) {} |
+ |
+ Address &operator=(const Address &other) { |
+ Operand::operator=(other); |
+ return *this; |
+ } |
+ |
Address(GPRRegister base, int32_t disp) { |
if (disp == 0 && base != RegX8632::Encoded_Reg_ebp) { |
SetModRM(0, base); |
@@ -236,13 +245,6 @@ public: |
} |
} |
- Address(const Address &other) : Operand(other) {} |
- |
- Address &operator=(const Address &other) { |
- Operand::operator=(other); |
- return *this; |
- } |
- |
static Address Absolute(const uintptr_t addr) { |
Address result; |
result.SetModRM(0, RegX8632::Encoded_Reg_ebp); |
@@ -270,13 +272,16 @@ private: |
}; |
class Label { |
+ Label(const Label &) = delete; |
+ Label &operator=(const Label &) = delete; |
+ |
public: |
Label() : position_(0), num_unresolved_(0) { |
-#ifdef DEBUG |
+#ifndef NDEBUG |
for (int i = 0; i < kMaxUnresolvedBranches; i++) { |
unresolved_near_positions_[i] = -1; |
} |
-#endif // DEBUG |
+#endif // !NDEBUG |
} |
~Label() { |
@@ -346,11 +351,12 @@ private: |
intptr_t unresolved_near_positions_[kMaxUnresolvedBranches]; |
friend class AssemblerX86; |
- Label(const Label &) = delete; |
- Label &operator=(const Label &) = delete; |
}; |
class AssemblerX86 : public Assembler { |
+ AssemblerX86(const AssemblerX86 &) = delete; |
+ AssemblerX86 &operator=(const AssemblerX86 &) = delete; |
+ |
public: |
explicit AssemblerX86(bool use_far_branches = false) : buffer_(*this) { |
// This mode is only needed and implemented for MIPS and ARM. |
@@ -800,7 +806,7 @@ public: |
cmpxchg(Ty, address, reg); |
} |
- void EmitSegmentOverride(uint8_t prefix) { EmitUint8(prefix); } |
+ void EmitSegmentOverride(uint8_t prefix); |
intptr_t PreferredLoopAlignment() { return 16; } |
void Align(intptr_t alignment, intptr_t offset); |
@@ -843,9 +849,6 @@ private: |
GPRRegister shifter); |
AssemblerBuffer buffer_; |
- |
- AssemblerX86(const AssemblerX86 &) = delete; |
- AssemblerX86 &operator=(const AssemblerX86 &) = delete; |
}; |
inline void AssemblerX86::EmitUint8(uint8_t value) { |