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)
commita0199b9a594151cd8889665de57ab2b3f69ee137
tree7c444e993f3b12062c93ed4b1c0771c4329ab23f
parent9efe625962156bf389aa18c447e38b5b0efcafb9
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.

llvm-svn: 223113
llvm/lib/Target/ARM/ARMInstrInfo.td
llvm/lib/Target/ARM/ARMMCInstLower.cpp
llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.cpp
llvm/lib/Target/ARM/InstPrinter/ARMInstPrinter.h
llvm/lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
llvm/test/MC/ARM/basic-arm-instructions.s
llvm/test/MC/ARM/diagnostics.s
llvm/test/MC/ARM/thumb-diagnostics.s
llvm/test/MC/Disassembler/ARM/arm-tests.txt
llvm/test/MC/Disassembler/ARM/basic-arm-instructions.txt