aarch64: Move vreinterpret definitions into the compiler

Message ID AS8PR08MB6678EDE68DA5EDA5051A50FEF4BB9@AS8PR08MB6678.eurprd08.prod.outlook.com
State New
Headers
Series aarch64: Move vreinterpret definitions into the compiler |

Commit Message

Andrew Carlotti June 29, 2022, 12:32 p.m. UTC
  Hi,

This removes a significant number of intrinsic definitions from the arm_neon.h
header file, and reduces the amount of code duplication. The new macros and
data structures are intended to also facilitate moving other intrinsic
definitions out of the header file in future.

There is a a slight change in the behaviour of the bf16 vreinterpret intrinsics
when compiling without bf16 support. Expressions like:

b = vreinterpretq_s32_bf16(vreinterpretq_bf16_s64(a));

are now compiled successfully, instead of causing a 'target specific option
mismatch' during inlining.

Bootstrapped and tested on aarch64-none-linux-gnu

gcc/ChangeLog:

	* config/aarch64/aarch64-builtins.cc
	(v1di_UP): Add V1DI mode.
	(MODE_d_bf16, MODE_d_f16, MODE_d_f32, MODE_d_f64, MODE_d_s8)
	(MODE_d_s16, MODE_d_s32, MODE_d_s64, MODE_d_u8, MODE_d_u16)
	(MODE_d_u32, MODE_d_u64, MODE_d_p8, MODE_d_p16, MODE_d_p64)
	(MODE_q_bf16, MODE_q_f16, MODE_q_f32, MODE_q_f64, MODE_q_s8)
	(MODE_q_s16, MODE_q_s32, MODE_q_s64, MODE_q_u8, MODE_q_u16)
	(MODE_q_u32, MODE_q_u64, MODE_q_p8, MODE_q_p16, MODE_q_p64)
	(MODE_q_p128): Define macro to map to corresponding mode name.
	(QUAL_bf16, QUAL_f16, QUAL_f32, QUAL_f64, QUAL_s8, QUAL_s16)
	(QUAL_s32, QUAL_s64, QUAL_u8, QUAL_u16, QUAL_u32, QUAL_u64)
	(QUAL_p8, QUAL_p16, QUAL_p64, QUAL_p128): Define macro to map to
	corresponding qualifier name.
	(LENGTH_d, LENGTH_q): Define macro to map to "" or "q" suffix.
	(SIMD_INTR_MODE, SIMD_INTR_QUAL, SIMD_INTR_LENGTH_CHAR): Macro
	functions for the above mappings
	(VREINTERPRET_BUILTIN2, VREINTERPRET_BUILTINS1, VREINTERPRET_BUILTINS)
	(VREINTERPRETQ_BUILTIN2, VREINTERPRETQ_BUILTINS1)
	(VREINTERPRETQ_BUILTINS, VREINTERPRET_BUILTIN)
	(AARCH64_SIMD_VREINTERPRET_BUILTINS): New macros to create definitions
	for all vreinterpret intrinsics
	(enum aarch64_builtins): Add vreinterpret function codes
	(aarch64_init_simd_intrinsics): New
	(handle_arm_neon_h): Improved comment.
	(aarch64_general_fold_builtin): Fold vreinterpret calls
	* config/aarch64/aarch64-modes.def (VECTOR_MODE): Add V1DI mode
	* config/aarch64/aarch64-simd-builtin-types.def: Use V1DI mode
	* config/aarch64/aarch64-simd.md (vec_extractv2div1di): New
	* config/aarch64/aarch64.cc (aarch64_classify_vector_mode): Add V1DI mode
	* config/aarch64/arm_neon.h
	(vreinterpret_p8_f16, vreinterpret_p8_f64, vreinterpret_p8_s8)
	(vreinterpret_p8_s16, vreinterpret_p8_s32, vreinterpret_p8_s64)
	(vreinterpret_p8_f32, vreinterpret_p8_u8, vreinterpret_p8_u16)
	(vreinterpret_p8_u32, vreinterpret_p8_u64, vreinterpret_p8_p16)
	(vreinterpret_p8_p64, vreinterpretq_p8_f64, vreinterpretq_p8_s8)
	(vreinterpretq_p8_s16, vreinterpretq_p8_s32, vreinterpretq_p8_s64)
	(vreinterpretq_p8_f16, vreinterpretq_p8_f32, vreinterpretq_p8_u8)
	(vreinterpretq_p8_u16, vreinterpretq_p8_u32, vreinterpretq_p8_u64)
	(vreinterpretq_p8_p16, vreinterpretq_p8_p64, vreinterpretq_p8_p128)
	(vreinterpret_p16_f16, vreinterpret_p16_f64, vreinterpret_p16_s8)
	(vreinterpret_p16_s16, vreinterpret_p16_s32, vreinterpret_p16_s64)
	(vreinterpret_p16_f32, vreinterpret_p16_u8, vreinterpret_p16_u16)
	(vreinterpret_p16_u32, vreinterpret_p16_u64, vreinterpret_p16_p8)
	(vreinterpret_p16_p64, vreinterpretq_p16_f64, vreinterpretq_p16_s8)
	(vreinterpretq_p16_s16, vreinterpretq_p16_s32, vreinterpretq_p16_s64)
	(vreinterpretq_p16_f16, vreinterpretq_p16_f32, vreinterpretq_p16_u8)
	(vreinterpretq_p16_u16, vreinterpretq_p16_u32, vreinterpretq_p16_u64)
	(vreinterpretq_p16_p8, vreinterpretq_p16_p64, vreinterpretq_p16_p128)
	(vreinterpret_p64_f16, vreinterpret_p64_f64, vreinterpret_p64_s8)
	(vreinterpret_p64_s16, vreinterpret_p64_s32, vreinterpret_p64_s64)
	(vreinterpret_p64_f32, vreinterpret_p64_u8, vreinterpret_p64_u16)
	(vreinterpret_p64_u32, vreinterpret_p64_u64, vreinterpret_p64_p8)
	(vreinterpret_p64_p16, vreinterpretq_p64_f64, vreinterpretq_p64_s8)
	(vreinterpretq_p64_s16, vreinterpretq_p64_s32, vreinterpretq_p64_s64)
	(vreinterpretq_p64_f16, vreinterpretq_p64_f32, vreinterpretq_p64_p128)
	(vreinterpretq_p64_u8, vreinterpretq_p64_u16, vreinterpretq_p64_p16)
	(vreinterpretq_p64_u32, vreinterpretq_p64_u64, vreinterpretq_p64_p8)
	(vreinterpretq_p128_p8, vreinterpretq_p128_p16, vreinterpretq_p128_f16)
	(vreinterpretq_p128_f32, vreinterpretq_p128_p64, vreinterpretq_p128_s64)
	(vreinterpretq_p128_u64, vreinterpretq_p128_s8, vreinterpretq_p128_s16)
	(vreinterpretq_p128_s32, vreinterpretq_p128_u8, vreinterpretq_p128_u16)
	(vreinterpretq_p128_u32, vreinterpret_f16_f64, vreinterpret_f16_s8)
	(vreinterpret_f16_s16): (vreinterpret_f16_s32): (vreinterpret_f16_s64):
	(vreinterpret_f16_f32, vreinterpret_f16_u8, vreinterpret_f16_u16)
	(vreinterpret_f16_u32, vreinterpret_f16_u64, vreinterpret_f16_p8)
	(vreinterpret_f16_p16, vreinterpret_f16_p64, vreinterpretq_f16_f64)
	(vreinterpretq_f16_s8, vreinterpretq_f16_s16, vreinterpretq_f16_s32)
	(vreinterpretq_f16_s64, vreinterpretq_f16_f32, vreinterpretq_f16_u8)
	(vreinterpretq_f16_u16, vreinterpretq_f16_u32, vreinterpretq_f16_u64)
	(vreinterpretq_f16_p8, vreinterpretq_f16_p128, vreinterpretq_f16_p16)
	(vreinterpretq_f16_p64, vreinterpret_f32_f16, vreinterpret_f32_f64)
	(vreinterpret_f32_s8, vreinterpret_f32_s16, vreinterpret_f32_s32)
	(vreinterpret_f32_s64, vreinterpret_f32_u8, vreinterpret_f32_u16)
	(vreinterpret_f32_u32, vreinterpret_f32_u64, vreinterpret_f32_p8)
	(vreinterpret_f32_p16, vreinterpret_f32_p64, vreinterpretq_f32_f16)
	(vreinterpretq_f32_f64, vreinterpretq_f32_s8, vreinterpretq_f32_s16)
	(vreinterpretq_f32_s32, vreinterpretq_f32_s64, vreinterpretq_f32_u8)
	(vreinterpretq_f32_u16, vreinterpretq_f32_u32, vreinterpretq_f32_u64)
	(vreinterpretq_f32_p8, vreinterpretq_f32_p16, vreinterpretq_f32_p64)
	(vreinterpretq_f32_p128, vreinterpret_f64_f16, vreinterpret_f64_f32)
	(vreinterpret_f64_p8, vreinterpret_f64_p16, vreinterpret_f64_p64)
	(vreinterpret_f64_s8, vreinterpret_f64_s16, vreinterpret_f64_s32)
	(vreinterpret_f64_s64, vreinterpret_f64_u8, vreinterpret_f64_u16)
	(vreinterpret_f64_u32, vreinterpret_f64_u64, vreinterpretq_f64_f16)
	(vreinterpretq_f64_f32, vreinterpretq_f64_p8, vreinterpretq_f64_p16)
	(vreinterpretq_f64_p64, vreinterpretq_f64_s8, vreinterpretq_f64_s16)
	(vreinterpretq_f64_s32, vreinterpretq_f64_s64, vreinterpretq_f64_u8)
	(vreinterpretq_f64_u16, vreinterpretq_f64_u32, vreinterpretq_f64_u64)
	(vreinterpret_s64_f16, vreinterpret_s64_f64, vreinterpret_s64_s8)
	(vreinterpret_s64_s16, vreinterpret_s64_s32, vreinterpret_s64_f32)
	(vreinterpret_s64_u8, vreinterpret_s64_u16, vreinterpret_s64_u32)
	(vreinterpret_s64_u64, vreinterpret_s64_p8, vreinterpret_s64_p16)
	(vreinterpret_s64_p64, vreinterpretq_s64_f64, vreinterpretq_s64_s8)
	(vreinterpretq_s64_s16, vreinterpretq_s64_s32, vreinterpretq_s64_f16)
	(vreinterpretq_s64_f32, vreinterpretq_s64_u8, vreinterpretq_s64_u16)
	(vreinterpretq_s64_u32, vreinterpretq_s64_u64, vreinterpretq_s64_p8)
	(vreinterpretq_s64_p16, vreinterpretq_s64_p64, vreinterpretq_s64_p128)
	(vreinterpret_u64_f16, vreinterpret_u64_f64, vreinterpret_u64_s8)
	(vreinterpret_u64_s16, vreinterpret_u64_s32, vreinterpret_u64_s64)
	(vreinterpret_u64_f32, vreinterpret_u64_u8, vreinterpret_u64_u16)
	(vreinterpret_u64_u32, vreinterpret_u64_p8, vreinterpret_u64_p16)
	(vreinterpret_u64_p64, vreinterpretq_u64_f64, vreinterpretq_u64_s8)
	(vreinterpretq_u64_s16, vreinterpretq_u64_s32, vreinterpretq_u64_s64)
	(vreinterpretq_u64_f16, vreinterpretq_u64_f32, vreinterpretq_u64_u8)
	(vreinterpretq_u64_u16, vreinterpretq_u64_u32, vreinterpretq_u64_p8)
	(vreinterpretq_u64_p16, vreinterpretq_u64_p64, vreinterpretq_u64_p128)
	(vreinterpret_s8_f16, vreinterpret_s8_f64, vreinterpret_s8_s16)
	(vreinterpret_s8_s32, vreinterpret_s8_s64, vreinterpret_s8_f32)
	(vreinterpret_s8_u8, vreinterpret_s8_u16, vreinterpret_s8_u32)
	(vreinterpret_s8_u64, vreinterpret_s8_p8, vreinterpret_s8_p16)
	(vreinterpret_s8_p64, vreinterpretq_s8_f64, vreinterpretq_s8_s16)
	(vreinterpretq_s8_s32, vreinterpretq_s8_s64, vreinterpretq_s8_f16)
	(vreinterpretq_s8_f32, vreinterpretq_s8_u8, vreinterpretq_s8_u16)
	(vreinterpretq_s8_u32, vreinterpretq_s8_u64, vreinterpretq_s8_p8)
	(vreinterpretq_s8_p16, vreinterpretq_s8_p64, vreinterpretq_s8_p128)
	(vreinterpret_s16_f16, vreinterpret_s16_f64, vreinterpret_s16_s8)
	(vreinterpret_s16_s32, vreinterpret_s16_s64, vreinterpret_s16_f32)
	(vreinterpret_s16_u8, vreinterpret_s16_u16, vreinterpret_s16_u32)
	(vreinterpret_s16_u64, vreinterpret_s16_p8, vreinterpret_s16_p16)
	(vreinterpret_s16_p64, vreinterpretq_s16_f64, vreinterpretq_s16_s8)
	(vreinterpretq_s16_s32, vreinterpretq_s16_s64, vreinterpretq_s16_f16)
	(vreinterpretq_s16_f32, vreinterpretq_s16_u8, vreinterpretq_s16_u16)
	(vreinterpretq_s16_u32, vreinterpretq_s16_u64, vreinterpretq_s16_p8)
	(vreinterpretq_s16_p16, vreinterpretq_s16_p64, vreinterpretq_s16_p128)
	(vreinterpret_s32_f16, vreinterpret_s32_f64, vreinterpret_s32_s8)
	(vreinterpret_s32_s16, vreinterpret_s32_s64, vreinterpret_s32_f32)
	(vreinterpret_s32_u8, vreinterpret_s32_u16, vreinterpret_s32_u32)
	(vreinterpret_s32_u64, vreinterpret_s32_p8, vreinterpret_s32_p16)
	(vreinterpret_s32_p64, vreinterpretq_s32_f64, vreinterpretq_s32_s8)
	(vreinterpretq_s32_s16, vreinterpretq_s32_s64, vreinterpretq_s32_f16)
	(vreinterpretq_s32_f32, vreinterpretq_s32_u8, vreinterpretq_s32_u16)
	(vreinterpretq_s32_u32, vreinterpretq_s32_u64, vreinterpretq_s32_p8)
	(vreinterpretq_s32_p16, vreinterpretq_s32_p64, vreinterpretq_s32_p128)
	(vreinterpret_u8_f16, vreinterpret_u8_f64, vreinterpret_u8_s8)
	(vreinterpret_u8_s16, vreinterpret_u8_s32, vreinterpret_u8_s64)
	(vreinterpret_u8_f32, vreinterpret_u8_u16, vreinterpret_u8_u32)
	(vreinterpret_u8_u64, vreinterpret_u8_p8, vreinterpret_u8_p16)
	(vreinterpret_u8_p64, vreinterpretq_u8_f64, vreinterpretq_u8_s8)
	(vreinterpretq_u8_s16, vreinterpretq_u8_s32, vreinterpretq_u8_s64)
	(vreinterpretq_u8_f16, vreinterpretq_u8_f32, vreinterpretq_u8_u16)
	(vreinterpretq_u8_u32, vreinterpretq_u8_u64, vreinterpretq_u8_p8)
	(vreinterpretq_u8_p16, vreinterpretq_u8_p64, vreinterpretq_u8_p128)
	(vreinterpret_u16_f16, vreinterpret_u16_f64, vreinterpret_u16_s8)
	(vreinterpret_u16_s16, vreinterpret_u16_s32, vreinterpret_u16_s64)
	(vreinterpret_u16_f32, vreinterpret_u16_u8, vreinterpret_u16_u32)
	(vreinterpret_u16_u64, vreinterpret_u16_p8, vreinterpret_u16_p16)
	(vreinterpret_u16_p64, vreinterpretq_u16_f64, vreinterpretq_u16_s8)
	(vreinterpretq_u16_s16, vreinterpretq_u16_s32, vreinterpretq_u16_s64)
	(vreinterpretq_u16_f16, vreinterpretq_u16_f32, vreinterpretq_u16_u8)
	(vreinterpretq_u16_u32, vreinterpretq_u16_u64, vreinterpretq_u16_p8)
	(vreinterpretq_u16_p16, vreinterpretq_u16_p64, vreinterpretq_u16_p128)
	(vreinterpret_u32_f16, vreinterpret_u32_f64, vreinterpret_u32_s8)
	(vreinterpret_u32_s16, vreinterpret_u32_s32, vreinterpret_u32_s64)
	(vreinterpret_u32_f32, vreinterpret_u32_u8, vreinterpret_u32_u16)
	(vreinterpret_u32_u64, vreinterpret_u32_p8, vreinterpret_u32_p16)
	(vreinterpret_u32_p64, vreinterpretq_u32_f64, vreinterpretq_u32_s8)
	(vreinterpretq_u32_s16, vreinterpretq_u32_s32, vreinterpretq_u32_s64)
	(vreinterpretq_u32_f16, vreinterpretq_u32_f32, vreinterpretq_u32_u8)
	(vreinterpretq_u32_u16, vreinterpretq_u32_u64, vreinterpretq_u32_p8)
	(vreinterpretq_u32_p16, vreinterpretq_u32_p64, vreinterpretq_u32_p128)
	(vreinterpretq_f64_p128, vreinterpretq_p128_f64, vreinterpret_bf16_u8)
	(vreinterpret_bf16_u16, vreinterpret_bf16_u32, vreinterpret_bf16_u64)
	(vreinterpret_bf16_s8, vreinterpret_bf16_s16, vreinterpret_bf16_s32)
	(vreinterpret_bf16_s64, vreinterpret_bf16_p8, vreinterpret_bf16_p16)
	(vreinterpret_bf16_p64, vreinterpret_bf16_f16, vreinterpret_bf16_f32)
	(vreinterpret_bf16_f64, vreinterpretq_bf16_u8, vreinterpretq_bf16_u16)
	(vreinterpretq_bf16_u32, vreinterpretq_bf16_u64, vreinterpretq_bf16_s8)
	(vreinterpretq_bf16_s16, vreinterpretq_bf16_s32, vreinterpretq_bf16_s64)
	(vreinterpretq_bf16_p8, vreinterpretq_bf16_p16, vreinterpretq_bf16_p64)
	(vreinterpretq_bf16_p128, vreinterpretq_bf16_f16)
	(vreinterpretq_bf16_f32, vreinterpretq_bf16_f64, vreinterpret_s8_bf16)
	(vreinterpret_s16_bf16, vreinterpret_s32_bf16, vreinterpret_s64_bf16)
	(vreinterpret_u8_bf16, vreinterpret_u16_bf16, vreinterpret_u32_bf16)
	(vreinterpret_u64_bf16, vreinterpret_f16_bf16, vreinterpret_f32_bf16)
	(vreinterpret_f64_bf16, vreinterpret_p8_bf16, vreinterpret_p16_bf16)
	(vreinterpret_p64_bf16, vreinterpretq_s8_bf16, vreinterpretq_s16_bf16)
	(vreinterpretq_s32_bf16, vreinterpretq_s64_bf16, vreinterpretq_u8_bf16)
	(vreinterpretq_u16_bf16, vreinterpretq_u32_bf16, vreinterpretq_u64_bf16)
	(vreinterpretq_f16_bf16, vreinterpretq_f32_bf16, vreinterpretq_f64_bf16)
	(vreinterpretq_p8_bf16, vreinterpretq_p16_bf16, vreinterpretq_p64_bf16)
	(vreinterpretq_p128_bf16): Delete
	* config/aarch64/iterators.md: Add V1DI mode to nunits

