Index: src/IceAssemblerARM32.cpp |
diff --git a/src/IceAssemblerARM32.cpp b/src/IceAssemblerARM32.cpp |
index 8f87c920b3d03f339d5f019a1a194b4104dcb052..c92483ee3677bcc57be43a71894d204cd4a6bde7 100644 |
--- a/src/IceAssemblerARM32.cpp |
+++ b/src/IceAssemblerARM32.cpp |
@@ -177,37 +177,37 @@ inline RegARM32::GPRRegister getGPRReg(IValueT Shift, IValueT Value) { |
return decodeGPRRegister((Value >> Shift) & 0xF); |
} |
-// The way an operand was decoded in functions decodeOperand and decodeAddress |
-// below. |
-enum DecodedResult { |
- // Unable to decode, value left undefined. |
- CantDecode = 0, |
+// The way an operand is encoded into a sequence of bits in functions |
+// encodeOperand and encodeAddress below. |
+enum EncodedOperand { |
+ // Unable to encode, value left undefined. |
+ CantEncode = 0, |
// Value is register found. |
- DecodedAsRegister, |
+ EncodedAsRegister, |
// Value=rrrriiiiiiii where rrrr is the rotation, and iiiiiiii is the imm8 |
// value. |
- DecodedAsRotatedImm8, |
+ EncodedAsRotatedImm8, |
// Value=0000000pu0w0nnnn0000iiiiiiiiiiii where nnnn is the base register Rn, |
// p=1 if pre-indexed addressing, u=1 if offset positive, w=1 if writeback to |
// Rn should be used, and iiiiiiiiiiii defines the rotated Imm8 value. |
- DecodedAsImmRegOffset, |
+ EncodedAsImmRegOffset, |
// Value=00000000pu0w0nnnn0000iiii0000jjjj where nnnn=Rn, iiiijjjj=Imm8, p=1 |
// if pre-indexed addressing, u=1 if offset positive, and w=1 if writeback to |
// Rn. |
- DecodedAsImmRegOffsetEnc3, |
+ EncodedAsImmRegOffsetEnc3, |
// Value=0000000pu0w00nnnnttttiiiiiss0mmmm where nnnn is the base register Rn, |
// mmmm is the index register Rm, iiiii is the shift amount, ss is the shift |
// kind, p=1 if pre-indexed addressing, u=1 if offset positive, and w=1 if |
// writeback to Rn. |
- DecodedAsShiftRotateImm5, |
+ EncodedAsShiftRotateImm5, |
// Value=000000000000000000000iiiii0000000 where iiii defines the Imm5 value |
// to shift. |
- DecodedAsShiftImm5, |
+ EncodedAsShiftImm5, |
// i.e. iiiiiss0mmmm where mmmm is the register to rotate, ss is the shift |
// kind, and iiiii is the shift amount. |
- DecodedAsShiftedRegister, |
+ EncodedAsShiftedRegister, |
// Value is 32bit integer constant. |
- DecodedAsConstI32 |
+ EncodedAsConstI32 |
}; |
// Sets Encoding to a rotated Imm8 encoding of Value, if possible. |
@@ -234,36 +234,36 @@ IValueT encodeShiftRotateReg(IValueT Rm, OperandARM32::ShiftKind Shift, |
(Rm << kRmShift); |
} |
-DecodedResult decodeOperand(const Operand *Opnd, IValueT &Value) { |
+EncodedOperand encodeOperand(const Operand *Opnd, IValueT &Value) { |
Value = 0; // Make sure initialized. |
if (const auto *Var = llvm::dyn_cast<Variable>(Opnd)) { |
if (Var->hasReg()) { |
Value = Var->getRegNum(); |
- return DecodedAsRegister; |
+ return EncodedAsRegister; |
} |
- return CantDecode; |
+ return CantEncode; |
} |
if (const auto *FlexImm = llvm::dyn_cast<OperandARM32FlexImm>(Opnd)) { |
const IValueT Immed8 = FlexImm->getImm(); |
const IValueT Rotate = FlexImm->getRotateAmt(); |
if (!((Rotate < (1 << kRotateBits)) && (Immed8 < (1 << kImmed8Bits)))) |
- return CantDecode; |
+ return CantEncode; |
Value = (Rotate << kRotateShift) | (Immed8 << kImmed8Shift); |
- return DecodedAsRotatedImm8; |
+ return EncodedAsRotatedImm8; |
} |
if (const auto *Const = llvm::dyn_cast<ConstantInteger32>(Opnd)) { |
Value = Const->getValue(); |
- return DecodedAsConstI32; |
+ return EncodedAsConstI32; |
} |
if (const auto *FlexReg = llvm::dyn_cast<OperandARM32FlexReg>(Opnd)) { |
Operand *Amt = FlexReg->getShiftAmt(); |
if (const auto *Imm5 = llvm::dyn_cast<OperandARM32ShAmtImm>(Amt)) { |
IValueT Rm; |
- if (decodeOperand(FlexReg->getReg(), Rm) != DecodedAsRegister) |
- return CantDecode; |
+ if (encodeOperand(FlexReg->getReg(), Rm) != EncodedAsRegister) |
+ return CantEncode; |
Value = |
encodeShiftRotateImm5(Rm, FlexReg->getShiftOp(), Imm5->getShAmtImm()); |
- return DecodedAsShiftedRegister; |
+ return EncodedAsShiftedRegister; |
} |
// TODO(kschimpf): Handle case where Amt is a register? |
} |
@@ -271,9 +271,9 @@ DecodedResult decodeOperand(const Operand *Opnd, IValueT &Value) { |
const IValueT Immed5 = ShImm->getShAmtImm(); |
assert(Immed5 < (1 << kShiftImmBits)); |
Value = (Immed5 << kShiftImmShift); |
- return DecodedAsShiftImm5; |
+ return EncodedAsShiftImm5; |
} |
- return CantDecode; |
+ return CantEncode; |
} |
IValueT encodeImmRegOffset(IValueT Reg, IOffsetT Offset, |
@@ -309,52 +309,52 @@ enum OpEncoding { |
OpEncoding3 |
}; |
-// Decodes memory address Opnd, and encodes that information into Value, |
-// based on how ARM represents the address. Returns how the value was encoded. |
-DecodedResult decodeAddress(const Operand *Opnd, IValueT &Value, |
- const AssemblerARM32::TargetInfo &TInfo, |
- OpEncoding AddressEncoding = DefaultOpEncoding) { |
+// Encodes memory address Opnd, and encodes that information into Value, based |
+// on how ARM represents the address. Returns how the value was encoded. |
+EncodedOperand encodeAddress(const Operand *Opnd, IValueT &Value, |
+ const AssemblerARM32::TargetInfo &TInfo, |
+ OpEncoding AddressEncoding = DefaultOpEncoding) { |
Value = 0; // Make sure initialized. |
if (const auto *Var = llvm::dyn_cast<Variable>(Opnd)) { |
// Should be a stack variable, with an offset. |
if (Var->hasReg()) |
- return CantDecode; |
+ return CantEncode; |
IOffsetT Offset = Var->getStackOffset(); |
if (!Utils::IsAbsoluteUint(12, Offset)) |
- return CantDecode; |
+ return CantEncode; |
int32_t BaseRegNum = Var->getBaseRegNum(); |
if (BaseRegNum == Variable::NoRegister) |
BaseRegNum = TInfo.FrameOrStackReg; |
Value = encodeImmRegOffset(BaseRegNum, Offset, OperandARM32Mem::Offset); |
- return DecodedAsImmRegOffset; |
+ return EncodedAsImmRegOffset; |
} |
if (const auto *Mem = llvm::dyn_cast<OperandARM32Mem>(Opnd)) { |
Variable *Var = Mem->getBase(); |
if (!Var->hasReg()) |
- return CantDecode; |
+ return CantEncode; |
IValueT Rn = Var->getRegNum(); |
if (Mem->isRegReg()) { |
const Variable *Index = Mem->getIndex(); |
if (Var == nullptr) |
- return CantDecode; |
+ return CantEncode; |
Value = (Rn << kRnShift) | Mem->getAddrMode() | |
encodeShiftRotateImm5(Index->getRegNum(), Mem->getShiftOp(), |
Mem->getShiftAmt()); |
- return DecodedAsShiftRotateImm5; |
+ return EncodedAsShiftRotateImm5; |
} |
- // Decoded as immediate register offset. |
+ // Encoded as immediate register offset. |
ConstantInteger32 *Offset = Mem->getOffset(); |
switch (AddressEncoding) { |
case DefaultOpEncoding: |
Value = encodeImmRegOffset(Rn, Offset->getValue(), Mem->getAddrMode()); |
- return DecodedAsImmRegOffset; |
+ return EncodedAsImmRegOffset; |
case OpEncoding3: |
Value = |
encodeImmRegOffsetEnc3(Rn, Offset->getValue(), Mem->getAddrMode()); |
- return DecodedAsImmRegOffsetEnc3; |
+ return EncodedAsImmRegOffsetEnc3; |
} |
} |
- return CantDecode; |
+ return CantEncode; |
} |
// Checks that Offset can fit in imm24 constant of branch (b) instruction. |
@@ -461,6 +461,7 @@ IValueT AssemblerARM32::encodeBranchOffset(IOffsetT Offset, IValueT Inst) { |
return (Inst & ~kBranchOffsetMask) | Offset; |
} |
+// Pull out offset from branch Inst. |
IOffsetT AssemblerARM32::decodeBranchOffset(IValueT Inst) { |
// Sign-extend, left-shift by 2, and adjust to the way ARM CPUs read PC. |
IOffsetT Offset = static_cast<IOffsetT>((Inst & kBranchOffsetMask) << 8); |
@@ -518,10 +519,10 @@ void AssemblerARM32::emitType01(IValueT Opcode, const Operand *OpRd, |
bool SetFlags, CondARM32::Cond Cond, |
EmitChecks RuleChecks) { |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rn; |
- if (decodeOperand(OpRn, Rn) != DecodedAsRegister) |
+ if (encodeOperand(OpRn, Rn) != EncodedAsRegister) |
return setNeedsTextFixup(); |
emitType01(Opcode, Rd, Rn, OpSrc1, SetFlags, Cond, RuleChecks); |
} |
@@ -532,10 +533,10 @@ void AssemblerARM32::emitType01(IValueT Opcode, IValueT Rd, IValueT Rn, |
IValueT Src1Value; |
// TODO(kschimpf) Other possible decodings of data operations. |
- switch (decodeOperand(OpSrc1, Src1Value)) { |
+ switch (encodeOperand(OpSrc1, Src1Value)) { |
default: |
return setNeedsTextFixup(); |
- case DecodedAsRegister: { |
+ case EncodedAsRegister: { |
// XXX (register) |
// xxx{s}<c> <Rd>, <Rn>, <Rm>{, <shiff>} |
// |
@@ -547,13 +548,13 @@ void AssemblerARM32::emitType01(IValueT Opcode, IValueT Rd, IValueT Rn, |
RuleChecks); |
return; |
} |
- case DecodedAsShiftedRegister: { |
- // Form is defined in case DecodedAsRegister. (i.e. XXX (register)). |
+ case EncodedAsShiftedRegister: { |
+ // Form is defined in case EncodedAsRegister. (i.e. XXX (register)). |
emitType01(Cond, kInstTypeDataRegister, Opcode, SetFlags, Rn, Rd, Src1Value, |
RuleChecks); |
return; |
} |
- case DecodedAsConstI32: { |
+ case EncodedAsConstI32: { |
// See if we can convert this to an XXX (immediate). |
IValueT RotateAmt; |
IValueT Imm8; |
@@ -562,7 +563,7 @@ void AssemblerARM32::emitType01(IValueT Opcode, IValueT Rd, IValueT Rn, |
Src1Value = encodeRotatedImm8(RotateAmt, Imm8); |
// Intentionally fall to next case! |
} |
- case DecodedAsRotatedImm8: { |
+ case EncodedAsRotatedImm8: { |
// XXX (Immediate) |
// xxx{s}<c> <Rd>, <Rn>, #<RotatedImm8> |
// |
@@ -622,7 +623,7 @@ void AssemblerARM32::emitCompareOp(IValueT Opcode, const Operand *OpRn, |
constexpr bool SetFlags = true; |
constexpr IValueT Rd = RegARM32::Encoded_Reg_r0; |
IValueT Rn; |
- if (decodeOperand(OpRn, Rn) != DecodedAsRegister) |
+ if (encodeOperand(OpRn, Rn) != EncodedAsRegister) |
return setNeedsTextFixup(); |
emitType01(Opcode, Rd, Rn, OpSrc1, SetFlags, Cond, NoChecks); |
} |
@@ -643,10 +644,10 @@ void AssemblerARM32::emitMemOp(CondARM32::Cond Cond, bool IsLoad, bool IsByte, |
IValueT Rt, const Operand *OpAddress, |
const TargetInfo &TInfo) { |
IValueT Address; |
- switch (decodeAddress(OpAddress, Address, TInfo)) { |
+ switch (encodeAddress(OpAddress, Address, TInfo)) { |
default: |
return setNeedsTextFixup(); |
- case DecodedAsImmRegOffset: { |
+ case EncodedAsImmRegOffset: { |
// XXX{B} (immediate): |
// xxx{b}<c> <Rt>, [<Rn>{, #+/-<imm12>}] ; p=1, w=0 |
// xxx{b}<c> <Rt>, [<Rn>], #+/-<imm12> ; p=1, w=1 |
@@ -669,7 +670,7 @@ void AssemblerARM32::emitMemOp(CondARM32::Cond Cond, bool IsLoad, bool IsByte, |
return emitMemOp(Cond, kInstTypeMemImmediate, IsLoad, IsByte, Rt, Address); |
} |
- case DecodedAsShiftRotateImm5: { |
+ case EncodedAsShiftRotateImm5: { |
// XXX{B} (register) |
// xxx{b}<c> <Rt>, [<Rn>, +/-<Rm>{, <shift>}]{!} |
// xxx{b}<c> <Rt>, [<Rn>], +/-<Rm>{, <shift>} |
@@ -705,10 +706,10 @@ void AssemblerARM32::emitMemOpEnc3(CondARM32::Cond Cond, IValueT Opcode, |
IValueT Rt, const Operand *OpAddress, |
const TargetInfo &TInfo) { |
IValueT Address; |
- switch (decodeAddress(OpAddress, Address, TInfo, OpEncoding3)) { |
+ switch (encodeAddress(OpAddress, Address, TInfo, OpEncoding3)) { |
default: |
return setNeedsTextFixup(); |
- case DecodedAsImmRegOffsetEnc3: { |
+ case EncodedAsImmRegOffsetEnc3: { |
// XXXH (immediate) |
// xxxh<c> <Rt>, [<Rn>{, #+-<Imm8>}] |
// xxxh<c> <Rt>, [<Rn>, #+/-<Imm8>] |
@@ -730,7 +731,7 @@ void AssemblerARM32::emitMemOpEnc3(CondARM32::Cond Cond, IValueT Opcode, |
AssemblerBuffer::EnsureCapacity ensured(&Buffer); |
return emitInst(Encoding); |
} |
- case DecodedAsShiftRotateImm5: { |
+ case EncodedAsShiftRotateImm5: { |
// XXXH (register) |
// xxxh<c> <Rt>, [<Rn>, +/-<Rm>]{!} |
// xxxh<c> <Rt>, [<Rn>], +/-<Rm> |
@@ -921,7 +922,7 @@ void AssemblerARM32::bl(const ConstantRelocatable *Target) { |
void AssemblerARM32::blx(const Operand *Target) { |
IValueT Rm; |
- if (decodeOperand(Target, Rm) != DecodedAsRegister) |
+ if (encodeOperand(Target, Rm) != EncodedAsRegister) |
return setNeedsTextFixup(); |
// BLX (register) - ARM section A8.8.26, encoding A1: |
// blx<c> <Rm> |
@@ -991,7 +992,7 @@ void AssemblerARM32::ldr(const Operand *OpRt, const Operand *OpAddress, |
CondARM32::Cond Cond, const TargetInfo &TInfo) { |
constexpr bool IsLoad = true; |
IValueT Rt; |
- if (decodeOperand(OpRt, Rt) != DecodedAsRegister) |
+ if (encodeOperand(OpRt, Rt) != EncodedAsRegister) |
return setNeedsTextFixup(); |
const Type Ty = OpRt->getType(); |
switch (typeWidthInBytesLog2(Ty)) { |
@@ -1066,16 +1067,16 @@ void AssemblerARM32::lsl(const Operand *OpRd, const Operand *OpRm, |
constexpr IValueT Lsl = B3 | B2 | B0; // 1101 |
constexpr IValueT Rn = 0; // Rn field is not used. |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rm; |
- if (decodeOperand(OpRm, Rm) != DecodedAsRegister) |
+ if (encodeOperand(OpRm, Rm) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Value; |
- switch (decodeOperand(OpSrc1, Value)) { |
+ switch (encodeOperand(OpSrc1, Value)) { |
default: |
return setNeedsTextFixup(); |
- case DecodedAsShiftImm5: { |
+ case EncodedAsShiftImm5: { |
// LSL (immediate) - ARM section A8.8.94, encoding A1: |
// lsl{s}<c> <Rd>, <Rm>, #imm5 |
// |
@@ -1086,14 +1087,14 @@ void AssemblerARM32::lsl(const Operand *OpRd, const Operand *OpRm, |
RdIsPcAndSetFlags); |
return; |
} |
- case DecodedAsRegister: { |
+ case EncodedAsRegister: { |
// LSL (register) - ARM section A8.8.95, encoding A1: |
// lsl{S}<c> <Rd>, <Rm>, <Rs> |
// |
// cccc0001101s0000ddddssss0001mmmm where cccc=Cond, s=SetFlags, dddd=Rd, |
// mmmm=Rm, and ssss=Rs. |
IValueT Rs; |
- if (decodeOperand(OpSrc1, Rs) != DecodedAsRegister) |
+ if (encodeOperand(OpSrc1, Rs) != EncodedAsRegister) |
return setNeedsTextFixup(); |
if ((Rd == RegARM32::Encoded_Reg_pc) || (Rm == RegARM32::Encoded_Reg_pc) || |
(Rs == RegARM32::Encoded_Reg_pc)) |
@@ -1120,7 +1121,7 @@ void AssemblerARM32::mov(const Operand *OpRd, const Operand *OpSrc, |
// and iiiiiiiiiiii=RotatedImm8=Src. Note: We don't use movs in this |
// assembler. |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
constexpr bool SetFlags = false; |
constexpr IValueT Rn = 0; |
@@ -1143,7 +1144,7 @@ void AssemblerARM32::emitMovw(IValueT Opcode, IValueT Rd, IValueT Imm16, |
void AssemblerARM32::movw(const Operand *OpRd, const Operand *OpSrc, |
CondARM32::Cond Cond) { |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
if (const auto *Src = llvm::dyn_cast<ConstantRelocatable>(OpSrc)) { |
// MOVW (immediate) - ARM section A8.8.102, encoding A2: |
@@ -1164,7 +1165,7 @@ void AssemblerARM32::movw(const Operand *OpRd, const Operand *OpSrc, |
return; |
} |
IValueT ConstVal; |
- if (decodeOperand(OpSrc, ConstVal) != DecodedAsConstI32) |
+ if (encodeOperand(OpSrc, ConstVal) != EncodedAsConstI32) |
return setNeedsTextFixup(); |
// TODO(kschimpf): Determine if we want to handle rotated immediate 8 values |
// to handle cases where the constant is greater than 16 bits (encoding A1 |
@@ -1183,7 +1184,7 @@ void AssemblerARM32::movw(const Operand *OpRd, const Operand *OpSrc, |
void AssemblerARM32::movt(const Operand *OpRd, const Operand *OpSrc, |
CondARM32::Cond Cond) { |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
auto *Src = llvm::dyn_cast<ConstantRelocatable>(OpSrc); |
if (Src == nullptr) |
@@ -1222,7 +1223,7 @@ void AssemblerARM32::mvn(const Operand *OpRd, const Operand *OpSrc, |
// cccc0001111s0000ddddiiiiitt0mmmm where cccc=Cond, s=SetFlags=0, dddd=Rd, |
// mmmm=Rm, iiii defines shift constant, and tt=ShiftKind. |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
constexpr IValueT MvnOpcode = B3 | B2 | B1 | B0; // i.e. 1111 |
constexpr IValueT Rn = 0; |
@@ -1256,13 +1257,13 @@ void AssemblerARM32::sdiv(const Operand *OpRd, const Operand *OpRn, |
// cccc01110001dddd1111mmmm0001nnnn where cccc=Cond, dddd=Rd, nnnn=Rn, and |
// mmmm=Rm. |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rn; |
- if (decodeOperand(OpRn, Rn) != DecodedAsRegister) |
+ if (encodeOperand(OpRn, Rn) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rm; |
- if (decodeOperand(OpSrc1, Rm) != DecodedAsRegister) |
+ if (encodeOperand(OpSrc1, Rm) != EncodedAsRegister) |
return setNeedsTextFixup(); |
if (Rd == RegARM32::Encoded_Reg_pc || Rn == RegARM32::Encoded_Reg_pc || |
Rm == RegARM32::Encoded_Reg_pc) |
@@ -1276,7 +1277,7 @@ void AssemblerARM32::str(const Operand *OpRt, const Operand *OpAddress, |
CondARM32::Cond Cond, const TargetInfo &TInfo) { |
constexpr bool IsLoad = false; |
IValueT Rt; |
- if (decodeOperand(OpRt, Rt) != DecodedAsRegister) |
+ if (encodeOperand(OpRt, Rt) != EncodedAsRegister) |
return setNeedsTextFixup(); |
const Type Ty = OpRt->getType(); |
switch (typeWidthInBytesLog2(Ty)) { |
@@ -1355,7 +1356,7 @@ void AssemblerARM32::pop(const Operand *OpRt, CondARM32::Cond Cond) { |
// |
// cccc010010011101dddd000000000100 where dddd=Rt and cccc=Cond. |
IValueT Rt; |
- if (decodeOperand(OpRt, Rt) != DecodedAsRegister) |
+ if (encodeOperand(OpRt, Rt) != EncodedAsRegister) |
return setNeedsTextFixup(); |
assert(Rt != RegARM32::Encoded_Reg_sp); |
// Same as load instruction. |
@@ -1382,7 +1383,7 @@ void AssemblerARM32::push(const Operand *OpRt, CondARM32::Cond Cond) { |
// |
// cccc010100101101dddd000000000100 where dddd=Rt and cccc=Cond. |
IValueT Rt; |
- if (decodeOperand(OpRt, Rt) != DecodedAsRegister) |
+ if (encodeOperand(OpRt, Rt) != EncodedAsRegister) |
return setNeedsTextFixup(); |
assert(Rt != RegARM32::Encoded_Reg_sp); |
// Same as store instruction. |
@@ -1407,16 +1408,16 @@ void AssemblerARM32::mla(const Operand *OpRd, const Operand *OpRn, |
const Operand *OpRm, const Operand *OpRa, |
CondARM32::Cond Cond) { |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rn; |
- if (decodeOperand(OpRn, Rn) != DecodedAsRegister) |
+ if (encodeOperand(OpRn, Rn) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rm; |
- if (decodeOperand(OpRm, Rm) != DecodedAsRegister) |
+ if (encodeOperand(OpRm, Rm) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Ra; |
- if (decodeOperand(OpRa, Ra) != DecodedAsRegister) |
+ if (encodeOperand(OpRa, Ra) != EncodedAsRegister) |
return setNeedsTextFixup(); |
// MLA - ARM section A8.8.114, encoding A1. |
// mla{s}<c> <Rd>, <Rn>, <Rm>, <Ra> |
@@ -1436,13 +1437,13 @@ void AssemblerARM32::mul(const Operand *OpRd, const Operand *OpRn, |
const Operand *OpSrc1, bool SetFlags, |
CondARM32::Cond Cond) { |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rn; |
- if (decodeOperand(OpRn, Rn) != DecodedAsRegister) |
+ if (encodeOperand(OpRn, Rn) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rm; |
- if (decodeOperand(OpSrc1, Rm) != DecodedAsRegister) |
+ if (encodeOperand(OpSrc1, Rm) != EncodedAsRegister) |
return setNeedsTextFixup(); |
// MUL - ARM section A8.8.114, encoding A1. |
// mul{s}<c> <Rd>, <Rn>, <Rm> |
@@ -1465,13 +1466,13 @@ void AssemblerARM32::udiv(const Operand *OpRd, const Operand *OpRn, |
// cccc01110011dddd1111mmmm0001nnnn where cccc=Cond, dddd=Rd, nnnn=Rn, and |
// mmmm=Rm. |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rn; |
- if (decodeOperand(OpRn, Rn) != DecodedAsRegister) |
+ if (encodeOperand(OpRn, Rn) != EncodedAsRegister) |
return setNeedsTextFixup(); |
IValueT Rm; |
- if (decodeOperand(OpSrc1, Rm) != DecodedAsRegister) |
+ if (encodeOperand(OpSrc1, Rm) != EncodedAsRegister) |
return setNeedsTextFixup(); |
if (Rd == RegARM32::Encoded_Reg_pc || Rn == RegARM32::Encoded_Reg_pc || |
Rm == RegARM32::Encoded_Reg_pc) |
@@ -1532,10 +1533,10 @@ void AssemblerARM32::umull(const Operand *OpRdLo, const Operand *OpRdHi, |
IValueT RdHi; |
IValueT Rn; |
IValueT Rm; |
- if (decodeOperand(OpRdLo, RdLo) != DecodedAsRegister || |
- decodeOperand(OpRdHi, RdHi) != DecodedAsRegister || |
- decodeOperand(OpRn, Rn) != DecodedAsRegister || |
- decodeOperand(OpRm, Rm) != DecodedAsRegister) |
+ if (encodeOperand(OpRdLo, RdLo) != EncodedAsRegister || |
+ encodeOperand(OpRdHi, RdHi) != EncodedAsRegister || |
+ encodeOperand(OpRn, Rn) != EncodedAsRegister || |
+ encodeOperand(OpRm, Rm) != EncodedAsRegister) |
return setNeedsTextFixup(); |
if (RdHi == RegARM32::Encoded_Reg_pc || RdLo == RegARM32::Encoded_Reg_pc || |
Rn == RegARM32::Encoded_Reg_pc || Rm == RegARM32::Encoded_Reg_pc || |
@@ -1548,13 +1549,13 @@ void AssemblerARM32::umull(const Operand *OpRdLo, const Operand *OpRdHi, |
void AssemblerARM32::uxt(const Operand *OpRd, const Operand *OpSrc0, |
CondARM32::Cond Cond) { |
IValueT Rd; |
- if (decodeOperand(OpRd, Rd) != DecodedAsRegister) |
+ if (encodeOperand(OpRd, Rd) != EncodedAsRegister) |
return setNeedsTextFixup(); |
// Note: For the moment, we assume no rotation is specified. |
RotationValue Rotation = kRotateNone; |
constexpr IValueT Rn = RegARM32::Encoded_Reg_pc; |
IValueT Rm; |
- if (decodeOperand(OpSrc0, Rm) != DecodedAsRegister) |
+ if (encodeOperand(OpSrc0, Rm) != EncodedAsRegister) |
return setNeedsTextFixup(); |
switch (typeWidthInBytes(OpSrc0->getType())) { |
default: |