This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 3/4][AArch64]Remove be_checked_get_lane, check bounds with __builtin_aarch64_im_lane_boundsi.


The current __builtin_aarch64_be-checked_get_lane<mode\>, on which all arm_neon.h's vget_lane intrinsics rely, has two problems: (a) indices are only checked sporadically; (b) it acts as an opaque block to optimization until expansion - yet is really just a simple vec_select. Both these can be solved by using macros and the existing __builtin_aarch64_im_lane_boundsi. (This should thus improve checking for numerous other intrinsics which are written as GCC vector extensions depending on vget_lane.) Whilst we encourage end-user programmers not to mix programming models (i.e. NEON Intrinsics and GCC Vector Extensions), us doing so in arm_neon.h will generate the most efficient code by allowing the most mid-end optimization.

The mass of similar testcases results from having to tell dejagnu not to inspect line numbers (the actual line number in the source code appears in the inlining history, which is not what dejagnu looks for).

gcc/ChangeLog:

	* config/aarch64/aarch64-simd-builtins.def (be_checked_get_lane):
	Delete.
	* config/aarch64/aarch64-simd.md (aarch64_be_checked_get_lane<mode\>):
	Delete.
	* config/aarch64/arm_neon.h (aarch64_vget_lane_any): Use GCC
	vector extensions, __aarch64_lane, __builtin_aarch64_im_lane_boundsi.
	(__aarch64_vget_lane_f32, __aarch64_vget_lane_f64,
	__aarch64_vget_lane_p8, __aarch64_vget_lane_p16,
	__aarch64_vget_lane_s8, __aarch64_vget_lane_s16,
	__aarch64_vget_lane_s32, __aarch64_vget_lane_s64,
	__aarch64_vget_lane_u8, __aarch64_vget_lane_u16,
	__aarch64_vget_lane_u32, __aarch64_vget_lane_u64,
	__aarch64_vgetq_lane_f32, __aarch64_vgetq_lane_f64,
	__aarch64_vgetq_lane_p8, __aarch64_vgetq_lane_p16,
	__aarch64_vgetq_lane_s8, __aarch64_vgetq_lane_s16,
	__aarch64_vgetq_lane_s32, __aarch64_vgetq_lane_s64,
	__aarch64_vgetq_lane_u8, __aarch64_vgetq_lane_u16,
	__aarch64_vgetq_lane_u32, __aarch64_vgetq_lane_u64): Delete.
	(__aarch64_vdup_lane_any): Use __aarch64_vget_lane_any, remove
	‘q2’ argument.
	(__aarch64_vdup_lane_f32, __aarch64_vdup_lane_f64,
	__aarch64_vdup_lane_p8, __aarch64_vdup_lane_p16,
	__aarch64_vdup_lane_s8, __aarch64_vdup_lane_s16,
	__aarch64_vdup_lane_s32, __aarch64_vdup_lane_s64,
	__aarch64_vdup_lane_u8, __aarch64_vdup_lane_u16,
	__aarch64_vdup_lane_u32, __aarch64_vdup_lane_u64,
	__aarch64_vdup_laneq_f32, __aarch64_vdup_laneq_f64,
	__aarch64_vdup_laneq_p8, __aarch64_vdup_laneq_p16,
	__aarch64_vdup_laneq_s8, __aarch64_vdup_laneq_s16,
	__aarch64_vdup_laneq_s32, __aarch64_vdup_laneq_s64,
	__aarch64_vdup_laneq_u8, __aarch64_vdup_laneq_u16,
	__aarch64_vdup_laneq_u32, __aarch64_vdup_laneq_u64): Remove argument
	to __aarch64_vdup_lane_any.
	(vget_lane_f32, vget_lane_f64, vget_lane_p8, vget_lane_p16,
	vget_lane_s8, vget_lane_s16, vget_lane_s32, vget_lane_s64,
	vget_lane_u8, vget_lane_u16, vget_lane_u32, vget_lane_u64,
	vgetq_lane_f32, vgetq_lane_f64, vgetq_lane_p8, vgetq_lane_p16,
	vgetq_lane_s8, vgetq_lane_s16, vgetq_lane_s32, vgetq_lane_s64,
	vgetq_lane_u8, vgetq_lane_u16, vgetq_lane_u32, vgetq_lane_u64,
	vdupb_lane_p8, vdupb_lane_s8, vdupb_lane_u8, vduph_lane_p16,
	vduph_lane_s16, vduph_lane_u16, vdups_lane_f32, vdups_lane_s32,
	vdups_lane_u32, vdupb_laneq_p8, vdupb_laneq_s8, vdupb_laneq_u8,
	vduph_laneq_p16, vduph_laneq_s16, vduph_laneq_u16, vdups_laneq_f32,
	vdups_laneq_s32, vdups_laneq_u32, vdupd_laneq_f64, vdupd_laneq_s64,
	vdupd_laneq_u64, vfmas_lane_f32, vfma_laneq_f64, vfmad_laneq_f64,
	vfmas_laneq_f32, vfmss_lane_f32, vfms_laneq_f64, vfmsd_laneq_f64,
	vfmss_laneq_f32, vmla_lane_f32, vmla_lane_s16, vmla_lane_s32,
	vmla_lane_u16, vmla_lane_u32, vmla_laneq_f32, vmla_laneq_s16,
	vmla_laneq_s32, vmla_laneq_u16, vmla_laneq_u32, vmlaq_lane_f32,
	vmlaq_lane_s16, vmlaq_lane_s32, vmlaq_lane_u16, vmlaq_lane_u32,
	vmlaq_laneq_f32, vmlaq_laneq_s16, vmlaq_laneq_s32, vmlaq_laneq_u16,
	vmlaq_laneq_u32, vmls_lane_f32, vmls_lane_s16, vmls_lane_s32,
	vmls_lane_u16, vmls_lane_u32, vmls_laneq_f32, vmls_laneq_s16,
	vmls_laneq_s32, vmls_laneq_u16, vmls_laneq_u32, vmlsq_lane_f32,
	vmlsq_lane_s16, vmlsq_lane_s32, vmlsq_lane_u16, vmlsq_lane_u32,
	vmlsq_laneq_f32, vmlsq_laneq_s16, vmlsq_laneq_s32, vmlsq_laneq_u16,
	vmlsq_laneq_u32, vmul_lane_f32, vmul_lane_s16, vmul_lane_s32,
	vmul_lane_u16, vmul_lane_u32, vmuld_lane_f64, vmuld_laneq_f64,
	vmuls_lane_f32, vmuls_laneq_f32, vmul_laneq_f32, vmul_laneq_f64,
	vmul_laneq_s16, vmul_laneq_s32, vmul_laneq_u16, vmul_laneq_u32,
	vmulq_lane_f32, vmulq_lane_s16, vmulq_lane_s32, vmulq_lane_u16,
	vmulq_lane_u32, vmulq_laneq_f32, vmulq_laneq_f64, vmulq_laneq_s16,
	vmulq_laneq_s32, vmulq_laneq_u16, vmulq_laneq_u32) : Use
	__aarch64_vget_lane_any.

