Index: src/IceAssemblerARM32.h |
diff --git a/src/IceAssemblerARM32.h b/src/IceAssemblerARM32.h |
index e524e4224fe0a346141cac3197e543eb066f4bc7..8de4e258465d5bf88b77e88c77da8e16b9786f7c 100644 |
--- a/src/IceAssemblerARM32.h |
+++ b/src/IceAssemblerARM32.h |
@@ -45,13 +45,23 @@ using IValueT = uint32_t; |
using IOffsetT = int32_t; |
/// Handles encoding of bottom/top 16 bits of an address using movw/movt. |
-class MoveRelocatableFixup : public AssemblerFixup { |
+class MoveRelocatableFixup final : public AssemblerFixup { |
MoveRelocatableFixup &operator=(const MoveRelocatableFixup &) = delete; |
MoveRelocatableFixup(const MoveRelocatableFixup &) = default; |
public: |
MoveRelocatableFixup() = default; |
- size_t emit(GlobalContext *Ctx, const Assembler &Asm) const override; |
+ size_t emit(GlobalContext *Ctx, const Assembler &Asm) const final; |
+}; |
+ |
+/// Handles encoding of branch and link to global location. |
+class BlRelocatableFixup final : public AssemblerFixup { |
+ BlRelocatableFixup(const BlRelocatableFixup &) = delete; |
+ BlRelocatableFixup &operator=(const BlRelocatableFixup &) = delete; |
+ |
+public: |
+ BlRelocatableFixup() = default; |
+ size_t emit(GlobalContext *Ctx, const Assembler &Asm) const final; |
}; |
class AssemblerARM32 : public Assembler { |
@@ -103,6 +113,8 @@ public: |
MoveRelocatableFixup *createMoveFixup(bool IsMovW, const Constant *Value); |
+ BlRelocatableFixup *createBlFixup(const ConstantRelocatable *Target); |
Jim Stichnoth
2015/11/22 03:27:03
I'd be happier if we reserved variable name "Targe
Karl
2015/11/30 16:54:35
Done.
|
+ |
void alignFunction() override { |
const SizeT Align = 1 << getBundleAlignLog2Bytes(); |
SizeT BytesNeeded = Utils::OffsetToAlignment(Buffer.getPosition(), Align); |
@@ -186,15 +198,19 @@ public: |
void b(Label *L, CondARM32::Cond Cond); |
- void bx(RegARM32::GPRRegister Rm, CondARM32::Cond Cond = CondARM32::AL); |
- |
void bkpt(uint16_t Imm16); |
- void cmp(const Operand *OpRn, const Operand *OpSrc1, CondARM32::Cond Cond); |
- |
void bic(const Operand *OpRd, const Operand *OpRn, const Operand *OpSrc1, |
bool SetFlags, CondARM32::Cond Cond); |
+ void bl(const ConstantRelocatable *Target); |
+ |
+ void blx(const Operand *Target); |
+ |
+ void bx(RegARM32::GPRRegister Rm, CondARM32::Cond Cond = CondARM32::AL); |
+ |
+ void cmp(const Operand *OpRn, const Operand *OpSrc1, CondARM32::Cond Cond); |
+ |
void eor(const Operand *OpRd, const Operand *OpRn, const Operand *OpSrc1, |
bool SetFlags, CondARM32::Cond Cond); |