From: Richard Ball <[email protected]>

This patch moves the NEON conversion intrinsics over to the new system
and removes them from the arm-neon.h file.

gcc/ChangeLog:

        * config/aarch64/aarch64-acle-builtins.h
        (TYPES_neon_cvt): New shape.
        (TYPES_neon_cvt_scalar): Likewise.
        (TYPES_neon_cvt_narrow): Likewise.
        (TYPES_neon_cvtx_narrow): Likewise.
        (TYPES_neon_cvtbf16_narrow): Likewise.
        (TYPES_neon_cvtbf16_widen): Likewise.
        (neon_cvt): Likewise.
        (neon_cvt_scalar): Likewise.
        (neon_cvt_widen): Likewise.
        (neon_cvt_narrow): Likewise.
        (neon_cvtx_narrow): Likewise.
        (neon_cvtbf16_narrow): Likewise.
        (neon_cvtbf16_widen): Likewise.
        * config/aarch64/aarch64-neon-builtins-base.cc
        (enum class): Add neon_cvt_kind enum.
        (build_64bit_cvt): Function to handle 64 bit conversions.
        (class gimple_cvt): New intrinsic handler.
        (class gimple_cvt_scalar): Likewise.
        (class gimple_cvt_n): Likewise.
        (NEON_FUNCTION): New functions.
        * config/aarch64/aarch64-neon-builtins-base.def
        (REQUIRED_EXTENSIONS): New Functions.
        (vcvt): Likewise.
        (vcvtq): Likewise.
        (vcvta): Likewise.
        (vcvtaq): Likewise.
        (vcvtp): Likewise.
        (vcvtpq): Likewise.
        (vcvtm): Likewise.
        (vcvtmq): Likewise.
        (vcvtn): Likewise.
        (vcvtnq): Likewise.
        (vcvtd): Likewise.
        (vcvts): Likewise.
        (vcvtad): Likewise.
        (vcvtas): Likewise.
        (vcvtmd): Likewise.
        (vcvtms): Likewise.
        (vcvtpd): Likewise.
        (vcvtps): Likewise.
        (vcvtnd): Likewise.
        (vcvtns): Likewise.
        (vcvt_n): Likewise.
        (vcvtq_n): Likewise.
        (vcvtd_n): Likewise.
        (vcvts_n): Likewise.
        (vcvt_high): Likewise.
        (vcvtx): Likewise.
        (vcvtx_high): Likewise.
        (vcvtxd): Likewise.
        (vcvtq_high): Likewise.
        (vcvtq_low): Likewise.
        * config/aarch64/aarch64-simd.md
        (<FCVT_F2FIXED:fcvt_fixed_insn><VHSDF:mode>3): Add support for @.
        (@fcvtzs<VHSDF:mode>3): Likewise.
        (<FCVT_FIXED2F:fcvt_fixed_insn><VDQ_HSDI:mode>3): Likewise.
        (@fcvtzu<VHSDF:mode>3): Likewise.
        (@scvtf<VDQ_HSDI:mode>3): Likewise.
        (@ucvtf<VDQ_HSDI:mode>3): Likewise.
        * config/aarch64/aarch64.md
        (<FCVT_F2FIXED:fcvt_fixed_insn><GPF:mode>3): Add support for @.
        (@fcvtzs<GPF:mode>3): Likewise.
        (@fcvtzu<GPF:mode>3): Likewise.
        (<FCVT_FIXED2F:fcvt_fixed_insn><GPI:mode>3): Likewise.
        (@scvtf<GPI:mode>3): Likewise.
        (@ucvtf<GPI:mode>3): Likewise.
        * config/aarch64/arm_neon.h
        (__attribute__): Remove old defintion.
        (vcvtx_f32_f64): Likewise.
        (vcvtx_high_f32_f64): Likewise.
        (vcvtxd_f32_f64): Likewise.
        (vcltd_f64): Likewise.
        (vcltz_f32): Likewise.
        (vcltz_f64): Likewise.
        (vcltz_s8): Likewise.
        (vcltz_s16): Likewise.
        (vcltz_s32): Likewise.
        (vcltz_s64): Likewise.
        (vcltzq_f32): Likewise.
        (vcltzq_f64): Likewise.
        (vcltzq_s8): Likewise.
        (vcltzq_s16): Likewise.
        (vcltzq_s32): Likewise.
        (vcltzq_s64): Likewise.
        (vcltzs_f32): Likewise.
        (vcltzd_s64): Likewise.
        (vcltzd_f64): Likewise.
        (vcvt_f16_f32): Likewise.
        (vcvt_high_f16_f32): Likewise.
        (vcvt_f32_f64): Likewise.
        (vcvt_high_f32_f64): Likewise.
        (vcvt_f32_f16): Likewise.
        (vcvt_f64_f32): Likewise.
        (vcvt_high_f32_f16): Likewise.
        (vcvt_high_f64_f32): Likewise.
        (vcvtd_n_f64_s64): Likewise.
        (vcvtd_n_f64_u64): Likewise.
        (vcvts_n_f32_s32): Likewise.
        (vcvts_n_f32_u32): Likewise.
        (vcvt_n_f32_s32): Likewise.
        (vcvt_n_f32_u32): Likewise.
        (vcvt_n_f64_s64): Likewise.
        (vcvt_n_f64_u64): Likewise.
        (vcvtq_n_f32_s32): Likewise.
        (vcvtq_n_f32_u32): Likewise.
        (vcvtq_n_f64_s64): Likewise.
        (vcvtq_n_f64_u64): Likewise.
        (vcvtd_n_s64_f64): Likewise.
        (vcvtd_n_u64_f64): Likewise.
        (vcvts_n_s32_f32): Likewise.
        (vcvts_n_u32_f32): Likewise.
        (vcvt_n_s32_f32): Likewise.
        (vcvt_n_u32_f32): Likewise.
        (vcvt_n_s64_f64): Likewise.
        (vcvt_n_u64_f64): Likewise.
        (vcvtq_n_s32_f32): Likewise.
        (vcvtq_n_u32_f32): Likewise.
        (vcvtq_n_s64_f64): Likewise.
        (vcvtq_n_u64_f64): Likewise.
        (vcvtd_f64_s64): Likewise.
        (vcvtd_f64_u64): Likewise.
        (vcvts_f32_s32): Likewise.
        (vcvts_f32_u32): Likewise.
        (vcvt_f32_s32): Likewise.
        (vcvt_f32_u32): Likewise.
        (vcvt_f64_s64): Likewise.
        (vcvt_f64_u64): Likewise.
        (vcvtq_f32_s32): Likewise.
        (vcvtq_f32_u32): Likewise.
        (vcvtq_f64_s64): Likewise.
        (vcvtq_f64_u64): Likewise.
        (vcvtd_s64_f64): Likewise.
        (vcvtd_s32_f64): Likewise.
        (vcvtd_u64_f64): Likewise.
        (vcvtd_u32_f64): Likewise.
        (vcvts_s32_f32): Likewise.
        (vcvts_s64_f32): Likewise.
        (vcvts_u32_f32): Likewise.
        (vcvts_u64_f32): Likewise.
        (vcvt_s32_f32): Likewise.
        (vcvt_u32_f32): Likewise.
        (vcvtq_s32_f32): Likewise.
        (vcvtq_u32_f32): Likewise.
        (vcvt_s64_f64): Likewise.
        (vcvt_u64_f64): Likewise.
        (vcvtq_s64_f64): Likewise.
        (vcvtq_u64_f64): Likewise.
        (vcvtad_s64_f64): Likewise.
        (vcvtad_s32_f64): Likewise.
        (vcvtad_u64_f64): Likewise.
        (vcvtad_u32_f64): Likewise.
        (vcvtas_s32_f32): Likewise.
        (vcvtas_s64_f32): Likewise.
        (vcvtas_u32_f32): Likewise.
        (vcvtas_u64_f32): Likewise.
        (vcvta_s32_f32): Likewise.
        (vcvta_u32_f32): Likewise.
        (vcvtaq_s32_f32): Likewise.
        (vcvtaq_u32_f32): Likewise.
        (vcvta_s64_f64): Likewise.
        (vcvta_u64_f64): Likewise.
        (vcvtaq_s64_f64): Likewise.
        (vcvtaq_u64_f64): Likewise.
        (vcvtmd_s64_f64): Likewise.
        (vcvtmd_s32_f64): Likewise.
        (vcvtmd_u64_f64): Likewise.
        (vcvtmd_u32_f64): Likewise.
        (vcvtms_s32_f32): Likewise.
        (vcvtms_s64_f32): Likewise.
        (vcvtms_u32_f32): Likewise.
        (vcvtms_u64_f32): Likewise.
        (vcvtm_s32_f32): Likewise.
        (vcvtm_u32_f32): Likewise.
        (vcvtmq_s32_f32): Likewise.
        (vcvtmq_u32_f32): Likewise.
        (vcvtm_s64_f64): Likewise.
        (vcvtm_u64_f64): Likewise.
        (vcvtmq_s64_f64): Likewise.
        (vcvtmq_u64_f64): Likewise.
        (vcvtnd_s64_f64): Likewise.
        (vcvtnd_s32_f64): Likewise.
        (vcvtnd_u64_f64): Likewise.
        (vcvtnd_u32_f64): Likewise.
        (vcvtns_s32_f32): Likewise.
        (vcvtns_s64_f32): Likewise.
        (vcvtns_u32_f32): Likewise.
        (vcvtns_u64_f32): Likewise.
        (vcvtn_s32_f32): Likewise.
        (vcvtn_u32_f32): Likewise.
        (vcvtnq_s32_f32): Likewise.
        (vcvtnq_u32_f32): Likewise.
        (vcvtn_s64_f64): Likewise.
        (vcvtn_u64_f64): Likewise.
        (vcvtnq_s64_f64): Likewise.
        (vcvtnq_u64_f64): Likewise.
        (vcvtpd_s64_f64): Likewise.
        (vcvtpd_s32_f64): Likewise.
        (vcvtpd_u64_f64): Likewise.
        (vcvtpd_u32_f64): Likewise.
        (vcvtps_s32_f32): Likewise.
        (vcvtps_s64_f32): Likewise.
        (vcvtps_u32_f32): Likewise.
        (vcvtps_u64_f32): Likewise.
        (vcvtp_s32_f32): Likewise.
        (vcvtp_u32_f32): Likewise.
        (vcvtpq_s32_f32): Likewise.
        (vcvtpq_u32_f32): Likewise.
        (vcvtp_s64_f64): Likewise.
        (vcvtp_u64_f64): Likewise.
        (vcvtpq_s64_f64): Likewise.
        (vcvtpq_u64_f64): Likewise.
        (vcvt_f16_s16): Likewise.
        (vcvtq_f16_s16): Likewise.
        (vcvt_f16_u16): Likewise.
        (vcvtq_f16_u16): Likewise.
        (vcvt_s16_f16): Likewise.
        (vcvtq_s16_f16): Likewise.
        (vcvt_u16_f16): Likewise.
        (vcvtq_u16_f16): Likewise.
        (vcvta_s16_f16): Likewise.
        (vcvtaq_s16_f16): Likewise.
        (vcvta_u16_f16): Likewise.
        (vcvtaq_u16_f16): Likewise.
        (vcvtm_s16_f16): Likewise.
        (vcvtmq_s16_f16): Likewise.
        (vcvtm_u16_f16): Likewise.
        (vcvtmq_u16_f16): Likewise.
        (vcvtn_s16_f16): Likewise.
        (vcvtnq_s16_f16): Likewise.
        (vcvtn_u16_f16): Likewise.
        (vcvtnq_u16_f16): Likewise.
        (vcvtp_s16_f16): Likewise.
        (vcvtpq_s16_f16): Likewise.
        (vcvtp_u16_f16): Likewise.
        (vcvtpq_u16_f16): Likewise.
        (vcvt_n_f16_s16): Likewise.
        (vcvtq_n_f16_s16): Likewise.
        (vcvt_n_f16_u16): Likewise.
        (vcvtq_n_f16_u16): Likewise.
        (vcvt_n_s16_f16): Likewise.
        (vcvtq_n_s16_f16): Likewise.
        (vcvt_n_u16_f16): Likewise.
        (vcvtq_n_u16_f16): Likewise.
        (vcvt_f32_bf16): Likewise.
        (vcvtq_low_f32_bf16): Likewise.
        (vcvtq_high_f32_bf16): Likewise.
        (vcvt_bf16_f32): Likewise.
        (vcvtq_low_bf16_f32): Likewise.
        (vcvtq_high_bf16_f32): Likewise.
        * optabs.def
        (OPTAB_CL): Add new optabs.

gcc/testsuite/ChangeLog:

        * gcc.target/aarch64/neon/arm_neon_test.h: Add UNARY_N.
        * gcc.target/aarch64/advsimd-intrinsics/bfcvtn-nobf16.c: Removed.
        * gcc.target/aarch64/neon/vcvt.c: New test.
        * gcc.target/aarch64/neon/vcvt_highlo.c: New test.
        * gcc.target/aarch64/neon/vcvt_n.c: New test.
        * gcc.target/aarch64/neon/vcvta.c: New test.
        * gcc.target/aarch64/neon/vcvtd.c: New test.
        * gcc.target/aarch64/neon/vcvtds_n.c: New test.
        * gcc.target/aarch64/neon/vcvtm.c: New test.
        * gcc.target/aarch64/neon/vcvtn.c: New test.
        * gcc.target/aarch64/neon/vcvtp.c: New test.
        * gcc.target/aarch64/neon/vcvts.c: New test.
