]> granicus.if.org Git - llvm/commit
[ARM] Add the non-MVE instructions in Arm v8.1-M.
authorSimon Tatham <simon.tatham@arm.com>
Tue, 11 Jun 2019 09:29:18 +0000 (09:29 +0000)
committerSimon Tatham <simon.tatham@arm.com>
Tue, 11 Jun 2019 09:29:18 +0000 (09:29 +0000)
commit9837211609916dde5f9d64b5a74223ab7fa33601
tree29f0c927ae82124aede0f1f37115c5231bc99699
parenta813b38069df4b8b08172641886c8c8dc6720720
[ARM] Add the non-MVE instructions in Arm v8.1-M.

This adds support for the new family of conditional selection /
increment / negation instructions; the low-overhead branch
instructions (e.g. BF, WLS, DLS); the CLRM instruction to zero a whole
list of registers at once; the new VMRS/VMSR and VLDR/VSTR
instructions to get data in and out of 8.1-M system registers,
particularly including the new VPR register used by MVE vector
predication.

To support this, we also add a register name 'zr' (used by the CSEL
family to force one of the inputs to the constant 0), and operand
types for lists of registers that are also allowed to include APSR or
VPR (used by CLRM). The VLDR/VSTR instructions also need a new
addressing mode.

The low-overhead branch instructions exist in their own separate
architecture extension, which we treat as enabled by default, but you
can say -mattr=-lob or equivalent to turn it off.

Reviewers: dmgreen, samparker, SjoerdMeijer, t.p.northover

Reviewed By: samparker

Subscribers: miyuki, javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D62667

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363039 91177308-0d34-0410-b5e6-96231b3b80d8
38 files changed:
include/llvm/BinaryFormat/ELFRelocs/ARM.def
include/llvm/Support/ARMTargetParser.def
include/llvm/Support/ARMTargetParser.h
lib/Target/ARM/ARM.td
lib/Target/ARM/ARMAsmPrinter.cpp
lib/Target/ARM/ARMBaseInstrInfo.cpp
lib/Target/ARM/ARMBaseRegisterInfo.cpp
lib/Target/ARM/ARMInstrFormats.td
lib/Target/ARM/ARMInstrInfo.td
lib/Target/ARM/ARMInstrThumb2.td
lib/Target/ARM/ARMInstrVFP.td
lib/Target/ARM/ARMPredicates.td
lib/Target/ARM/ARMRegisterInfo.td
lib/Target/ARM/ARMScheduleA57.td
lib/Target/ARM/ARMSubtarget.h
lib/Target/ARM/AsmParser/ARMAsmParser.cpp
lib/Target/ARM/Disassembler/ARMDisassembler.cpp
lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
lib/Target/ARM/MCTargetDesc/ARMBaseInfo.h
lib/Target/ARM/MCTargetDesc/ARMELFObjectWriter.cpp
lib/Target/ARM/MCTargetDesc/ARMFixupKinds.h
lib/Target/ARM/MCTargetDesc/ARMInstPrinter.cpp
lib/Target/ARM/MCTargetDesc/ARMInstPrinter.h
lib/Target/ARM/MCTargetDesc/ARMMCCodeEmitter.cpp
lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.cpp
lib/Target/ARM/Thumb2InstrInfo.cpp
test/CodeGen/ARM/ipra-reg-usage.ll
test/MC/ARM/clrm-asm.s [new file with mode: 0644]
test/MC/ARM/thumbv8.1m-vmrs-vmsr.s [new file with mode: 0644]
test/MC/ARM/thumbv8.1m.s [new file with mode: 0644]
test/MC/ARM/vscclrm-asm.s [new file with mode: 0644]
test/MC/ARM/vstrldr_sys.s [new file with mode: 0644]
test/MC/Disassembler/ARM/clrm.txt [new file with mode: 0644]
test/MC/Disassembler/ARM/thumb2-v8.1m.txt [new file with mode: 0644]
test/MC/Disassembler/ARM/thumbv8.1m-vmrs-vmsr.txt [new file with mode: 0644]
test/MC/Disassembler/ARM/thumbv8.1m.s [new file with mode: 0644]
test/MC/Disassembler/ARM/vscclrm.txt [new file with mode: 0644]
test/MC/Disassembler/ARM/vstrldr_sys.txt [new file with mode: 0644]