gcc/testsuite/ChangeLog:

	* gcc.target/aarch64/simd/vget_lane_f32_indices_1.c: New test.
	* gcc.target/aarch64/simd/vget_lane_f64_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_p16_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_p8_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_s16_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_s32_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_s64_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_s8_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_u16_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_u32_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_u64_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vget_lane_u8_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c: Likewise.
	* gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c: Likewise.
diff --git a/gcc/config/aarch64/aarch64-simd-builtins.def b/gcc/config/aarch64/aarch64-simd-builtins.def
index 1872445543dd3a4fc044c7a7335a335b91179f88..af39d9c2b42eea0bc45ea5bc3d4fc576849cfd65 100644
--- a/gcc/config/aarch64/aarch64-simd-builtins.def
+++ b/gcc/config/aarch64/aarch64-simd-builtins.def
@@ -46,9 +46,6 @@
   VAR1 (UNOP, addp, 0, di)
   BUILTIN_VDQ_BHSI (UNOP, clz, 2)
 
-  /* be_checked_get_lane does its own lane swapping, so not a lane index.  */
-  BUILTIN_VALL (GETREG, be_checked_get_lane, 0)
-
   /* Implemented by aarch64_<sur>q<r>shl<mode>.  */
   BUILTIN_VSDQ_I (BINOP, sqshl, 0)
   BUILTIN_VSDQ_I (BINOP_UUS, uqshl, 0)
diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md
index 2656814e53d3ab2e9fd44bf800dd6316191e2071..49203c94c15c6af9f73c4a184075008749cdf3d3 100644
--- a/gcc/config/aarch64/aarch64-simd.md
+++ b/gcc/config/aarch64/aarch64-simd.md
@@ -2391,22 +2391,9 @@
   [(set_attr "type" "neon_to_gp<q>")]
 )
 
-(define_expand "aarch64_be_checked_get_lane<mode>"
-  [(match_operand:<VEL> 0 "aarch64_simd_nonimmediate_operand")
-   (match_operand:VALL 1 "register_operand")
-   (match_operand:SI 2 "immediate_operand")]
-  "TARGET_SIMD"
-  {
-    operands[2] = GEN_INT (ENDIAN_LANE_N (<MODE>mode, INTVAL (operands[2])));
-    emit_insn (gen_aarch64_get_lane<mode> (operands[0],
-					   operands[1],
-					   operands[2]));
-    DONE;
-  }
-)
-
 ;; Lane extraction of a value, neither sign nor zero extension
 ;; is guaranteed so upper bits should be considered undefined.
