return Kind == k_PostIndexRegister && PostIdxReg.ShiftTy == ARM_AM::no_shift;
}
bool isMemNoOffset() const {
- if (Kind != k_Memory)
+ if (!isMemory())
return false;
// No offset of any kind.
return Mem.OffsetRegNum == 0 && Mem.OffsetImm == 0;
}
bool isAddrMode2() const {
- if (Kind != k_Memory)
+ if (!isMemory())
return false;
// Check for register offset.
if (Mem.OffsetRegNum) return true;
return Val > -4096 && Val < 4096;
}
bool isAddrMode3() const {
- if (Kind != k_Memory)
+ if (!isMemory())
return false;
// No shifts are legal for AM3.
if (Mem.ShiftType != ARM_AM::no_shift) return false;
return (Val > -256 && Val < 256) || Val == INT32_MIN;
}
bool isAddrMode5() const {
- if (Kind != k_Memory)
+ if (!isMemory())
return false;
// Check for register offset.
if (Mem.OffsetRegNum) return false;
Val == INT32_MIN;
}
bool isMemTBB() const {
- if (Kind != k_Memory || !Mem.OffsetRegNum || Mem.isNegative ||
+ if (!isMemory() || !Mem.OffsetRegNum || Mem.isNegative ||
Mem.ShiftType != ARM_AM::no_shift)
return false;
return true;
}
bool isMemTBH() const {
- if (Kind != k_Memory || !Mem.OffsetRegNum || Mem.isNegative ||
+ if (!isMemory() || !Mem.OffsetRegNum || Mem.isNegative ||
Mem.ShiftType != ARM_AM::lsl || Mem.ShiftImm != 1)
return false;
return true;
}
bool isMemRegOffset() const {
- if (Kind != k_Memory || !Mem.OffsetRegNum)
+ if (!isMemory() || !Mem.OffsetRegNum)
return false;
return true;
}
bool isT2MemRegOffset() const {
- if (Kind != k_Memory || !Mem.OffsetRegNum || Mem.isNegative)
+ if (!isMemory() || !Mem.OffsetRegNum || Mem.isNegative)
return false;
// Only lsl #{0, 1, 2, 3} allowed.
if (Mem.ShiftType == ARM_AM::no_shift)
bool isMemThumbRR() const {
// Thumb reg+reg addressing is simple. Just two registers, a base and
// an offset. No shifts, negations or any other complicating factors.
- if (Kind != k_Memory || !Mem.OffsetRegNum || Mem.isNegative ||
+ if (!isMemory() || !Mem.OffsetRegNum || Mem.isNegative ||
Mem.ShiftType != ARM_AM::no_shift)
return false;
return isARMLowRegister(Mem.BaseRegNum) &&
(!Mem.OffsetRegNum || isARMLowRegister(Mem.OffsetRegNum));
}
bool isMemThumbRIs4() const {
- if (Kind != k_Memory || Mem.OffsetRegNum != 0 ||
+ if (!isMemory() || Mem.OffsetRegNum != 0 ||
!isARMLowRegister(Mem.BaseRegNum))
return false;
// Immediate offset, multiple of 4 in range [0, 124].
return Val >= 0 && Val <= 124 && (Val % 4) == 0;
}
bool isMemThumbRIs2() const {
- if (Kind != k_Memory || Mem.OffsetRegNum != 0 ||
+ if (!isMemory() || Mem.OffsetRegNum != 0 ||
!isARMLowRegister(Mem.BaseRegNum))
return false;
// Immediate offset, multiple of 4 in range [0, 62].
return Val >= 0 && Val <= 62 && (Val % 2) == 0;
}
bool isMemThumbRIs1() const {
- if (Kind != k_Memory || Mem.OffsetRegNum != 0 ||
+ if (!isMemory() || Mem.OffsetRegNum != 0 ||
!isARMLowRegister(Mem.BaseRegNum))
return false;
// Immediate offset in range [0, 31].
return Val >= 0 && Val <= 31;
}
bool isMemThumbSPI() const {
- if (Kind != k_Memory || Mem.OffsetRegNum != 0 || Mem.BaseRegNum != ARM::SP)
+ if (!isMemory() || Mem.OffsetRegNum != 0 || Mem.BaseRegNum != ARM::SP)
return false;
// Immediate offset, multiple of 4 in range [0, 1020].
if (!Mem.OffsetImm) return true;
return Val >= 0 && Val <= 1020 && (Val % 4) == 0;
}
bool isMemImm8s4Offset() const {
- if (Kind != k_Memory || Mem.OffsetRegNum != 0)
+ if (!isMemory() || Mem.OffsetRegNum != 0)
return false;
// Immediate offset a multiple of 4 in range [-1020, 1020].
if (!Mem.OffsetImm) return true;
return Val >= -1020 && Val <= 1020 && (Val & 3) == 0;
}
bool isMemImm0_1020s4Offset() const {
- if (Kind != k_Memory || Mem.OffsetRegNum != 0)
+ if (!isMemory() || Mem.OffsetRegNum != 0)
return false;
// Immediate offset a multiple of 4 in range [0, 1020].
if (!Mem.OffsetImm) return true;
return Val >= 0 && Val <= 1020 && (Val & 3) == 0;
}
bool isMemImm8Offset() const {
- if (Kind != k_Memory || Mem.OffsetRegNum != 0)
+ if (!isMemory() || Mem.OffsetRegNum != 0)
return false;
// Immediate offset in range [-255, 255].
if (!Mem.OffsetImm) return true;
return (Val == INT32_MIN) || (Val > -256 && Val < 256);
}
bool isMemPosImm8Offset() const {
- if (Kind != k_Memory || Mem.OffsetRegNum != 0)
+ if (!isMemory() || Mem.OffsetRegNum != 0)
return false;
// Immediate offset in range [0, 255].
if (!Mem.OffsetImm) return true;
return Val >= 0 && Val < 256;
}
bool isMemNegImm8Offset() const {
- if (Kind != k_Memory || Mem.OffsetRegNum != 0)
+ if (!isMemory() || Mem.OffsetRegNum != 0)
return false;
// Immediate offset in range [-255, -1].
if (!Mem.OffsetImm) return true;
if (Kind == k_Immediate && !isa<MCConstantExpr>(getImm()))
return true;
- if (Kind != k_Memory || Mem.OffsetRegNum != 0)
+ if (!isMemory() || Mem.OffsetRegNum != 0)
return false;
// Immediate offset in range [0, 4095].
if (!Mem.OffsetImm) return true;
if (Kind == k_Immediate && !isa<MCConstantExpr>(getImm()))
return true;
- if (Kind != k_Memory || Mem.OffsetRegNum != 0)
+ if (!isMemory() || Mem.OffsetRegNum != 0)
return false;
// Immediate offset in range [-4095, 4095].
if (!Mem.OffsetImm) return true;