---
  

Comments

Richard Sandiford July 5, 2022, 6:52 a.m. UTC | #1
Sorry for the slow review.

Andrew Carlotti via Gcc-patches <gcc-patches@gcc.gnu.org> writes:
> Hi,
>
> This removes a significant number of intrinsic definitions from the arm_neon.h
> header file, and reduces the amount of code duplication. The new macros and
> data structures are intended to also facilitate moving other intrinsic
> definitions out of the header file in future.

Nice.

> There is a a slight change in the behaviour of the bf16 vreinterpret intrinsics
> when compiling without bf16 support. Expressions like:
>
> b = vreinterpretq_s32_bf16(vreinterpretq_bf16_s64(a));
>
> are now compiled successfully, instead of causing a 'target specific option
> mismatch' during inlining.

Yeah.  The ACLE says that these are conditional on +bf16, but no-one
seems to have a strong opinion about whether it needs to be that way.
Accepting them unconditionally makes them consistent with arm_sve.h.

Could you split out the part that adds V1DI?  I never did understand
why we had V1DF but not V1DI, but neither one seemed obviously more
right than the other.  Having the V1DI change as a separate patch
would help with bisecting and might help with later archaeology.

> @@ -523,6 +581,99 @@ static aarch64_simd_builtin_datum aarch64_simd_builtin_data[] = {
>    FCMLA_LANEQ_BUILTIN (180, v4hf, fcmla_laneq, V4HF, true) \
>    FCMLA_LANEQ_BUILTIN (270, v4hf, fcmla_laneq, V4HF, true) \
>  
> +
> +/* vreinterpret intrinsics are defined for any pair of element types.
> +   {     _bf16           }   {     _bf16           } (if bf16 is supported)

Like you say, the bf16 alternatives are now unconditional, so it might
be better to remove "(if bf16 is supported)".

> +   {      _f16 _f32 _f64 }   {      _f16 _f32 _f64 }
> +   { _s8  _s16 _s32 _s64 } x { _s8  _s16 _s32 _s64 }
> +   { _u8  _u16 _u32 _u64 }   { _u8  _u16 _u32 _u64 }
> +   { _p8  _p16      _p64 }   { _p8  _p16      _p64 }.  */
> +#define VREINTERPRET_BUILTIN2(A, B) \
> +  VREINTERPRET_BUILTIN (A, B, d)
> […]
> @@ -636,6 +804,22 @@ static aarch64_fcmla_laneq_builtin_datum aarch64_fcmla_lane_builtin_data[] = {
>    AARCH64_SIMD_FCMLA_LANEQ_BUILTINS
>  };
>  
> +#undef VREINTERPRET_BUILTIN
> +#define VREINTERPRET_BUILTIN(A, B, L) \
> +  {"vreinterpret" SIMD_INTR_LENGTH_CHAR(L) "_" #A "_" #B, \
> +   AARCH64_SIMD_BUILTIN_VREINTERPRET##L##_##A##_##B, \
> +   2, \
> +   { SIMD_INTR_MODE(A, L), SIMD_INTR_MODE(B, L) }, \
> +   { SIMD_INTR_QUAL(A), SIMD_INTR_QUAL(B) }, \
> +   FLAG_AUTO_FP, \
> +   !strcmp(#A, #B) \

Could we instead use:

  SIMD_INTR_MODE(A, L) == SIMD_INTR_MODE(B, L)

?  That should be a definite compile-time constant.  It should then
be possible to make…

> +  },
> +
> +static aarch64_simd_intrinsic_datum aarch64_simd_intrinsic_data[] = {
> +  AARCH64_SIMD_VREINTERPRET_BUILTINS
> +};

…this a static const array.

> +
> +
>  #undef CRC32_BUILTIN
>  
>  static GTY(()) tree aarch64_builtin_decls[AARCH64_BUILTIN_MAX];
> @@ -1127,6 +1311,58 @@ aarch64_init_fcmla_laneq_builtins (void)
>      }
>  }
>  
> +void
> +aarch64_init_simd_intrinsics (void)
> +{
> +  unsigned int i = 0;
> +
> +  for (i = 0; i < ARRAY_SIZE (aarch64_simd_intrinsic_data); ++i)
> +    {
> +      aarch64_simd_intrinsic_datum* d = &aarch64_simd_intrinsic_data[i];

Making the type const would overflow this line, but using auto
would be OK.

> +
> +      if (d->skip)
> +	continue;
> +
> +      tree return_type = void_type_node;
> +      tree args = void_list_node;
> +
> +      for (int op_num = d->op_count - 1; op_num >= 0; op_num--)
> +	{
> +	  machine_mode op_mode = d->op_modes[op_num];
> +	  enum aarch64_type_qualifiers qualifiers = d->qualifiers[op_num];
> +
> +	  /* For pointers, we want a pointer to the basic type
> +	     of the vector.  */
> +	  if (qualifiers & qualifier_pointer && VECTOR_MODE_P (op_mode))
> +	    op_mode = GET_MODE_INNER (op_mode);
> +
> +	  tree eltype = aarch64_simd_builtin_type
> +		     (op_mode,
> +		      (qualifiers & qualifier_unsigned) != 0,
> +		      (qualifiers & qualifier_poly) != 0);
> +	  gcc_assert (eltype != NULL);
> +
> +	  /* Add qualifiers.  */
> +	  if (qualifiers & qualifier_const)
> +	    eltype = build_qualified_type (eltype, TYPE_QUAL_CONST);
> +
> +	  if (qualifiers & qualifier_pointer)
> +	      eltype = build_pointer_type (eltype);

Would be better to put this eltype stuff in a common subroutine
rather than duplicate it from aarch64_init_simd_builtin_functions.

> +
> +	  if (op_num == 0)
> +	    return_type = eltype;
> +	  else
> +	    args = tree_cons (NULL_TREE, eltype, args);
> +	}
> +
> +      tree ftype = build_function_type (return_type, args);
> +      tree attrs = aarch64_get_attributes (FLAG_AUTO_FP, d->op_modes[0]);
> +      unsigned int code = (d->fcode << AARCH64_BUILTIN_SHIFT | AARCH64_BUILTIN_GENERAL);
> +      tree fndecl = simulate_builtin_function_decl (input_location, d->name, ftype, code, NULL, attrs);

Formatting nit: last two lines overflow the 80 character limit.

> +      aarch64_builtin_decls[d->fcode] = fndecl;
> +    }
> +}
> +
>  void
>  aarch64_init_simd_builtin_functions (bool called_from_pragma)
>  {
> […]
> diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md
> index a00e1c6ef8d6b43d8b1a0fe4701e6b8c1f0f622f..a3f8f20e5fb20eeb9b9f48a27d83343638ba3c93 100644
> --- a/gcc/config/aarch64/aarch64-simd.md
> +++ b/gcc/config/aarch64/aarch64-simd.md
> @@ -8039,6 +8039,20 @@
>    DONE;
>  })
>  
> +;; And same for V1DI (this should probably be merged with the above pattern)