+;; RTL uses GCC vector extension indices throughout so flip only for assembly.
 (define_insn "aarch64_get_lane<mode>"
   [(set (match_operand:<VEL> 0 "aarch64_simd_nonimmediate_operand" "=r, w, Utv")
 	(vec_select:<VEL>
diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h
index 409cb8aae400392f5112bcf8f9847170c2cc9c78..9f2a56acabdb77f22d4980706e6fd87e63fcb952 100644
--- a/gcc/config/aarch64/arm_neon.h
+++ b/gcc/config/aarch64/arm_neon.h
@@ -426,183 +426,112 @@ typedef struct poly16x8x4_t
   poly16x8_t val[4];
 } poly16x8x4_t;
 
-/* vget_lane internal macros.  */
-
-#define __aarch64_vget_lane_any(__size, __cast_ret, __cast_a, __a, __b) \
-  (__cast_ret								\
-     __builtin_aarch64_be_checked_get_lane##__size (__cast_a __a, __b))
-
-#define __aarch64_vget_lane_f32(__a, __b) \
-  __aarch64_vget_lane_any (v2sf, , , __a, __b)
-#define __aarch64_vget_lane_f64(__a, __b) __extension__	\
-  ({							\
-    __AARCH64_LANE_CHECK (__a, __b);		\
-    __a[0];						\
-  })
-
-#define __aarch64_vget_lane_p8(__a, __b) \
-  __aarch64_vget_lane_any (v8qi, (poly8_t), (int8x8_t), __a, __b)
-#define __aarch64_vget_lane_p16(__a, __b) \
-  __aarch64_vget_lane_any (v4hi, (poly16_t), (int16x4_t), __a, __b)
-
-#define __aarch64_vget_lane_s8(__a, __b) \
-  __aarch64_vget_lane_any (v8qi, , ,__a, __b)
-#define __aarch64_vget_lane_s16(__a, __b) \
-  __aarch64_vget_lane_any (v4hi, , ,__a, __b)
-#define __aarch64_vget_lane_s32(__a, __b) \
-  __aarch64_vget_lane_any (v2si, , ,__a, __b)
-#define __aarch64_vget_lane_s64(__a, __b) __extension__	\
-  ({							\
-    __AARCH64_LANE_CHECK (__a, __b);		\
-    __a[0];						\
-  })
-
-#define __aarch64_vget_lane_u8(__a, __b) \
-  __aarch64_vget_lane_any (v8qi, (uint8_t), (int8x8_t), __a, __b)
-#define __aarch64_vget_lane_u16(__a, __b) \
-  __aarch64_vget_lane_any (v4hi, (uint16_t), (int16x4_t), __a, __b)
-#define __aarch64_vget_lane_u32(__a, __b) \
-  __aarch64_vget_lane_any (v2si, (uint32_t), (int32x2_t), __a, __b)
-#define __aarch64_vget_lane_u64(__a, __b) __extension__	\
-  ({							\
-    __AARCH64_LANE_CHECK (__a, __b);		\
-    __a[0];						\
-  })
-
-#define __aarch64_vgetq_lane_f32(__a, __b) \
-  __aarch64_vget_lane_any (v4sf, , , __a, __b)
-#define __aarch64_vgetq_lane_f64(__a, __b) \
-  __aarch64_vget_lane_any (v2df, , , __a, __b)
-
-#define __aarch64_vgetq_lane_p8(__a, __b) \
-  __aarch64_vget_lane_any (v16qi, (poly8_t), (int8x16_t), __a, __b)
-#define __aarch64_vgetq_lane_p16(__a, __b) \
-  __aarch64_vget_lane_any (v8hi, (poly16_t), (int16x8_t), __a, __b)
-
-#define __aarch64_vgetq_lane_s8(__a, __b) \
-  __aarch64_vget_lane_any (v16qi, , ,__a, __b)
-#define __aarch64_vgetq_lane_s16(__a, __b) \
-  __aarch64_vget_lane_any (v8hi, , ,__a, __b)
-#define __aarch64_vgetq_lane_s32(__a, __b) \
-  __aarch64_vget_lane_any (v4si, , ,__a, __b)
-#define __aarch64_vgetq_lane_s64(__a, __b) \
-  __aarch64_vget_lane_any (v2di, , ,__a, __b)
-
-#define __aarch64_vgetq_lane_u8(__a, __b) \
-  __aarch64_vget_lane_any (v16qi, (uint8_t), (int8x16_t), __a, __b)
-#define __aarch64_vgetq_lane_u16(__a, __b) \
-  __aarch64_vget_lane_any (v8hi, (uint16_t), (int16x8_t), __a, __b)
-#define __aarch64_vgetq_lane_u32(__a, __b) \
-  __aarch64_vget_lane_any (v4si, (uint32_t), (int32x4_t), __a, __b)
-#define __aarch64_vgetq_lane_u64(__a, __b) \
-  __aarch64_vget_lane_any (v2di, (uint64_t), (int64x2_t), __a, __b)
-
 /* __aarch64_vdup_lane internal macros.  */
-#define __aarch64_vdup_lane_any(__size, __q1, __q2, __a, __b) \
-  vdup##__q1##_n_##__size (__aarch64_vget##__q2##_lane_##__size (__a, __b))
+#define __aarch64_vdup_lane_any(__size, __q, __a, __b) \
+  vdup##__q##_n_##__size (__aarch64_vget_lane_any (__a, __b))
 
 #define __aarch64_vdup_lane_f32(__a, __b) \
-   __aarch64_vdup_lane_any (f32, , , __a, __b)
+   __aarch64_vdup_lane_any (f32, , __a, __b)
 #define __aarch64_vdup_lane_f64(__a, __b) \
-   __aarch64_vdup_lane_any (f64, , , __a, __b)
+   __aarch64_vdup_lane_any (f64, , __a, __b)
 #define __aarch64_vdup_lane_p8(__a, __b) \
-   __aarch64_vdup_lane_any (p8, , , __a, __b)
+   __aarch64_vdup_lane_any (p8, , __a, __b)
 #define __aarch64_vdup_lane_p16(__a, __b) \
-   __aarch64_vdup_lane_any (p16, , , __a, __b)
+   __aarch64_vdup_lane_any (p16, , __a, __b)
 #define __aarch64_vdup_lane_s8(__a, __b) \
-   __aarch64_vdup_lane_any (s8, , , __a, __b)
+   __aarch64_vdup_lane_any (s8, , __a, __b)
 #define __aarch64_vdup_lane_s16(__a, __b) \
-   __aarch64_vdup_lane_any (s16, , , __a, __b)
+   __aarch64_vdup_lane_any (s16, , __a, __b)
 #define __aarch64_vdup_lane_s32(__a, __b) \
-   __aarch64_vdup_lane_any (s32, , , __a, __b)
+   __aarch64_vdup_lane_any (s32, , __a, __b)
 #define __aarch64_vdup_lane_s64(__a, __b) \
-  __aarch64_vdup_lane_any (s64, , , __a, __b)
+  __aarch64_vdup_lane_any (s64, , __a, __b)
 #define __aarch64_vdup_lane_u8(__a, __b) \
-   __aarch64_vdup_lane_any (u8, , , __a, __b)
+   __aarch64_vdup_lane_any (u8, , __a, __b)
 #define __aarch64_vdup_lane_u16(__a, __b) \
-   __aarch64_vdup_lane_any (u16, , , __a, __b)
+   __aarch64_vdup_lane_any (u16, , __a, __b)
 #define __aarch64_vdup_lane_u32(__a, __b) \
-   __aarch64_vdup_lane_any (u32, , , __a, __b)
+   __aarch64_vdup_lane_any (u32, , __a, __b)
 #define __aarch64_vdup_lane_u64(__a, __b) \
-   __aarch64_vdup_lane_any (u64, , , __a, __b)
+   __aarch64_vdup_lane_any (u64, , __a, __b)
 
 /* __aarch64_vdup_laneq internal macros.  */
 #define __aarch64_vdup_laneq_f32(__a, __b) \
-   __aarch64_vdup_lane_any (f32, , q, __a, __b)
+   __aarch64_vdup_lane_any (f32, , __a, __b)
 #define __aarch64_vdup_laneq_f64(__a, __b) \
-   __aarch64_vdup_lane_any (f64, , q, __a, __b)
+   __aarch64_vdup_lane_any (f64, , __a, __b)
 #define __aarch64_vdup_laneq_p8(__a, __b) \
-   __aarch64_vdup_lane_any (p8, , q, __a, __b)
+   __aarch64_vdup_lane_any (p8, , __a, __b)
 #define __aarch64_vdup_laneq_p16(__a, __b) \
-   __aarch64_vdup_lane_any (p16, , q, __a, __b)
+   __aarch64_vdup_lane_any (p16, , __a, __b)
 #define __aarch64_vdup_laneq_s8(__a, __b) \
-   __aarch64_vdup_lane_any (s8, , q, __a, __b)
+   __aarch64_vdup_lane_any (s8, , __a, __b)
 #define __aarch64_vdup_laneq_s16(__a, __b) \
-   __aarch64_vdup_lane_any (s16, , q, __a, __b)
+   __aarch64_vdup_lane_any (s16, , __a, __b)
 #define __aarch64_vdup_laneq_s32(__a, __b) \
-   __aarch64_vdup_lane_any (s32, , q, __a, __b)
+   __aarch64_vdup_lane_any (s32, , __a, __b)
 #define __aarch64_vdup_laneq_s64(__a, __b) \
-   __aarch64_vdup_lane_any (s64, , q, __a, __b)
+   __aarch64_vdup_lane_any (s64, , __a, __b)
 #define __aarch64_vdup_laneq_u8(__a, __b) \
-   __aarch64_vdup_lane_any (u8, , q, __a, __b)
+   __aarch64_vdup_lane_any (u8, , __a, __b)
 #define __aarch64_vdup_laneq_u16(__a, __b) \
-   __aarch64_vdup_lane_any (u16, , q, __a, __b)
+   __aarch64_vdup_lane_any (u16, , __a, __b)
 #define __aarch64_vdup_laneq_u32(__a, __b) \
-   __aarch64_vdup_lane_any (u32, , q, __a, __b)
+   __aarch64_vdup_lane_any (u32, , __a, __b)
 #define __aarch64_vdup_laneq_u64(__a, __b) \
-   __aarch64_vdup_lane_any (u64, , q, __a, __b)
+   __aarch64_vdup_lane_any (u64, , __a, __b)
 
 /* __aarch64_vdupq_lane internal macros.  */
 #define __aarch64_vdupq_lane_f32(__a, __b) \
-   __aarch64_vdup_lane_any (f32, q, , __a, __b)
+   __aarch64_vdup_lane_any (f32, q, __a, __b)
 #define __aarch64_vdupq_lane_f64(__a, __b) \
-   __aarch64_vdup_lane_any (f64, q, , __a, __b)
+   __aarch64_vdup_lane_any (f64, q, __a, __b)
 #define __aarch64_vdupq_lane_p8(__a, __b) \
-   __aarch64_vdup_lane_any (p8, q, , __a, __b)
+   __aarch64_vdup_lane_any (p8, q, __a, __b)
 #define __aarch64_vdupq_lane_p16(__a, __b) \
-   __aarch64_vdup_lane_any (p16, q, , __a, __b)
+   __aarch64_vdup_lane_any (p16, q, __a, __b)
 #define __aarch64_vdupq_lane_s8(__a, __b) \
-   __aarch64_vdup_lane_any (s8, q, , __a, __b)
+   __aarch64_vdup_lane_any (s8, q, __a, __b)
 #define __aarch64_vdupq_lane_s16(__a, __b) \
-   __aarch64_vdup_lane_any (s16, q, , __a, __b)
+   __aarch64_vdup_lane_any (s16, q, __a, __b)
 #define __aarch64_vdupq_lane_s32(__a, __b) \
-   __aarch64_vdup_lane_any (s32, q, , __a, __b)
+   __aarch64_vdup_lane_any (s32, q, __a, __b)
 #define __aarch64_vdupq_lane_s64(__a, __b) \
-   __aarch64_vdup_lane_any (s64, q, , __a, __b)
+   __aarch64_vdup_lane_any (s64, q, __a, __b)
 #define __aarch64_vdupq_lane_u8(__a, __b) \
-   __aarch64_vdup_lane_any (u8, q, , __a, __b)
+   __aarch64_vdup_lane_any (u8, q, __a, __b)
 #define __aarch64_vdupq_lane_u16(__a, __b) \
-   __aarch64_vdup_lane_any (u16, q, , __a, __b)
+   __aarch64_vdup_lane_any (u16, q, __a, __b)
 #define __aarch64_vdupq_lane_u32(__a, __b) \
-   __aarch64_vdup_lane_any (u32, q, , __a, __b)
+   __aarch64_vdup_lane_any (u32, q, __a, __b)
 #define __aarch64_vdupq_lane_u64(__a, __b) \
-   __aarch64_vdup_lane_any (u64, q, , __a, __b)
+   __aarch64_vdup_lane_any (u64, q, __a, __b)
 
 /* __aarch64_vdupq_laneq internal macros.  */
 #define __aarch64_vdupq_laneq_f32(__a, __b) \
-   __aarch64_vdup_lane_any (f32, q, q, __a, __b)
+   __aarch64_vdup_lane_any (f32, q, __a, __b)
 #define __aarch64_vdupq_laneq_f64(__a, __b) \
-   __aarch64_vdup_lane_any (f64, q, q, __a, __b)
+   __aarch64_vdup_lane_any (f64, q, __a, __b)
 #define __aarch64_vdupq_laneq_p8(__a, __b) \
-   __aarch64_vdup_lane_any (p8, q, q, __a, __b)
+   __aarch64_vdup_lane_any (p8, q, __a, __b)
 #define __aarch64_vdupq_laneq_p16(__a, __b) \
-   __aarch64_vdup_lane_any (p16, q, q, __a, __b)
+   __aarch64_vdup_lane_any (p16, q, __a, __b)
 #define __aarch64_vdupq_laneq_s8(__a, __b) \
-   __aarch64_vdup_lane_any (s8, q, q, __a, __b)
+   __aarch64_vdup_lane_any (s8, q, __a, __b)
 #define __aarch64_vdupq_laneq_s16(__a, __b) \
-   __aarch64_vdup_lane_any (s16, q, q, __a, __b)
+   __aarch64_vdup_lane_any (s16, q, __a, __b)
 #define __aarch64_vdupq_laneq_s32(__a, __b) \
-   __aarch64_vdup_lane_any (s32, q, q, __a, __b)
+   __aarch64_vdup_lane_any (s32, q, __a, __b)
 #define __aarch64_vdupq_laneq_s64(__a, __b) \
-   __aarch64_vdup_lane_any (s64, q, q, __a, __b)
+   __aarch64_vdup_lane_any (s64, q, __a, __b)
 #define __aarch64_vdupq_laneq_u8(__a, __b) \
-   __aarch64_vdup_lane_any (u8, q, q, __a, __b)
+   __aarch64_vdup_lane_any (u8, q, __a, __b)
 #define __aarch64_vdupq_laneq_u16(__a, __b) \
-   __aarch64_vdup_lane_any (u16, q, q, __a, __b)
+   __aarch64_vdup_lane_any (u16, q, __a, __b)
 #define __aarch64_vdupq_laneq_u32(__a, __b) \
-   __aarch64_vdup_lane_any (u32, q, q, __a, __b)
+   __aarch64_vdup_lane_any (u32, q, __a, __b)
 #define __aarch64_vdupq_laneq_u64(__a, __b) \
-   __aarch64_vdup_lane_any (u64, q, q, __a, __b)
+   __aarch64_vdup_lane_any (u64, q, __a, __b)
 
 /* Internal macro for lane indices.  */
 
@@ -618,8 +547,15 @@ typedef struct poly16x8x4_t
 #define __aarch64_lane(__vec, __idx) __idx
 #endif
 
-/* vset_lane and vld1_lane internal macro.  */
+/* vget_lane internal macro.  */
+#define __aarch64_vget_lane_any(__vec, __index)				\
+  __extension__								\
+  ({									\
+    __AARCH64_LANE_CHECK (__vec, __index);				\
+    __vec[__aarch64_lane (__vec, __index)];				\
+  })
 
+/* vset_lane and vld1_lane internal macro.  */
 #define __aarch64_vset_lane_any(__elem, __vec, __index)			\
   __extension__								\
   ({									\
@@ -2514,73 +2450,73 @@ vcreate_p16 (uint64_t __a)
 __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vget_lane_f32 (float32x2_t __a, const int __b)
 {
-  return __aarch64_vget_lane_f32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline float64_t __attribute__ ((__always_inline__))
 vget_lane_f64 (float64x1_t __a, const int __b)
 {
-  return __aarch64_vget_lane_f64 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline poly8_t __attribute__ ((__always_inline__))
 vget_lane_p8 (poly8x8_t __a, const int __b)
 {
-  return __aarch64_vget_lane_p8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline poly16_t __attribute__ ((__always_inline__))
 vget_lane_p16 (poly16x4_t __a, const int __b)
 {
-  return __aarch64_vget_lane_p16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int8_t __attribute__ ((__always_inline__))
 vget_lane_s8 (int8x8_t __a, const int __b)
 {
-  return __aarch64_vget_lane_s8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int16_t __attribute__ ((__always_inline__))
 vget_lane_s16 (int16x4_t __a, const int __b)
 {
-  return __aarch64_vget_lane_s16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
 vget_lane_s32 (int32x2_t __a, const int __b)
 {
-  return __aarch64_vget_lane_s32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int64_t __attribute__ ((__always_inline__))
 vget_lane_s64 (int64x1_t __a, const int __b)
 {
-  return __aarch64_vget_lane_s64 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
 vget_lane_u8 (uint8x8_t __a, const int __b)
 {
-  return __aarch64_vget_lane_u8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
 vget_lane_u16 (uint16x4_t __a, const int __b)
 {
-  return __aarch64_vget_lane_u16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
 vget_lane_u32 (uint32x2_t __a, const int __b)
 {
-  return __aarch64_vget_lane_u32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
 vget_lane_u64 (uint64x1_t __a, const int __b)
 {
-  return __aarch64_vget_lane_u64 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 /* vgetq_lane  */
@@ -2588,73 +2524,73 @@ vget_lane_u64 (uint64x1_t __a, const int __b)
 __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vgetq_lane_f32 (float32x4_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_f32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline float64_t __attribute__ ((__always_inline__))
 vgetq_lane_f64 (float64x2_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_f64 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline poly8_t __attribute__ ((__always_inline__))
 vgetq_lane_p8 (poly8x16_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_p8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline poly16_t __attribute__ ((__always_inline__))
 vgetq_lane_p16 (poly16x8_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_p16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int8_t __attribute__ ((__always_inline__))
 vgetq_lane_s8 (int8x16_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_s8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int16_t __attribute__ ((__always_inline__))
 vgetq_lane_s16 (int16x8_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_s16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
 vgetq_lane_s32 (int32x4_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_s32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int64_t __attribute__ ((__always_inline__))
 vgetq_lane_s64 (int64x2_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_s64 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
 vgetq_lane_u8 (uint8x16_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_u8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
 vgetq_lane_u16 (uint16x8_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_u16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
 vgetq_lane_u32 (uint32x4_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_u32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
 vgetq_lane_u64 (uint64x2_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_u64 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 /* vreinterpret  */
@@ -15040,57 +14976,57 @@ vdupq_laneq_u64 (uint64x2_t __a, const int __b)
 __extension__ static __inline poly8_t __attribute__ ((__always_inline__))
 vdupb_lane_p8 (poly8x8_t __a, const int __b)
 {
-  return __aarch64_vget_lane_p8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int8_t __attribute__ ((__always_inline__))
 vdupb_lane_s8 (int8x8_t __a, const int __b)
 {
-  return __aarch64_vget_lane_s8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
 vdupb_lane_u8 (uint8x8_t __a, const int __b)
 {
-  return __aarch64_vget_lane_u8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 /* vduph_lane  */
 __extension__ static __inline poly16_t __attribute__ ((__always_inline__))
 vduph_lane_p16 (poly16x4_t __a, const int __b)
 {
-  return __aarch64_vget_lane_p16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int16_t __attribute__ ((__always_inline__))
 vduph_lane_s16 (int16x4_t __a, const int __b)
 {
-  return __aarch64_vget_lane_s16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
 vduph_lane_u16 (uint16x4_t __a, const int __b)
 {
-  return __aarch64_vget_lane_u16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 /* vdups_lane  */
 __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vdups_lane_f32 (float32x2_t __a, const int __b)
 {
-  return __aarch64_vget_lane_f32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
 vdups_lane_s32 (int32x2_t __a, const int __b)
 {
-  return __aarch64_vget_lane_s32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
 vdups_lane_u32 (uint32x2_t __a, const int __b)
 {
-  return __aarch64_vget_lane_u32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 /* vdupd_lane  */
@@ -15119,76 +15055,76 @@ vdupd_lane_u64 (uint64x1_t __a, const int __b)
 __extension__ static __inline poly8_t __attribute__ ((__always_inline__))
 vdupb_laneq_p8 (poly8x16_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_p8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int8_t __attribute__ ((__always_inline__))
 vdupb_laneq_s8 (int8x16_t __a, const int __attribute__ ((unused)) __b)
 {
-  return __aarch64_vgetq_lane_s8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint8_t __attribute__ ((__always_inline__))
 vdupb_laneq_u8 (uint8x16_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_u8 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 /* vduph_laneq  */
 __extension__ static __inline poly16_t __attribute__ ((__always_inline__))
 vduph_laneq_p16 (poly16x8_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_p16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int16_t __attribute__ ((__always_inline__))
 vduph_laneq_s16 (int16x8_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_s16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint16_t __attribute__ ((__always_inline__))
 vduph_laneq_u16 (uint16x8_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_u16 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 /* vdups_laneq  */
 __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vdups_laneq_f32 (float32x4_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_f32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int32_t __attribute__ ((__always_inline__))
 vdups_laneq_s32 (int32x4_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_s32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint32_t __attribute__ ((__always_inline__))
 vdups_laneq_u32 (uint32x4_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_u32 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 /* vdupd_laneq  */
 __extension__ static __inline float64_t __attribute__ ((__always_inline__))
 vdupd_laneq_f64 (float64x2_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_f64 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline int64_t __attribute__ ((__always_inline__))
 vdupd_laneq_s64 (int64x2_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_s64 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 __extension__ static __inline uint64_t __attribute__ ((__always_inline__))
 vdupd_laneq_u64 (uint64x2_t __a, const int __b)
 {
-  return __aarch64_vgetq_lane_u64 (__a, __b);
+  return __aarch64_vget_lane_any (__a, __b);
 }
 
 /* vext  */
@@ -15514,7 +15450,7 @@ __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vfmas_lane_f32 (float32_t __a, float32_t __b,
 	        float32x2_t __c, const int __lane)
 {
-  return __builtin_fmaf (__b, __aarch64_vget_lane_f32 (__c, __lane), __a);
+  return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
 }
 
 /* vfma_laneq  */
@@ -15532,7 +15468,7 @@ __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
 vfma_laneq_f64 (float64x1_t __a, float64x1_t __b,
 	        float64x2_t __c, const int __lane)
 {
-  float64_t __c0 = __aarch64_vgetq_lane_f64 (__c, __lane);
+  float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
   return (float64x1_t) {__builtin_fma (__b[0], __c0, __a[0])};
 }
 
@@ -15540,14 +15476,14 @@ __extension__ static __inline float64_t __attribute__ ((__always_inline__))
 vfmad_laneq_f64 (float64_t __a, float64_t __b,
 	         float64x2_t __c, const int __lane)
 {
-  return __builtin_fma (__b, __aarch64_vgetq_lane_f64 (__c, __lane), __a);
+  return __builtin_fma (__b, __aarch64_vget_lane_any (__c, __lane), __a);
 }
 
 __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vfmas_laneq_f32 (float32_t __a, float32_t __b,
 		 float32x4_t __c, const int __lane)
 {
-  return __builtin_fmaf (__b, __aarch64_vgetq_lane_f32 (__c, __lane), __a);
+  return __builtin_fmaf (__b, __aarch64_vget_lane_any (__c, __lane), __a);
 }
 
 /* vfmaq_lane  */
@@ -15625,7 +15561,7 @@ __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vfmss_lane_f32 (float32_t __a, float32_t __b,
 	        float32x2_t __c, const int __lane)
 {
-  return __builtin_fmaf (-__b, __aarch64_vget_lane_f32 (__c, __lane), __a);
+  return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
 }
 
 /* vfms_laneq  */
@@ -15643,7 +15579,7 @@ __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
 vfms_laneq_f64 (float64x1_t __a, float64x1_t __b,
 	        float64x2_t __c, const int __lane)
 {
-  float64_t __c0 = __aarch64_vgetq_lane_f64 (__c, __lane);
+  float64_t __c0 = __aarch64_vget_lane_any (__c, __lane);
   return (float64x1_t) {__builtin_fma (-__b[0], __c0, __a[0])};
 }
 
@@ -15651,14 +15587,14 @@ __extension__ static __inline float64_t __attribute__ ((__always_inline__))
 vfmsd_laneq_f64 (float64_t __a, float64_t __b,
 	         float64x2_t __c, const int __lane)
 {
-  return __builtin_fma (-__b, __aarch64_vgetq_lane_f64 (__c, __lane), __a);
+  return __builtin_fma (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
 }
 
 __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vfmss_laneq_f32 (float32_t __a, float32_t __b,
 		 float32x4_t __c, const int __lane)
 {
-  return __builtin_fmaf (-__b, __aarch64_vgetq_lane_f32 (__c, __lane), __a);
+  return __builtin_fmaf (-__b, __aarch64_vget_lane_any (__c, __lane), __a);
 }
 
 /* vfmsq_lane  */
@@ -18659,35 +18595,35 @@ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
 vmla_lane_f32 (float32x2_t __a, float32x2_t __b,
 	       float32x2_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_f32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
 vmla_lane_s16 (int16x4_t __a, int16x4_t __b,
 		int16x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_s16 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
 vmla_lane_s32 (int32x2_t __a, int32x2_t __b,
 		int32x2_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_s32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 vmla_lane_u16 (uint16x4_t __a, uint16x4_t __b,
 		uint16x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_u16 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 vmla_lane_u32 (uint32x2_t __a, uint32x2_t __b,
 	       uint32x2_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_u32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 /* vmla_laneq  */
@@ -18696,35 +18632,35 @@ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
 vmla_laneq_f32 (float32x2_t __a, float32x2_t __b,
 	        float32x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_f32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
 vmla_laneq_s16 (int16x4_t __a, int16x4_t __b,
 		int16x8_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_s16 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
 vmla_laneq_s32 (int32x2_t __a, int32x2_t __b,
 		int32x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_s32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 vmla_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
 		uint16x8_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_u16 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 vmla_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
 		uint32x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_u32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 /* vmlaq_lane  */
@@ -18733,35 +18669,35 @@ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
 vmlaq_lane_f32 (float32x4_t __a, float32x4_t __b,
 		float32x2_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_f32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
 vmlaq_lane_s16 (int16x8_t __a, int16x8_t __b,
 		int16x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_s16 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
 vmlaq_lane_s32 (int32x4_t __a, int32x4_t __b,
 		int32x2_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_s32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 vmlaq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
 		uint16x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_u16 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 vmlaq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
 		uint32x2_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vget_lane_u32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
   /* vmlaq_laneq  */
@@ -18770,35 +18706,35 @@ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
 vmlaq_laneq_f32 (float32x4_t __a, float32x4_t __b,
 		 float32x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_f32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
 vmlaq_laneq_s16 (int16x8_t __a, int16x8_t __b,
 		int16x8_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_s16 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
 vmlaq_laneq_s32 (int32x4_t __a, int32x4_t __b,
 		int32x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_s32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 vmlaq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
 		uint16x8_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_u16 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 vmlaq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
 		uint32x4_t __c, const int __lane)
 {
-  return (__a + (__b * __aarch64_vgetq_lane_u32 (__c, __lane)));
+  return (__a + (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 /* vmls  */
@@ -18833,35 +18769,35 @@ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
 vmls_lane_f32 (float32x2_t __a, float32x2_t __b,
 	       float32x2_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_f32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
 vmls_lane_s16 (int16x4_t __a, int16x4_t __b,
 		int16x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_s16 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
 vmls_lane_s32 (int32x2_t __a, int32x2_t __b,
 		int32x2_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_s32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 vmls_lane_u16 (uint16x4_t __a, uint16x4_t __b,
 		uint16x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_u16 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 vmls_lane_u32 (uint32x2_t __a, uint32x2_t __b,
 	       uint32x2_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_u32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 /* vmls_laneq  */
@@ -18870,35 +18806,35 @@ __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
 vmls_laneq_f32 (float32x2_t __a, float32x2_t __b,
 	       float32x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_f32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
 vmls_laneq_s16 (int16x4_t __a, int16x4_t __b,
 		int16x8_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_s16 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
 vmls_laneq_s32 (int32x2_t __a, int32x2_t __b,
 		int32x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_s32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 vmls_laneq_u16 (uint16x4_t __a, uint16x4_t __b,
 		uint16x8_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_u16 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 vmls_laneq_u32 (uint32x2_t __a, uint32x2_t __b,
 		uint32x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_u32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 /* vmlsq_lane  */
@@ -18907,35 +18843,35 @@ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
 vmlsq_lane_f32 (float32x4_t __a, float32x4_t __b,
 		float32x2_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_f32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
 vmlsq_lane_s16 (int16x8_t __a, int16x8_t __b,
 		int16x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_s16 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
 vmlsq_lane_s32 (int32x4_t __a, int32x4_t __b,
 		int32x2_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_s32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 vmlsq_lane_u16 (uint16x8_t __a, uint16x8_t __b,
 		uint16x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_u16 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 vmlsq_lane_u32 (uint32x4_t __a, uint32x4_t __b,
 		uint32x2_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vget_lane_u32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
   /* vmlsq_laneq  */
@@ -18944,34 +18880,34 @@ __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
 vmlsq_laneq_f32 (float32x4_t __a, float32x4_t __b,
 		float32x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_f32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
 vmlsq_laneq_s16 (int16x8_t __a, int16x8_t __b,
 		int16x8_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_s16 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
 vmlsq_laneq_s32 (int32x4_t __a, int32x4_t __b,
 		int32x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_s32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 vmlsq_laneq_u16 (uint16x8_t __a, uint16x8_t __b,
 		uint16x8_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_u16 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 vmlsq_laneq_u32 (uint32x4_t __a, uint32x4_t __b,
 		uint32x4_t __c, const int __lane)
 {
-  return (__a - (__b * __aarch64_vgetq_lane_u32 (__c, __lane)));
+  return (__a - (__b * __aarch64_vget_lane_any (__c, __lane)));
 }
 
 /* vmov_n_  */
@@ -19125,7 +19061,7 @@ vmovq_n_u64 (uint64_t __a)
 __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
 vmul_lane_f32 (float32x2_t __a, float32x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_f32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
@@ -19137,25 +19073,25 @@ vmul_lane_f64 (float64x1_t __a, float64x1_t __b, const int __lane)
 __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
 vmul_lane_s16 (int16x4_t __a, int16x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_s16 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
 vmul_lane_s32 (int32x2_t __a, int32x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_s32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 vmul_lane_u16 (uint16x4_t __a, uint16x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_u16 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 vmul_lane_u32 (uint32x2_t __a, uint32x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_u32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 /* vmuld_lane  */
@@ -19163,13 +19099,13 @@ vmul_lane_u32 (uint32x2_t __a, uint32x2_t __b, const int __lane)
 __extension__ static __inline float64_t __attribute__ ((__always_inline__))
 vmuld_lane_f64 (float64_t __a, float64x1_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_f64 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline float64_t __attribute__ ((__always_inline__))
 vmuld_laneq_f64 (float64_t __a, float64x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_f64 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 /* vmuls_lane  */
@@ -19177,13 +19113,13 @@ vmuld_laneq_f64 (float64_t __a, float64x2_t __b, const int __lane)
 __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vmuls_lane_f32 (float32_t __a, float32x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_f32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline float32_t __attribute__ ((__always_inline__))
 vmuls_laneq_f32 (float32_t __a, float32x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_f32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 /* vmul_laneq  */
@@ -19191,37 +19127,37 @@ vmuls_laneq_f32 (float32_t __a, float32x4_t __b, const int __lane)
 __extension__ static __inline float32x2_t __attribute__ ((__always_inline__))
 vmul_laneq_f32 (float32x2_t __a, float32x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_f32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline float64x1_t __attribute__ ((__always_inline__))
 vmul_laneq_f64 (float64x1_t __a, float64x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_f64 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline int16x4_t __attribute__ ((__always_inline__))
 vmul_laneq_s16 (int16x4_t __a, int16x8_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_s16 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline int32x2_t __attribute__ ((__always_inline__))
 vmul_laneq_s32 (int32x2_t __a, int32x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_s32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline uint16x4_t __attribute__ ((__always_inline__))
 vmul_laneq_u16 (uint16x4_t __a, uint16x8_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_u16 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline uint32x2_t __attribute__ ((__always_inline__))
 vmul_laneq_u32 (uint32x2_t __a, uint32x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_u32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 /* vmul_n  */
@@ -19237,7 +19173,7 @@ vmul_n_f64  (float64x1_t __a, float64_t __b)
 __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
 vmulq_lane_f32 (float32x4_t __a, float32x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_f32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
@@ -19250,25 +19186,25 @@ vmulq_lane_f64 (float64x2_t __a, float64x1_t __b, const int __lane)
 __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
 vmulq_lane_s16 (int16x8_t __a, int16x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_s16 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
 vmulq_lane_s32 (int32x4_t __a, int32x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_s32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 vmulq_lane_u16 (uint16x8_t __a, uint16x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_u16 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 vmulq_lane_u32 (uint32x4_t __a, uint32x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vget_lane_u32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 /* vmulq_laneq  */
@@ -19276,37 +19212,37 @@ vmulq_lane_u32 (uint32x4_t __a, uint32x2_t __b, const int __lane)
 __extension__ static __inline float32x4_t __attribute__ ((__always_inline__))
 vmulq_laneq_f32 (float32x4_t __a, float32x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_f32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline float64x2_t __attribute__ ((__always_inline__))
 vmulq_laneq_f64 (float64x2_t __a, float64x2_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_f64 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline int16x8_t __attribute__ ((__always_inline__))
 vmulq_laneq_s16 (int16x8_t __a, int16x8_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_s16 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline int32x4_t __attribute__ ((__always_inline__))
 vmulq_laneq_s32 (int32x4_t __a, int32x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_s32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline uint16x8_t __attribute__ ((__always_inline__))
 vmulq_laneq_u16 (uint16x8_t __a, uint16x8_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_u16 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 __extension__ static __inline uint32x4_t __attribute__ ((__always_inline__))
 vmulq_laneq_u32 (uint32x4_t __a, uint32x4_t __b, const int __lane)
 {
-  return __a * __aarch64_vgetq_lane_u32 (__b, __lane);
+  return __a * __aarch64_vget_lane_any (__b, __lane);
 }
 
 /* vneg  */
@@ -25480,31 +25416,6 @@ __INTERLEAVE_LIST (zip)
 /* End of optimal implementations in approved order.  */
 
 #undef __aarch64_vget_lane_any
-#undef __aarch64_vget_lane_f32
-#undef __aarch64_vget_lane_f64
-#undef __aarch64_vget_lane_p8
-#undef __aarch64_vget_lane_p16
-#undef __aarch64_vget_lane_s8
-#undef __aarch64_vget_lane_s16
-#undef __aarch64_vget_lane_s32
-#undef __aarch64_vget_lane_s64
-#undef __aarch64_vget_lane_u8
-#undef __aarch64_vget_lane_u16
-#undef __aarch64_vget_lane_u32
-#undef __aarch64_vget_lane_u64
-
-#undef __aarch64_vgetq_lane_f32
-#undef __aarch64_vgetq_lane_f64
-#undef __aarch64_vgetq_lane_p8
-#undef __aarch64_vgetq_lane_p16
-#undef __aarch64_vgetq_lane_s8
-#undef __aarch64_vgetq_lane_s16
-#undef __aarch64_vgetq_lane_s32
-#undef __aarch64_vgetq_lane_s64
-#undef __aarch64_vgetq_lane_u8
-#undef __aarch64_vgetq_lane_u16
-#undef __aarch64_vgetq_lane_u32
-#undef __aarch64_vgetq_lane_u64
 
 #undef __aarch64_vdup_lane_any
 #undef __aarch64_vdup_lane_f32
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f32_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f32_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..d16a3e882d5265f74083be0d6c83abc42f9d8b85
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f32_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+float32_t
+test_vget_lane_f32_before (float32x2_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vget_lane_f32 (in, -1);
+}
+
+float32_t
+test_vget_lane_f32_beyond (float32x2_t in)
+{
+  /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vget_lane_f32 (in, 2);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f64_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f64_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..0e90429ae964d77495f87669db200c6f6bbbadb2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_f64_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+float64_t
+test_vget_lane_f64_before (float64x1_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 0" "" {target *-*-*} 0 } */
+  return vget_lane_f64 (in, -1);
+}
+
+float64_t
+test_vget_lane_f64_beyond (float64x1_t in)
+{
+  /* { dg-error "lane 1 out of range 0 - 0" "" {target *-*-*} 0 } */
+  return vget_lane_f64 (in, 1);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p16_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p16_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..bcf25394519378afc30d85c2b26f3913ee8bef69
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p16_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+poly16_t
+test_vget_lane_p16_before (poly16x4_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vget_lane_p16 (in, -1);
+}
+
+poly16_t
+test_vget_lane_p16_beyond (poly16x4_t in)
+{
+  /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vget_lane_p16 (in, 4);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p8_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p8_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..5dc8dc47afef8099e2040bb146e82b5feafeb54a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_p8_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+poly8_t
+test_vget_lane_p8_before (poly8x8_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vget_lane_p8 (in, -1);
+}
+
+poly8_t
+test_vget_lane_p8_beyond (poly8x8_t in)
+{
+  /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vget_lane_p8 (in, 8);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s16_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s16_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..c65fb40721a2cf4a3de6d5958779fdf0bf530587
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s16_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+int16_t
+test_vget_lane_s16_before (int16x4_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vget_lane_s16 (in, -1);
+}
+
+int16_t
+test_vget_lane_s16_beyond (int16x4_t in)
+{
+  /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vget_lane_s16 (in, 4);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s32_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s32_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..1f95137832dcc7df53f678ff42961ae0f93305d8
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s32_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+int32_t
+test_vget_lane_s32_before (int32x2_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vget_lane_s32 (in, -1);
+}
+
+int32_t
+test_vget_lane_s32_beyond (int32x2_t in)
+{
+  /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vget_lane_s32 (in, 2);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s64_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s64_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..e449797fe54c56e32d80b78783adbbf66713388b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s64_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+int64_t
+test_vget_lane_s64_before (int64x1_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 0" "" {target *-*-*} 0 } */
+  return vget_lane_s64 (in, -1);
+}
+
+int64_t
+test_vget_lane_s64_beyond (int64x1_t in)
+{
+  /* { dg-error "lane 1 out of range 0 - 0" "" {target *-*-*} 0 } */
+  return vget_lane_s64 (in, 1);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s8_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s8_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..77e94860f1d09e41b41a0b087c42bff4689d6eeb
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_s8_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+int8_t
+test_vget_lane_s8_before (int8x8_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vget_lane_s8 (in, -1);
+}
+
+int8_t
+test_vget_lane_s8_beyond (int8x8_t in)
+{
+  /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vget_lane_s8 (in, 8);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u16_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u16_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..77fb3c8057c3e63b14ba6aac78caec1038936dcc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u16_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+uint16_t
+test_vget_lane_u16_before (uint16x4_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vget_lane_u16 (in, -1);
+}
+
+uint16_t
+test_vget_lane_u16_beyond (uint16x4_t in)
+{
+  /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vget_lane_u16 (in, 4);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u32_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u32_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..e670626a060e2dfb9dbf3583687e0c6f0cb0d935
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u32_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+uint32_t
+test_vget_lane_u32_before (uint32x2_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vget_lane_u32 (in, -1);
+}
+
+uint32_t
+test_vget_lane_u32_beyond (uint32x2_t in)
+{
+  /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vget_lane_u32 (in, 2);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u64_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u64_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..44d5a4d9e01690b4d334431f0a200b08dfecc582
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u64_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+uint64_t
+test_vget_lane_u64_before (uint64x1_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 0" "" {target *-*-*} 0 } */
+  return vget_lane_u64 (in, -1);
+}
+
+uint64_t
+test_vget_lane_u64_beyond (uint64x1_t in)
+{
+  /* { dg-error "lane 1 out of range 0 - 0" "" {target *-*-*} 0 } */
+  return vget_lane_u64 (in, 1);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u8_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u8_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..b452d56c9c13fb6712fc8f177097e890774996d5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vget_lane_u8_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+uint8_t
+test_vget_lane_u8_before (uint8x8_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vget_lane_u8 (in, -1);
+}
+
+uint8_t
+test_vget_lane_u8_beyond (uint8x8_t in)
+{
+  /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vget_lane_u8 (in, 8);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..8a50ed2ac11702aed42606f361b48052101254ae
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f32_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+float32_t
+test_vgetq_lane_f32_before (float32x4_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vgetq_lane_f32 (in, -1);
+}
+
+float32_t
+test_vgetq_lane_f32_beyond (float32x4_t in)
+{
+  /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vgetq_lane_f32 (in, 4);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..492b1ae66b903ead9a480d6915a1714cbd22281b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_f64_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+float64_t
+test_vgetq_lane_f64_before (float64x2_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vgetq_lane_f64 (in, -1);
+}
+
+float64_t
+test_vgetq_lane_f64_beyond (float64x2_t in)
+{
+  /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vgetq_lane_f64 (in, 2);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..caa41b269c3df173b463ca9a434b3b08b3706c88
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p16_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+poly16_t
+test_vgetq_lane_p16_before (poly16x8_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vgetq_lane_p16 (in, -1);
+}
+
+poly16_t
+test_vgetq_lane_p16_beyond (poly16x8_t in)
+{
+  /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vgetq_lane_p16 (in, 8);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..38caa27e1081587a910847d2432f3403107bf38a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_p8_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+poly8_t
+test_vgetq_lane_p8_before (poly8x16_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 15" "" {target *-*-*} 0 } */
+  return vgetq_lane_p8 (in, -1);
+}
+
+poly8_t
+test_vgetq_lane_p8_beyond (poly8x16_t in)
+{
+  /* { dg-error "lane 16 out of range 0 - 15" "" {target *-*-*} 0 } */
+  return vgetq_lane_p8 (in, 16);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..0f4e4f58253b5de5aca0409428c48b316fec4d2b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s16_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+int16_t
+test_vgetq_lane_s16_before (int16x8_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vgetq_lane_s16 (in, -1);
+}
+
+int16_t
+test_vgetq_lane_s16_beyond (int16x8_t in)
+{
+  /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vgetq_lane_s16 (in, 8);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..68133b4bdcaca29918a9342818a221e495dee02d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s32_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+int32_t
+test_vgetq_lane_s32_before (int32x4_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vgetq_lane_s32 (in, -1);
+}
+
+int32_t
+test_vgetq_lane_s32_beyond (int32x4_t in)
+{
+  /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vgetq_lane_s32 (in, 4);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..4ac607fe2cc86228ea5a731dc4874d2feb0167f3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s64_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+int64_t
+test_vgetq_lane_s64_before (int64x2_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vgetq_lane_s64 (in, -1);
+}
+
+int64_t
+test_vgetq_lane_s64_beyond (int64x2_t in)
+{
+  /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vgetq_lane_s64 (in, 2);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..0e44dbc1851cc306356db61a359959b2df1dded9
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_s8_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+int8_t
+test_vgetq_lane_s8_before (int8x16_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 15" "" {target *-*-*} 0 } */
+  return vgetq_lane_s8 (in, -1);
+}
+
+int8_t
+test_vgetq_lane_s8_beyond (int8x16_t in)
+{
+  /* { dg-error "lane 16 out of range 0 - 15" "" {target *-*-*} 0 } */
+  return vgetq_lane_s8 (in, 16);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..5ccea06f9ee7b4b7d0783ee0bd3b9695c57169f5
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u16_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+uint16_t
+test_vgetq_lane_u16_before (uint16x8_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vgetq_lane_u16 (in, -1);
+}
+
+uint16_t
+test_vgetq_lane_u16_beyond (uint16x8_t in)
+{
+  /* { dg-error "lane 8 out of range 0 - 7" "" {target *-*-*} 0 } */
+  return vgetq_lane_u16 (in, 8);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..bfbf081cbe2525b346ce8069c7970235c6db8bf2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u32_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+uint32_t
+test_vgetq_lane_u32_before (uint32x4_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vgetq_lane_u32 (in, -1);
+}
+
+uint32_t
+test_vgetq_lane_u32_beyond (uint32x4_t in)
+{
+  /* { dg-error "lane 4 out of range 0 - 3" "" {target *-*-*} 0 } */
+  return vgetq_lane_u32 (in, 4);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..a0d426e84adbea82d30a40ab348e7efba873b109
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u64_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+uint64_t
+test_vgetq_lane_u64_before (uint64x2_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vgetq_lane_u64 (in, -1);
+}
+
+uint64_t
+test_vgetq_lane_u64_beyond (uint64x2_t in)
+{
+  /* { dg-error "lane 2 out of range 0 - 1" "" {target *-*-*} 0 } */
+  return vgetq_lane_u64 (in, 2);
+}
diff --git a/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..c9ad6634d7bfbd2d1291624a1974ee0e09e0ec30
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/simd/vgetq_lane_u8_indices_1.c
@@ -0,0 +1,17 @@
+/* { dg-do assemble } */
+
+#include <arm_neon.h>
+
+uint8_t
+test_vgetq_lane_u8_before (uint8x16_t in)
+{
+  /* { dg-error "lane -1 out of range 0 - 15" "" {target *-*-*} 0 } */
+  return vgetq_lane_u8 (in, -1);
+}
+
+uint8_t
+test_vgetq_lane_u8_beyond (uint8x16_t in)
+{
+  /* { dg-error "lane 16 out of range 0 - 15" "" {target *-*-*} 0 } */
+  return vgetq_lane_u8 (in, 16);
+}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]