AArch64: add initial NEON support
authorTim Northover <tnorthover@apple.com>
Thu, 1 Aug 2013 09:20:35 +0000 (09:20 +0000)
committerTim Northover <tnorthover@apple.com>
Thu, 1 Aug 2013 09:20:35 +0000 (09:20 +0000)
commit87773c318fcee853fb34a80a10c4347d523bdafb
tree6c8b6620d46529f553a508e9190a264534e0a0dd
parent691aa094dafe54151b6f70168f066bd87c161e8d
AArch64: add initial NEON support

Patch by Ana Pazos.

- Completed implementation of instruction formats:
AdvSIMD three same
AdvSIMD modified immediate
AdvSIMD scalar pairwise

- Completed implementation of instruction classes
(some of the instructions in these classes
belong to yet unfinished instruction formats):
Vector Arithmetic
Vector Immediate
Vector Pairwise Arithmetic

- Initial implementation of instruction formats:
AdvSIMD scalar two-reg misc
AdvSIMD scalar three same

- Intial implementation of instruction class:
Scalar Arithmetic

- Initial clang changes to support arm v8 intrinsics.
Note: no clang changes for scalar intrinsics function name mangling yet.

- Comprehensive test cases for added instructions
To verify auto codegen, encoding, decoding, diagnosis, intrinsics.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187567 91177308-0d34-0410-b5e6-96231b3b80d8
66 files changed:
include/llvm/IR/Intrinsics.td
include/llvm/IR/IntrinsicsAArch64.td [new file with mode: 0644]
lib/Target/AArch64/AArch64CallingConv.td
lib/Target/AArch64/AArch64ISelLowering.cpp
lib/Target/AArch64/AArch64ISelLowering.h
lib/Target/AArch64/AArch64InstrFormats.td
lib/Target/AArch64/AArch64InstrInfo.td
lib/Target/AArch64/AArch64InstrNEON.td [new file with mode: 0644]
lib/Target/AArch64/AArch64MCInstLower.cpp
lib/Target/AArch64/AArch64RegisterInfo.td
lib/Target/AArch64/AArch64Subtarget.cpp
lib/Target/AArch64/AArch64Subtarget.h
lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
lib/Target/AArch64/Disassembler/AArch64Disassembler.cpp
lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp
lib/Target/AArch64/InstPrinter/AArch64InstPrinter.h
lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp
lib/Target/AArch64/Utils/AArch64BaseInfo.cpp
lib/Target/AArch64/Utils/AArch64BaseInfo.h
test/CodeGen/AArch64/complex-copy-noneon.ll [new file with mode: 0644]
test/CodeGen/AArch64/inline-asm-constraints.ll
test/CodeGen/AArch64/neon-aba-abd.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-add-pairwise.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-add-sub.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-bitcast.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-bitwise-instructions.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-compare-instructions.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-facge-facgt.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-fma.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-frsqrt-frecp.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-halving-add-sub.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-max-min-pairwise.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-max-min.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-mla-mls.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-mov.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-mul-div.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-rounding-halving-add.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-rounding-shift.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-saturating-add-sub.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-saturating-rounding-shift.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-saturating-shift.ll [new file with mode: 0644]
test/CodeGen/AArch64/neon-shift.ll [new file with mode: 0644]
test/MC/AArch64/basic-a64-diagnostics.s
test/MC/AArch64/basic-a64-instructions.s
test/MC/AArch64/neon-aba-abd.s [new file with mode: 0644]
test/MC/AArch64/neon-add-pairwise.s [new file with mode: 0644]
test/MC/AArch64/neon-add-sub-instructions.s [new file with mode: 0644]
test/MC/AArch64/neon-bitwise-instructions.s [new file with mode: 0644]
test/MC/AArch64/neon-compare-instructions.s [new file with mode: 0644]
test/MC/AArch64/neon-diagnostics.s [new file with mode: 0644]
test/MC/AArch64/neon-facge-facgt.s [new file with mode: 0644]
test/MC/AArch64/neon-frsqrt-frecp.s [new file with mode: 0644]
test/MC/AArch64/neon-halving-add-sub.s [new file with mode: 0644]
test/MC/AArch64/neon-max-min-pairwise.s [new file with mode: 0644]
test/MC/AArch64/neon-max-min.s [new file with mode: 0644]
test/MC/AArch64/neon-mla-mls-instructions.s [new file with mode: 0644]
test/MC/AArch64/neon-mov.s [new file with mode: 0644]
test/MC/AArch64/neon-mul-div-instructions.s [new file with mode: 0644]
test/MC/AArch64/neon-rounding-halving-add.s [new file with mode: 0644]
test/MC/AArch64/neon-rounding-shift.s [new file with mode: 0644]
test/MC/AArch64/neon-saturating-add-sub.s [new file with mode: 0644]
test/MC/AArch64/neon-saturating-rounding-shift.s [new file with mode: 0644]
test/MC/AArch64/neon-saturating-shift.s [new file with mode: 0644]
test/MC/AArch64/neon-shift.s [new file with mode: 0644]
test/MC/AArch64/noneon-diagnostics.s [new file with mode: 0644]
test/MC/Disassembler/AArch64/neon-instructions.txt [new file with mode: 0644]