Yes please :-)

E.g. maybe add a VQ_2E mode iterator as the 128-bit half of VP_2E,
and a V1HALF mode attributes that gives V1DI and V1DF (instead
of VHALF, which gives DI and DF).

Thanks,
Richard

> +(define_expand "vec_extractv2div1di"
> +  [(match_operand:V1DI 0 "register_operand")
> +   (match_operand:V2DI 1 "register_operand")
> +   (match_operand 2 "immediate_operand")]
> +  "TARGET_SIMD"
> +{
> +  /* V1DI is rarely used by other patterns, so it should be better to hide
> +     it in a subreg destination of a normal DI op.  */
> +  rtx scalar0 = gen_lowpart (DImode, operands[0]);
> +  emit_insn (gen_vec_extractv2didi (scalar0, operands[1], operands[2]));
> +  DONE;
> +})
> +
>  ;; aes
>  
>  (define_insn "aarch64_crypto_aes<aes_op>v16qi"
  

Patch

diff --git a/gcc/config/aarch64/aarch64-builtins.cc b/gcc/config/aarch64/aarch64-builtins.cc
index c21476d7ae963450b12efa24418ce4004a3c74bf..57aaff3b1d5df80b1107f4a037498af714516ec9 100644
--- a/gcc/config/aarch64/aarch64-builtins.cc
+++ b/gcc/config/aarch64/aarch64-builtins.cc
@@ -55,6 +55,7 @@ 
 #define v2si_UP  E_V2SImode
 #define v2sf_UP  E_V2SFmode
 #define v1df_UP  E_V1DFmode
+#define v1di_UP  E_V1DImode
 #define di_UP    E_DImode
 #define df_UP    E_DFmode
 #define v16qi_UP E_V16QImode
@@ -126,6 +127,63 @@ 
 #define v4x2df_UP  E_V4x2DFmode
 #define UP(X) X##_UP
 
+#define MODE_d_bf16 E_V4BFmode
+#define MODE_d_f16 E_V4HFmode
+#define MODE_d_f32 E_V2SFmode
+#define MODE_d_f64 E_V1DFmode
+#define MODE_d_s8 E_V8QImode
+#define MODE_d_s16 E_V4HImode
+#define MODE_d_s32 E_V2SImode
+#define MODE_d_s64 E_V1DImode
+#define MODE_d_u8 E_V8QImode
+#define MODE_d_u16 E_V4HImode
+#define MODE_d_u32 E_V2SImode
+#define MODE_d_u64 E_V1DImode
+#define MODE_d_p8 E_V8QImode
+#define MODE_d_p16 E_V4HImode
+#define MODE_d_p64 E_V1DImode
+#define MODE_q_bf16 E_V8BFmode
+#define MODE_q_f16 E_V8HFmode
+#define MODE_q_f32 E_V4SFmode
+#define MODE_q_f64 E_V2DFmode
+#define MODE_q_s8 E_V16QImode
+#define MODE_q_s16 E_V8HImode
+#define MODE_q_s32 E_V4SImode
+#define MODE_q_s64 E_V2DImode
+#define MODE_q_u8 E_V16QImode
+#define MODE_q_u16 E_V8HImode
+#define MODE_q_u32 E_V4SImode
+#define MODE_q_u64 E_V2DImode
+#define MODE_q_p8 E_V16QImode
+#define MODE_q_p16 E_V8HImode
+#define MODE_q_p64 E_V2DImode
+#define MODE_q_p128 E_TImode
+
+#define QUAL_bf16 qualifier_none
+#define QUAL_f16 qualifier_none
+#define QUAL_f32 qualifier_none
+#define QUAL_f64 qualifier_none
+#define QUAL_s8 qualifier_none
+#define QUAL_s16 qualifier_none
+#define QUAL_s32 qualifier_none
+#define QUAL_s64 qualifier_none
+#define QUAL_u8 qualifier_unsigned
+#define QUAL_u16 qualifier_unsigned
+#define QUAL_u32 qualifier_unsigned
+#define QUAL_u64 qualifier_unsigned
+#define QUAL_p8 qualifier_poly
+#define QUAL_p16 qualifier_poly
+#define QUAL_p64 qualifier_poly
+#define QUAL_p128 qualifier_poly
+
+#define LENGTH_d ""
+#define LENGTH_q "q"
+
+#define SIMD_INTR_MODE(suffix, length) MODE_##length##_##suffix
+#define SIMD_INTR_QUAL(suffix) QUAL_##suffix
+#define SIMD_INTR_LENGTH_CHAR(length) LENGTH_##length
+
+
 #define SIMD_MAX_BUILTIN_ARGS 5
 
 enum aarch64_type_qualifiers
@@ -523,6 +581,99 @@  static aarch64_simd_builtin_datum aarch64_simd_builtin_data[] = {
   FCMLA_LANEQ_BUILTIN (180, v4hf, fcmla_laneq, V4HF, true) \
   FCMLA_LANEQ_BUILTIN (270, v4hf, fcmla_laneq, V4HF, true) \
 
+
+/* vreinterpret intrinsics are defined for any pair of element types.
+   {     _bf16           }   {     _bf16           } (if bf16 is supported)
+   {      _f16 _f32 _f64 }   {      _f16 _f32 _f64 }
+   { _s8  _s16 _s32 _s64 } x { _s8  _s16 _s32 _s64 }
+   { _u8  _u16 _u32 _u64 }   { _u8  _u16 _u32 _u64 }
+   { _p8  _p16      _p64 }   { _p8  _p16      _p64 }.  */
+#define VREINTERPRET_BUILTIN2(A, B) \
+  VREINTERPRET_BUILTIN (A, B, d)
+
+#define VREINTERPRET_BUILTINS1(A) \
+  VREINTERPRET_BUILTIN2 (A, bf16) \
+  VREINTERPRET_BUILTIN2 (A, f16) \
+  VREINTERPRET_BUILTIN2 (A, f32) \
+  VREINTERPRET_BUILTIN2 (A, f64) \
+  VREINTERPRET_BUILTIN2 (A, s8) \
+  VREINTERPRET_BUILTIN2 (A, s16) \
+  VREINTERPRET_BUILTIN2 (A, s32) \
+  VREINTERPRET_BUILTIN2 (A, s64) \
+  VREINTERPRET_BUILTIN2 (A, u8) \
+  VREINTERPRET_BUILTIN2 (A, u16) \
+  VREINTERPRET_BUILTIN2 (A, u32) \
+  VREINTERPRET_BUILTIN2 (A, u64) \
+  VREINTERPRET_BUILTIN2 (A, p8) \
+  VREINTERPRET_BUILTIN2 (A, p16) \
+  VREINTERPRET_BUILTIN2 (A, p64)
+
+#define VREINTERPRET_BUILTINS \
+  VREINTERPRET_BUILTINS1 (bf16) \
+  VREINTERPRET_BUILTINS1 (f16) \
+  VREINTERPRET_BUILTINS1 (f32) \
+  VREINTERPRET_BUILTINS1 (f64) \
+  VREINTERPRET_BUILTINS1 (s8) \
+  VREINTERPRET_BUILTINS1 (s16) \
+  VREINTERPRET_BUILTINS1 (s32) \
+  VREINTERPRET_BUILTINS1 (s64) \
+  VREINTERPRET_BUILTINS1 (u8) \
+  VREINTERPRET_BUILTINS1 (u16) \
+  VREINTERPRET_BUILTINS1 (u32) \
+  VREINTERPRET_BUILTINS1 (u64) \
+  VREINTERPRET_BUILTINS1 (p8) \
+  VREINTERPRET_BUILTINS1 (p16) \
+  VREINTERPRET_BUILTINS1 (p64)
+
+/* vreinterpretq intrinsics are additionally defined for p128.
+   {     _bf16                 }   {     _bf16                 }
+   {      _f16 _f32 _f64       }   {      _f16 _f32 _f64       }
+   { _s8  _s16 _s32 _s64       } x { _s8  _s16 _s32 _s64       }
+   { _u8  _u16 _u32 _u64       }   { _u8  _u16 _u32 _u64       }
+   { _p8  _p16      _p64 _p128 }   { _p8  _p16      _p64 _p128 }.  */
+#define VREINTERPRETQ_BUILTIN2(A, B) \
+  VREINTERPRET_BUILTIN (A, B, q)
+
+#define VREINTERPRETQ_BUILTINS1(A) \
+  VREINTERPRETQ_BUILTIN2 (A, bf16) \
+  VREINTERPRETQ_BUILTIN2 (A, f16) \
+  VREINTERPRETQ_BUILTIN2 (A, f32) \
+  VREINTERPRETQ_BUILTIN2 (A, f64) \
+  VREINTERPRETQ_BUILTIN2 (A, s8) \
+  VREINTERPRETQ_BUILTIN2 (A, s16) \
+  VREINTERPRETQ_BUILTIN2 (A, s32) \
+  VREINTERPRETQ_BUILTIN2 (A, s64) \
+  VREINTERPRETQ_BUILTIN2 (A, u8) \
+  VREINTERPRETQ_BUILTIN2 (A, u16) \
+  VREINTERPRETQ_BUILTIN2 (A, u32) \
+  VREINTERPRETQ_BUILTIN2 (A, u64) \
+  VREINTERPRETQ_BUILTIN2 (A, p8) \
+  VREINTERPRETQ_BUILTIN2 (A, p16) \
+  VREINTERPRETQ_BUILTIN2 (A, p64) \
+  VREINTERPRETQ_BUILTIN2 (A, p128)
+
+#define VREINTERPRETQ_BUILTINS \
+  VREINTERPRETQ_BUILTINS1 (bf16) \
+  VREINTERPRETQ_BUILTINS1 (f16) \
+  VREINTERPRETQ_BUILTINS1 (f32) \
+  VREINTERPRETQ_BUILTINS1 (f64) \
+  VREINTERPRETQ_BUILTINS1 (s8) \
+  VREINTERPRETQ_BUILTINS1 (s16) \
+  VREINTERPRETQ_BUILTINS1 (s32) \
+  VREINTERPRETQ_BUILTINS1 (s64) \
+  VREINTERPRETQ_BUILTINS1 (u8) \
+  VREINTERPRETQ_BUILTINS1 (u16) \
+  VREINTERPRETQ_BUILTINS1 (u32) \
+  VREINTERPRETQ_BUILTINS1 (u64) \
+  VREINTERPRETQ_BUILTINS1 (p8) \
+  VREINTERPRETQ_BUILTINS1 (p16) \
+  VREINTERPRETQ_BUILTINS1 (p64) \
+  VREINTERPRETQ_BUILTINS1 (p128)
+
+#define AARCH64_SIMD_VREINTERPRET_BUILTINS \
+  VREINTERPRET_BUILTINS \
+  VREINTERPRETQ_BUILTINS
+
 typedef struct
 {
   const char *name;
@@ -541,12 +692,27 @@  typedef struct
   bool lane;
 } aarch64_fcmla_laneq_builtin_datum;
 
+/* Hold information about how to declare SIMD intrinsics.  */
+typedef struct
+{
+  const char *name;
+  unsigned int fcode;
+  unsigned int op_count;
+  machine_mode op_modes[SIMD_MAX_BUILTIN_ARGS];
+  enum aarch64_type_qualifiers qualifiers[SIMD_MAX_BUILTIN_ARGS];
+  unsigned int flags;
+  bool skip;
+} aarch64_simd_intrinsic_datum;
+
 #define CRC32_BUILTIN(N, M) \
   AARCH64_BUILTIN_##N,
 
 #define FCMLA_LANEQ_BUILTIN(I, N, X, M, T) \
   AARCH64_SIMD_BUILTIN_FCMLA_LANEQ##I##_##M,
 
+#define VREINTERPRET_BUILTIN(A, B, L) \
+  AARCH64_SIMD_BUILTIN_VREINTERPRET##L##_##A##_##B,
+
 #undef VAR1
 #define VAR1(T, N, MAP, FLAG, A) \
   AARCH64_SIMD_BUILTIN_##T##_##N##A,
@@ -580,6 +746,8 @@  enum aarch64_builtins
   AARCH64_CRC32_BUILTIN_BASE,
   AARCH64_CRC32_BUILTINS
   AARCH64_CRC32_BUILTIN_MAX,
+  /* SIMD intrinsic builtins.  */
+  AARCH64_SIMD_VREINTERPRET_BUILTINS
   /* ARMv8.3-A Pointer Authentication Builtins.  */
   AARCH64_PAUTH_BUILTIN_AUTIA1716,
   AARCH64_PAUTH_BUILTIN_PACIA1716,
@@ -636,6 +804,22 @@  static aarch64_fcmla_laneq_builtin_datum aarch64_fcmla_lane_builtin_data[] = {
   AARCH64_SIMD_FCMLA_LANEQ_BUILTINS
 };
 
+#undef VREINTERPRET_BUILTIN
+#define VREINTERPRET_BUILTIN(A, B, L) \
+  {"vreinterpret" SIMD_INTR_LENGTH_CHAR(L) "_" #A "_" #B, \
+   AARCH64_SIMD_BUILTIN_VREINTERPRET##L##_##A##_##B, \
+   2, \
+   { SIMD_INTR_MODE(A, L), SIMD_INTR_MODE(B, L) }, \
+   { SIMD_INTR_QUAL(A), SIMD_INTR_QUAL(B) }, \
+   FLAG_AUTO_FP, \
+   !strcmp(#A, #B) \
+  },
+
+static aarch64_simd_intrinsic_datum aarch64_simd_intrinsic_data[] = {
+  AARCH64_SIMD_VREINTERPRET_BUILTINS
+};
+
+
 #undef CRC32_BUILTIN
 
 static GTY(()) tree aarch64_builtin_decls[AARCH64_BUILTIN_MAX];
@@ -1127,6 +1311,58 @@  aarch64_init_fcmla_laneq_builtins (void)
     }
 }
 
+void
+aarch64_init_simd_intrinsics (void)
+{
+  unsigned int i = 0;
+
+  for (i = 0; i < ARRAY_SIZE (aarch64_simd_intrinsic_data); ++i)
+    {
+      aarch64_simd_intrinsic_datum* d = &aarch64_simd_intrinsic_data[i];
+
+      if (d->skip)
+	continue;
+
+      tree return_type = void_type_node;
+      tree args = void_list_node;
+
+      for (int op_num = d->op_count - 1; op_num >= 0; op_num--)
+	{
+	  machine_mode op_mode = d->op_modes[op_num];
+	  enum aarch64_type_qualifiers qualifiers = d->qualifiers[op_num];
+
+	  /* For pointers, we want a pointer to the basic type
+	     of the vector.  */
+	  if (qualifiers & qualifier_pointer && VECTOR_MODE_P (op_mode))
+	    op_mode = GET_MODE_INNER (op_mode);
+
+	  tree eltype = aarch64_simd_builtin_type
+		     (op_mode,
+		      (qualifiers & qualifier_unsigned) != 0,
+		      (qualifiers & qualifier_poly) != 0);
+	  gcc_assert (eltype != NULL);
+
+	  /* Add qualifiers.  */
+	  if (qualifiers & qualifier_const)
+	    eltype = build_qualified_type (eltype, TYPE_QUAL_CONST);
+
+	  if (qualifiers & qualifier_pointer)
+	      eltype = build_pointer_type (eltype);
+
+	  if (op_num == 0)
+	    return_type = eltype;
+	  else
+	    args = tree_cons (NULL_TREE, eltype, args);
+	}
+
+      tree ftype = build_function_type (return_type, args);
+      tree attrs = aarch64_get_attributes (FLAG_AUTO_FP, d->op_modes[0]);
+      unsigned int code = (d->fcode << AARCH64_BUILTIN_SHIFT | AARCH64_BUILTIN_GENERAL);
+      tree fndecl = simulate_builtin_function_decl (input_location, d->name, ftype, code, NULL, attrs);
+      aarch64_builtin_decls[d->fcode] = fndecl;
+    }
+}
+
 void
 aarch64_init_simd_builtin_functions (bool called_from_pragma)
 {
@@ -1346,7 +1582,10 @@  aarch64_simd_switcher::~aarch64_simd_switcher ()
   aarch64_isa_flags = m_old_isa_flags;
 }
 
-/* Implement #pragma GCC aarch64 "arm_neon.h".  */
+/* Implement #pragma GCC aarch64 "arm_neon.h".
+
+   The types and functions defined here need to be available internally
+   during LTO as well.  */
 void
 handle_arm_neon_h (void)
 {
@@ -1359,6 +1598,7 @@  handle_arm_neon_h (void)
 	register_tuple_type (count, i);
 
   aarch64_init_simd_builtin_functions (true);
+  aarch64_init_simd_intrinsics ();
 }
 
 void
@@ -2709,6 +2949,11 @@  aarch64_fold_builtin_lane_check (tree arg0, tree arg1, tree arg2)
 #define VAR1(T, N, MAP, FLAG, A) \
   case AARCH64_SIMD_BUILTIN_##T##_##N##A:
 
+#undef VREINTERPRET_BUILTIN
+#define VREINTERPRET_BUILTIN(A, B, L) \
+  case AARCH64_SIMD_BUILTIN_VREINTERPRET##L##_##A##_##B:
+
+
 /* Try to fold a call to the built-in function with subcode FCODE.  The
    function is passed the N_ARGS arguments in ARGS and it returns a value
    of type TYPE.  Return the new expression on success and NULL_TREE on
@@ -2725,6 +2970,8 @@  aarch64_general_fold_builtin (unsigned int fcode, tree type,
       VAR1 (UNOP, floatv4si, 2, ALL, v4sf)
       VAR1 (UNOP, floatv2di, 2, ALL, v2df)
 	return fold_build1 (FLOAT_EXPR, type, args[0]);
+      AARCH64_SIMD_VREINTERPRET_BUILTINS
+	return fold_build1 (VIEW_CONVERT_EXPR, type, args[0]);
       case AARCH64_SIMD_BUILTIN_LANE_CHECK:
 	gcc_assert (n_args == 3);
 	if (aarch64_fold_builtin_lane_check (args[0], args[1], args[2]))
diff --git a/gcc/config/aarch64/aarch64-modes.def b/gcc/config/aarch64/aarch64-modes.def
index 8f399225a8048d93108e33e9d49c736aeb5612ce..d3c9b74434cd2c0d0cb1a2fd26af8c0bf38a4cfa 100644
--- a/gcc/config/aarch64/aarch64-modes.def
+++ b/gcc/config/aarch64/aarch64-modes.def
@@ -70,6 +70,7 @@  VECTOR_MODES (INT, 8);        /*       V8QI V4HI V2SI.  */
 VECTOR_MODES (INT, 16);       /* V16QI V8HI V4SI V2DI.  */
 VECTOR_MODES (FLOAT, 8);      /*                 V2SF.  */
 VECTOR_MODES (FLOAT, 16);     /*            V4SF V2DF.  */
+VECTOR_MODE (INT, DI, 1);     /*                 V1DI.  */
 VECTOR_MODE (FLOAT, DF, 1);   /*                 V1DF.  */
 VECTOR_MODE (FLOAT, HF, 2);   /*                 V2HF.  */
 
diff --git a/gcc/config/aarch64/aarch64-simd-builtin-types.def b/gcc/config/aarch64/aarch64-simd-builtin-types.def
index 248e51e96549fb640817d79c099a3f5e62c71317..40545581408e2ee2be84f08abb5801058c4ea42e 100644
--- a/gcc/config/aarch64/aarch64-simd-builtin-types.def
+++ b/gcc/config/aarch64/aarch64-simd-builtin-types.def
@@ -24,7 +24,7 @@ 
   ENTRY (Int16x8_t, V8HI, none, 11)
   ENTRY (Int32x2_t, V2SI, none, 11)
   ENTRY (Int32x4_t, V4SI, none, 11)
-  ENTRY (Int64x1_t, DI, none, 11)
+  ENTRY (Int64x1_t, V1DI, none, 11)
   ENTRY (Int64x2_t, V2DI, none, 11)
   ENTRY (Uint8x8_t, V8QI, unsigned, 11)
   ENTRY (Uint8x16_t, V16QI, unsigned, 12)
@@ -32,7 +32,7 @@ 
   ENTRY (Uint16x8_t, V8HI, unsigned, 12)
   ENTRY (Uint32x2_t, V2SI, unsigned, 12)
   ENTRY (Uint32x4_t, V4SI, unsigned, 12)
-  ENTRY (Uint64x1_t, DI, unsigned, 12)
+  ENTRY (Uint64x1_t, V1DI, unsigned, 12)
   ENTRY (Uint64x2_t, V2DI, unsigned, 12)
   ENTRY (Poly8_t, QI, poly, 9)
   ENTRY (Poly16_t, HI, poly, 10)
@@ -42,7 +42,7 @@ 
   ENTRY (Poly8x16_t, V16QI, poly, 12)
   ENTRY (Poly16x4_t, V4HI, poly, 12)
   ENTRY (Poly16x8_t, V8HI, poly, 12)
-  ENTRY (Poly64x1_t, DI, poly, 12)
+  ENTRY (Poly64x1_t, V1DI, poly, 12)
   ENTRY (Poly64x2_t, V2DI, poly, 12)
   ENTRY (Float16x4_t, V4HF, none, 13)
   ENTRY (Float16x8_t, V8HF, none, 13)
diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md
index a00e1c6ef8d6b43d8b1a0fe4701e6b8c1f0f622f..a3f8f20e5fb20eeb9b9f48a27d83343638ba3c93 100644
--- a/gcc/config/aarch64/aarch64-simd.md
+++ b/gcc/config/aarch64/aarch64-simd.md
@@ -8039,6 +8039,20 @@ 
   DONE;
 })
 
