diff options
author | Johnny Chen <johnny.chen@apple.com> | 2010-04-19 23:02:58 +0000 |
---|---|---|
committer | Johnny Chen <johnny.chen@apple.com> | 2010-04-19 23:02:58 +0000 |
commit | e62b68096592ce2acdb48a915c1c437566cc401b (patch) | |
tree | 013e781479b87d5d23e8b4b7cf6201df35559cc9 /llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp | |
parent | c4df407604b8798dfc56b2692d25b13a11fda0db (diff) | |
download | bcm5719-llvm-e62b68096592ce2acdb48a915c1c437566cc401b.tar.gz bcm5719-llvm-e62b68096592ce2acdb48a915c1c437566cc401b.zip |
Better error handling of invalid IT mask '0000', instead of just asserting.
llvm-svn: 101827
Diffstat (limited to 'llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp index 0e27e16f941..1c9d95fb08a 100644 --- a/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp +++ b/llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp @@ -508,17 +508,23 @@ bool ThumbDisassembler::getInstruction(MCInst &MI, } // A8.6.50 +// Valid return values are {1, 2, 3, 4}, with 0 signifying an error condition. static unsigned short CountITSize(unsigned ITMask) { // First count the trailing zeros of the IT mask. unsigned TZ = CountTrailingZeros_32(ITMask); - assert(TZ <= 3 && "Encoding error"); + if (TZ > 3) { + DEBUG(errs() << "Encoding error of IT mask"); + return 0; + } return (4 - TZ); } -/// Init ITState. -void Session::InitIT(unsigned short bits7_0) { +/// Init ITState. Note that at least one bit is always 1 in mask. +bool Session::InitIT(unsigned short bits7_0) { ITCounter = CountITSize(slice(bits7_0, 3, 0)); ITState = bits7_0; + // Only need to check for > 0. + return ITCounter > 0; } /// Update ITState if necessary. |