aboutsummaryrefslogtreecommitdiff
path: root/utils/TableGen/NeonEmitter.cpp
AgeCommit message (Collapse)Author
2011-01-07Use __builtin_shufflevector to implement vget_low and vget_high intrinsics.Bob Wilson
This was suggested by Edmund Grimley Evans in pr8411. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123043 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-17Neon intrinsic tests need to be compiled for Cortex-A9 for f16 support.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122015 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-15Teach the Neon intrinsic generator to widen half-precision float types.Bob Wilson
This isn't currently used for anything but I ran into it when experimenting with some changes, and it might be useful in the future. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121911 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-15Add a Neon intrinsic test generator.Bob Wilson
This is still a WIP. It's already good enough to expose a few bugs, though. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121868 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-15Fix Neon intrinsic immediate range checking for some double-register operands.Bob Wilson
Some quad-register intrinsics with lane operands only take a double-register operand for the vector containing the lane. The valid range of lane numbers is then half as big as you would expect from the quad-register type. Note: This currently has no effect because those intrinsics are now handled entirely in the header file using __builtin_shufflevector, which does its own range checking, but I want to use this for generating tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121867 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-10The Neon vqdmlsl_lane and vqdmlal_lane intrinsics have 4 arguments, not 3.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121469 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-0980-column fixes.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121395 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-09Add a license comment to the generated arm_neon.h header.Bob Wilson
Remove the previous header. I don't think we need to expose to end users that we use TableGen to produce our version of arm_neon.h, and that header was also using doubleslash comments which could be a problem when using it in strict C89 compilations. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121390 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-08Add operators for "_lane" variants of some saturating Neon multiply intrinsicsBob Wilson
so they can be implemented without separate clang builtins. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121299 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-08Add operators for vabdl and vabal so they can be implemented without builtins.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121287 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-08Remove unused function parameter.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121286 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-08Add an operator for vaba so it can be implemented using vabd.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121276 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-08Add operators for vadd[lw] and vsub[lw]Bob Wilson
so they can be implemented without clang builtins. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121213 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-07Add operators for vmlal{_n,_lane} and vmlsl{_n,_lane}Bob Wilson
so they can be implemented without clang builtins. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121209 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-07Emit vmovl intrinsics first in the arm_neon.h headerBob Wilson
so they can be used in the implementations of other intrinsics. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121208 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-07Add an operator for vdup_lane so it can be implemented without a clang builtin.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121190 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-07Add an operator for vmull_lane so it can be implemented without a clang builtin.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121187 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-07Add new built-in operations for vmull and vmull_nBob Wilson
so they can be implemented without requiring clang builtins. Radar 8446238. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121173 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-07Add an OpReinterpret operation to TableGen's NeonEmitter.Bob Wilson
An OpReinterpret entry is handled by translating it to OpCast intrinsics for all combinations of source and destination types with the same total size. This will be used to generate all the vreinterpret intrinsics. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121087 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-07Fix whitespace.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121086 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-04Remove trailing whitespace.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120891 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-03Get Neon intrinsic names from the new "Name" field in the tblgen recordsBob Wilson
instead of just converting the record name to lowercase. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120809 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-03Add support for "_lane" variants of VMUL, VMLA, and VMLS Neon intrinsics.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120764 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-03Support using macros for Neon intrinsics implemented without builtins.Bob Wilson
Intrinsics implemented with Clang builtins could already be implemented as either inline functions or macros, but intrinsics implemented directly (without builtins) could only be inline functions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120763 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-02Simplify code in Neon intrinsics. No functional changes intended.Bob Wilson
For most intrinsics, there is no need to allocate a temporary to hold the result value; just return it directly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120695 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-02Assign arguments of Neon intrinsic macros to local temporaries.Bob Wilson
Since we're casting them for the calls to the builtins, we need this to make sure their types get checked in the same way they would if the intrinsics were implemented as inline functions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120693 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-02Use statement expressions in Neon intrinsics defined as macros.Bob Wilson
This is in preparation for adding assignments to temporaries to ensure that the proper type checking is done. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120649 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-02Add casts for splatted scalars in calls to Neon builtins.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120641 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-02Add a missing cast for Neon vsbl results.Bob Wilson
The bitwise operations are always done with unsigned values, but the result may be signed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120640 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-02Add another missing cast for Neon vcombine results.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120639 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-02Add casts in arm_neon.h for result values in inline functions as well as macros.Bob Wilson
We should not rely on lax-vector-conversions for these intrinsics to work. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120638 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-02Avoid "char" for Neon vector elements; make it explicitly signed (or unsigned).Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120632 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-02Cast scalar results of Neon macros to the correct type.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120631 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-01Add explicit casts for vector arguments to Neon builtins.Bob Wilson
This avoids warnings with -Wvector-conversions. Radar 8228022. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120597 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-01Add some comments for TableGen's NeonEmitter.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120596 91177308-0d34-0410-b5e6-96231b3b80d8
2010-12-01Cleanup: simplify checks for integers between 2 and 4.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120595 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-23Fix copy-and-paste error in exception message.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120033 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-18Change the 'x' type modifier for Neon intrinsics to force a signed integer.Bob Wilson
This makes it symmetric with the 'u' modifier that forces an unsigned type. This is needed for unsigned vector shifts, where the shift amount still needs to be signed. PR8482 (Radar 8603521). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119742 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-16Use new neon_vector_type and neon_polyvector_type attributes for Neon vectors.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119406 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-16Change Neon polynomial types to be signed to match GCC.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119405 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-16Refactor to new GetNumElements function.Bob Wilson
No functional change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119404 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-16Tidy up some things in <arm_neon.h>.Bob Wilson
Stop defining types with "__neon_" prefixes and then using typedefs without the prefix; there's no reason to do that anymore. Remove types that combine multiple Neon vectors and treat them as a single long vector; they are not used. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119369 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-16Reapply "Stop using struct wrappers for Neon vector types in <arm_neon.h>."Bob Wilson
I've temporarily disabled the failing clang test. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119367 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-16Revert "Stop using struct wrappers for Neon vector types in <arm_neon.h>."Bob Wilson
It's breaking buildbots. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119363 91177308-0d34-0410-b5e6-96231b3b80d8
2010-11-16Stop using struct wrappers for Neon vector types in <arm_neon.h>.Bob Wilson
Thanks to Nate Begeman for an earlier version of this patch. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119358 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-23Revert r114596, it's breaking a few tests.Nate Begeman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114659 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-22<rdar://problem/8228022> Wvector-conversions warnings in arm_neon.hNate Begeman
Explicitly cast arguments to the type the builtin expects, which is <vN x i8> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@114596 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-15Use float64 instead of int64 vector elements for NEON vget_low and vget_highBob Wilson
functions, since int64 is not a legal type and using it leads to inefficient code. PR8036. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113919 91177308-0d34-0410-b5e6-96231b3b80d8
2010-09-14Tidy whitespace in generated arm_neon.h.Bob Wilson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@113865 91177308-0d34-0410-b5e6-96231b3b80d8
2010-08-06Add tablegen support for vdup_laneNate Begeman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110419 91177308-0d34-0410-b5e6-96231b3b80d8