| Index: src/arm64/instructions-arm64.h
|
| diff --git a/src/arm64/instructions-arm64.h b/src/arm64/instructions-arm64.h
|
| index ab64cb2bf003cd57313c8883d686b36ef3bd2796..de76b69b6b87120154041d5a7e250569900c4421 100644
|
| --- a/src/arm64/instructions-arm64.h
|
| +++ b/src/arm64/instructions-arm64.h
|
| @@ -160,9 +160,10 @@ class Instruction {
|
| // ImmPCRel is a compound field (not present in INSTRUCTION_FIELDS_LIST),
|
| // formed from ImmPCRelLo and ImmPCRelHi.
|
| int ImmPCRel() const {
|
| + ASSERT(IsPCRelAddressing());
|
| int const offset = ((ImmPCRelHi() << ImmPCRelLo_width) | ImmPCRelLo());
|
| int const width = ImmPCRelLo_width + ImmPCRelHi_width;
|
| - return signed_bitextract_32(width-1, 0, offset);
|
| + return signed_bitextract_32(width - 1, 0, offset);
|
| }
|
|
|
| uint64_t ImmLogical();
|
| @@ -203,6 +204,10 @@ class Instruction {
|
| return Mask(PCRelAddressingFMask) == PCRelAddressingFixed;
|
| }
|
|
|
| + bool IsAdr() const {
|
| + return Mask(PCRelAddressingMask) == ADR;
|
| + }
|
| +
|
| bool IsLogicalImmediate() const {
|
| return Mask(LogicalImmediateFMask) == LogicalImmediateFixed;
|
| }
|
| @@ -211,6 +216,10 @@ class Instruction {
|
| return Mask(AddSubImmediateFMask) == AddSubImmediateFixed;
|
| }
|
|
|
| + bool IsAddSubShifted() const {
|
| + return Mask(AddSubShiftedFMask) == AddSubShiftedFixed;
|
| + }
|
| +
|
| bool IsAddSubExtended() const {
|
| return Mask(AddSubExtendedFMask) == AddSubExtendedFixed;
|
| }
|
| @@ -387,6 +396,10 @@ class Instruction {
|
| }
|
|
|
|
|
| + static const int ImmPCRelRangeBitwidth = 21;
|
| + static bool IsValidPCRelOffset(int offset) {
|
| + return is_int21(offset);
|
| + }
|
| void SetPCRelImmTarget(Instruction* target);
|
| void SetBranchImmTarget(Instruction* target);
|
| };
|
|
|