Add support for ARM modified-immediate assembly syntax.
authorAsiri Rathnayake <asiri.rathnayake@arm.com>
Tue, 2 Dec 2014 10:53:20 +0000 (10:53 +0000)
committerAsiri Rathnayake <asiri.rathnayake@arm.com>
Tue, 2 Dec 2014 10:53:20 +0000 (10:53 +0000)
commitdc05f3a64ba3e1b12a9c0347beb40c834def256f
tree140b71045a0dd0f5e1c55bdf54ef16a87c021bed
parentfc3aa4b4cdb2a451a2cb526736b822613a9aa120
Add support for ARM modified-immediate assembly syntax.

Certain ARM instructions accept 32-bit immediate operands encoded as a 8-bit
integer value (0-255) and a 4-bit rotation (0-30, even). Current ARM assembly
syntax support in LLVM allows the decoded (32-bit) immediate to be specified
as a single immediate operand for such instructions:

mov r0, #4278190080

The ARMARM defines an extended assembly syntax allowing the encoding to be made
more explicit, as in:

mov r0, #255, #8 ; (same 32-bit value as above)

The behaviour of the two instructions can be different w.r.t flags, which is
documented under "Modified immediate constants" in ARMARM. This patch enables
support for this extended syntax at the MC layer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223113 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/ARM/ARMInstrInfo.td
lib/Target/ARM/ARMMCInstLower.cpp
lib/Target/ARM/AsmParser/ARMAsmParser.cpp
lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
lib/Target/ARM/InstPrinter/ARMInstPrinter.h
lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
test/MC/ARM/basic-arm-instructions.s
test/MC/ARM/diagnostics.s
test/MC/ARM/thumb-diagnostics.s
test/MC/Disassembler/ARM/arm-tests.txt
test/MC/Disassembler/ARM/basic-arm-instructions.txt