---
 gcc/config/aarch64/aarch64-acle-builtins.h    |   53 +
 .../aarch64/aarch64-neon-builtins-base.cc     |  417 +++++-
 .../aarch64/aarch64-neon-builtins-base.def    |   41 +
 gcc/config/aarch64/aarch64-simd.md            |   34 +-
 gcc/config/aarch64/aarch64.md                 |   40 +-
 gcc/config/aarch64/arm_neon.h                 | 1281 +----------------
 gcc/optabs.def                                |    6 +
 .../advsimd-intrinsics/bfcvtn-nobf16.c        |   10 -
 .../gcc.target/aarch64/neon/arm_neon_test.h   |    6 +
 gcc/testsuite/gcc.target/aarch64/neon/vcvt.c  |  172 +++
 .../gcc.target/aarch64/neon/vcvt_highlo.c     |  123 ++
 .../gcc.target/aarch64/neon/vcvt_n.c          |  172 +++
 gcc/testsuite/gcc.target/aarch64/neon/vcvta.c |   90 ++
 gcc/testsuite/gcc.target/aarch64/neon/vcvtd.c |  158 ++
 .../gcc.target/aarch64/neon/vcvtds_n.c        |   59 +
 gcc/testsuite/gcc.target/aarch64/neon/vcvtm.c |   90 ++
 gcc/testsuite/gcc.target/aarch64/neon/vcvtn.c |   90 ++
 gcc/testsuite/gcc.target/aarch64/neon/vcvtp.c |   90 ++
 gcc/testsuite/gcc.target/aarch64/neon/vcvts.c |  158 ++
 19 files changed, 1833 insertions(+), 1257 deletions(-)
 delete mode 100644 
gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvtn-nobf16.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvt.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvt_highlo.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvt_n.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvta.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvtd.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvtds_n.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvtm.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvtn.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvtp.c
 create mode 100644 gcc/testsuite/gcc.target/aarch64/neon/vcvts.c

diff --git a/gcc/config/aarch64/aarch64-acle-builtins.h 
b/gcc/config/aarch64/aarch64-acle-builtins.h
index a9832c1689b9..5a3a9fb9bb8c 100644
--- a/gcc/config/aarch64/aarch64-acle-builtins.h
+++ b/gcc/config/aarch64/aarch64-acle-builtins.h
@@ -2042,6 +2042,52 @@ function_expander::result_mode () const
   TYPES_neon_reinterpretq1 (D, p64), \
   TYPES_neon_reinterpretq1 (D, p128)
 
+#define TYPES_neon_cvt(S, D, T) \
+  D (s32, f32), \
+  D (u32, f32), \
+  D (f32, s32), \
+  D (f32, u32), \
+  D (s64, f64), \
+  D (u64, f64), \
+  D (f64, s64), \
+  D (f64, u64), \
+  D (f16, s16), \
+  D (f16, u16), \
+  D (s16, f16), \
+  D (u16, f16)
+
+#define TYPES_neon_cvt_scalar(S, D, T) \
+  D (s32, f32), \
+  D (u32, f32), \
+  D (f32, s32), \
+  D (f32, u32), \
+  D (s64, f64), \
+  D (u64, f64), \
+  D (f64, s64), \
+  D (f64, u64), \
+  D (s32, f64), \
+  D (u32, f64), \
+  D (s64, f32), \
+  D (u64, f32)
+
+  #define TYPES_neon_cvt_widen(S, D, T) \
+  D (f32, f16), \
+  D (f64, f32)
+
+#define TYPES_neon_cvt_narrow(S, D, T) \
+  D (f16, f32), \
+  D (f32, f64)
+
+#define TYPES_neon_cvtx_narrow(S, D, T) \
+  D (f32, f64)
+
+#define TYPES_neon_cvtbf16_narrow(S, D, T) \
+  D (bf16, f32)
+
+#define TYPES_neon_cvtbf16_widen(S, D, T) \
+  D (f32, bf16)
+
+
 /* Describe a tuple of type suffixes in which only the first is used.  */
 #define DEF_VECTOR_TYPE(X) \
   { TYPE_SUFFIX_ ## X, NUM_TYPE_SUFFIXES, NUM_TYPE_SUFFIXES }
@@ -2212,6 +2258,13 @@ DEF_SVE_TYPES_ARRAY (neon_rev32);
 DEF_SVE_TYPES_ARRAY (neon_rev64);
 DEF_SVE_TYPES_ARRAY (neon_reinterpret);
 DEF_SVE_TYPES_ARRAY (neon_reinterpretq);
+DEF_SVE_TYPES_ARRAY (neon_cvt);
+DEF_SVE_TYPES_ARRAY (neon_cvt_scalar);
+DEF_SVE_TYPES_ARRAY (neon_cvt_widen);
+DEF_SVE_TYPES_ARRAY (neon_cvt_narrow);
+DEF_SVE_TYPES_ARRAY (neon_cvtx_narrow);
+DEF_SVE_TYPES_ARRAY (neon_cvtbf16_narrow);
+DEF_SVE_TYPES_ARRAY (neon_cvtbf16_widen);
 
 static const group_suffix_index groups_none[] = {
   GROUP_none, NUM_GROUP_SUFFIXES
diff --git a/gcc/config/aarch64/aarch64-neon-builtins-base.cc 
b/gcc/config/aarch64/aarch64-neon-builtins-base.cc
index 0313eb49759e..7c7f9809aef0 100644
--- a/gcc/config/aarch64/aarch64-neon-builtins-base.cc
+++ b/gcc/config/aarch64/aarch64-neon-builtins-base.cc
@@ -579,6 +579,382 @@ public:
   }
 };
 
