Add bounds checking to vqdm*_lane intrinsics via a qualifier that also flips endianness
authorAlan Lawrence <alan.lawrence@arm.com>
Wed, 12 Nov 2014 18:51:53 +0000 (18:51 +0000)
committerAlan Lawrence <alalaw01@gcc.gnu.org>
Wed, 12 Nov 2014 18:51:53 +0000 (18:51 +0000)
commit2a49c16d6be771586b39bcb156e9619d68bf4662
tree37a7c4094db1d2f1f13bcb74ea4d5eac1f0f5a75
parent0a00227221552d6951346876790bd0570de5b5be
Add bounds checking to vqdm*_lane intrinsics via a qualifier that also flips endianness

gcc/:

* config/aarch64/aarch64.c (aarch64_simd_lane_bounds): Display indices.

* config/aarch64/aarch64-builtins.c (enum aarch64_type_qualifiers): Add
qualifier_lane_index.
(aarch64_types_ternop_lane_qualifiers, TYPES_TERNOP_LANE): Rename to...
(aarch64_types_quadop_lane_qualifiers, TYPES_QUADOP_LANE): ...these.
(aarch64_types_ternop_lane_qualifiers, TYPES_TERNOP_LANE): New.

(aarch64_types_getlane_qualifiers): Rename to...
(aarch64_types_binop_imm_qualifiers): ...this.
(TYPES_SHIFTIMM): Follow renaming.
(TYPES_GETLANE): Rename to...
(TYPE_GETREG): ...this.

(aarch64_types_setlane_qualifiers): Rename to...
(aarch64_type_ternop_imm_qualifiers): ...this.
(TYPES_SHIFTINSERT, TYPES_SHIFTACC): Follow renaming.
(TYPES_SETLANE): Follow renaming above, and rename self to...
(TYPE_SETREG): ...this.

(enum builtin_simd_arg): Add SIMD_ARG_LANE_INDEX.
(aarch64_simd_expand_args): Add range check and endianness-flip.

(aarch64_simd_expand_builtin): Add mapping for qualifier_lane_index.

* config/aarch64/aarch64-simd.md
(aarch64_sq<r>dmulh_lane<mode>_internal *2): Rename to...
(aarch64_sq<r>dmulh_lane<mode>): ...this, and remove lane bounds check.
(aarch64_sqdmulh_lane<mode> *2, aarch64_sqrdmulh_lane<mode> *2): Delete.

(aarch64_sq<r>dmulh_laneq<mode>_internal): Rename to...
(aarch64_sq<r>dmulh_lane<mode>): ...this.

(aarch64_sqdml<SBINQOPS:as>l_lane<mode>_internal *2): Rename to...
(aarch64_sqdml<SBINQOPS:as>l_lane<mode>): ...this.

(aarch64_sqdml<SBINQOPS:as>l_laneq<mode>_internal *2): Rename to...
(aarch64_sqdml<SBINQOPS:as>l_laneq<mode>): ...this.

(aarch64_sqdmull_lane<mode>_internal *2): Rename to...
(aarch64_sqdmull_lane<mode>): ...this.

(aarch64_sqdmull_laneq<mode>_internal *2): Rename to...
(aarch64_sqdmull_laneq<mode>): ...this.

(aarch64_sqdmulh_laneq<mode>, aarch64_sqrdmulh_laneq<mode>,
(aarch64_sqdmlal_lane<mode>, aarch64_sqdmlal_laneq<mode>,
aarch64_sqdmlsl_lane<mode>, aarch64_sqdmlsl_laneq<mode>,
aarch64_sqdmull_lane<mode>, aarch64_sqdmull_laneq<mode>): Delete.

(aarch64_sqdmlal2_lane<mode>, aarch64_sqdmlal2_laneq<mode>,
aarch64_sqdmlsl2_lane<mode>, aarch64_sqdmlsl2_laneq<mode>,
aarch64_sqdmull2_lane<mode>, aarch64_sqdmull2_laneq<mode>): Remove
bounds check and lane flip.

* config/aarch64/aarch64-simd-builtins.def (be_checked_get_lane,
get_dregoi, get_dregci, getdregxi, get_qregoi,get_qregci, get_qregxi,
set_qregoi, set_qregci, set_qregxi): Change qualifiers to GETREG.

(sqdmlal_lane, sqdmlsl_lane, sqdmlal_laneq, sqdmlsl_laneq,
sqdmlal2_lane, sqdmlsl2_lane, sqdmlal2_laneq, sqdmlsl2_laneq): Follow
renaming of TERNOP_LANE to QUADOP_LANE.

(sqdmull_lane, sqdmull_laneq, sqdmull2_lane, sqdmull2_laneq,
sqdmulh_lane, sqdmulh_laneq, sqrdmulh_lane, sqrdmulh_laneq): Set
qualifiers to TERNOP_LANE.

gcc/testsuite/:

         * gcc.target/aarch64/simd/vqdmlal_high_lane_s16_indices_1.c: New test.
         * gcc.target/aarch64/simd/vqdmlal_high_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlal_high_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlal_high_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlal_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlal_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlal_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlal_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlalh_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlals_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlsl_high_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlsl_high_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlsl_high_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlsl_high_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlsl_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlsl_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlsl_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlsl_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlslh_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmlsls_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulh_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulh_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulh_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulh_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulhh_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulhq_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulhq_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulhq_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulhq_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulhs_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmull_high_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmull_high_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmull_high_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmull_high_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmull_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmull_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmull_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmull_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmullh_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqdmulls_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulh_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulh_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulh_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulh_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulhh_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulhq_lane_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulhq_lane_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulhq_laneq_s16_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulhq_laneq_s32_indices_1.c: Likewise.
         * gcc.target/aarch64/simd/vqrdmulhs_lane_s32_indices_1.c: Likewise.

From-SVN: r217440
56 files changed:
gcc/ChangeLog
gcc/config/aarch64/aarch64-builtins.c
gcc/config/aarch64/aarch64-simd-builtins.def
gcc/config/aarch64/aarch64-simd.md
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_high_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_high_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_high_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_high_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlal_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlalh_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlals_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_high_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_high_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_high_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_high_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlsl_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlslh_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmlsls_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulh_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulh_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulh_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulh_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulhh_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulhq_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulhq_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulhq_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulhq_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulhs_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmull_high_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmull_high_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmull_high_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmull_high_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmull_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmull_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmull_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmull_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmullh_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqdmulls_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulh_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulhh_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulhq_lane_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulhq_lane_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulhq_laneq_s16_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulhq_laneq_s32_indices_1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/aarch64/simd/vqrdmulhs_lane_s32_indices_1.c [new file with mode: 0644]