Fix Thumb2 aliasing complementary instructions taking modified immediates
authorMihai Popa <mihail.popa@gmail.com>
Fri, 16 Aug 2013 11:55:44 +0000 (11:55 +0000)
committerMihai Popa <mihail.popa@gmail.com>
Fri, 16 Aug 2013 11:55:44 +0000 (11:55 +0000)
commit8b36f9e4314ac4d786d2d4fd5fa9e7858487ee9e
tree7145203da7f1e3fc643f0c3048fa86a2293a1b8f
parent19262ee0725a09b7c621a3d2eb66ba1513ae932a
Fix Thumb2 aliasing complementary instructions taking modified immediates

There are many Thumb instructions which take 12-bit immediates encoded in a special
8-byte value + 4-byte rotator form. Not all numbers are represented, and it's legal
to transform an assembly instruction to be able to encode the immediate.

For example: AND and BIC are complementary instructions; one can switch the AND
to a BIC as long as the immediate is complemented.

The intent is to switch one instruction into its complementary one when the immediate
cannot be encoded in the form requested in the original assembly and when the
complementary immediate is encodable.

The patch addresses two issues:
1. definition of t2SOImmNot immediate - it has to check that the orignal value is
not encoded naturally
2. t2AND and t2BIC instruction aliases which should use the Thumb2 SOImm operand
rather than the ARM one.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188548 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMInstrThumb2.td
lib/Target/ARM/AsmParser/ARMAsmParser.cpp
test/MC/ARM/basic-thumb2-instructions.s