+;; And same for V1DI (this should probably be merged with the above pattern)
+(define_expand "vec_extractv2div1di"
+  [(match_operand:V1DI 0 "register_operand")
+   (match_operand:V2DI 1 "register_operand")
+   (match_operand 2 "immediate_operand")]
+  "TARGET_SIMD"
+{
+  /* V1DI is rarely used by other patterns, so it should be better to hide
+     it in a subreg destination of a normal DI op.  */
+  rtx scalar0 = gen_lowpart (DImode, operands[0]);
+  emit_insn (gen_vec_extractv2didi (scalar0, operands[1], operands[2]));
+  DONE;
+})
+
 ;; aes
 
 (define_insn "aarch64_crypto_aes<aes_op>v16qi"
diff --git a/gcc/config/aarch64/aarch64.cc b/gcc/config/aarch64/aarch64.cc
index f650abbc4ce49cf0947049931f86bad1130c3428..278910af0a38c0203a962d34c6792191f0fe9e31 100644
--- a/gcc/config/aarch64/aarch64.cc
+++ b/gcc/config/aarch64/aarch64.cc
@@ -3568,7 +3568,7 @@  aarch64_classify_vector_mode (machine_mode mode)
     case E_V8QImode:
     case E_V4HImode:
     case E_V2SImode:
-    /* ...E_V1DImode doesn't exist.  */
+    case E_V1DImode:
     case E_V4HFmode:
     case E_V4BFmode:
     case E_V2SFmode:
diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h
index 85d03c58d2a98c1b8b84f007a82bb976601b424e..cf6af728ca99dae1cb6ab647466cfec32f7e913e 100644
--- a/gcc/config/aarch64/arm_neon.h
+++ b/gcc/config/aarch64/arm_neon.h
@@ -2827,2753 +2827,6 @@  vgetq_lane_u64 (uint64x2_t __a, const int __b)
   return __aarch64_vget_lane_any (__a, __b);
 }
 
