@@ -152,7 +152,7 @@ class ARMDisassembler : public MCDisassembler {
152152 void AddThumb1SBit (MCInst &MI, bool InITBlock) const ;
153153 bool isVectorPredicable (const MCInst &MI) const ;
154154 DecodeStatus AddThumbPredicate (MCInst&) const ;
155- void UpdateThumbVFPPredicate (DecodeStatus &, MCInst& ) const ;
155+ void UpdateThumbPredicate (DecodeStatus &S , MCInst &MI ) const ;
156156
157157 llvm::endianness InstructionEndianness;
158158};
@@ -6308,13 +6308,12 @@ ARMDisassembler::AddThumbPredicate(MCInst &MI) const {
63086308 return S;
63096309}
63106310
6311- // Thumb VFP instructions are a special case. Because we share their
6312- // encodings between ARM and Thumb modes, and they are predicable in ARM
6311+ // Thumb VFP and some NEON instructions are a special case. Because we share
6312+ // their encodings between ARM and Thumb modes, and they are predicable in ARM
63136313// mode, the auto-generated decoder will give them an (incorrect)
63146314// predicate operand. We need to rewrite these operands based on the IT
63156315// context as a post-pass.
6316- void ARMDisassembler::UpdateThumbVFPPredicate (
6317- DecodeStatus &S, MCInst &MI) const {
6316+ void ARMDisassembler::UpdateThumbPredicate (DecodeStatus &S, MCInst &MI) const {
63186317 unsigned CC;
63196318 CC = ITBlock.getITCC ();
63206319 if (CC == 0xF )
@@ -6461,7 +6460,7 @@ DecodeStatus ARMDisassembler::getThumbInstruction(MCInst &MI, uint64_t &Size,
64616460 decodeInstruction (DecoderTableVFP32, MI, Insn32, Address, this , STI);
64626461 if (Result != MCDisassembler::Fail) {
64636462 Size = 4 ;
6464- UpdateThumbVFPPredicate (Result, MI);
6463+ UpdateThumbPredicate (Result, MI);
64656464 return Result;
64666465 }
64676466 }
@@ -6478,6 +6477,7 @@ DecodeStatus ARMDisassembler::getThumbInstruction(MCInst &MI, uint64_t &Size,
64786477 STI);
64796478 if (Result != MCDisassembler::Fail) {
64806479 Size = 4 ;
6480+ UpdateThumbPredicate (Result, MI);
64816481 return Result;
64826482 }
64836483 }
0 commit comments