+enum class neon_cvt_kind
+{
+  cvt,
+  cvta,
+  cvtm,
+  cvtp,
+  cvtn,
+  cvt_n,
+  cvt_high,
+  cvtx,
+  cvtx_high,
+  cvtx_scalar,
+  cvtq_high,
+  cvtq_low
+};
+
+rtx
+build_64bit_cvt (auto_vec<rtx, 16> args, bool unsigned_p,
+                bool float_p,
+                neon_cvt_kind m_kind)
+{
+  rtx op = force_reg (V1DFmode, args[0]);
+  rtx scalar_in = gen_lowpart (DFmode, op);
+  rtx scalar_out = gen_reg_rtx (DImode);
+  machine_mode scalar_mode = DImode;
+  machine_mode target_mode = V1DImode;
+
+  switch (m_kind)
+    {
+    case neon_cvt_kind::cvta:
+      if (unsigned_p)
+       emit_insn (gen_lroundudfdi2 (scalar_out, scalar_in));
+      else
+       emit_insn (gen_lrounddfdi2 (scalar_out, scalar_in));
+      break;
+
+    case neon_cvt_kind::cvtm:
+      if (unsigned_p)
+       emit_insn (gen_lfloorudfdi2 (scalar_out, scalar_in));
+      else
+       emit_insn (gen_lfloordfdi2 (scalar_out, scalar_in));
+      break;
+
+    case neon_cvt_kind::cvtp:
+      if (unsigned_p)
+       emit_insn (gen_lceiludfdi2 (scalar_out, scalar_in));
+      else
+       emit_insn (gen_lceildfdi2 (scalar_out, scalar_in));
+      break;
+
+    case neon_cvt_kind::cvtn:
+      if (unsigned_p)
+       emit_insn (gen_lfrintnudfdi2 (scalar_out, scalar_in));
+      else
+       emit_insn (gen_lfrintndfdi2 (scalar_out, scalar_in));
+      break;
+
+    case neon_cvt_kind::cvt_n:
+      if (float_p)
+       {
+         op = force_reg (V1DImode, args[0]);
+         scalar_in = gen_lowpart (DImode, op);
+         scalar_out = gen_reg_rtx (DFmode);
+         target_mode = V1DFmode;
+         scalar_mode = DFmode;
+         if (unsigned_p)
+           emit_insn (gen_ucvtfdi3 (scalar_out, scalar_in, args[1]));
+         else
+           emit_insn (gen_scvtfdi3 (scalar_out, scalar_in, args[1]));
+       }
+      else
+         if (unsigned_p)
+           emit_insn (gen_fcvtzudf3 (scalar_out, scalar_in, args[1]));
+         else
+           emit_insn (gen_fcvtzsdf3 (scalar_out, scalar_in, args[1]));
+      break;
+
+    default:
+      gcc_unreachable ();
+    }
+  /* Put the scalar result back into a V1DI.  */
+
+  rtx target = gen_reg_rtx (target_mode);
+
+  emit_move_insn (target,
+                 simplify_gen_subreg (target_mode,
+                                      scalar_out,
+                                      scalar_mode, 0));
+
+  return target;
+}
+
+
+class gimple_cvt : public gimple_function_base
+{
+public:
+  constexpr gimple_cvt (neon_cvt_kind kind)
+    : m_kind (kind)
+  {}
+
+  gimple *fold (gimple_folder &f) const override
+  {
+    tree arg = gimple_call_arg (f.call, 0);
+    tree arg_type = TREE_TYPE (arg);
+    tree ret_type = TREE_TYPE (f.lhs);
+    const auto &to = f.type_suffix (0);
+    const auto &from = f.type_suffix (1);
+    if (!VECTOR_TYPE_P (arg_type) || !VECTOR_TYPE_P (ret_type))
+      {
+       return nullptr;
+      }
+    if (known_eq (TYPE_VECTOR_SUBPARTS (arg_type), 1U)
+       && known_eq (TYPE_VECTOR_SUBPARTS (ret_type), 1U)
+       && m_kind == neon_cvt_kind::cvt)
+      {
+       auto ret_elem_type = TREE_TYPE (ret_type);
+
+       auto scalar_arg
+         = f.force_val (build_lane_get (arg, size_zero_node));
+       tree_code code;
+
+       if (to.integer_p && from.float_p)
+         code = FIX_TRUNC_EXPR;
+       else if (to.float_p && from.integer_p)
+         code = FLOAT_EXPR;
+       else
+         gcc_unreachable ();
+
+       tree scalar_result
+         = f.force_val (fold_build1 (code, ret_elem_type, scalar_arg));
+
+       return gimple_build_assign
+         (f.lhs, build_vec_dup (ret_type, scalar_result));
+      }
+    return nullptr;
+  }
+
+  rtx expand (function_expander &e) const override
+  {
+    machine_mode to_mode = e.result_mode ();
+    machine_mode from_mode = GET_MODE (e.args[0]);
+    insn_code icode;
+
+    const auto &to = e.type_suffix (0);
+    const auto &from = e.type_suffix (1);
+
+    convert_optab optab;
+
+    if (GET_MODE (e.args[0]) == V1DFmode
+       && m_kind != neon_cvt_kind::cvt)
+      {
+       return build_64bit_cvt (e.args, to.unsigned_p, to.float_p, m_kind);
+      }
+
+    if ((to.element_bits != from.element_bits)
+       && (m_kind == neon_cvt_kind::cvt_high
+       || m_kind == neon_cvt_kind::cvtx
+       || m_kind == neon_cvt_kind::cvtx_high
+       || m_kind == neon_cvt_kind::cvtx_scalar
+       || m_kind == neon_cvt_kind::cvtq_high
+       || m_kind == neon_cvt_kind::cvtq_low
+       || m_kind == neon_cvt_kind::cvt))
+      {
+       if (m_kind == neon_cvt_kind::cvt_high)
+         {
+           switch (from_mode)
+             {
+             case E_V8HFmode:
+               icode = CODE_FOR_vec_unpacks_hi_v8hf;
+               break;
+
+             case E_V4SFmode:
+               icode = CODE_FOR_vec_unpacks_hi_v4sf;
+               break;
+
+             case E_V4HFmode:
+               icode = CODE_FOR_aarch64_float_truncate_hi_v8hf;
+               break;
+
+             case E_V2SFmode:
+               icode = CODE_FOR_aarch64_float_truncate_hi_v4sf;
+               break;
+
+             default:
+               gcc_unreachable ();
+             }
+         }
+       else if (m_kind == neon_cvt_kind::cvtq_high)
+         {
+           switch (to_mode)
+             {
+             case E_V8BFmode:
+               icode = CODE_FOR_aarch64_bfcvtn2v8bf;
+               break;
+
+             case E_V4SFmode:
+               icode = CODE_FOR_aarch64_vbfcvt_highv8bf;
+               break;
+
+             default:
+               gcc_unreachable ();
+             }
+         }
+       else if (m_kind == neon_cvt_kind::cvtq_low)
+         {
+           switch (from_mode)
+             {
+             case E_V8BFmode:
+               icode = CODE_FOR_aarch64_vbfcvtv8bf;
+               break;
+
+             case E_V4SFmode:
+               icode = CODE_FOR_aarch64_bfcvtn_qv8bf;
+               break;
+
+             default:
+               gcc_unreachable ();
+             }
+         }
+       else if (m_kind == neon_cvt_kind::cvtx)
+         icode = CODE_FOR_aarch64_float_trunc_rodd_lo_v2sf;
+       else if (m_kind == neon_cvt_kind::cvtx_high)
+         icode = CODE_FOR_aarch64_float_trunc_rodd_hi_v4sf;
+       else if (m_kind == neon_cvt_kind::cvtx_scalar)
+         icode = CODE_FOR_aarch64_float_trunc_rodd_df;
+       else
+         {
+           switch (from_mode)
+             {
+             case E_V4HFmode:
+               icode = CODE_FOR_extendv4hfv4sf2;
+               break;
+
+             case E_V2SFmode:
+               icode = CODE_FOR_extendv2sfv2df2;
+               break;
+
+             case E_V4SFmode:
+               if (to_mode == E_V4BFmode)
+                 icode = CODE_FOR_aarch64_bfcvtnv4bf;
+               else
+                 icode = CODE_FOR_truncv4sfv4hf2;
+               break;
+
+             case E_V2DFmode:
+               icode = CODE_FOR_truncv2dfv2sf2;
+               break;
+
+             case E_V4BFmode:
+               icode = CODE_FOR_aarch64_vbfcvtv4bf;
+               break;
+
+             default:
+               gcc_unreachable ();
+             }
+         }
+       gcc_assert (icode != CODE_FOR_nothing);
+       return e.use_exact_insn (icode);
+      }
+
+    if (to.float_p)
+      {
+       gcc_assert (m_kind == neon_cvt_kind::cvt);
+       optab = from.unsigned_p ? ufloat_optab : sfloat_optab;
+      }
+    else
+      {
+       switch (m_kind)
+         {
+         case neon_cvt_kind::cvt:
+           optab = to.unsigned_p ? ufix_optab : sfix_optab;
+           break;
+
+         case neon_cvt_kind::cvta:
+           optab = to.unsigned_p ? lroundu_optab : lround_optab;
+           break;
+
+         case neon_cvt_kind::cvtm:
+           optab = to.unsigned_p ? lflooru_optab : lfloor_optab;
+           break;
+
+         case neon_cvt_kind::cvtp:
+           optab = to.unsigned_p ? lceilu_optab : lceil_optab;
+           break;
+
+         case neon_cvt_kind::cvtn:
+           optab = to.unsigned_p ? lfrintnu_optab : lfrintn_optab;
+           break;
+
+         default:
+           gcc_unreachable ();
+         }
+      }
+
+    icode = convert_optab_handler (optab, to_mode, from_mode);
+    gcc_assert (icode != CODE_FOR_nothing);
+    return e.use_exact_insn (icode);
+  }
+
+private:
+  neon_cvt_kind m_kind;
+};
+
+class gimple_cvt_scalar : public gimple_function_base
+{
+public:
+  constexpr gimple_cvt_scalar (neon_cvt_kind kind)
+    : m_kind (kind)
+  {}
+
+  gimple *fold (gimple_folder &f) const override
+  {
+    tree arg = gimple_call_arg (f.call, 0);
+    tree ret_type = TREE_TYPE (f.lhs);
+    const auto &to = f.type_suffix (0);
+    const auto &from = f.type_suffix (1);
+    tree_code code;
+
+    if (to.integer_p && from.float_p)
+      code = FIX_TRUNC_EXPR;
+    else if (to.float_p && from.integer_p)
+      code = FLOAT_EXPR;
+    else
+      gcc_unreachable ();
+
+    tree rhs
+      = f.force_val (fold_build1 (code, ret_type, arg));
+
+    return gimple_build_assign (f.lhs, rhs);
+  }
+
+private:
+  neon_cvt_kind m_kind;
+};
+
+class gimple_cvt_n : public gimple_function_base
+{
+public:
+  constexpr gimple_cvt_n (neon_cvt_kind kind)
+    : m_kind (kind)
+  {}
+
+  gimple *fold (gimple_folder &) const override
+  {
+    return nullptr;
+  }
+
+  rtx expand (function_expander &e) const override
+  {
+    machine_mode from_mode = GET_MODE (e.args[0]);
+    const auto &to = e.type_suffix (0);
+    const auto &from = e.type_suffix (1);
+
+    if (GET_MODE (e.args[0]) == V1DFmode
+       || GET_MODE (e.args[0]) == V1DImode)
+      {
+       if (to.float_p)
+         return build_64bit_cvt (e.args, from.unsigned_p, to.float_p, m_kind);
+       else
+         return build_64bit_cvt (e.args, to.unsigned_p, to.float_p, m_kind);
+      }
+
+    insn_code icode;
+    if (to.float_p)
+      icode = from.unsigned_p ? code_for_ucvtf3 (from_mode)
+                             : code_for_scvtf3 (from_mode);
+    else
+      icode = to.unsigned_p ? code_for_fcvtzu3 (from_mode)
+                           : code_for_fcvtzs3 (from_mode);
+    return e.use_exact_insn (icode);
+  }
+
+private:
+  neon_cvt_kind m_kind;
+};
+
 tree
 ext_mask (gimple_folder &f)
 {
@@ -779,7 +1155,42 @@ NEON_FUNCTION (vuzp2, vuzp2q, gimple_permute,      
(uzp_mask<true>))
 NEON_FUNCTION (vuzp,  vuzpq,  gimple_permute_pair, (uzp_mask<false>, 
uzp_mask<true>))
 
 // Zip
-NEON_FUNCTION (vzip1, vzip1q, gimple_permute,      (zip_mask<false>))
-NEON_FUNCTION (vzip2, vzip2q, gimple_permute,      (zip_mask<true>))
-NEON_FUNCTION (vzip,  vzipq,  gimple_permute_pair, (zip_mask<false>, 
zip_mask<true>))
+NEON_FUNCTION (vzip1,  gimple_permute,      (zip_mask<false>))
+NEON_FUNCTION (vzip1q, gimple_permute,      (zip_mask<false>))
+NEON_FUNCTION (vzip2,  gimple_permute,      (zip_mask<true>))
+NEON_FUNCTION (vzip2q, gimple_permute,      (zip_mask<true>))
+NEON_FUNCTION (vzip,   gimple_permute_pair, (zip_mask<false>, zip_mask<true>))
+NEON_FUNCTION (vzipq,  gimple_permute_pair, (zip_mask<false>, zip_mask<true>))
+
+// Conversions
+NEON_FUNCTION (vcvt,  gimple_cvt, (neon_cvt_kind::cvt))
+NEON_FUNCTION (vcvtq, gimple_cvt, (neon_cvt_kind::cvt))
+NEON_FUNCTION (vcvta, gimple_cvt, (neon_cvt_kind::cvta))
+NEON_FUNCTION (vcvtaq, gimple_cvt, (neon_cvt_kind::cvta))
+NEON_FUNCTION (vcvtp, gimple_cvt, (neon_cvt_kind::cvtp))
+NEON_FUNCTION (vcvtpq, gimple_cvt, (neon_cvt_kind::cvtp))
+NEON_FUNCTION (vcvtm, gimple_cvt, (neon_cvt_kind::cvtm))
+NEON_FUNCTION (vcvtmq, gimple_cvt, (neon_cvt_kind::cvtm))
+NEON_FUNCTION (vcvtn, gimple_cvt, (neon_cvt_kind::cvtn))
+NEON_FUNCTION (vcvtnq, gimple_cvt, (neon_cvt_kind::cvtn))
+NEON_FUNCTION (vcvtd, gimple_cvt_scalar, (neon_cvt_kind::cvt))
+NEON_FUNCTION (vcvts, gimple_cvt_scalar, (neon_cvt_kind::cvt))
+NEON_FUNCTION (vcvtad, gimple_cvt, (neon_cvt_kind::cvta))
+NEON_FUNCTION (vcvtas, gimple_cvt, (neon_cvt_kind::cvta))
+NEON_FUNCTION (vcvtmd, gimple_cvt, (neon_cvt_kind::cvtm))
+NEON_FUNCTION (vcvtms, gimple_cvt, (neon_cvt_kind::cvtm))
+NEON_FUNCTION (vcvtpd, gimple_cvt, (neon_cvt_kind::cvtp))
+NEON_FUNCTION (vcvtps, gimple_cvt, (neon_cvt_kind::cvtp))
+NEON_FUNCTION (vcvtnd, gimple_cvt, (neon_cvt_kind::cvtn))
+NEON_FUNCTION (vcvtns, gimple_cvt, (neon_cvt_kind::cvtn))
+NEON_FUNCTION (vcvt_n, gimple_cvt_n, (neon_cvt_kind::cvt_n))
+NEON_FUNCTION (vcvtq_n, gimple_cvt_n, (neon_cvt_kind::cvt_n))
+NEON_FUNCTION (vcvtd_n, gimple_cvt_n, (neon_cvt_kind::cvt_n))
+NEON_FUNCTION (vcvts_n, gimple_cvt_n, (neon_cvt_kind::cvt_n))
+NEON_FUNCTION (vcvt_high, gimple_cvt, (neon_cvt_kind::cvt_high))
+NEON_FUNCTION (vcvtx, gimple_cvt, (neon_cvt_kind::cvtx))
+NEON_FUNCTION (vcvtx_high, gimple_cvt, (neon_cvt_kind::cvtx_high))
+NEON_FUNCTION (vcvtxd, gimple_cvt, (neon_cvt_kind::cvtx_scalar))
+NEON_FUNCTION (vcvtq_high, gimple_cvt, (neon_cvt_kind::cvtq_high))
+NEON_FUNCTION (vcvtq_low, gimple_cvt, (neon_cvt_kind::cvtq_low))
 }
diff --git a/gcc/config/aarch64/aarch64-neon-builtins-base.def 
b/gcc/config/aarch64/aarch64-neon-builtins-base.def
index 7257f59bbc56..e46b00ed4d48 100644
--- a/gcc/config/aarch64/aarch64-neon-builtins-base.def
+++ b/gcc/config/aarch64/aarch64-neon-builtins-base.def
@@ -145,3 +145,44 @@ DEF_NEON_FUNCTION (vzip2,   bhs_neon,   ("D0,D0,D0"))
 DEF_NEON_FUNCTION (vzip2q,  bhsd_neon,  ("Q0,Q0,Q0"))
 DEF_NEON_FUNCTION (vzipq,   bhs_neon,   ("Q0x2,Q0,Q0"))
 #undef REQUIRED_EXTENSIONS
+
+// Conversions
+#define REQUIRED_EXTENSIONS nonstreaming_only (AARCH64_FL_SIMD)
+DEF_NEON_FUNCTION (vcvt, neon_cvt, ("D0,D1"))
+DEF_NEON_FUNCTION (vcvtq, neon_cvt, ("Q0,Q1"))
+DEF_NEON_FUNCTION (vcvta, neon_cvt, ("D0,D1"))
+DEF_NEON_FUNCTION (vcvtaq, neon_cvt, ("Q0,Q1"))
+DEF_NEON_FUNCTION (vcvtp, neon_cvt, ("D0,D1"))
+DEF_NEON_FUNCTION (vcvtpq, neon_cvt, ("Q0,Q1"))
+DEF_NEON_FUNCTION (vcvtm, neon_cvt, ("D0,D1"))
+DEF_NEON_FUNCTION (vcvtmq, neon_cvt, ("Q0,Q1"))
+DEF_NEON_FUNCTION (vcvtn, neon_cvt, ("D0,D1"))
+DEF_NEON_FUNCTION (vcvtnq, neon_cvt, ("Q0,Q1"))
+DEF_NEON_FUNCTION (vcvtd, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvts, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvtad, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvtas, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvtmd, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvtms, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvtpd, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvtps, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvtnd, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvtns, neon_cvt_scalar, ("s0,s1"))
+DEF_NEON_FUNCTION (vcvt_n, neon_cvt, ("D0,D1,ss32"))
+DEF_NEON_FUNCTION (vcvtq_n, neon_cvt, ("Q0,Q1,ss32"))
+DEF_NEON_FUNCTION (vcvtd_n, neon_cvt, ("s0,s1,ss32"))
+DEF_NEON_FUNCTION (vcvts_n, neon_cvt, ("s0,s1,ss32"))
+DEF_NEON_FUNCTION (vcvt, neon_cvt_widen, ("Q0,D1"))
+DEF_NEON_FUNCTION (vcvt, neon_cvt_narrow, ("D0,Q1"))
+DEF_NEON_FUNCTION (vcvt_high, neon_cvt_widen, ("Q0,Q1"))
+DEF_NEON_FUNCTION (vcvt_high, neon_cvt_narrow, ("Q0,D0,Q1"))
+DEF_NEON_FUNCTION (vcvtx, neon_cvtx_narrow, (("D0,Q1")))
+DEF_NEON_FUNCTION (vcvtx_high, neon_cvtx_narrow, ("Q0,D0,Q1"))
+DEF_NEON_FUNCTION (vcvtxd, neon_cvtx_narrow, (("s0,s1")))
+DEF_NEON_FUNCTION (vcvt, neon_cvtbf16_widen, ("Q0,DB"))
+DEF_NEON_FUNCTION (vcvt, neon_cvtbf16_narrow, ("DB,Q1"))
+DEF_NEON_FUNCTION (vcvtq_high, neon_cvtbf16_narrow,("QB,QB,Q1"))
+DEF_NEON_FUNCTION (vcvtq_high, neon_cvtbf16_widen,("Q0,QB"))
+DEF_NEON_FUNCTION (vcvtq_low, neon_cvtbf16_narrow,("QB,Q1"))
+DEF_NEON_FUNCTION (vcvtq_low, neon_cvtbf16_widen,("Q0,QB"))
+#undef REQUIRED_EXTENSIONS
diff --git a/gcc/config/aarch64/aarch64-simd.md 
b/gcc/config/aarch64/aarch64-simd.md
index fe6cb4250f6a..fe6ea2cd08f9 100644
--- a/gcc/config/aarch64/aarch64-simd.md
+++ b/gcc/config/aarch64/aarch64-simd.md
@@ -3455,25 +3455,47 @@
 
 ;; Convert between fixed-point and floating-point (vector modes)
 
