| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This commit starts with a "git mv ARM64 AArch64" and continues out
from there, renaming the C++ classes, intrinsics, and other
target-local objects for consistency.
"ARM64" test directories are also moved, and tests that began their
life in ARM64 use an arm64 triple, those from AArch64 use an aarch64
triple. Both should be equivalent though.
This finishes the AArch64 merge, and everyone should feel free to
continue committing as normal now.
llvm-svn: 209577
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
TableGen has a fairly dubious heuristic to decide whether an alias should be
printed: does the alias have lest operands than the real instruction. This is
bad enough (particularly with no way to override it), but it should at least be
calculated consistently for both strings.
This patch implements that logic: first get the *correct* string for the
variant, in the same way as the Matcher, without guessing; then count the
number of whitespace chars.
There are basically 4 changes this brings about after the previous
commits; all of these appear to be good, so I have changed the tests:
+ ARM64: we print "neg X, Y" instead of "sub X, xzr, Y".
+ ARM64: we skip implicit "uxtx" and "uxtw" modifiers.
+ Sparc: we print "mov A, B" instead of "or %g0, A, B".
+ Sparc: we print "fcmpX A, B" instead of "fcmpX %fcc0, A, B"
llvm-svn: 208969
|
| |
|
|
|
|
|
|
| |
In all cases, if a "mov" alias exists, it is the canonical form of the
instruction. Now that TableGen can support aliases containing syntax variants,
we can enable them and improve the quality of the asm output.
llvm-svn: 208874
|
| |
|
|
|
|
|
| |
To get at least one use of the change (and some actual tests) in with its
commit, I've enabled the AArch64 & ARM64 NEON mov aliases.
llvm-svn: 208867
|
| |
|
|
|
|
|
| |
The canonical form of the BFM instruction is always one of the more explicit
extract or insert operations, which makes reading output much easier.
llvm-svn: 207752
|
| |
|
|
| |
llvm-svn: 207669
|
| |
|
|
|
|
|
| |
The canonical syntax for shifts by a variable amount does not end with 'v', but
that syntax should be supported as an alias (presumably for legacy reasons).
llvm-svn: 207649
|
| |
|
|
|
|
|
|
| |
Since these are mostly used in "lsl #16", "lsl #32", "lsl #48" combinations to
piece together an immediate in 16-bit chunks, hex is probably the most
appropriate format.
llvm-svn: 207635
|
| |
|
|
|
|
|
|
|
|
| |
This is mostly aimed at the NEON logical operations and MOVI/MVNI (since they
accept weird shifts which are more naturally understandable in hex notation).
Also changes BRK/HINT etc, which is probably a neutral change, but easier than
the alternative.
llvm-svn: 207634
|
| |
|
|
|
|
|
|
|
|
| |
Since these instructions only accept a 12-bit immediate, possibly shifted left
by 12, the canonical syntax used by the architecture reference manual is "#N {,
lsl #12 }". We should accept an immediate that has already been shifted, (e.g.
Also, print a comment giving the full addend since it can be helpful.
llvm-svn: 207633
|
| |
|
|
| |
llvm-svn: 207219
|
| |
|
|
|
|
|
| |
According to the specification, CRC is an optional extension of the
architecture.
llvm-svn: 207214
|
| |
|
|
|
|
|
|
| |
AArch64 has feature predicates for NEON, FP and CRYPTO instructions.
This allows the compiler to generate code without using FP, NEON
or CRYPTO instructions.
llvm-svn: 206949
|
| |
|
|
|
|
| |
consistant.
llvm-svn: 205898
|
| |
|
|
| |
llvm-svn: 205897
|
| |
|
|
| |
llvm-svn: 205896
|
| |
|
|
| |
llvm-svn: 205895
|
| |
|
|
| |
llvm-svn: 205893
|
| |
|
|
| |
llvm-svn: 205890
|
| |
|
|
|
|
| |
dumb alias.
llvm-svn: 205889
|
| |
|
|
| |
llvm-svn: 205887
|
| |
|
|
| |
llvm-svn: 205885
|
| |
|
|
| |
llvm-svn: 205884
|
| |
|
|
|
|
| |
zero but should be decoded/disassembled with any value.
llvm-svn: 205883
|
| |
|
|
| |
llvm-svn: 205882
|
| |
|
|
|
|
| |
the top bit of their immediate clear.
llvm-svn: 205881
|
| |
|
|
| |
llvm-svn: 205879
|
| |
|
|
| |
llvm-svn: 205877
|
| |
|
|
|
|
| |
stores, so the unused register fields are set to all-ones canonically but are recognised with any value.
llvm-svn: 205874
|
| |
|
|
|
|
| |
disassembly and assembly. This removes the last users of namespace ARM64SYS.
llvm-svn: 205869
|
| |
|
|
|
|
| |
using AArch64-style system registers, and fix up test failures discovered in the process.
llvm-svn: 205868
|
| |
|
|
|
|
| |
also (for add/sub only) if shift=11.
llvm-svn: 205865
|
| |
|
|
| |
llvm-svn: 205860
|
| |
|
|
|
|
| |
instructions is unallocated if shift > 4.
llvm-svn: 205859
|
| |
|
|
|
|
| |
00x or 10x are undefined.
llvm-svn: 205858
|
|
|
This adds a second implementation of the AArch64 architecture to LLVM,
accessible in parallel via the "arm64" triple. The plan over the
coming weeks & months is to merge the two into a single backend,
during which time thorough code review should naturally occur.
Everything will be easier with the target in-tree though, hence this
commit.
llvm-svn: 205090
|