-/* vreinterpret  */
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_f16 (float16x4_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_f64 (float64x1_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_s8 (int8x8_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_s16 (int16x4_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_s32 (int32x2_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_s64 (int64x1_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_f32 (float32x2_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_u8 (uint8x8_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_u16 (uint16x4_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_u32 (uint32x2_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_u64 (uint64x1_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_p16 (poly16x4_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_p64 (poly64x1_t __a)
-{
-  return (poly8x8_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_f64 (float64x2_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_s8 (int8x16_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_s16 (int16x8_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_s32 (int32x4_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_s64 (int64x2_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_f16 (float16x8_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_f32 (float32x4_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_u8 (uint8x16_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_u16 (uint16x8_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_u32 (uint32x4_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_u64 (uint64x2_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_p16 (poly16x8_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_p64 (poly64x2_t __a)
-{
-  return (poly8x16_t) __a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_p128 (poly128_t __a)
-{
-  return (poly8x16_t)__a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_f16 (float16x4_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_f64 (float64x1_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_s8 (int8x8_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_s16 (int16x4_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_s32 (int32x2_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_s64 (int64x1_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_f32 (float32x2_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_u8 (uint8x8_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_u16 (uint16x4_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_u32 (uint32x2_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_u64 (uint64x1_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_p8 (poly8x8_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_p64 (poly64x1_t __a)
-{
-  return (poly16x4_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_f64 (float64x2_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_s8 (int8x16_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_s16 (int16x8_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_s32 (int32x4_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_s64 (int64x2_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_f16 (float16x8_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_f32 (float32x4_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_u8 (uint8x16_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_u16 (uint16x8_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_u32 (uint32x4_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_u64 (uint64x2_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_p8 (poly8x16_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_p64 (poly64x2_t __a)
-{
-  return (poly16x8_t) __a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_p128 (poly128_t __a)
-{
-  return (poly16x8_t)__a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_f16 (float16x4_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_f64 (float64x1_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_s8 (int8x8_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_s16 (int16x4_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_s32 (int32x2_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_s64 (int64x1_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_f32 (float32x2_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_u8 (uint8x8_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_u16 (uint16x4_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_u32 (uint32x2_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_u64 (uint64x1_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_p8 (poly8x8_t __a)
-{
-  return (poly64x1_t) __a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_p16 (poly16x4_t __a)
-{
-  return (poly64x1_t)__a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_f64 (float64x2_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_s8 (int8x16_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_s16 (int16x8_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_s32 (int32x4_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_s64 (int64x2_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_f16 (float16x8_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_f32 (float32x4_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_p128 (poly128_t __a)
-{
-  return (poly64x2_t)__a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_u8 (uint8x16_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_u16 (uint16x8_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_p16 (poly16x8_t __a)
-{
-  return (poly64x2_t)__a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_u32 (uint32x4_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_u64 (uint64x2_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_p8 (poly8x16_t __a)
-{
-  return (poly64x2_t) __a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_p8 (poly8x16_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_p16 (poly16x8_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_f16 (float16x8_t __a)
-{
-  return (poly128_t) __a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_f32 (float32x4_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_p64 (poly64x2_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_s64 (int64x2_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_u64 (uint64x2_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_s8 (int8x16_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_s16 (int16x8_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_s32 (int32x4_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_u8 (uint8x16_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_u16 (uint16x8_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_u32 (uint32x4_t __a)
-{
-  return (poly128_t)__a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_f64 (float64x1_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_s8 (int8x8_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_s16 (int16x4_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_s32 (int32x2_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_s64 (int64x1_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_f32 (float32x2_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_u8 (uint8x8_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_u16 (uint16x4_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_u32 (uint32x2_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_u64 (uint64x1_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_p8 (poly8x8_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_p16 (poly16x4_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_p64 (poly64x1_t __a)
-{
-  return (float16x4_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_f64 (float64x2_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_s8 (int8x16_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_s16 (int16x8_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_s32 (int32x4_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_s64 (int64x2_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_f32 (float32x4_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_u8 (uint8x16_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_u16 (uint16x8_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_u32 (uint32x4_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_u64 (uint64x2_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_p8 (poly8x16_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_p128 (poly128_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_p16 (poly16x8_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_p64 (poly64x2_t __a)
-{
-  return (float16x8_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_f16 (float16x4_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_f64 (float64x1_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_s8 (int8x8_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_s16 (int16x4_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_s32 (int32x2_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_s64 (int64x1_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_u8 (uint8x8_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_u16 (uint16x4_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_u32 (uint32x2_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_u64 (uint64x1_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_p8 (poly8x8_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_p16 (poly16x4_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_p64 (poly64x1_t __a)
-{
-  return (float32x2_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_f16 (float16x8_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_f64 (float64x2_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_s8 (int8x16_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_s16 (int16x8_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_s32 (int32x4_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_s64 (int64x2_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_u8 (uint8x16_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_u16 (uint16x8_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_u32 (uint32x4_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_u64 (uint64x2_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_p8 (poly8x16_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_p16 (poly16x8_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_p64 (poly64x2_t __a)
-{
-  return (float32x4_t) __a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_p128 (poly128_t __a)
-{
-  return (float32x4_t)__a;
-}
-
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_f16 (float16x4_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_f32 (float32x2_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_p8 (poly8x8_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_p16 (poly16x4_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_p64 (poly64x1_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_s8 (int8x8_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_s16 (int16x4_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_s32 (int32x2_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_s64 (int64x1_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_u8 (uint8x8_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_u16 (uint16x4_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_u32 (uint32x2_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_u64 (uint64x1_t __a)
-{
-  return (float64x1_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_f16 (float16x8_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_f32 (float32x4_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_p8 (poly8x16_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_p16 (poly16x8_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_p64 (poly64x2_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_s8 (int8x16_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_s16 (int16x8_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_s32 (int32x4_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_s64 (int64x2_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_u8 (uint8x16_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_u16 (uint16x8_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_u32 (uint32x4_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_u64 (uint64x2_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_f16 (float16x4_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_f64 (float64x1_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_s8 (int8x8_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_s16 (int16x4_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_s32 (int32x2_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_f32 (float32x2_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_u8 (uint8x8_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_u16 (uint16x4_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_u32 (uint32x2_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_u64 (uint64x1_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_p8 (poly8x8_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_p16 (poly16x4_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_p64 (poly64x1_t __a)
-{
-  return (int64x1_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_f64 (float64x2_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_s8 (int8x16_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_s16 (int16x8_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_s32 (int32x4_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_f16 (float16x8_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_f32 (float32x4_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_u8 (uint8x16_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_u16 (uint16x8_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_u32 (uint32x4_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_u64 (uint64x2_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_p8 (poly8x16_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_p16 (poly16x8_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_p64 (poly64x2_t __a)
-{
-  return (int64x2_t) __a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_p128 (poly128_t __a)
-{
-  return (int64x2_t)__a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_f16 (float16x4_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_f64 (float64x1_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_s8 (int8x8_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_s16 (int16x4_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_s32 (int32x2_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_s64 (int64x1_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_f32 (float32x2_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_u8 (uint8x8_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_u16 (uint16x4_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_u32 (uint32x2_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_p8 (poly8x8_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_p16 (poly16x4_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_p64 (poly64x1_t __a)
-{
-  return (uint64x1_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_f64 (float64x2_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_s8 (int8x16_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_s16 (int16x8_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_s32 (int32x4_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_s64 (int64x2_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_f16 (float16x8_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_f32 (float32x4_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_u8 (uint8x16_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_u16 (uint16x8_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_u32 (uint32x4_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_p8 (poly8x16_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_p16 (poly16x8_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_p64 (poly64x2_t __a)
-{
-  return (uint64x2_t) __a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_p128 (poly128_t __a)
-{
-  return (uint64x2_t)__a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_f16 (float16x4_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_f64 (float64x1_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_s16 (int16x4_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_s32 (int32x2_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_s64 (int64x1_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_f32 (float32x2_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_u8 (uint8x8_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_u16 (uint16x4_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_u32 (uint32x2_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_u64 (uint64x1_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_p8 (poly8x8_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_p16 (poly16x4_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_p64 (poly64x1_t __a)
-{
-  return (int8x8_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_f64 (float64x2_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_s16 (int16x8_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_s32 (int32x4_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_s64 (int64x2_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_f16 (float16x8_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_f32 (float32x4_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_u8 (uint8x16_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_u16 (uint16x8_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_u32 (uint32x4_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_u64 (uint64x2_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_p8 (poly8x16_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_p16 (poly16x8_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_p64 (poly64x2_t __a)
-{
-  return (int8x16_t) __a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_p128 (poly128_t __a)
-{
-  return (int8x16_t)__a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_f16 (float16x4_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_f64 (float64x1_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_s8 (int8x8_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_s32 (int32x2_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_s64 (int64x1_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_f32 (float32x2_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_u8 (uint8x8_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_u16 (uint16x4_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_u32 (uint32x2_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_u64 (uint64x1_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_p8 (poly8x8_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_p16 (poly16x4_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_p64 (poly64x1_t __a)
-{
-  return (int16x4_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_f64 (float64x2_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_s8 (int8x16_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_s32 (int32x4_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_s64 (int64x2_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_f16 (float16x8_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_f32 (float32x4_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_u8 (uint8x16_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_u16 (uint16x8_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_u32 (uint32x4_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_u64 (uint64x2_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_p8 (poly8x16_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_p16 (poly16x8_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_p64 (poly64x2_t __a)
-{
-  return (int16x8_t) __a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_p128 (poly128_t __a)
-{
-  return (int16x8_t)__a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_f16 (float16x4_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_f64 (float64x1_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_s8 (int8x8_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_s16 (int16x4_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_s64 (int64x1_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_f32 (float32x2_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_u8 (uint8x8_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_u16 (uint16x4_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_u32 (uint32x2_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_u64 (uint64x1_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_p8 (poly8x8_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_p16 (poly16x4_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_p64 (poly64x1_t __a)
-{
-  return (int32x2_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_f64 (float64x2_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_s8 (int8x16_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_s16 (int16x8_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_s64 (int64x2_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_f16 (float16x8_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_f32 (float32x4_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_u8 (uint8x16_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_u16 (uint16x8_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_u32 (uint32x4_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_u64 (uint64x2_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_p8 (poly8x16_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_p16 (poly16x8_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_p64 (poly64x2_t __a)
-{
-  return (int32x4_t) __a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_p128 (poly128_t __a)
-{
-  return (int32x4_t)__a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_f16 (float16x4_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_f64 (float64x1_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_s8 (int8x8_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_s16 (int16x4_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_s32 (int32x2_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_s64 (int64x1_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_f32 (float32x2_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_u16 (uint16x4_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_u32 (uint32x2_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_u64 (uint64x1_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_p8 (poly8x8_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_p16 (poly16x4_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_p64 (poly64x1_t __a)
-{
-  return (uint8x8_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_f64 (float64x2_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_s8 (int8x16_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_s16 (int16x8_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_s32 (int32x4_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_s64 (int64x2_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_f16 (float16x8_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_f32 (float32x4_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_u16 (uint16x8_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_u32 (uint32x4_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_u64 (uint64x2_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_p8 (poly8x16_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_p16 (poly16x8_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_p64 (poly64x2_t __a)
-{
-  return (uint8x16_t) __a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_p128 (poly128_t __a)
-{
-  return (uint8x16_t)__a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_f16 (float16x4_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_f64 (float64x1_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_s8 (int8x8_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_s16 (int16x4_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_s32 (int32x2_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_s64 (int64x1_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_f32 (float32x2_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_u8 (uint8x8_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_u32 (uint32x2_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_u64 (uint64x1_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_p8 (poly8x8_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_p16 (poly16x4_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_p64 (poly64x1_t __a)
-{
-  return (uint16x4_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_f64 (float64x2_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_s8 (int8x16_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_s16 (int16x8_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_s32 (int32x4_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_s64 (int64x2_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_f16 (float16x8_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_f32 (float32x4_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_u8 (uint8x16_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_u32 (uint32x4_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_u64 (uint64x2_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_p8 (poly8x16_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_p16 (poly16x8_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_p64 (poly64x2_t __a)
-{
-  return (uint16x8_t) __a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_p128 (poly128_t __a)
-{
-  return (uint16x8_t)__a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_f16 (float16x4_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_f64 (float64x1_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_s8 (int8x8_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_s16 (int16x4_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_s32 (int32x2_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_s64 (int64x1_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_f32 (float32x2_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_u8 (uint8x8_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_u16 (uint16x4_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_u64 (uint64x1_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_p8 (poly8x8_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_p16 (poly16x4_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_p64 (poly64x1_t __a)
-{
-  return (uint32x2_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_f64 (float64x2_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_s8 (int8x16_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_s16 (int16x8_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_s32 (int32x4_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_s64 (int64x2_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_f16 (float16x8_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_f32 (float32x4_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_u8 (uint8x16_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_u16 (uint16x8_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_u64 (uint64x2_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_p8 (poly8x16_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_p16 (poly16x8_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_p64 (poly64x2_t __a)
-{
-  return (uint32x4_t) __a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_p128 (poly128_t __a)
-{
-  return (uint32x4_t)__a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_p128 (poly128_t __a)
-{
-  return (float64x2_t) __a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_f64 (float64x2_t __a)
-{
-  return (poly128_t) __a;
-}
-
 /* vset_lane  */
 
 __extension__ extern __inline float16x4_t
@@ -30988,414 +28241,6 @@  vst4q_bf16 (bfloat16_t * __a, bfloat16x8x4_t __val)
   __builtin_aarch64_st4v8bf ((__builtin_aarch64_simd_bf *) __a, __val);
 }
 
-/* vreinterpret */
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_u8 (uint8x8_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_u16 (uint16x4_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_u32 (uint32x2_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_u64 (uint64x1_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_s8 (int8x8_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_s16 (int16x4_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_s32 (int32x2_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_s64 (int64x1_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_p8 (poly8x8_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_p16 (poly16x4_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_p64 (poly64x1_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_f16 (float16x4_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_f32 (float32x2_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_bf16_f64 (float64x1_t __a)
-{
-  return (bfloat16x4_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_u8 (uint8x16_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_u16 (uint16x8_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_u32 (uint32x4_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_u64 (uint64x2_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_s8 (int8x16_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_s16 (int16x8_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_s32 (int32x4_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_s64 (int64x2_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_p8 (poly8x16_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_p16 (poly16x8_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_p64 (poly64x2_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_p128 (poly128_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_f16 (float16x8_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_f32 (float32x4_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_bf16_f64 (float64x2_t __a)
-{
-  return (bfloat16x8_t)__a;
-}
-
-__extension__ extern __inline int8x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s8_bf16 (bfloat16x4_t __a)
-{
-  return (int8x8_t)__a;
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s16_bf16 (bfloat16x4_t __a)
-{
-  return (int16x4_t)__a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s32_bf16 (bfloat16x4_t __a)
-{
-  return (int32x2_t)__a;
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_s64_bf16 (bfloat16x4_t __a)
-{
-  return (int64x1_t)__a;
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u8_bf16 (bfloat16x4_t __a)
-{
-  return (uint8x8_t)__a;
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u16_bf16 (bfloat16x4_t __a)
-{
-  return (uint16x4_t)__a;
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u32_bf16 (bfloat16x4_t __a)
-{
-  return (uint32x2_t)__a;
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_u64_bf16 (bfloat16x4_t __a)
-{
-  return (uint64x1_t)__a;
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f16_bf16 (bfloat16x4_t __a)
-{
-  return (float16x4_t)__a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f32_bf16 (bfloat16x4_t __a)
-{
-  return (float32x2_t)__a;
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_f64_bf16 (bfloat16x4_t __a)
-{
-  return (float64x1_t)__a;
-}
-
-__extension__ extern __inline poly8x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p8_bf16 (bfloat16x4_t __a)
-{
-  return (poly8x8_t)__a;
-}
-
-__extension__ extern __inline poly16x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p16_bf16 (bfloat16x4_t __a)
-{
-  return (poly16x4_t)__a;
-}
-
-__extension__ extern __inline poly64x1_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpret_p64_bf16 (bfloat16x4_t __a)
-{
-  return (poly64x1_t)__a;
-}
-
-__extension__ extern __inline int8x16_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s8_bf16 (bfloat16x8_t __a)
-{
-  return (int8x16_t)__a;
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s16_bf16 (bfloat16x8_t __a)
-{
-  return (int16x8_t)__a;
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s32_bf16 (bfloat16x8_t __a)
-{
-  return (int32x4_t)__a;
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_s64_bf16 (bfloat16x8_t __a)
-{
-  return (int64x2_t)__a;
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u8_bf16 (bfloat16x8_t __a)
-{
-  return (uint8x16_t)__a;
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u16_bf16 (bfloat16x8_t __a)
-{
-  return (uint16x8_t)__a;
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u32_bf16 (bfloat16x8_t __a)
-{
-  return (uint32x4_t)__a;
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_u64_bf16 (bfloat16x8_t __a)
-{
-  return (uint64x2_t)__a;
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f16_bf16 (bfloat16x8_t __a)
-{
-  return (float16x8_t)__a;
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f32_bf16 (bfloat16x8_t __a)
-{
-  return (float32x4_t)__a;
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_f64_bf16 (bfloat16x8_t __a)
-{
-  return (float64x2_t)__a;
-}
-
-__extension__ extern __inline poly8x16_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p8_bf16 (bfloat16x8_t __a)
-{
-  return (poly8x16_t)__a;
-}
-
-__extension__ extern __inline poly16x8_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p16_bf16 (bfloat16x8_t __a)
-{
-  return (poly16x8_t)__a;
-}
-
-__extension__ extern __inline poly64x2_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p64_bf16 (bfloat16x8_t __a)
-{
-  return (poly64x2_t)__a;
-}
-
-__extension__ extern __inline poly128_t
-__attribute__  ((__always_inline__, __gnu_inline__, __artificial__))
-vreinterpretq_p128_bf16 (bfloat16x8_t __a)
-{
-  return (poly128_t)__a;
-}
-
 __extension__ extern __inline float32x2_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 vbfdot_f32 (float32x2_t __r, bfloat16x4_t __a, bfloat16x4_t __b)
diff --git a/gcc/config/aarch64/iterators.md b/gcc/config/aarch64/iterators.md
index e72fdf35a82e596844bbdbbcb23a13f763aac775..52f696d9f8cfdc3d847c6c9d889a45794f1f319d 100644
--- a/gcc/config/aarch64/iterators.md
+++ b/gcc/config/aarch64/iterators.md
@@ -1060,12 +1060,13 @@ 
 (define_mode_attr nunits [(V8QI "8") (V16QI "16")
 			  (V4HI "4") (V8HI "8")
 			  (V2SI "2") (V4SI "4")
-			  (V2DI "2") (V8DI "8")
+			  (V1DI "1") (V2DI "2")
 			  (V4HF "4") (V8HF "8")
 			  (V4BF "4") (V8BF "8")
 			  (V2SF "2") (V4SF "4")
 			  (V1DF "1") (V2DF "2")
-			  (DI "1") (DF "1")])
+			  (DI "1") (DF "1")
+			  (V8DI "8")])
 
 ;; Map a mode to the number of bits in it, if the size of the mode
 ;; is constant.