-(define_insn "<FCVT_F2FIXED:fcvt_fixed_insn><VHSDF:mode>3"
+(define_insn "@fcvtzs<VHSDF:mode>3"
   [(set (match_operand:<VHSDF:FCVT_TARGET> 0 "register_operand" "=w")
        (unspec:<VHSDF:FCVT_TARGET>
          [(match_operand:VHSDF 1 "register_operand" "w")
           (match_operand:SI 2 "immediate_operand" "i")]
-        FCVT_F2FIXED))]
+        UNSPEC_FCVTZS))]
   "TARGET_SIMD"
-  "<FCVT_F2FIXED:fcvt_fixed_insn>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #%2"
+  "fcvtzs\t%<v>0<Vmtype>, %<v>1<Vmtype>, #%2"
   [(set_attr "type" "neon_fp_to_int_<VHSDF:stype><q>")]
 )
 
-(define_insn "<FCVT_FIXED2F:fcvt_fixed_insn><VDQ_HSDI:mode>3"
+(define_insn "@fcvtzu<VHSDF:mode>3"
+  [(set (match_operand:<VHSDF:FCVT_TARGET> 0 "register_operand" "=w")
+       (unspec:<VHSDF:FCVT_TARGET>
+         [(match_operand:VHSDF 1 "register_operand" "w")
+          (match_operand:SI 2 "immediate_operand" "i")]
+        UNSPEC_FCVTZU))]
+  "TARGET_SIMD"
+  "fcvtzu\t%<v>0<Vmtype>, %<v>1<Vmtype>, #%2"
+  [(set_attr "type" "neon_fp_to_int_<VHSDF:stype><q>")]
+)
+
+(define_insn "@scvtf<VDQ_HSDI:mode>3"
+  [(set (match_operand:<VDQ_HSDI:FCVT_TARGET> 0 "register_operand" "=w")
+       (unspec:<VDQ_HSDI:FCVT_TARGET>
+         [(match_operand:VDQ_HSDI 1 "register_operand" "w")
+          (match_operand:SI 2 "immediate_operand" "i")]
+        UNSPEC_SCVTF))]
+  "TARGET_SIMD"
+  "scvtf\t%<v>0<Vmtype>, %<v>1<Vmtype>, #%2"
+  [(set_attr "type" "neon_int_to_fp_<VDQ_HSDI:stype><q>")]
+)
+
+(define_insn "@ucvtf<VDQ_HSDI:mode>3"
   [(set (match_operand:<VDQ_HSDI:FCVT_TARGET> 0 "register_operand" "=w")
        (unspec:<VDQ_HSDI:FCVT_TARGET>
          [(match_operand:VDQ_HSDI 1 "register_operand" "w")
           (match_operand:SI 2 "immediate_operand" "i")]
-        FCVT_FIXED2F))]
+        UNSPEC_UCVTF))]
   "TARGET_SIMD"
-  "<FCVT_FIXED2F:fcvt_fixed_insn>\t%<v>0<Vmtype>, %<v>1<Vmtype>, #%2"
+  "ucvtf\t%<v>0<Vmtype>, %<v>1<Vmtype>, #%2"
   [(set_attr "type" "neon_int_to_fp_<VDQ_HSDI:stype><q>")]
 )
 
diff --git a/gcc/config/aarch64/aarch64.md b/gcc/config/aarch64/aarch64.md
index 7c8915ec3890..6f232e9add84 100644
--- a/gcc/config/aarch64/aarch64.md
+++ b/gcc/config/aarch64/aarch64.md
@@ -7509,27 +7509,51 @@
 
 ;; Convert between fixed-point and floating-point (scalar modes)
 
-(define_insn "<FCVT_F2FIXED:fcvt_fixed_insn><GPF:mode>3"
+(define_insn "@fcvtzs<GPF:mode>3"
   [(set (match_operand:<GPF:FCVT_TARGET> 0 "register_operand")
        (unspec:<GPF:FCVT_TARGET> [(match_operand:GPF 1 "register_operand")
                                   (match_operand:SI 2 "immediate_operand")]
-        FCVT_F2FIXED))]
+        UNSPEC_FCVTZS))]
+  ""
+  {@ [ cons: =0 , 1 , 2 ; attrs: type                 , arch  ]
+     [ r        , w , i ; f_cvtf2i                    , fp    ] 
fcvtzs\t%<GPF:w1>0, %<GPF:s>1, #%2
+     [ w        , w , i ; neon_fp_to_int_<GPF:Vetype> , simd  ] 
fcvtzs\t%<GPF:s>0, %<GPF:s>1, #%2
+  }
+)
+
+(define_insn "@fcvtzu<GPF:mode>3"
+  [(set (match_operand:<GPF:FCVT_TARGET> 0 "register_operand")
+       (unspec:<GPF:FCVT_TARGET> [(match_operand:GPF 1 "register_operand")
+                                  (match_operand:SI 2 "immediate_operand")]
+        UNSPEC_FCVTZU))]
   ""
   {@ [ cons: =0 , 1 , 2 ; attrs: type                 , arch  ]
-     [ r        , w , i ; f_cvtf2i                    , fp    ] 
<FCVT_F2FIXED:fcvt_fixed_insn>\t%<GPF:w1>0, %<GPF:s>1, #%2
-     [ w        , w , i ; neon_fp_to_int_<GPF:Vetype> , simd  ] 
<FCVT_F2FIXED:fcvt_fixed_insn>\t%<GPF:s>0, %<GPF:s>1, #%2
+     [ r        , w , i ; f_cvtf2i                    , fp    ] 
fcvtzu\t%<GPF:w1>0, %<GPF:s>1, #%2
+     [ w        , w , i ; neon_fp_to_int_<GPF:Vetype> , simd  ] 
fcvtzu\t%<GPF:s>0, %<GPF:s>1, #%2
   }
 )
 
-(define_insn "<FCVT_FIXED2F:fcvt_fixed_insn><GPI:mode>3"
+(define_insn "@scvtf<GPI:mode>3"
   [(set (match_operand:<GPI:FCVT_TARGET> 0 "register_operand")
        (unspec:<GPI:FCVT_TARGET> [(match_operand:GPI 1 "register_operand")
                                   (match_operand:SI 2 "immediate_operand")]
-        FCVT_FIXED2F))]
+        UNSPEC_SCVTF))]
+  ""
+  {@ [ cons: =0 , 1 , 2 ; attrs: type                 , arch  ]
+     [ w        , r , i ; f_cvti2f                    , fp    ] 
scvtf\t%<GPI:v>0, %<GPI:w>1, #%2
+     [ w        , w , i ; neon_int_to_fp_<GPI:Vetype> , simd  ] 
scvtf\t%<GPI:v>0, %<GPI:v>1, #%2
+  }
+)
+
+(define_insn "@ucvtf<GPI:mode>3"
+  [(set (match_operand:<GPI:FCVT_TARGET> 0 "register_operand")
+       (unspec:<GPI:FCVT_TARGET> [(match_operand:GPI 1 "register_operand")
+                                  (match_operand:SI 2 "immediate_operand")]
+        UNSPEC_UCVTF))]
   ""
   {@ [ cons: =0 , 1 , 2 ; attrs: type                 , arch  ]
-     [ w        , r , i ; f_cvti2f                    , fp    ] 
<FCVT_FIXED2F:fcvt_fixed_insn>\t%<GPI:v>0, %<GPI:w>1, #%2
-     [ w        , w , i ; neon_int_to_fp_<GPI:Vetype> , simd  ] 
<FCVT_FIXED2F:fcvt_fixed_insn>\t%<GPI:v>0, %<GPI:v>1, #%2
+     [ w        , r , i ; f_cvti2f                    , fp    ] 
ucvtf\t%<GPI:v>0, %<GPI:w>1, #%2
+     [ w        , w , i ; neon_int_to_fp_<GPI:Vetype> , simd  ] 
ucvtf\t%<GPI:v>0, %<GPI:v>1, #%2
   }
 )
 
diff --git a/gcc/config/aarch64/arm_neon.h b/gcc/config/aarch64/arm_neon.h
index 873a1195d3ed..3313a2d4fcea 100644
--- a/gcc/config/aarch64/arm_neon.h
+++ b/gcc/config/aarch64/arm_neon.h
@@ -2109,27 +2109,6 @@ vaddlvq_u32 (uint32x4_t __a)
   return __builtin_aarch64_uaddlvv4si_uu (__a);
 }
 
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtx_f32_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_float_trunc_rodd_lo_v2sf (__a);
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtx_high_f32_f64 (float32x2_t __a, float64x2_t __b)
-{
-  return __builtin_aarch64_float_trunc_rodd_hi_v4sf (__a, __b);
-}
-
-__extension__ extern __inline float32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtxd_f32_f64 (float64_t __a)
-{
-  return __builtin_aarch64_float_trunc_rodd_df (__a);
-}
-
 __extension__ extern __inline float32x2_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 vmla_n_f32 (float32x2_t __a, float32x2_t __b, float32_t __c)
