From db0bbab279534974dca507946c66cff2d05dc9f9 Mon Sep 17 00:00:00 2001 From: Nicolas Geoffray Date: Wed, 20 May 2015 12:31:08 +0100 Subject: Introduce a NearLabel in thumb2. This tells the assembler that the user knows the encoding can be in 16bits. Change-Id: Idf36c38beb1e07a69862c972484aeb08326a0499 --- compiler/utils/arm/assembler_arm.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'compiler/utils/arm/assembler_arm.h') diff --git a/compiler/utils/arm/assembler_arm.h b/compiler/utils/arm/assembler_arm.h index dee8287e67..a19a7645c2 100644 --- a/compiler/utils/arm/assembler_arm.h +++ b/compiler/utils/arm/assembler_arm.h @@ -33,6 +33,16 @@ namespace arm { class Arm32Assembler; class Thumb2Assembler; +// This class indicates that the label and its uses +// will fall into a range that is encodable in 16bits on thumb2. +class NearLabel : public Label { + public: + NearLabel() {} + + private: + DISALLOW_COPY_AND_ASSIGN(NearLabel); +}; + class ShifterOperand { public: ShifterOperand() : type_(kUnknown), rm_(kNoRegister), rs_(kNoRegister), @@ -519,6 +529,9 @@ class ArmAssembler : public Assembler { // Branch instructions. virtual void b(Label* label, Condition cond = AL) = 0; + virtual void b(NearLabel* label, Condition cond = AL) { + b(reinterpret_cast(label), cond); + } virtual void bl(Label* label, Condition cond = AL) = 0; virtual void blx(Register rm, Condition cond = AL) = 0; virtual void bx(Register rm, Condition cond = AL) = 0; @@ -654,6 +667,9 @@ class ArmAssembler : public Assembler { virtual void Bind(Label* label) = 0; virtual void CompareAndBranchIfZero(Register r, Label* label) = 0; + virtual void CompareAndBranchIfZero(Register r, NearLabel* label) { + CompareAndBranchIfZero(r, reinterpret_cast(label)); + } virtual void CompareAndBranchIfNonZero(Register r, Label* label) = 0; // -- cgit v1.2.3-59-g8ed1b