Chromium Code Reviews| Index: src/IceAssemblerARM32.h |
| diff --git a/src/IceAssemblerARM32.h b/src/IceAssemblerARM32.h |
| index e524e4224fe0a346141cac3197e543eb066f4bc7..d117c89754ff4f2192c8a6b364ed52eda937e18b 100644 |
| --- a/src/IceAssemblerARM32.h |
| +++ b/src/IceAssemblerARM32.h |
| @@ -51,7 +51,17 @@ class MoveRelocatableFixup : public AssemblerFixup { |
| public: |
| MoveRelocatableFixup() = default; |
| - size_t emit(GlobalContext *Ctx, const Assembler &Asm) const override; |
| + size_t emit(GlobalContext *Ctx, const Assembler &Asm) const final; |
|
John
2015/11/18 01:04:17
Optional: make the whole class final?
Karl
2015/11/18 16:19:37
Done.
|
| +}; |
| + |
| +/// Handles encoding of branch and link to global location. |
| +class BlRelocatableFixup : 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); |
| + |
| 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); |