@@ -7290,1012 +7269,120 @@ vcltd_u64 (uint64_t __a, uint64_t __b)
   return __a < __b ? -1ll : 0ll;
 }
 
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltd_f64 (float64_t __a, float64_t __b)
-{
-  return __a < __b ? -1ll : 0ll;
-}
-
-/* vcltz - vector.  */
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltz_f32 (float32x2_t __a)
-{
-  return (uint32x2_t) (__a < 0.0f);
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltz_f64 (float64x1_t __a)
-{
-  return (uint64x1_t) (__a < (float64x1_t) {0.0});
-}
-
-__extension__ extern __inline uint8x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltz_s8 (int8x8_t __a)
-{
-  return (uint8x8_t) (__a < 0);
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltz_s16 (int16x4_t __a)
-{
-  return (uint16x4_t) (__a < 0);
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltz_s32 (int32x2_t __a)
-{
-  return (uint32x2_t) (__a < 0);
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltz_s64 (int64x1_t __a)
-{
-  return (uint64x1_t) (__a < __AARCH64_INT64_C (0));
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltzq_f32 (float32x4_t __a)
-{
-  return (uint32x4_t) (__a < 0.0f);
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltzq_f64 (float64x2_t __a)
-{
-  return (uint64x2_t) (__a < 0.0);
-}
-
-__extension__ extern __inline uint8x16_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltzq_s8 (int8x16_t __a)
-{
-  return (uint8x16_t) (__a < 0);
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltzq_s16 (int16x8_t __a)
-{
-  return (uint16x8_t) (__a < 0);
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltzq_s32 (int32x4_t __a)
-{
-  return (uint32x4_t) (__a < 0);
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltzq_s64 (int64x2_t __a)
-{
-  return (uint64x2_t) (__a < __AARCH64_INT64_C (0));
-}
-
-/* vcltz - scalar.  */
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltzs_f32 (float32_t __a)
-{
-  return __a < 0.0f ? -1 : 0;
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltzd_s64 (int64_t __a)
-{
-  return __a < 0 ? -1ll : 0ll;
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcltzd_f64 (float64_t __a)
-{
-  return __a < 0.0 ? -1ll : 0ll;
-}
-
-/* vcvt (double -> float).  */
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f16_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_float_truncate_lo_v4hf (__a);
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_high_f16_f32 (float16x4_t __a, float32x4_t __b)
-{
-  return __builtin_aarch64_float_truncate_hi_v8hf (__a, __b);
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f32_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_float_truncate_lo_v2sf (__a);
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_high_f32_f64 (float32x2_t __a, float64x2_t __b)
-{
-  return __builtin_aarch64_float_truncate_hi_v4sf (__a, __b);
-}
-
-/* vcvt (float -> double).  */
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f32_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_float_extend_lo_v4sf (__a);
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f64_f32 (float32x2_t __a)
-{
-
-  return __builtin_aarch64_float_extend_lo_v2df (__a);
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_high_f32_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_vec_unpacks_hi_v8hf (__a);
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_high_f64_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_vec_unpacks_hi_v4sf (__a);
-}
-
-/* vcvt (<u>fixed-point -> float).  */
-
-__extension__ extern __inline float64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_n_f64_s64 (int64_t __a, const int __b)
-{
-  return __builtin_aarch64_scvtfdi (__a, __b);
-}
-
-__extension__ extern __inline float64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_n_f64_u64 (uint64_t __a, const int __b)
-{
-  return __builtin_aarch64_ucvtfdi_sus (__a, __b);
-}
-
-__extension__ extern __inline float32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_n_f32_s32 (int32_t __a, const int __b)
-{
-  return __builtin_aarch64_scvtfsi (__a, __b);
-}
-
-__extension__ extern __inline float32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_n_f32_u32 (uint32_t __a, const int __b)
-{
-  return __builtin_aarch64_ucvtfsi_sus (__a, __b);
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_f32_s32 (int32x2_t __a, const int __b)
-{
-  return __builtin_aarch64_scvtfv2si (__a, __b);
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_f32_u32 (uint32x2_t __a, const int __b)
-{
-  return __builtin_aarch64_ucvtfv2si_sus (__a, __b);
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_f64_s64 (int64x1_t __a, const int __b)
-{
-  return (float64x1_t)
-    { __builtin_aarch64_scvtfdi (vget_lane_s64 (__a, 0), __b) };
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_f64_u64 (uint64x1_t __a, const int __b)
-{
-  return (float64x1_t)
-    { __builtin_aarch64_ucvtfdi_sus (vget_lane_u64 (__a, 0), __b) };
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_f32_s32 (int32x4_t __a, const int __b)
-{
-  return __builtin_aarch64_scvtfv4si (__a, __b);
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_f32_u32 (uint32x4_t __a, const int __b)
-{
-  return __builtin_aarch64_ucvtfv4si_sus (__a, __b);
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_f64_s64 (int64x2_t __a, const int __b)
-{
-  return __builtin_aarch64_scvtfv2di (__a, __b);
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_f64_u64 (uint64x2_t __a, const int __b)
-{
-  return __builtin_aarch64_ucvtfv2di_sus (__a, __b);
-}
-
-/* vcvt (float -> <u>fixed-point).  */
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_n_s64_f64 (float64_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzsdf (__a, __b);
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_n_u64_f64 (float64_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzudf_uss (__a, __b);
-}
-
-__extension__ extern __inline int32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_n_s32_f32 (float32_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzssf (__a, __b);
-}
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_n_u32_f32 (float32_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzusf_uss (__a, __b);
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_s32_f32 (float32x2_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzsv2sf (__a, __b);
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_u32_f32 (float32x2_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzuv2sf_uss (__a, __b);
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_s64_f64 (float64x1_t __a, const int __b)
-{
-  return (int64x1_t)
-    { __builtin_aarch64_fcvtzsdf (vget_lane_f64 (__a, 0), __b) };
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_u64_f64 (float64x1_t __a, const int __b)
-{
-  return (uint64x1_t)
-    { __builtin_aarch64_fcvtzudf_uss (vget_lane_f64 (__a, 0), __b) };
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_s32_f32 (float32x4_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzsv4sf (__a, __b);
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_u32_f32 (float32x4_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzuv4sf_uss (__a, __b);
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_s64_f64 (float64x2_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzsv2df (__a, __b);
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_u64_f64 (float64x2_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzuv2df_uss (__a, __b);
-}
-
-/* vcvt  (<u>int -> float)  */
-
-__extension__ extern __inline float64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_f64_s64 (int64_t __a)
-{
-  return (float64_t) __a;
-}
-
-__extension__ extern __inline float64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_f64_u64 (uint64_t __a)
-{
-  return (float64_t) __a;
-}
-
-__extension__ extern __inline float32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_f32_s32 (int32_t __a)
-{
-  return (float32_t) __a;
-}
-
-__extension__ extern __inline float32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_f32_u32 (uint32_t __a)
-{
-  return (float32_t) __a;
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f32_s32 (int32x2_t __a)
-{
-  return __builtin_aarch64_floatv2siv2sf (__a);
-}
-
-__extension__ extern __inline float32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f32_u32 (uint32x2_t __a)
-{
-  return __builtin_aarch64_floatunsv2siv2sf ((int32x2_t) __a);
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f64_s64 (int64x1_t __a)
-{
-  return (float64x1_t) { vget_lane_s64 (__a, 0) };
-}
-
-__extension__ extern __inline float64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f64_u64 (uint64x1_t __a)
-{
-  return (float64x1_t) { vget_lane_u64 (__a, 0) };
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_f32_s32 (int32x4_t __a)
-{
-  return __builtin_aarch64_floatv4siv4sf (__a);
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_f32_u32 (uint32x4_t __a)
-{
-  return __builtin_aarch64_floatunsv4siv4sf ((int32x4_t) __a);
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_f64_s64 (int64x2_t __a)
-{
-  return __builtin_aarch64_floatv2div2df (__a);
-}
-
-__extension__ extern __inline float64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_f64_u64 (uint64x2_t __a)
-{
-  return __builtin_aarch64_floatunsv2div2df ((int64x2_t) __a);
-}
-
-/* vcvt (float -> <u>int)  */
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_s64_f64 (float64_t __a)
-{
-  return (int64_t) __a;
-}
-
-__extension__ extern __inline int32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_s32_f64 (float64_t __a)
-{
-  return (int32_t) __a;
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_u64_f64 (float64_t __a)
-{
-  return (uint64_t) __a;
-}
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtd_u32_f64 (float64_t __a)
-{
-  return (uint32_t) __a;
-}
-
-__extension__ extern __inline int32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_s32_f32 (float32_t __a)
-{
-  return (int32_t) __a;
-}
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_s64_f32 (float32_t __a)
-{
-  return (int64_t) __a;
-}
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_u32_f32 (float32_t __a)
-{
-  return (uint32_t) __a;
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvts_u64_f32 (float32_t __a)
-{
-  return (uint64_t) __a;
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_s32_f32 (float32x2_t __a)
-{
-  return __builtin_aarch64_lbtruncv2sfv2si (__a);
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_u32_f32 (float32x2_t __a)
-{
-  return __builtin_aarch64_lbtruncuv2sfv2si_us (__a);
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_s32_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_lbtruncv4sfv4si (__a);
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_u32_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_lbtruncuv4sfv4si_us (__a);
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_s64_f64 (float64x1_t __a)
-{
-  return (int64x1_t) {vcvtd_s64_f64 (__a[0])};
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_u64_f64 (float64x1_t __a)
-{
-  return (uint64x1_t) {vcvtd_u64_f64 (__a[0])};
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_s64_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_lbtruncv2dfv2di (__a);
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_u64_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_lbtruncuv2dfv2di_us (__a);
-}
-
-/* vcvta  */
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtad_s64_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lrounddfdi (__a);
-}
-
-__extension__ extern __inline int32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtad_s32_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lrounddfsi (__a);
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtad_u64_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lroundudfdi_us (__a);
-}
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtad_u32_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lroundudfsi_us (__a);
-}
-
-__extension__ extern __inline int32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtas_s32_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lroundsfsi (__a);
-}
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtas_s64_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lroundsfdi (__a);
-}
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtas_u32_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lroundusfsi_us (__a);
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtas_u64_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lroundusfdi_us (__a);
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvta_s32_f32 (float32x2_t __a)
-{
-  return __builtin_aarch64_lroundv2sfv2si (__a);
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvta_u32_f32 (float32x2_t __a)
-{
-  return __builtin_aarch64_lrounduv2sfv2si_us (__a);
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtaq_s32_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_lroundv4sfv4si (__a);
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtaq_u32_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_lrounduv4sfv4si_us (__a);
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvta_s64_f64 (float64x1_t __a)
-{
-  return (int64x1_t) {vcvtad_s64_f64 (__a[0])};
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvta_u64_f64 (float64x1_t __a)
-{
-  return (uint64x1_t) {vcvtad_u64_f64 (__a[0])};
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtaq_s64_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_lroundv2dfv2di (__a);
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtaq_u64_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_lrounduv2dfv2di_us (__a);
-}
-
-/* vcvtm  */
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmd_s64_f64 (float64_t __a)
-{
-  return __builtin_llfloor (__a);
-}
-
-__extension__ extern __inline int32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmd_s32_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lfloordfsi (__a);
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmd_u64_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lfloorudfdi_us (__a);
-}
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmd_u32_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lfloorudfsi_us (__a);
-}
-
-__extension__ extern __inline int32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtms_s32_f32 (float32_t __a)
-{
-  return __builtin_ifloorf (__a);
-}
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtms_s64_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lfloorsfdi (__a);
-}
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtms_u32_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lfloorusfsi_us (__a);
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtms_u64_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lfloorusfdi_us (__a);
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtm_s32_f32 (float32x2_t __a)
-{
-  return __builtin_aarch64_lfloorv2sfv2si (__a);
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtm_u32_f32 (float32x2_t __a)
-{
-  return __builtin_aarch64_lflooruv2sfv2si_us (__a);
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmq_s32_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_lfloorv4sfv4si (__a);
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmq_u32_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_lflooruv4sfv4si_us (__a);
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtm_s64_f64 (float64x1_t __a)
-{
-  return (int64x1_t) {vcvtmd_s64_f64 (__a[0])};
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtm_u64_f64 (float64x1_t __a)
-{
-  return (uint64x1_t) {vcvtmd_u64_f64 (__a[0])};
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmq_s64_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_lfloorv2dfv2di (__a);
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmq_u64_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_lflooruv2dfv2di_us (__a);
-}
-
-/* vcvtn  */
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnd_s64_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lfrintndfdi (__a);
-}
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnd_s32_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lfrintndfsi (__a);
-}
-
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnd_u64_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lfrintnudfdi_us (__a);
-}
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnd_u32_f64 (float64_t __a)
-{
-  return __builtin_aarch64_lfrintnudfsi_us (__a);
-}
-
-__extension__ extern __inline int32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtns_s32_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lfrintnsfsi (__a);
-}
-
-__extension__ extern __inline int64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtns_s64_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lfrintnsfdi (__a);
-}
-
-__extension__ extern __inline uint32_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtns_u32_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lfrintnusfsi_us (__a);
-}
-__extension__ extern __inline uint64_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtns_u64_f32 (float32_t __a)
-{
-  return __builtin_aarch64_lfrintnusfdi_us (__a);
-}
-
-__extension__ extern __inline int32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtn_s32_f32 (float32x2_t __a)
-{
-  return __builtin_aarch64_lfrintnv2sfv2si (__a);
-}
-
-__extension__ extern __inline uint32x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtn_u32_f32 (float32x2_t __a)
-{
-  return __builtin_aarch64_lfrintnuv2sfv2si_us (__a);
-}
-
-__extension__ extern __inline int32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnq_s32_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_lfrintnv4sfv4si (__a);
-}
-
-__extension__ extern __inline uint32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnq_u32_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_lfrintnuv4sfv4si_us (__a);
-}
-
-__extension__ extern __inline int64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtn_s64_f64 (float64x1_t __a)
-{
-  return (int64x1_t) {vcvtnd_s64_f64 (__a[0])};
-}
-
-__extension__ extern __inline uint64x1_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtn_u64_f64 (float64x1_t __a)
-{
-  return (uint64x1_t) {vcvtnd_u64_f64 (__a[0])};
-}
-
-__extension__ extern __inline int64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnq_s64_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_lfrintnv2dfv2di (__a);
-}
-
-__extension__ extern __inline uint64x2_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnq_u64_f64 (float64x2_t __a)
-{
-  return __builtin_aarch64_lfrintnuv2dfv2di_us (__a);
-}
-
-/* vcvtp  */
-
-__extension__ extern __inline int64_t
+__extension__ extern __inline uint64_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpd_s64_f64 (float64_t __a)
+vcltd_f64 (float64_t __a, float64_t __b)
 {
-  return __builtin_llceil (__a);
+  return __a < __b ? -1ll : 0ll;
 }
 
-__extension__ extern __inline int32_t
+/* vcltz - vector.  */
+
+__extension__ extern __inline uint32x2_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpd_s32_f64 (float64_t __a)
+vcltz_f32 (float32x2_t __a)
 {
-  return __builtin_aarch64_lceildfsi (__a);
+  return (uint32x2_t) (__a < 0.0f);
 }
 
-__extension__ extern __inline uint64_t
+__extension__ extern __inline uint64x1_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpd_u64_f64 (float64_t __a)
+vcltz_f64 (float64x1_t __a)
 {
-  return __builtin_aarch64_lceiludfdi_us (__a);
+  return (uint64x1_t) (__a < (float64x1_t) {0.0});
 }
 
-__extension__ extern __inline uint32_t
+__extension__ extern __inline uint8x8_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpd_u32_f64 (float64_t __a)
+vcltz_s8 (int8x8_t __a)
 {
-  return __builtin_aarch64_lceiludfsi_us (__a);
+  return (uint8x8_t) (__a < 0);
 }
 
-__extension__ extern __inline int32_t
+__extension__ extern __inline uint16x4_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtps_s32_f32 (float32_t __a)
+vcltz_s16 (int16x4_t __a)
 {
-  return __builtin_iceilf (__a);
+  return (uint16x4_t) (__a < 0);
 }
 
-__extension__ extern __inline int64_t
+__extension__ extern __inline uint32x2_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtps_s64_f32 (float32_t __a)
+vcltz_s32 (int32x2_t __a)
 {
-  return __builtin_aarch64_lceilsfdi (__a);
+  return (uint32x2_t) (__a < 0);
 }
 
-__extension__ extern __inline uint32_t
+__extension__ extern __inline uint64x1_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtps_u32_f32 (float32_t __a)
+vcltz_s64 (int64x1_t __a)
 {
-  return __builtin_aarch64_lceilusfsi_us (__a);
+  return (uint64x1_t) (__a < __AARCH64_INT64_C (0));
 }
 
-__extension__ extern __inline uint64_t
+__extension__ extern __inline uint32x4_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtps_u64_f32 (float32_t __a)
+vcltzq_f32 (float32x4_t __a)
 {
-  return __builtin_aarch64_lceilusfdi_us (__a);
+  return (uint32x4_t) (__a < 0.0f);
 }
 
-__extension__ extern __inline int32x2_t
+__extension__ extern __inline uint64x2_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtp_s32_f32 (float32x2_t __a)
+vcltzq_f64 (float64x2_t __a)
 {
-  return __builtin_aarch64_lceilv2sfv2si (__a);
+  return (uint64x2_t) (__a < 0.0);
 }
 
-__extension__ extern __inline uint32x2_t
+__extension__ extern __inline uint8x16_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtp_u32_f32 (float32x2_t __a)
+vcltzq_s8 (int8x16_t __a)
 {
-  return __builtin_aarch64_lceiluv2sfv2si_us (__a);
+  return (uint8x16_t) (__a < 0);
 }
 
-__extension__ extern __inline int32x4_t
+__extension__ extern __inline uint16x8_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpq_s32_f32 (float32x4_t __a)
+vcltzq_s16 (int16x8_t __a)
 {
-  return __builtin_aarch64_lceilv4sfv4si (__a);
+  return (uint16x8_t) (__a < 0);
 }
 
 __extension__ extern __inline uint32x4_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpq_u32_f32 (float32x4_t __a)
+vcltzq_s32 (int32x4_t __a)
 {
-  return __builtin_aarch64_lceiluv4sfv4si_us (__a);
+  return (uint32x4_t) (__a < 0);
 }
 
-__extension__ extern __inline int64x1_t
+__extension__ extern __inline uint64x2_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtp_s64_f64 (float64x1_t __a)
+vcltzq_s64 (int64x2_t __a)
 {
-  return (int64x1_t) {vcvtpd_s64_f64 (__a[0])};
+  return (uint64x2_t) (__a < __AARCH64_INT64_C (0));
 }
 
-__extension__ extern __inline uint64x1_t
+/* vcltz - scalar.  */
+
+__extension__ extern __inline uint32_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtp_u64_f64 (float64x1_t __a)
+vcltzs_f32 (float32_t __a)
 {
-  return (uint64x1_t) {vcvtpd_u64_f64 (__a[0])};
+  return __a < 0.0f ? -1 : 0;
 }
 
-__extension__ extern __inline int64x2_t
+__extension__ extern __inline uint64_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpq_s64_f64 (float64x2_t __a)
+vcltzd_s64 (int64_t __a)
 {
-  return __builtin_aarch64_lceilv2dfv2di (__a);
+  return __a < 0 ? -1ll : 0ll;
 }
 
-__extension__ extern __inline uint64x2_t
+__extension__ extern __inline uint64_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpq_u64_f64 (float64x2_t __a)
+vcltzd_f64 (float64_t __a)
 {
-  return __builtin_aarch64_lceiluv2dfv2di_us (__a);
+  return __a < 0.0 ? -1ll : 0ll;
 }
 
 /* vfma  */
@@ -19825,174 +18912,6 @@ vcltzq_f16 (float16x8_t __a)
   return __builtin_aarch64_cmltv8hf_uss (__a, vdupq_n_f16 (0.0f));
 }
 
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f16_s16 (int16x4_t __a)
-{
-  return __builtin_aarch64_floatv4hiv4hf (__a);
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_f16_s16 (int16x8_t __a)
-{
-  return __builtin_aarch64_floatv8hiv8hf (__a);
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f16_u16 (uint16x4_t __a)
-{
-  return __builtin_aarch64_floatunsv4hiv4hf ((int16x4_t) __a);
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_f16_u16 (uint16x8_t __a)
-{
-  return __builtin_aarch64_floatunsv8hiv8hf ((int16x8_t) __a);
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_s16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lbtruncv4hfv4hi (__a);
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_s16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lbtruncv8hfv8hi (__a);
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_u16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lbtruncuv4hfv4hi_us (__a);
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_u16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lbtruncuv8hfv8hi_us (__a);
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvta_s16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lroundv4hfv4hi (__a);
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtaq_s16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lroundv8hfv8hi (__a);
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvta_u16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lrounduv4hfv4hi_us (__a);
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtaq_u16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lrounduv8hfv8hi_us (__a);
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtm_s16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lfloorv4hfv4hi (__a);
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmq_s16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lfloorv8hfv8hi (__a);
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtm_u16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lflooruv4hfv4hi_us (__a);
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtmq_u16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lflooruv8hfv8hi_us (__a);
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtn_s16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lfrintnv4hfv4hi (__a);
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnq_s16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lfrintnv8hfv8hi (__a);
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtn_u16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lfrintnuv4hfv4hi_us (__a);
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtnq_u16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lfrintnuv8hfv8hi_us (__a);
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtp_s16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lceilv4hfv4hi (__a);
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpq_s16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lceilv8hfv8hi (__a);
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtp_u16_f16 (float16x4_t __a)
-{
-  return __builtin_aarch64_lceiluv4hfv4hi_us (__a);
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtpq_u16_f16 (float16x8_t __a)
-{
-  return __builtin_aarch64_lceiluv8hfv8hi_us (__a);
-}
-
 __extension__ extern __inline float16x4_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 vneg_f16 (float16x4_t __a)
@@ -20289,62 +19208,6 @@ vcltq_f16 (float16x8_t __a, float16x8_t __b)
   return __builtin_aarch64_cmltv8hf_uss (__a, __b);
 }
 
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_f16_s16 (int16x4_t __a, const int __b)
-{
-  return __builtin_aarch64_scvtfv4hi (__a, __b);
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_f16_s16 (int16x8_t __a, const int __b)
-{
-  return __builtin_aarch64_scvtfv8hi (__a, __b);
-}
-
-__extension__ extern __inline float16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_f16_u16 (uint16x4_t __a, const int __b)
-{
-  return __builtin_aarch64_ucvtfv4hi_sus (__a, __b);
-}
-
-__extension__ extern __inline float16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_f16_u16 (uint16x8_t __a, const int __b)
-{
-  return __builtin_aarch64_ucvtfv8hi_sus (__a, __b);
-}
-
-__extension__ extern __inline int16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_s16_f16 (float16x4_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzsv4hf (__a, __b);
-}
-
-__extension__ extern __inline int16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_s16_f16 (float16x8_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzsv8hf (__a, __b);
-}
-
-__extension__ extern __inline uint16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_n_u16_f16 (float16x4_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzuv4hf_uss (__a, __b);
-}
-
-__extension__ extern __inline uint16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_n_u16_f16 (float16x8_t __a, const int __b)
-{
-  return __builtin_aarch64_fcvtzuv8hf_uss (__a, __b);
-}
-
 __extension__ extern __inline float16x4_t
 __attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
 vdiv_f16 (float16x4_t __a, float16x4_t __b)
@@ -22248,48 +21111,6 @@ vbfmlaltq_laneq_f32 (float32x4_t __r, bfloat16x8_t 
__a, bfloat16x8_t __b,
   return __builtin_aarch64_bfmlalt_lane_qv4sf (__r, __a, __b, __index);
 }
 
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_f32_bf16 (bfloat16x4_t __a)
-{
-  return __builtin_aarch64_vbfcvtv4bf (__a);
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_low_f32_bf16 (bfloat16x8_t __a)
-{
-  return __builtin_aarch64_vbfcvtv8bf (__a);
-}
-
-__extension__ extern __inline float32x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_high_f32_bf16 (bfloat16x8_t __a)
-{
-  return __builtin_aarch64_vbfcvt_highv8bf (__a);
-}
-
-__extension__ extern __inline bfloat16x4_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvt_bf16_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_bfcvtnv4bf (__a);
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_low_bf16_f32 (float32x4_t __a)
-{
-  return __builtin_aarch64_bfcvtn_qv8bf (__a);
-}
-
-__extension__ extern __inline bfloat16x8_t
-__attribute__ ((__always_inline__, __gnu_inline__, __artificial__))
-vcvtq_high_bf16_f32 (bfloat16x8_t __inactive, float32x4_t __a)
-{
-  return __builtin_aarch64_bfcvtn2v8bf (__inactive, __a);
-}
-
 __extension__ extern __inline bfloat16x4x2_t
 __attribute__ ((__always_inline__, __gnu_inline__,__artificial__))
 vld2_lane_bf16 (const bfloat16_t * __ptr, bfloat16x4x2_t __b, const int __c)
diff --git a/gcc/optabs.def b/gcc/optabs.def
index 9d95f047cb50..4a4b1ff98ffe 100644
--- a/gcc/optabs.def
+++ b/gcc/optabs.def
@@ -56,9 +56,15 @@ OPTAB_CL(sfloat_optab, "float$I$b$F$a2", FLOAT, "float", 
gen_int_to_fp_conv_libf
 OPTAB_CL(ufloat_optab, "floatuns$I$b$F$a2", UNSIGNED_FLOAT, NULL, 
gen_ufloat_conv_libfunc)
 
 OPTAB_CL(lrint_optab, "lrint$F$b$I$a2", UNKNOWN, "lrint", 
gen_int_to_fp_nondecimal_conv_libfunc)
+OPTAB_CL(lfrintn_optab, "lfrintn$F$b$I$a2", UNKNOWN, "lfrintn", 
gen_int_to_fp_nondecimal_conv_libfunc)
 OPTAB_CL(lround_optab, "lround$F$b$I$a2", UNKNOWN, "lround", 
gen_int_to_fp_nondecimal_conv_libfunc)
 OPTAB_CL(lfloor_optab, "lfloor$F$b$I$a2", UNKNOWN, "lfloor", 
gen_int_to_fp_nondecimal_conv_libfunc)
 OPTAB_CL(lceil_optab, "lceil$F$b$I$a2", UNKNOWN, "lceil", 
gen_int_to_fp_nondecimal_conv_libfunc)
+OPTAB_CL(lrintu_optab, "lrintu$F$b$I$a2", UNKNOWN, "lrintu", 
gen_int_to_fp_nondecimal_conv_libfunc)
+OPTAB_CL(lfrintnu_optab, "lfrintnu$F$b$I$a2", UNKNOWN, "lfrintnu", 
gen_int_to_fp_nondecimal_conv_libfunc)
+OPTAB_CL(lroundu_optab, "lroundu$F$b$I$a2", UNKNOWN, "lroundu", 
gen_int_to_fp_nondecimal_conv_libfunc)
+OPTAB_CL(lflooru_optab, "lflooru$F$b$I$a2", UNKNOWN, "lflooru", 
gen_int_to_fp_nondecimal_conv_libfunc)
+OPTAB_CL(lceilu_optab, "lceilu$F$b$I$a2", UNKNOWN, "lceilu", 
gen_int_to_fp_nondecimal_conv_libfunc)
 
 /* Conversions for fixed-point modes and other modes.  */
 OPTAB_CL(fract_optab, "fract$b$a2", FRACT_CONVERT, "fract", 
gen_fract_conv_libfunc)
diff --git 
a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvtn-nobf16.c 
b/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvtn-nobf16.c
deleted file mode 100644
index b3b6db123586..000000000000
--- a/gcc/testsuite/gcc.target/aarch64/advsimd-intrinsics/bfcvtn-nobf16.c
+++ /dev/null
@@ -1,10 +0,0 @@
-/* { dg-do assemble { target { aarch64*-*-* } } } */
-/* { dg-additional-options "-march=armv8.2-a+nobf16" } */
-
-#include <arm_neon.h>
-
-bfloat16x4_t test_bfcvtn (float32x4_t a)
-{
-  /* { dg-error "inlining failed .* 'vcvt_bf16_f32" "" { target *-*-* } 0 } */
-  return vcvt_bf16_f32 (a);
-}
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/arm_neon_test.h 
b/gcc/testsuite/gcc.target/aarch64/neon/arm_neon_test.h
index 844eef49d372..b37b7d321f0f 100644
--- a/gcc/testsuite/gcc.target/aarch64/neon/arm_neon_test.h
+++ b/gcc/testsuite/gcc.target/aarch64/neon/arm_neon_test.h
@@ -7,6 +7,12 @@
 #define TEST_UNARY(NAME, RET_TYPE, ARG_1_TYPE)                                 
\
   RET_TYPE test_##NAME (ARG_1_TYPE a) { return NAME (a); }
 
+#define TEST_UNARY_N(NAME, RET_TYPE, ARG1_TYPE, N) \
+  RET_TYPE test_##NAME (ARG1_TYPE a)               \
+  {                                               \
+    return NAME (a, N);                           \
+  }
+
 #define TEST_UNIFORM_UNARY(NAME, TYPE) TEST_UNARY (NAME, TYPE, TYPE)
 
 #define TEST_BINARY(NAME, RET_TYPE, ARG_1_TYPE, ARG_2_TYPE)                    
\
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvt.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvt.c
new file mode 100644
index 000000000000..35608cdff91d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvt.c
@@ -0,0 +1,172 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvt_s32_f32:
+**     fcvtzs  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvt_s32_f32, int32x2_t, float32x2_t)
+
+/*
+** test_vcvt_u32_f32:
+**     fcvtzu  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvt_u32_f32, uint32x2_t, float32x2_t)
+
+/*
+** test_vcvt_s64_f64:
+**     fcvtzs  d0, d0
+**     ret
+*/
+TEST_UNARY (vcvt_s64_f64, int64x1_t, float64x1_t)
+
+/*
+** test_vcvt_u64_f64:
+**     fcvtzu  d0, d0
+**     ret
+*/
+TEST_UNARY (vcvt_u64_f64, uint64x1_t, float64x1_t)
+
+/*
+** test_vcvt_u16_f16:
+**     fcvtzu  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvt_u16_f16, uint16x4_t, float16x4_t)
+
+/*
+** test_vcvt_s16_f16:
+**     fcvtzs  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvt_s16_f16, int16x4_t, float16x4_t)
+
+/*
+** test_vcvt_f32_s32:
+**     scvtf   v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvt_f32_s32, float32x2_t, int32x2_t)
+
+/*
+** test_vcvt_f32_u32:
+**     ucvtf   v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvt_f32_u32, float32x2_t, uint32x2_t)
+
+/*
+** test_vcvt_f64_s64:
+**     scvtf   d0, d0
+**     ret
+*/
+TEST_UNARY (vcvt_f64_s64, float64x1_t, int64x1_t)
+
+/*
+** test_vcvt_f64_u64:
+**     ucvtf   d0, d0
+**     ret
+*/
+TEST_UNARY (vcvt_f64_u64, float64x1_t, uint64x1_t)
+
+/*
+** test_vcvt_f16_u16:
+**     ucvtf   v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvt_f16_u16, float16x4_t, uint16x4_t)
+
+/*
+** test_vcvt_f16_s16:
+**     scvtf   v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvt_f16_s16, float16x4_t, int16x4_t)
+
+/*
+** test_vcvtq_s32_f32:
+**     fcvtzs  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtq_s32_f32, int32x4_t, float32x4_t)
+
+/*
+** test_vcvtq_u32_f32:
+**     fcvtzu  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtq_u32_f32, uint32x4_t, float32x4_t)
+
+/*
+** test_vcvtq_s64_f64:
+**     fcvtzs  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtq_s64_f64, int64x2_t, float64x2_t)
+
+/*
+** test_vcvtq_u64_f64:
+**     fcvtzu  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtq_u64_f64, uint64x2_t, float64x2_t)
+
+/*
+** test_vcvtq_u16_f16:
+**     fcvtzu  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtq_u16_f16, uint16x8_t, float16x8_t)
+
+/*
+** test_vcvtq_s16_f16:
+**     fcvtzs  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtq_s16_f16, int16x8_t, float16x8_t)
+
+/*
+** test_vcvtq_f32_s32:
+**     scvtf   v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtq_f32_s32, float32x4_t, int32x4_t)
+
+/*
+** test_vcvtq_f32_u32:
+**     ucvtf   v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtq_f32_u32, float32x4_t, uint32x4_t)
+
+/*
+** test_vcvtq_f64_s64:
+**     scvtf   v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtq_f64_s64, float64x2_t, int64x2_t)
+
+/*
+** test_vcvtq_f64_u64:
+**     ucvtf   v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtq_f64_u64, float64x2_t, uint64x2_t)
+
+/*
+** test_vcvtq_f16_u16:
+**     ucvtf   v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtq_f16_u16, float16x8_t, uint16x8_t)
+
+/*
+** test_vcvtq_f16_s16:
+**     scvtf   v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtq_f16_s16, float16x8_t, int16x8_t)
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvt_highlo.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvt_highlo.c
new file mode 100644
index 000000000000..ac9f53fcb998
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvt_highlo.c
@@ -0,0 +1,123 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvt_f32_f16:
+**     fcvtl   v0.4s, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvt_f32_f16, float32x4_t, float16x4_t)
+
+/*
+** test_vcvt_f64_f32:
+**     fcvtl   v0.2d, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvt_f64_f32, float64x2_t, float32x2_t)
+
+/*
+** test_vcvt_f16_f32:
+**     fcvtn   v0.4h, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvt_f16_f32, float16x4_t, float32x4_t)
+
+/*
+** test_vcvt_f32_f64:
+**     fcvtn   v0.2s, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvt_f32_f64, float32x2_t, float64x2_t)
+
+/*
+** test_vcvt_high_f32_f16:
+**     fcvtl2  v0.4s, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvt_high_f32_f16, float32x4_t, float16x8_t)
+
+/*
+** test_vcvt_high_f64_f32:
+**     fcvtl2  v0.2d, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvt_high_f64_f32, float64x2_t, float32x4_t)
+
+/*
+** test_vcvt_high_f16_f32:
+**     fcvtn2  v0.8h, v1.4s
+**     ret
+*/
+TEST_BINARY (vcvt_high_f16_f32, float16x8_t, float16x4_t, float32x4_t)
+
+/*
+** test_vcvt_high_f32_f64:
+**     fcvtn2  v0.4s, v1.2d
+**     ret
+*/
+TEST_BINARY (vcvt_high_f32_f64, float32x4_t, float32x2_t, float64x2_t)
+
+/*
+** test_vcvtx_f32_f64:
+**     fcvtxn  v0.2s, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtx_f32_f64, float32x2_t, float64x2_t)
+
+/*
+** test_vcvtx_high_f32_f64:
+**     fcvtxn2 v0.4s, v1.2d
+**     ret
+*/
+TEST_BINARY (vcvtx_high_f32_f64, float32x4_t, float32x2_t, float64x2_t)
+
+/*
+** test_vcvtxd_f32_f64:
+**     fcvtxn  s0, d0
+**     ret
+*/
+TEST_UNARY (vcvtxd_f32_f64, float32_t, float64_t)
+
+/*
+** test_vcvt_bf16_f32:
+**     bfcvtn  v0.4h, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvt_bf16_f32, bfloat16x4_t, float32x4_t)
+
+/*
+** test_vcvtq_high_bf16_f32:
+**     bfcvtn2 v0.8h, v1.4s
+**     ret
+*/
+TEST_BINARY (vcvtq_high_bf16_f32, bfloat16x8_t, bfloat16x8_t, float32x4_t)
+
+/*
+** test_vcvtq_low_bf16_f32:
+**     bfcvtn  v0.4h, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtq_low_bf16_f32, bfloat16x8_t, float32x4_t)
+
+/*
+** test_vcvt_f32_bf16:
+**     shll    v0.4s, v0.4h, #16
+**     ret
+*/
+TEST_UNARY (vcvt_f32_bf16, float32x4_t, bfloat16x4_t)
+
+/*
+** test_vcvtq_high_f32_bf16:
+**     shll2   v0.4s, v0.8h, #16
+**     ret
+*/
+TEST_UNARY (vcvtq_high_f32_bf16, float32x4_t, bfloat16x8_t)
+
+/*
+** test_vcvtq_low_f32_bf16:
+**     shll    v0.4s, v0.4h, #16
+**     ret
+*/
+TEST_UNARY (vcvtq_low_f32_bf16, float32x4_t, bfloat16x8_t)
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvt_n.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvt_n.c
new file mode 100644
index 000000000000..e2625c0a1824
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvt_n.c
@@ -0,0 +1,172 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvt_n_s32_f32:
+**     fcvtzs  v0.2s, v0.2s, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_s32_f32, int32x2_t, float32x2_t, 16)
+
+/*
+** test_vcvt_n_u32_f32:
+**     fcvtzu  v0.2s, v0.2s, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_u32_f32, uint32x2_t, float32x2_t, 16)
+
+/*
+** test_vcvt_n_s64_f64:
+**     fcvtzs  d0, d0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_s64_f64, int64x1_t, float64x1_t, 16)
+
+/*
+** test_vcvt_n_u64_f64:
+**     fcvtzu  d0, d0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_u64_f64, uint64x1_t, float64x1_t, 16)
+
+/*
+** test_vcvt_n_u16_f16:
+**     fcvtzu  v0.4h, v0.4h, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_u16_f16, uint16x4_t, float16x4_t, 16)
+
+/*
+** test_vcvt_n_s16_f16:
+**     fcvtzs  v0.4h, v0.4h, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_s16_f16, int16x4_t, float16x4_t, 16)
+
+/*
+** test_vcvt_n_f32_s32:
+**     scvtf   v0.2s, v0.2s, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_f32_s32, float32x2_t, int32x2_t, 16)
+
+/*
+** test_vcvt_n_f32_u32:
+**     ucvtf   v0.2s, v0.2s, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_f32_u32, float32x2_t, uint32x2_t, 16)
+
+/*
+** test_vcvt_n_f64_s64:
+**     scvtf   d0, d0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_f64_s64, float64x1_t, int64x1_t, 16)
+
+/*
+** test_vcvt_n_f64_u64:
+**     ucvtf   d0, d0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_f64_u64, float64x1_t, uint64x1_t, 16)
+
+/*
+** test_vcvt_n_f16_u16:
+**     ucvtf   v0.4h, v0.4h, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_f16_u16, float16x4_t, uint16x4_t, 16)
+
+/*
+** test_vcvt_n_f16_s16:
+**     scvtf   v0.4h, v0.4h, #16
+**     ret
+*/
+TEST_UNARY_N (vcvt_n_f16_s16, float16x4_t, int16x4_t, 16)
+
+/*
+** test_vcvtq_n_s32_f32:
+**     fcvtzs  v0.4s, v0.4s, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_s32_f32, int32x4_t, float32x4_t, 16)
+
+/*
+** test_vcvtq_n_u32_f32:
+**     fcvtzu  v0.4s, v0.4s, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_u32_f32, uint32x4_t, float32x4_t, 16)
+
+/*
+** test_vcvtq_n_s64_f64:
+**     fcvtzs  v0.2d, v0.2d, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_s64_f64, int64x2_t, float64x2_t, 16)
+
+/*
+** test_vcvtq_n_u64_f64:
+**     fcvtzu  v0.2d, v0.2d, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_u64_f64, uint64x2_t, float64x2_t, 16)
+
+/*
+** test_vcvtq_n_u16_f16:
+**     fcvtzu  v0.8h, v0.8h, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_u16_f16, uint16x8_t, float16x8_t, 16)
+
+/*
+** test_vcvtq_n_s16_f16:
+**     fcvtzs  v0.8h, v0.8h, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_s16_f16, int16x8_t, float16x8_t, 16)
+
+/*
+** test_vcvtq_n_f32_s32:
+**     scvtf   v0.4s, v0.4s, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_f32_s32, float32x4_t, int32x4_t, 16)
+
+/*
+** test_vcvtq_n_f32_u32:
+**     ucvtf   v0.4s, v0.4s, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_f32_u32, float32x4_t, uint32x4_t, 16)
+
+/*
+** test_vcvtq_n_f64_s64:
+**     scvtf   v0.2d, v0.2d, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_f64_s64, float64x2_t, int64x2_t, 16)
+
+/*
+** test_vcvtq_n_f64_u64:
+**     ucvtf   v0.2d, v0.2d, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_f64_u64, float64x2_t, uint64x2_t, 16)
+
+/*
+** test_vcvtq_n_f16_u16:
+**     ucvtf   v0.8h, v0.8h, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_f16_u16, float16x8_t, uint16x8_t, 16)
+
+/*
+** test_vcvtq_n_f16_s16:
+**     scvtf   v0.8h, v0.8h, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtq_n_f16_s16, float16x8_t, int16x8_t, 16)
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvta.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvta.c
new file mode 100644
index 000000000000..51dbefb082e4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvta.c
@@ -0,0 +1,90 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvta_s32_f32:
+**     fcvtas  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvta_s32_f32, int32x2_t, float32x2_t)
+
+/*
+** test_vcvta_u32_f32:
+**     fcvtau  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvta_u32_f32, uint32x2_t, float32x2_t)
+
+/*
+** test_vcvta_s64_f64:
+**     fcvtas  x0, d0
+**     fmov    d0, x0
+**     ret
+*/
+TEST_UNARY (vcvta_s64_f64, int64x1_t, float64x1_t)
+
+/*
+** test_vcvta_u64_f64:
+**     fcvtau  x0, d0
+**     fmov    d0, x0
+**     ret
+*/
+TEST_UNARY (vcvta_u64_f64, uint64x1_t, float64x1_t)
+
+/*
+** test_vcvta_u16_f16:
+**     fcvtau  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvta_u16_f16, uint16x4_t, float16x4_t)
+
+/*
+** test_vcvta_s16_f16:
+**     fcvtas  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvta_s16_f16, int16x4_t, float16x4_t)
+
+/*
+** test_vcvtaq_s32_f32:
+**     fcvtas  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtaq_s32_f32, int32x4_t, float32x4_t)
+
+/*
+** test_vcvtaq_u32_f32:
+**     fcvtau  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtaq_u32_f32, uint32x4_t, float32x4_t)
+
+/*
+** test_vcvtaq_s64_f64:
+**     fcvtas  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtaq_s64_f64, int64x2_t, float64x2_t)
+
+/*
+** test_vcvtaq_u64_f64:
+**     fcvtau  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtaq_u64_f64, uint64x2_t, float64x2_t)
+
+/*
+** test_vcvtaq_u16_f16:
+**     fcvtau  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtaq_u16_f16, uint16x8_t, float16x8_t)
+
+/*
+** test_vcvtaq_s16_f16:
+**     fcvtas  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtaq_s16_f16, int16x8_t, float16x8_t)
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvtd.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvtd.c
new file mode 100644
index 000000000000..c8620c29a0fd
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvtd.c
@@ -0,0 +1,158 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvtd_s32_f64:
+**     fcvtzs  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtd_s32_f64, int32_t, float64_t)
+
+/*
+** test_vcvtd_u32_f64:
+**     fcvtzu  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtd_u32_f64, uint32_t, float64_t)
+
+/*
+** test_vcvtd_s64_f64:
+**     fcvtzs  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtd_s64_f64, int64_t, float64_t)
+
+/*
+** test_vcvtd_u64_f64:
+**     fcvtzu  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtd_u64_f64, uint64_t, float64_t)
+
+/*
+** test_vcvtd_f64_s64:
+**     scvtf   d0, x0
+**     ret
+*/
+TEST_UNARY (vcvtd_f64_s64, float64_t, int64_t)
+
+/*
+** test_vcvtd_f64_u64:
+**     ucvtf   d0, x0
+**     ret
+*/
+TEST_UNARY (vcvtd_f64_u64, float64_t, uint64_t)
+
+/*
+** test_vcvtad_s32_f64:
+**     fcvtas  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtad_s32_f64, int32_t, float64_t)
+
+/*
+** test_vcvtad_u32_f64:
+**     fcvtau  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtad_u32_f64, uint32_t, float64_t)
+
+/*
+** test_vcvtad_s64_f64:
+**     fcvtas  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtad_s64_f64, int64_t, float64_t)
+
+/*
+** test_vcvtad_u64_f64:
+**     fcvtau  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtad_u64_f64, uint64_t, float64_t)
+
+/*
+** test_vcvtmd_s32_f64:
+**     fcvtms  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtmd_s32_f64, int32_t, float64_t)
+
+/*
+** test_vcvtmd_u32_f64:
+**     fcvtmu  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtmd_u32_f64, uint32_t, float64_t)
+
+/*
+** test_vcvtmd_s64_f64:
+**     fcvtms  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtmd_s64_f64, int64_t, float64_t)
+
+/*
+** test_vcvtmd_u64_f64:
+**     fcvtmu  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtmd_u64_f64, uint64_t, float64_t)
+
+/*
+** test_vcvtpd_s32_f64:
+**     fcvtps  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtpd_s32_f64, int32_t, float64_t)
+
+/*
+** test_vcvtpd_u32_f64:
+**     fcvtpu  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtpd_u32_f64, uint32_t, float64_t)
+
+/*
+** test_vcvtpd_s64_f64:
+**     fcvtps  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtpd_s64_f64, int64_t, float64_t)
+
+/*
+** test_vcvtpd_u64_f64:
+**     fcvtpu  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtpd_u64_f64, uint64_t, float64_t)
+
+/*
+** test_vcvtnd_s32_f64:
+**     fcvtns  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtnd_s32_f64, int32_t, float64_t)
+
+/*
+** test_vcvtnd_u32_f64:
+**     fcvtnu  w0, d0
+**     ret
+*/
+TEST_UNARY (vcvtnd_u32_f64, uint32_t, float64_t)
+
+/*
+** test_vcvtnd_s64_f64:
+**     fcvtns  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtnd_s64_f64, int64_t, float64_t)
+
+/*
+** test_vcvtnd_u64_f64:
+**     fcvtnu  x0, d0
+**     ret
+*/
+TEST_UNARY (vcvtnd_u64_f64, uint64_t, float64_t)
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvtds_n.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvtds_n.c
new file mode 100644
index 000000000000..36b2da1cf49b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvtds_n.c
@@ -0,0 +1,59 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvtd_n_s64_f64:
+**     fcvtzs  x0, d0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtd_n_s64_f64, int64_t, float64_t, 16)
+
+/*
+** test_vcvtd_n_u64_f64:
+**     fcvtzu  x0, d0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtd_n_u64_f64, uint64_t, float64_t, 16)
+
+/*
+** test_vcvtd_n_f64_s64:
+**     scvtf   d0, x0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtd_n_f64_s64, float64_t, int64_t, 16)
+
+/*
+** test_vcvtd_n_f64_u64:
+**     ucvtf   d0, x0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvtd_n_f64_u64, float64_t, uint64_t, 16)
+/*
+** test_vcvts_n_s32_f32:
+**     fcvtzs  w0, s0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvts_n_s32_f32, int32_t, float32_t, 16)
+
+/*
+** test_vcvts_n_u32_f32:
+**     fcvtzu  w0, s0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvts_n_u32_f32, uint32_t, float32_t, 16)
+
+/*
+** test_vcvts_n_f32_s32:
+**     scvtf   s0, w0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvts_n_f32_s32, float32_t, int32_t, 16)
+
+/*
+** test_vcvts_n_f32_u32:
+**     ucvtf   s0, w0, #16
+**     ret
+*/
+TEST_UNARY_N (vcvts_n_f32_u32, float32_t, uint32_t, 16)
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvtm.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvtm.c
new file mode 100644
index 000000000000..8fb70b8d405e
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvtm.c
@@ -0,0 +1,90 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvtm_s32_f32:
+**     fcvtms  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvtm_s32_f32, int32x2_t, float32x2_t)
+
+/*
+** test_vcvtm_u32_f32:
+**     fcvtmu  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvtm_u32_f32, uint32x2_t, float32x2_t)
+
+/*
+** test_vcvtm_s64_f64:
+**     fcvtms  x0, d0
+**     fmov    d0, x0
+**     ret
+*/
+TEST_UNARY (vcvtm_s64_f64, int64x1_t, float64x1_t)
+
+/*
+** test_vcvtm_u64_f64:
+**     fcvtmu  x0, d0
+**     fmov    d0, x0
+**     ret
+*/
+TEST_UNARY (vcvtm_u64_f64, uint64x1_t, float64x1_t)
+
+/*
+** test_vcvtm_u16_f16:
+**     fcvtmu  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvtm_u16_f16, uint16x4_t, float16x4_t)
+
+/*
+** test_vcvtm_s16_f16:
+**     fcvtms  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvtm_s16_f16, int16x4_t, float16x4_t)
+
+/*
+** test_vcvtmq_s32_f32:
+**     fcvtms  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtmq_s32_f32, int32x4_t, float32x4_t)
+
+/*
+** test_vcvtmq_u32_f32:
+**     fcvtmu  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtmq_u32_f32, uint32x4_t, float32x4_t)
+
+/*
+** test_vcvtmq_s64_f64:
+**     fcvtms  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtmq_s64_f64, int64x2_t, float64x2_t)
+
+/*
+** test_vcvtmq_u64_f64:
+**     fcvtmu  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtmq_u64_f64, uint64x2_t, float64x2_t)
+
+/*
+** test_vcvtmq_u16_f16:
+**     fcvtmu  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtmq_u16_f16, uint16x8_t, float16x8_t)
+
+/*
+** test_vcvtmq_s16_f16:
+**     fcvtms  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtmq_s16_f16, int16x8_t, float16x8_t)
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvtn.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvtn.c
new file mode 100644
index 000000000000..2d5daa044395
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvtn.c
@@ -0,0 +1,90 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvtn_s32_f32:
+**     fcvtns  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvtn_s32_f32, int32x2_t, float32x2_t)
+
+/*
+** test_vcvtn_u32_f32:
+**     fcvtnu  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvtn_u32_f32, uint32x2_t, float32x2_t)
+
+/*
+** test_vcvtn_s64_f64:
+**     fcvtns  x0, d0
+**     fmov    d0, x0
+**     ret
+*/
+TEST_UNARY (vcvtn_s64_f64, int64x1_t, float64x1_t)
+
+/*
+** test_vcvtn_u64_f64:
+**     fcvtnu  x0, d0
+**     fmov    d0, x0
+**     ret
+*/
+TEST_UNARY (vcvtn_u64_f64, uint64x1_t, float64x1_t)
+
+/*
+** test_vcvtn_u16_f16:
+**     fcvtnu  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvtn_u16_f16, uint16x4_t, float16x4_t)
+
+/*
+** test_vcvtn_s16_f16:
+**     fcvtns  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvtn_s16_f16, int16x4_t, float16x4_t)
+
+/*
+** test_vcvtnq_s32_f32:
+**     fcvtns  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtnq_s32_f32, int32x4_t, float32x4_t)
+
+/*
+** test_vcvtnq_u32_f32:
+**     fcvtnu  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtnq_u32_f32, uint32x4_t, float32x4_t)
+
+/*
+** test_vcvtnq_s64_f64:
+**     fcvtns  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtnq_s64_f64, int64x2_t, float64x2_t)
+
+/*
+** test_vcvtnq_u64_f64:
+**     fcvtnu  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtnq_u64_f64, uint64x2_t, float64x2_t)
+
+/*
+** test_vcvtnq_u16_f16:
+**     fcvtnu  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtnq_u16_f16, uint16x8_t, float16x8_t)
+
+/*
+** test_vcvtnq_s16_f16:
+**     fcvtns  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtnq_s16_f16, int16x8_t, float16x8_t)
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvtp.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvtp.c
new file mode 100644
index 000000000000..945bd3dd68b4
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvtp.c
@@ -0,0 +1,90 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvtp_s32_f32:
+**     fcvtps  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvtp_s32_f32, int32x2_t, float32x2_t)
+
+/*
+** test_vcvtp_u32_f32:
+**     fcvtpu  v0.2s, v0.2s
+**     ret
+*/
+TEST_UNARY (vcvtp_u32_f32, uint32x2_t, float32x2_t)
+
+/*
+** test_vcvtp_s64_f64:
+**     fcvtps  x0, d0
+**     fmov    d0, x0
+**     ret
+*/
+TEST_UNARY (vcvtp_s64_f64, int64x1_t, float64x1_t)
+
+/*
+** test_vcvtp_u64_f64:
+**     fcvtpu  x0, d0
+**     fmov    d0, x0
+**     ret
+*/
+TEST_UNARY (vcvtp_u64_f64, uint64x1_t, float64x1_t)
+
+/*
+** test_vcvtp_u16_f16:
+**     fcvtpu  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvtp_u16_f16, uint16x4_t, float16x4_t)
+
+/*
+** test_vcvtp_s16_f16:
+**     fcvtps  v0.4h, v0.4h
+**     ret
+*/
+TEST_UNARY (vcvtp_s16_f16, int16x4_t, float16x4_t)
+
+/*
+** test_vcvtpq_s32_f32:
+**     fcvtps  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtpq_s32_f32, int32x4_t, float32x4_t)
+
+/*
+** test_vcvtpq_u32_f32:
+**     fcvtpu  v0.4s, v0.4s
+**     ret
+*/
+TEST_UNARY (vcvtpq_u32_f32, uint32x4_t, float32x4_t)
+
+/*
+** test_vcvtpq_s64_f64:
+**     fcvtps  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtpq_s64_f64, int64x2_t, float64x2_t)
+
+/*
+** test_vcvtpq_u64_f64:
+**     fcvtpu  v0.2d, v0.2d
+**     ret
+*/
+TEST_UNARY (vcvtpq_u64_f64, uint64x2_t, float64x2_t)
+
+/*
+** test_vcvtpq_u16_f16:
+**     fcvtpu  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtpq_u16_f16, uint16x8_t, float16x8_t)
+
+/*
+** test_vcvtpq_s16_f16:
+**     fcvtps  v0.8h, v0.8h
+**     ret
+*/
+TEST_UNARY (vcvtpq_s16_f16, int16x8_t, float16x8_t)
\ No newline at end of file
diff --git a/gcc/testsuite/gcc.target/aarch64/neon/vcvts.c 
b/gcc/testsuite/gcc.target/aarch64/neon/vcvts.c
new file mode 100644
index 000000000000..f7fdded8a977
--- /dev/null
+++ b/gcc/testsuite/gcc.target/aarch64/neon/vcvts.c
@@ -0,0 +1,158 @@
+/* { dg-do compile } */
+/* { dg-final { check-function-bodies "**" "" } } */
+
+#include "arm_neon_test.h"
+
+/*
+** test_vcvts_s32_f32:
+**     fcvtzs  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvts_s32_f32, int32_t, float32_t)
+
+/*
+** test_vcvts_u32_f32:
+**     fcvtzu  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvts_u32_f32, uint32_t, float32_t)
+
+/*
+** test_vcvts_s64_f32:
+**     fcvtzs  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvts_s64_f32, int64_t, float32_t)
+
+/*
+** test_vcvts_u64_f32:
+**     fcvtzu  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvts_u64_f32, uint64_t, float32_t)
+
+/*
+** test_vcvts_f32_s32:
+**     scvtf   s0, w0
+**     ret
+*/
+TEST_UNARY (vcvts_f32_s32, float32_t, int32_t)
+
+/*
+** test_vcvts_f32_u32:
+**     ucvtf   s0, w0
+**     ret
+*/
+TEST_UNARY (vcvts_f32_u32, float32_t, uint32_t)
+
+/*
+** test_vcvtas_s32_f32:
+**     fcvtas  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvtas_s32_f32, int32_t, float32_t)
+
+/*
+** test_vcvtas_u32_f32:
+**     fcvtau  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvtas_u32_f32, uint32_t, float32_t)
+
+/*
+** test_vcvtas_s64_f32:
+**     fcvtas  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvtas_s64_f32, int64_t, float32_t)
+
+/*
+** test_vcvtas_u64_f32:
+**     fcvtau  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvtas_u64_f32, uint64_t, float32_t)
+
+/*
+** test_vcvtms_s32_f32:
+**     fcvtms  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvtms_s32_f32, int32_t, float32_t)
+
+/*
+** test_vcvtms_u32_f32:
+**     fcvtmu  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvtms_u32_f32, uint32_t, float32_t)
+
+/*
+** test_vcvtms_s64_f32:
+**     fcvtms  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvtms_s64_f32, int64_t, float32_t)
+
+/*
+** test_vcvtms_u64_f32:
+**     fcvtmu  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvtms_u64_f32, uint64_t, float32_t)
+
+/*
+** test_vcvtps_s32_f32:
+**     fcvtps  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvtps_s32_f32, int32_t, float32_t)
+
+/*
+** test_vcvtps_u32_f32:
+**     fcvtpu  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvtps_u32_f32, uint32_t, float32_t)
+
+/*
+** test_vcvtps_s64_f32:
+**     fcvtps  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvtps_s64_f32, int64_t, float32_t)
+
+/*
+** test_vcvtps_u64_f32:
+**     fcvtpu  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvtps_u64_f32, uint64_t, float32_t)
+
+/*
+** test_vcvtns_s32_f32:
+**     fcvtns  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvtns_s32_f32, int32_t, float32_t)
+
+/*
+** test_vcvtns_u32_f32:
+**     fcvtnu  w0, s0
+**     ret
+*/
+TEST_UNARY (vcvtns_u32_f32, uint32_t, float32_t)
+
+/*
+** test_vcvtns_s64_f32:
+**     fcvtns  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvtns_s64_f32, int64_t, float32_t)
+
+/*
+** test_vcvtns_u64_f32:
+**     fcvtnu  x0, s0
+**     ret
+*/
+TEST_UNARY (vcvtns_u64_f32, uint64_t, float32_t)
-- 
2.34.1

Reply via email to