From: Charles Baylis <charles.bay...@linaro.org>

Previous discussion: https://gcc.gnu.org/ml/gcc-patches/2015-10/msg00657.html

This is a minor update to the previous patch set, fixing one coding style issue
in the first patch, and adding a fourth patch for which there are two options,
described below.

  [ARM] PR63870 Add qualifiers for NEON builtins
  [ARM] PR63870 Mark lane indices of vldN/vstN with appropriate
    qualifier
  [ARM] PR63870 Add test cases

These two patches are alternate options. Alan suggested removing the error
checks at assembly time, since the user-supplied lane number is always be
checked earlier. I thought it might be better to catch this case as an internal
error, to guard against future bugs.. If we don't use the internal error, then
the assembler will catch use of invalid lane numbers. Not sure which is
prefered, so both options are presented. Either one can be applied:
  [ARM] PR63870 Use internal_error() for invalid lane numbers
  [ARM] PR63870 Remove error for invalid lane numbers

Passes make check for arm-unknown-linux-gnueabihf and
armeb-unknown-linux-gnueabihf with no regressions. As mentioned in the last
thread, the new *_f16 tests fail on armeb-* due to unrelated problems with
half float moves. 

OK for trunk? I prefer patch 4a, but will commit 4b if that is prefered.

 gcc/config/arm/arm-builtins.c                      | 52 +++++++-----
 gcc/config/arm/arm.c                               |  1 +
 gcc/config/arm/arm.h                               |  3 +
 gcc/config/arm/neon.md                             | 97 ++++++++--------------
 .../advsimd-intrinsics/vld2_lane_f16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2_lane_f32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2_lane_f64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2_lane_p8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vld2_lane_s16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2_lane_s32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2_lane_s64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2_lane_s8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vld2_lane_u16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2_lane_u32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2_lane_u64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2_lane_u8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vld2q_lane_f16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld2q_lane_f32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld2q_lane_f64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld2q_lane_p8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2q_lane_s16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld2q_lane_s32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld2q_lane_s64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld2q_lane_s8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld2q_lane_u16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld2q_lane_u32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld2q_lane_u64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld2q_lane_u8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_f16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_f32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_f64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_p8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vld3_lane_s16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_s32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_s64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_s8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vld3_lane_u16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_u32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_u64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3_lane_u8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vld3q_lane_f16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld3q_lane_f32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld3q_lane_f64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld3q_lane_p8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3q_lane_s16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld3q_lane_s32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld3q_lane_s64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld3q_lane_s8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld3q_lane_u16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld3q_lane_u32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld3q_lane_u64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld3q_lane_u8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_f16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_f32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_f64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_p8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vld4_lane_s16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_s32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_s64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_s8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vld4_lane_u16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_u32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_u64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4_lane_u8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vld4q_lane_f16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld4q_lane_f32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld4q_lane_f64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld4q_lane_p8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4q_lane_s16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld4q_lane_s32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld4q_lane_s64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld4q_lane_s8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vld4q_lane_u16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld4q_lane_u32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld4q_lane_u64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vld4q_lane_u8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_f16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_f32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_f64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_p8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vst2_lane_s16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_s32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_s64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_s8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vst2_lane_u16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_u32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_u64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2_lane_u8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vst2q_lane_f16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst2q_lane_f32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst2q_lane_f64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst2q_lane_p8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2q_lane_s16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst2q_lane_s32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst2q_lane_s64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst2q_lane_s8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst2q_lane_u16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst2q_lane_u32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst2q_lane_u64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst2q_lane_u8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_f16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_f32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_f64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_p8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vst3_lane_s16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_s32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_s64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_s8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vst3_lane_u16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_u32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_u64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3_lane_u8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vst3q_lane_f16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst3q_lane_f32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst3q_lane_f64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst3q_lane_p8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3q_lane_s16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst3q_lane_s32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst3q_lane_s64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst3q_lane_s8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst3q_lane_u16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst3q_lane_u32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst3q_lane_u64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst3q_lane_u8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_f16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_f32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_f64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_p8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vst4_lane_s16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_s32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_s64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_s8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vst4_lane_u16_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_u32_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_u64_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4_lane_u8_indices_1.c    |  5 +-
 .../advsimd-intrinsics/vst4q_lane_f16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst4q_lane_f32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst4q_lane_f64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst4q_lane_p8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4q_lane_s16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst4q_lane_s32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst4q_lane_s64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst4q_lane_s8_indices_1.c   |  5 +-
 .../advsimd-intrinsics/vst4q_lane_u16_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst4q_lane_u32_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst4q_lane_u64_indices_1.c  |  5 +-
 .../advsimd-intrinsics/vst4q_lane_u8_indices_1.c   |  5 +-
 148 files changed, 358 insertions(+), 515 deletions(-)

-- 
1.9.1

Reply via email to