[llvm-commits] [llvm-gcc-4.2] r77283 - in /llvm-gcc-4.2/trunk/gcc/config/arm: arm.c arm_neon.h llvm-arm.cpp neon.ml

Bob Wilson bob.wilson at apple.com
Mon Jul 27 17:32:29 PDT 2009


Author: bwilson
Date: Mon Jul 27 19:32:28 2009
New Revision: 77283

URL: http://llvm.org/viewvc/llvm-project?rev=77283&view=rev
Log:
Change llvm-gcc to use new builtin struct types for ARM Neon builtins that
operate on multiple adjacent vectors.  gcc had been treating these arrays
of vectors as wide integers, and subsequent references to the individual
vectors were optimized by llvm to lshr/trunc/bitcast operations on the wide
integer values.  With this change, llvm can optimize the vector references
to simple extractvalue operations, which get nicely folded away when
building SelectionDAGs for codegen.

Modified:
    llvm-gcc-4.2/trunk/gcc/config/arm/arm.c
    llvm-gcc-4.2/trunk/gcc/config/arm/arm_neon.h
    llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp
    llvm-gcc-4.2/trunk/gcc/config/arm/neon.ml

Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm.c
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm.c?rev=77283&r1=77282&r2=77283&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/arm.c (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/arm.c Mon Jul 27 19:32:28 2009
@@ -16608,6 +16608,41 @@
 }
 /* APPLE LOCAL end 7083296 Build without warnings.  */
 
+/* LLVM LOCAL begin multi-vector types */
+#ifdef ENABLE_LLVM
+/* Create a new builtin struct type containing NUMVECS fields (where NUMVECS
+   is in the range from 2 to 4) of type VECTYPE.  */
+static tree
+build_multivec_type (tree vectype, unsigned numvecs, const char *tag)
+{
+  tree record, name, fields, fld;
+  char fldname[5];
+  unsigned n;
+
+  record = (*lang_hooks.types.make_type) (RECORD_TYPE);
+  name = build_decl (TYPE_DECL, get_identifier (tag), record);
+  TYPE_NAME (record) = name;
+
+  gcc_assert (numvecs >= 2 && numvecs <= 4);
+  fields = NULL;
+  for (n = 0; n < numvecs; ++n)
+    {
+      /* The fields are created in reverse order because it is easier to
+         chain them together that way.  Number them accordingly.  */
+      sprintf (fldname, "val%u", numvecs - n - 1);
+      fld = build_decl (FIELD_DECL, get_identifier (fldname), vectype);
+      DECL_FIELD_CONTEXT (fld) = record;
+      TREE_CHAIN (fld) = fields;
+      fields = fld;
+    }
+
+  TYPE_FIELDS (record) = fields;
+  layout_type (record);
+  return record;
+}
+#endif /* ENABLE_LLVM */
+/* LLVM LOCAL end multi-vector types */
+
 static void
 arm_init_neon_builtins (void)
 {
@@ -16617,11 +16652,19 @@
 #define qhi_TN neon_polyHI_type_node
 #define si_TN neon_intSI_type_node
 #define di_TN neon_intDI_type_node
+/* LLVM LOCAL begin multi-vector types */
+#ifdef ENABLE_LLVM
+#define ti_TN V8QI2_type_node
+#define ei_TN V8QI3_type_node
+#define oi_TN V8QI4_type_node
+#else
 #define ti_TN intTI_type_node
 #define ei_TN intEI_type_node
 #define oi_TN intOI_type_node
 #define ci_TN intCI_type_node
 #define xi_TN intXI_type_node
+#endif
+/* LLVM LOCAL end multi-vector types */
 
 #define sf_TN neon_float_type_node
 
@@ -16731,12 +16774,99 @@
   tree intUSI_type_node = make_unsigned_type (GET_MODE_PRECISION (SImode));
   tree intUDI_type_node = make_unsigned_type (GET_MODE_PRECISION (DImode));
 
+  /* LLVM LOCAL begin multi-vector types */
+#ifdef ENABLE_LLVM
+  tree V8QI2_type_node = build_multivec_type (V8QI_type_node, 2,
+                                              "__builtin_neon_v8qi2");
+  tree V4HI2_type_node = build_multivec_type (V4HI_type_node, 2,
+                                              "__builtin_neon_v4hi2");
+  tree V2SI2_type_node = build_multivec_type (V2SI_type_node, 2,
+                                              "__builtin_neon_v2si2");
+  tree DI2_type_node   = build_multivec_type (neon_intDI_type_node, 2,
+                                              "__builtin_neon_di2");
+  tree V2SF2_type_node = build_multivec_type (V2SF_type_node, 2,
+                                              "__builtin_neon_v2sf2");
+  tree V8QI3_type_node = build_multivec_type (V8QI_type_node, 3,
+                                              "__builtin_neon_v8qi3");
+  tree V4HI3_type_node = build_multivec_type (V4HI_type_node, 3,
+                                              "__builtin_neon_v4hi3");
+  tree V2SI3_type_node = build_multivec_type (V2SI_type_node, 3,
+                                              "__builtin_neon_v2si3");
+  tree DI3_type_node   = build_multivec_type (neon_intDI_type_node, 3,
+                                              "__builtin_neon_di3");
+  tree V2SF3_type_node = build_multivec_type (V2SF_type_node, 3,
+                                              "__builtin_neon_v2sf3");
+  tree V8QI4_type_node = build_multivec_type (V8QI_type_node, 4,
+                                              "__builtin_neon_v8qi4");
+  tree V4HI4_type_node = build_multivec_type (V4HI_type_node, 4,
+                                              "__builtin_neon_v4hi4");
+  tree V2SI4_type_node = build_multivec_type (V2SI_type_node, 4,
+                                              "__builtin_neon_v2si4");
+  tree DI4_type_node   = build_multivec_type (neon_intDI_type_node, 4,
+                                              "__builtin_neon_di4");
+  tree V2SF4_type_node = build_multivec_type (V2SF_type_node, 4,
+                                              "__builtin_neon_v2sf4");
+  tree V16QI2_type_node = build_multivec_type (V16QI_type_node, 2,
+                                               "__builtin_neon_v16qi2");
+  tree V8HI2_type_node = build_multivec_type (V8HI_type_node, 2,
+                                              "__builtin_neon_v8hi2");
+  tree V4SI2_type_node = build_multivec_type (V4SI_type_node, 2,
+                                              "__builtin_neon_v4si2");
+  tree V4SF2_type_node = build_multivec_type (V4SF_type_node, 2,
+                                              "__builtin_neon_v4sf2");
+  tree V16QI3_type_node = build_multivec_type (V16QI_type_node, 3,
+                                               "__builtin_neon_v16qi3");
+  tree V8HI3_type_node = build_multivec_type (V8HI_type_node, 3,
+                                              "__builtin_neon_v8hi3");
+  tree V4SI3_type_node = build_multivec_type (V4SI_type_node, 3,
+                                              "__builtin_neon_v4si3");
+  tree V4SF3_type_node = build_multivec_type (V4SF_type_node, 3,
+                                              "__builtin_neon_v4sf3");
+  tree V16QI4_type_node = build_multivec_type (V16QI_type_node, 4,
+                                               "__builtin_neon_v16qi4");
+  tree V8HI4_type_node = build_multivec_type (V8HI_type_node, 4,
+                                              "__builtin_neon_v8hi4");
+  tree V4SI4_type_node = build_multivec_type (V4SI_type_node, 4,
+                                              "__builtin_neon_v4si4");
+  tree V4SF4_type_node = build_multivec_type (V4SF_type_node, 4,
+                                              "__builtin_neon_v4sf4");
+#else /* ENABLE_LLVM */
   /* Opaque integer types for structures of vectors.  */
   tree intEI_type_node = make_signed_type (GET_MODE_PRECISION (EImode));
   tree intOI_type_node = make_signed_type (GET_MODE_PRECISION (OImode));
   tree intCI_type_node = make_signed_type (GET_MODE_PRECISION (CImode));
   tree intXI_type_node = make_signed_type (GET_MODE_PRECISION (XImode));
 
+  tree V8QI2_type_node = intTI_type_node;
+  tree V4HI2_type_node = intTI_type_node;
+  tree V2SI2_type_node = intTI_type_node;
+  tree DI2_type_node   = intTI_type_node;
+  tree V2SF2_type_node = intTI_type_node;
+  tree V8QI3_type_node = intEI_type_node;
+  tree V4HI3_type_node = intEI_type_node;
+  tree V2SI3_type_node = intEI_type_node;
+  tree DI3_type_node   = intEI_type_node;
+  tree V2SF3_type_node = intEI_type_node;
+  tree V8QI4_type_node = intOI_type_node;
+  tree V4HI4_type_node = intOI_type_node;
+  tree V2SI4_type_node = intOI_type_node;
+  tree DI4_type_node   = intOI_type_node;
+  tree V2SF4_type_node = intOI_type_node;
+  tree V16QI2_type_node = intOI_type_node;
+  tree V8HI2_type_node = intOI_type_node;
+  tree V4SI2_type_node = intOI_type_node;
+  tree V4SF2_type_node = intOI_type_node;
+  tree V16QI3_type_node = intCI_type_node;
+  tree V8HI3_type_node = intCI_type_node;
+  tree V4SI3_type_node = intCI_type_node;
+  tree V4SF3_type_node = intCI_type_node;
+  tree V16QI4_type_node = intXI_type_node;
+  tree V8HI4_type_node = intXI_type_node;
+  tree V4SI4_type_node = intXI_type_node;
+  tree V4SF4_type_node = intXI_type_node;
+#endif /* ENABLE_LLVM */
+  /* LLVM LOCAL end multi-vector types */
+
   /* Pointers to vector types.  */
   tree V8QI_pointer_node = build_pointer_type (V8QI_type_node);
   tree V4HI_pointer_node = build_pointer_type (V4HI_type_node);
@@ -17159,279 +17289,331 @@
 			      V4SF_type_node, intSI_type_node, NULL);
 
   /* Load size-2 structure operations, double-word.  */
+  /* LLVM LOCAL begin multi-vector types */
+  /* LLVM: To minimize changes to the GCC source, the original wide-integer
+     mode abbrevations (ti, ei, oi, ci, and xi) have not been replaced by
+     vector-type-specific names (e.g., v8qi2, etc.) in the following
+     types.  OI-mode values, however, are type-ambiguous: they can be
+     structs of 4 double-register vectors or 2 quad-register vectors.  In
+     places where this ambiguity exists, "d" and "q" suffixes are added to
+     the "oi" name, i.e., "oid" and "oiq", to distinguish the double- and
+     quad-register types.  */
   tree ti_ftype_const_qi_pointer =
-    build_function_type_list (intTI_type_node, const_intQI_pointer_node, NULL);
+    build_function_type_list (V8QI2_type_node, const_intQI_pointer_node, NULL);
   tree ti_ftype_const_hi_pointer =
-    build_function_type_list (intTI_type_node, const_intHI_pointer_node, NULL);
+    build_function_type_list (V4HI2_type_node, const_intHI_pointer_node, NULL);
   tree ti_ftype_const_si_pointer =
-    build_function_type_list (intTI_type_node, const_intSI_pointer_node, NULL);
+    build_function_type_list (V2SI2_type_node, const_intSI_pointer_node, NULL);
   tree ti_ftype_const_di_pointer =
-    build_function_type_list (intTI_type_node, const_intDI_pointer_node, NULL);
+    build_function_type_list (DI2_type_node, const_intDI_pointer_node, NULL);
   tree ti_ftype_const_sf_pointer =
-    build_function_type_list (intTI_type_node, const_float_pointer_node, NULL);
+    build_function_type_list (V2SF2_type_node, const_float_pointer_node, NULL);
 
   /* Load size-2 structure operations, quad-word; also load size-4,
      double-word.  */
-  tree oi_ftype_const_qi_pointer =
-    build_function_type_list (intOI_type_node, const_intQI_pointer_node, NULL);
-  tree oi_ftype_const_hi_pointer =
-    build_function_type_list (intOI_type_node, const_intHI_pointer_node, NULL);
-  tree oi_ftype_const_si_pointer =
-    build_function_type_list (intOI_type_node, const_intSI_pointer_node, NULL);
-  tree oi_ftype_const_sf_pointer =
-    build_function_type_list (intOI_type_node, const_float_pointer_node, NULL);
+  tree oiq_ftype_const_qi_pointer =
+    build_function_type_list (V16QI2_type_node, const_intQI_pointer_node, NULL);
+  tree oiq_ftype_const_hi_pointer =
+    build_function_type_list (V8HI2_type_node, const_intHI_pointer_node, NULL);
+  tree oiq_ftype_const_si_pointer =
+    build_function_type_list (V4SI2_type_node, const_intSI_pointer_node, NULL);
+  tree oiq_ftype_const_sf_pointer =
+    build_function_type_list (V4SF2_type_node, const_float_pointer_node, NULL);
+
+  tree oid_ftype_const_qi_pointer =
+    build_function_type_list (V8QI4_type_node, const_intQI_pointer_node, NULL);
+  tree oid_ftype_const_hi_pointer =
+    build_function_type_list (V4HI4_type_node, const_intHI_pointer_node, NULL);
+  tree oid_ftype_const_si_pointer =
+    build_function_type_list (V2SI4_type_node, const_intSI_pointer_node, NULL);
+  tree oid_ftype_const_sf_pointer =
+    build_function_type_list (V2SF4_type_node, const_float_pointer_node, NULL);
 
   /* Load lane size-2 structure operations, double-word.  */
   tree ti_ftype_const_qi_pointer_ti_si =
-    build_function_type_list (intTI_type_node, const_intQI_pointer_node,
-			      intTI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V8QI2_type_node, const_intQI_pointer_node,
+			      V8QI2_type_node, intSI_type_node, NULL);
   tree ti_ftype_const_hi_pointer_ti_si =
-    build_function_type_list (intTI_type_node, const_intHI_pointer_node,
-			      intTI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V4HI2_type_node, const_intHI_pointer_node,
+			      V4HI2_type_node, intSI_type_node, NULL);
   tree ti_ftype_const_si_pointer_ti_si =
-    build_function_type_list (intTI_type_node, const_intSI_pointer_node,
-			      intTI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V2SI2_type_node, const_intSI_pointer_node,
+			      V2SI2_type_node, intSI_type_node, NULL);
   tree ti_ftype_const_sf_pointer_ti_si =
-    build_function_type_list (intTI_type_node, const_float_pointer_node,
-			      intTI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V2SF2_type_node, const_float_pointer_node,
+			      V2SF2_type_node, intSI_type_node, NULL);
 
   /* Load lane size-2 structure operations, quad-word; also load lane size-4,
      double-word.  */
-  tree oi_ftype_const_hi_pointer_oi_si =
-    build_function_type_list (intOI_type_node, const_intHI_pointer_node,
-			      intOI_type_node, intSI_type_node, NULL);
-  tree oi_ftype_const_si_pointer_oi_si =
-    build_function_type_list (intOI_type_node, const_intSI_pointer_node,
-			      intOI_type_node, intSI_type_node, NULL);
-  tree oi_ftype_const_sf_pointer_oi_si =
-    build_function_type_list (intOI_type_node, const_float_pointer_node,
-			      intOI_type_node, intSI_type_node, NULL);
+  tree oiq_ftype_const_hi_pointer_oiq_si =
+    build_function_type_list (V8HI2_type_node, const_intHI_pointer_node,
+			      V8HI2_type_node, intSI_type_node, NULL);
+  tree oiq_ftype_const_si_pointer_oiq_si =
+    build_function_type_list (V4SI2_type_node, const_intSI_pointer_node,
+			      V4SI2_type_node, intSI_type_node, NULL);
+  tree oiq_ftype_const_sf_pointer_oiq_si =
+    build_function_type_list (V4SF2_type_node, const_float_pointer_node,
+			      V4SF2_type_node, intSI_type_node, NULL);
+
+  tree oid_ftype_const_hi_pointer_oid_si =
+    build_function_type_list (V4HI4_type_node, const_intHI_pointer_node,
+			      V4HI4_type_node, intSI_type_node, NULL);
+  tree oid_ftype_const_si_pointer_oid_si =
+    build_function_type_list (V2SI4_type_node, const_intSI_pointer_node,
+			      V2SI4_type_node, intSI_type_node, NULL);
+  tree oid_ftype_const_sf_pointer_oid_si =
+    build_function_type_list (V2SF4_type_node, const_float_pointer_node,
+			      V2SF4_type_node, intSI_type_node, NULL);
 
   /* Store size-2 structure operations, double-word.  */
   tree void_ftype_qi_pointer_ti =
     build_function_type_list (void_type_node, intQI_pointer_node,
-			      intTI_type_node, NULL);
+			      V8QI2_type_node, NULL);
   tree void_ftype_hi_pointer_ti =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intTI_type_node, NULL);
+			      V4HI2_type_node, NULL);
   tree void_ftype_si_pointer_ti =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intTI_type_node, NULL);
+			      V2SI2_type_node, NULL);
   tree void_ftype_di_pointer_ti =
     build_function_type_list (void_type_node, intDI_pointer_node,
-			      intTI_type_node, NULL);
+			      DI2_type_node, NULL);
   tree void_ftype_sf_pointer_ti =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intTI_type_node, NULL);
+			      V2SF2_type_node, NULL);
 
   /* Store size-2 structure operations, quad-word; also store size-4,
      double-word.  */
-  tree void_ftype_qi_pointer_oi =
+  tree void_ftype_qi_pointer_oiq =
     build_function_type_list (void_type_node, intQI_pointer_node,
-			      intOI_type_node, NULL);
-  tree void_ftype_hi_pointer_oi =
+			      V16QI2_type_node, NULL);
+  tree void_ftype_hi_pointer_oiq =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intOI_type_node, NULL);
-  tree void_ftype_si_pointer_oi =
+			      V8HI2_type_node, NULL);
+  tree void_ftype_si_pointer_oiq =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intOI_type_node, NULL);
-  tree void_ftype_sf_pointer_oi =
+			      V4SI2_type_node, NULL);
+  tree void_ftype_sf_pointer_oiq =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intOI_type_node, NULL);
+			      V4SF2_type_node, NULL);
+
+  tree void_ftype_qi_pointer_oid =
+    build_function_type_list (void_type_node, intQI_pointer_node,
+			      V8QI4_type_node, NULL);
+  tree void_ftype_hi_pointer_oid =
+    build_function_type_list (void_type_node, intHI_pointer_node,
+			      V4HI4_type_node, NULL);
+  tree void_ftype_si_pointer_oid =
+    build_function_type_list (void_type_node, intSI_pointer_node,
+			      V2SI4_type_node, NULL);
+  tree void_ftype_sf_pointer_oid =
+    build_function_type_list (void_type_node, float_pointer_node,
+			      V2SF4_type_node, NULL);
 
   /* Store lane size-2 structure operations, double-word.  */
   tree void_ftype_qi_pointer_ti_si =
     build_function_type_list (void_type_node, intQI_pointer_node,
-			      intTI_type_node, intSI_type_node, NULL);
+			      V8QI2_type_node, intSI_type_node, NULL);
   tree void_ftype_hi_pointer_ti_si =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intTI_type_node, intSI_type_node, NULL);
+			      V4HI2_type_node, intSI_type_node, NULL);
   tree void_ftype_si_pointer_ti_si =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intTI_type_node, intSI_type_node, NULL);
+			      V2SI2_type_node, intSI_type_node, NULL);
   tree void_ftype_sf_pointer_ti_si =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intTI_type_node, intSI_type_node, NULL);
+			      V2SF2_type_node, intSI_type_node, NULL);
 
   /* Store lane size-2 structure operations, quad-word; also store
      lane size-4, double-word.  */
-  tree void_ftype_hi_pointer_oi_si =
+  tree void_ftype_hi_pointer_oiq_si =
+    build_function_type_list (void_type_node, intHI_pointer_node,
+			      V8HI2_type_node, intSI_type_node, NULL);
+  tree void_ftype_si_pointer_oiq_si =
+    build_function_type_list (void_type_node, intSI_pointer_node,
+			      V4SI2_type_node, intSI_type_node, NULL);
+  tree void_ftype_sf_pointer_oiq_si =
+    build_function_type_list (void_type_node, float_pointer_node,
+			      V4SF2_type_node, intSI_type_node, NULL);
+
+  tree void_ftype_hi_pointer_oid_si =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intOI_type_node, intSI_type_node, NULL);
-  tree void_ftype_si_pointer_oi_si =
+			      V4HI4_type_node, intSI_type_node, NULL);
+  tree void_ftype_si_pointer_oid_si =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intOI_type_node, intSI_type_node, NULL);
-  tree void_ftype_sf_pointer_oi_si =
+			      V2SI4_type_node, intSI_type_node, NULL);
+  tree void_ftype_sf_pointer_oid_si =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intOI_type_node, intSI_type_node, NULL);
+			      V2SF4_type_node, intSI_type_node, NULL);
 
   /* Load size-3 structure operations, double-word.  */
   tree ei_ftype_const_qi_pointer =
-    build_function_type_list (intEI_type_node, const_intQI_pointer_node, NULL);
+    build_function_type_list (V8QI3_type_node, const_intQI_pointer_node, NULL);
   tree ei_ftype_const_hi_pointer =
-    build_function_type_list (intEI_type_node, const_intHI_pointer_node, NULL);
+    build_function_type_list (V4HI3_type_node, const_intHI_pointer_node, NULL);
   tree ei_ftype_const_si_pointer =
-    build_function_type_list (intEI_type_node, const_intSI_pointer_node, NULL);
+    build_function_type_list (V2SI3_type_node, const_intSI_pointer_node, NULL);
   tree ei_ftype_const_di_pointer =
-    build_function_type_list (intEI_type_node, const_intDI_pointer_node, NULL);
+    build_function_type_list (DI3_type_node, const_intDI_pointer_node, NULL);
   tree ei_ftype_const_sf_pointer =
-    build_function_type_list (intEI_type_node, const_float_pointer_node, NULL);
+    build_function_type_list (V2SF3_type_node, const_float_pointer_node, NULL);
 
   /* Load size-3 structure operations, quad-word.  */
   tree ci_ftype_const_qi_pointer =
-    build_function_type_list (intCI_type_node, const_intQI_pointer_node, NULL);
+    build_function_type_list (V16QI3_type_node, const_intQI_pointer_node, NULL);
   tree ci_ftype_const_hi_pointer =
-    build_function_type_list (intCI_type_node, const_intHI_pointer_node, NULL);
+    build_function_type_list (V8HI3_type_node, const_intHI_pointer_node, NULL);
   tree ci_ftype_const_si_pointer =
-    build_function_type_list (intCI_type_node, const_intSI_pointer_node, NULL);
+    build_function_type_list (V4SI3_type_node, const_intSI_pointer_node, NULL);
   tree ci_ftype_const_sf_pointer =
-    build_function_type_list (intCI_type_node, const_float_pointer_node, NULL);
+    build_function_type_list (V4SF3_type_node, const_float_pointer_node, NULL);
 
   /* Load lane size-3 structure operations, double-word.  */
   tree ei_ftype_const_qi_pointer_ei_si =
-    build_function_type_list (intEI_type_node, const_intQI_pointer_node,
-			      intEI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V8QI3_type_node, const_intQI_pointer_node,
+			      V8QI3_type_node, intSI_type_node, NULL);
   tree ei_ftype_const_hi_pointer_ei_si =
-    build_function_type_list (intEI_type_node, const_intHI_pointer_node,
-			      intEI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V4HI3_type_node, const_intHI_pointer_node,
+			      V4HI3_type_node, intSI_type_node, NULL);
   tree ei_ftype_const_si_pointer_ei_si =
-    build_function_type_list (intEI_type_node, const_intSI_pointer_node,
-			      intEI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V2SI3_type_node, const_intSI_pointer_node,
+			      V2SI3_type_node, intSI_type_node, NULL);
   tree ei_ftype_const_sf_pointer_ei_si =
-    build_function_type_list (intEI_type_node, const_float_pointer_node,
-			      intEI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V2SF3_type_node, const_float_pointer_node,
+			      V2SF3_type_node, intSI_type_node, NULL);
 
   /* Load lane size-3 structure operations, quad-word.  */
   tree ci_ftype_const_hi_pointer_ci_si =
-    build_function_type_list (intCI_type_node, const_intHI_pointer_node,
-			      intCI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V8HI3_type_node, const_intHI_pointer_node,
+			      V8HI3_type_node, intSI_type_node, NULL);
   tree ci_ftype_const_si_pointer_ci_si =
-    build_function_type_list (intCI_type_node, const_intSI_pointer_node,
-			      intCI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V4SI3_type_node, const_intSI_pointer_node,
+			      V4SI3_type_node, intSI_type_node, NULL);
   tree ci_ftype_const_sf_pointer_ci_si =
-    build_function_type_list (intCI_type_node, const_float_pointer_node,
-			      intCI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V4SF3_type_node, const_float_pointer_node,
+			      V4SF3_type_node, intSI_type_node, NULL);
 
   /* Store size-3 structure operations, double-word.  */
   tree void_ftype_qi_pointer_ei =
     build_function_type_list (void_type_node, intQI_pointer_node,
-			      intEI_type_node, NULL);
+			      V8QI3_type_node, NULL);
   tree void_ftype_hi_pointer_ei =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intEI_type_node, NULL);
+			      V4HI3_type_node, NULL);
   tree void_ftype_si_pointer_ei =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intEI_type_node, NULL);
+			      V2SI3_type_node, NULL);
   tree void_ftype_di_pointer_ei =
     build_function_type_list (void_type_node, intDI_pointer_node,
-			      intEI_type_node, NULL);
+			      DI3_type_node, NULL);
   tree void_ftype_sf_pointer_ei =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intEI_type_node, NULL);
+			      V2SF3_type_node, NULL);
 
   /* Store size-3 structure operations, quad-word.  */
   tree void_ftype_qi_pointer_ci =
     build_function_type_list (void_type_node, intQI_pointer_node,
-			      intCI_type_node, NULL);
+			      V16QI3_type_node, NULL);
   tree void_ftype_hi_pointer_ci =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intCI_type_node, NULL);
+			      V8HI3_type_node, NULL);
   tree void_ftype_si_pointer_ci =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intCI_type_node, NULL);
+			      V4SI3_type_node, NULL);
   tree void_ftype_sf_pointer_ci =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intCI_type_node, NULL);
+			      V4SF3_type_node, NULL);
 
   /* Store lane size-3 structure operations, double-word.  */
   tree void_ftype_qi_pointer_ei_si =
     build_function_type_list (void_type_node, intQI_pointer_node,
-			      intEI_type_node, intSI_type_node, NULL);
+			      V8QI3_type_node, intSI_type_node, NULL);
   tree void_ftype_hi_pointer_ei_si =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intEI_type_node, intSI_type_node, NULL);
+			      V4HI3_type_node, intSI_type_node, NULL);
   tree void_ftype_si_pointer_ei_si =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intEI_type_node, intSI_type_node, NULL);
+			      V2SI3_type_node, intSI_type_node, NULL);
   tree void_ftype_sf_pointer_ei_si =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intEI_type_node, intSI_type_node, NULL);
+			      V2SF3_type_node, intSI_type_node, NULL);
 
   /* Store lane size-3 structure operations, quad-word.  */
   tree void_ftype_hi_pointer_ci_si =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intCI_type_node, intSI_type_node, NULL);
+			      V8HI3_type_node, intSI_type_node, NULL);
   tree void_ftype_si_pointer_ci_si =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intCI_type_node, intSI_type_node, NULL);
+			      V4SI3_type_node, intSI_type_node, NULL);
   tree void_ftype_sf_pointer_ci_si =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intCI_type_node, intSI_type_node, NULL);
+			      V4SF3_type_node, intSI_type_node, NULL);
 
   /* Load size-4 structure operations, double-word.  */
   tree oi_ftype_const_di_pointer =
-    build_function_type_list (intOI_type_node, const_intDI_pointer_node, NULL);
+    build_function_type_list (DI4_type_node, const_intDI_pointer_node, NULL);
 
   /* Load size-4 structure operations, quad-word.  */
   tree xi_ftype_const_qi_pointer =
-    build_function_type_list (intXI_type_node, const_intQI_pointer_node, NULL);
+    build_function_type_list (V16QI4_type_node, const_intQI_pointer_node, NULL);
   tree xi_ftype_const_hi_pointer =
-    build_function_type_list (intXI_type_node, const_intHI_pointer_node, NULL);
+    build_function_type_list (V8HI4_type_node, const_intHI_pointer_node, NULL);
   tree xi_ftype_const_si_pointer =
-    build_function_type_list (intXI_type_node, const_intSI_pointer_node, NULL);
+    build_function_type_list (V4SI4_type_node, const_intSI_pointer_node, NULL);
   tree xi_ftype_const_sf_pointer =
-    build_function_type_list (intXI_type_node, const_float_pointer_node, NULL);
+    build_function_type_list (V4SF4_type_node, const_float_pointer_node, NULL);
 
   /* Load lane size-4 structure operations, double-word.  */
   tree oi_ftype_const_qi_pointer_oi_si =
-    build_function_type_list (intOI_type_node, const_intQI_pointer_node,
-			      intOI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V8QI4_type_node, const_intQI_pointer_node,
+			      V8QI4_type_node, intSI_type_node, NULL);
 
   /* Load lane size-4 structure operations, quad-word.  */
   tree xi_ftype_const_hi_pointer_xi_si =
-    build_function_type_list (intXI_type_node, const_intHI_pointer_node,
-			      intXI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V8HI4_type_node, const_intHI_pointer_node,
+			      V8HI4_type_node, intSI_type_node, NULL);
   tree xi_ftype_const_si_pointer_xi_si =
-    build_function_type_list (intXI_type_node, const_intSI_pointer_node,
-			      intXI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V4SI4_type_node, const_intSI_pointer_node,
+			      V4SI4_type_node, intSI_type_node, NULL);
   tree xi_ftype_const_sf_pointer_xi_si =
-    build_function_type_list (intXI_type_node, const_float_pointer_node,
-			      intXI_type_node, intSI_type_node, NULL);
+    build_function_type_list (V4SF4_type_node, const_float_pointer_node,
+			      V4SF4_type_node, intSI_type_node, NULL);
 
   /* Store size-4 structure operations, double-word.  */
   tree void_ftype_di_pointer_oi =
     build_function_type_list (void_type_node, intDI_pointer_node,
-			      intOI_type_node, NULL);
+			      DI4_type_node, NULL);
 
   /* Store size-4 structure operations, quad-word.  */
   tree void_ftype_qi_pointer_xi =
     build_function_type_list (void_type_node, intQI_pointer_node,
-			      intXI_type_node, NULL);
+			      V16QI4_type_node, NULL);
   tree void_ftype_hi_pointer_xi =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intXI_type_node, NULL);
+			      V8HI4_type_node, NULL);
   tree void_ftype_si_pointer_xi =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intXI_type_node, NULL);
+			      V4SI4_type_node, NULL);
   tree void_ftype_sf_pointer_xi =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intXI_type_node, NULL);
+			      V4SF4_type_node, NULL);
 
   /* Store lane size-4 structure operations, double-word.  */
   tree void_ftype_qi_pointer_oi_si =
     build_function_type_list (void_type_node, intQI_pointer_node,
-			      intOI_type_node, intSI_type_node, NULL);
+			      V8QI4_type_node, intSI_type_node, NULL);
 
   /* Store lane size-4 structure operations, quad-word.  */
   tree void_ftype_hi_pointer_xi_si =
     build_function_type_list (void_type_node, intHI_pointer_node,
-			      intXI_type_node, intSI_type_node, NULL);
+			      V8HI4_type_node, intSI_type_node, NULL);
   tree void_ftype_si_pointer_xi_si =
     build_function_type_list (void_type_node, intSI_pointer_node,
-			      intXI_type_node, intSI_type_node, NULL);
+			      V4SI4_type_node, intSI_type_node, NULL);
   tree void_ftype_sf_pointer_xi_si =
     build_function_type_list (void_type_node, float_pointer_node,
-			      intXI_type_node, intSI_type_node, NULL);
+			      V4SF4_type_node, intSI_type_node, NULL);
+  /* LLVM LOCAL end multi-vector types */
 
   tree reinterp_ftype_dreg[5][5];
   tree reinterp_ftype_qreg[5][5];
@@ -17466,16 +17648,62 @@
   (*lang_hooks.types.register_builtin_type) (intUDI_type_node,
 					     "__builtin_neon_udi");
 
-  (*lang_hooks.types.register_builtin_type) (intTI_type_node,
-					     "__builtin_neon_ti");
-  (*lang_hooks.types.register_builtin_type) (intEI_type_node,
-					     "__builtin_neon_ei");
-  (*lang_hooks.types.register_builtin_type) (intOI_type_node,
-					     "__builtin_neon_oi");
-  (*lang_hooks.types.register_builtin_type) (intCI_type_node,
-					     "__builtin_neon_ci");
-  (*lang_hooks.types.register_builtin_type) (intXI_type_node,
-					     "__builtin_neon_xi");
+  /* LLVM LOCAL begin multi-vector types */
+  (*lang_hooks.types.register_builtin_type) (V8QI2_type_node,
+					     "__builtin_neon_v8qi2");
+  (*lang_hooks.types.register_builtin_type) (V4HI2_type_node,
+					     "__builtin_neon_v4hi2");
+  (*lang_hooks.types.register_builtin_type) (V2SI2_type_node,
+					     "__builtin_neon_v2si2");
+  (*lang_hooks.types.register_builtin_type) (DI2_type_node,
+					     "__builtin_neon_di2");
+  (*lang_hooks.types.register_builtin_type) (V2SF2_type_node,
+					     "__builtin_neon_v2sf2");
+  (*lang_hooks.types.register_builtin_type) (V8QI3_type_node,
+					     "__builtin_neon_v8qi3");
+  (*lang_hooks.types.register_builtin_type) (V4HI3_type_node,
+					     "__builtin_neon_v4hi3");
+  (*lang_hooks.types.register_builtin_type) (V2SI3_type_node,
+					     "__builtin_neon_v2si3");
+  (*lang_hooks.types.register_builtin_type) (DI3_type_node,
+					     "__builtin_neon_di3");
+  (*lang_hooks.types.register_builtin_type) (V2SF3_type_node,
+					     "__builtin_neon_v2sf3");
+  (*lang_hooks.types.register_builtin_type) (V8QI4_type_node,
+					     "__builtin_neon_v8qi4");
+  (*lang_hooks.types.register_builtin_type) (V4HI4_type_node,
+					     "__builtin_neon_v4hi4");
+  (*lang_hooks.types.register_builtin_type) (V2SI4_type_node,
+					     "__builtin_neon_v2si4");
+  (*lang_hooks.types.register_builtin_type) (DI4_type_node,
+					     "__builtin_neon_di4");
+  (*lang_hooks.types.register_builtin_type) (V2SF4_type_node,
+					     "__builtin_neon_v2sf4");
+  (*lang_hooks.types.register_builtin_type) (V16QI2_type_node,
+					     "__builtin_neon_v16qi2");
+  (*lang_hooks.types.register_builtin_type) (V8HI2_type_node,
+					     "__builtin_neon_v8hi2");
+  (*lang_hooks.types.register_builtin_type) (V4SI2_type_node,
+					     "__builtin_neon_v4si2");
+  (*lang_hooks.types.register_builtin_type) (V4SF2_type_node,
+					     "__builtin_neon_v4sf2");
+  (*lang_hooks.types.register_builtin_type) (V16QI3_type_node,
+					     "__builtin_neon_v16qi3");
+  (*lang_hooks.types.register_builtin_type) (V8HI3_type_node,
+					     "__builtin_neon_v8hi3");
+  (*lang_hooks.types.register_builtin_type) (V4SI3_type_node,
+					     "__builtin_neon_v4si3");
+  (*lang_hooks.types.register_builtin_type) (V4SF3_type_node,
+					     "__builtin_neon_v4sf3");
+  (*lang_hooks.types.register_builtin_type) (V16QI4_type_node,
+					     "__builtin_neon_v16qi4");
+  (*lang_hooks.types.register_builtin_type) (V8HI4_type_node,
+					     "__builtin_neon_v8hi4");
+  (*lang_hooks.types.register_builtin_type) (V4SI4_type_node,
+					     "__builtin_neon_v4si4");
+  (*lang_hooks.types.register_builtin_type) (V4SF4_type_node,
+					     "__builtin_neon_v4sf4");
+  /* LLVM LOCAL end multi-vector types */
   /* APPLE LOCAL end 7083296 Build without warnings.  */
 
   dreg_types[0] = V8QI_type_node;
@@ -18663,15 +18891,17 @@
 		  switch (1 << j)
 		    {
 		      /* vld2q cases.  */
-		    case T_V16QI: ftype = oi_ftype_const_qi_pointer; break;
-		    case T_V8HI: ftype = oi_ftype_const_hi_pointer; break;
-		    case T_V4SI: ftype = oi_ftype_const_si_pointer; break;
-		    case T_V4SF: ftype = oi_ftype_const_sf_pointer; break;
+                      /* LLVM LOCAL begin multi-vector types */
+		    case T_V16QI: ftype = oiq_ftype_const_qi_pointer; break;
+		    case T_V8HI: ftype = oiq_ftype_const_hi_pointer; break;
+		    case T_V4SI: ftype = oiq_ftype_const_si_pointer; break;
+		    case T_V4SF: ftype = oiq_ftype_const_sf_pointer; break;
 		      /* vld4 cases.  */
-		    case T_V8QI: ftype = oi_ftype_const_qi_pointer; break;
-		    case T_V4HI: ftype = oi_ftype_const_hi_pointer; break;
-		    case T_V2SI: ftype = oi_ftype_const_si_pointer; break;
-		    case T_V2SF: ftype = oi_ftype_const_sf_pointer; break;
+		    case T_V8QI: ftype = oid_ftype_const_qi_pointer; break;
+		    case T_V4HI: ftype = oid_ftype_const_hi_pointer; break;
+		    case T_V2SI: ftype = oid_ftype_const_si_pointer; break;
+		    case T_V2SF: ftype = oid_ftype_const_sf_pointer; break;
+                      /* LLVM LOCAL end multi-vector types */
 		    case T_DI: ftype = oi_ftype_const_di_pointer; break;
 		    default: gcc_unreachable ();
 		    }
@@ -18756,28 +18986,30 @@
 		  switch (1 << j)
 		    {
 		      /* vld2q_lane cases.  */
+                      /* LLVM LOCAL begin multi-vector types */
 		    case T_V8HI:
-		      ftype = oi_ftype_const_hi_pointer_oi_si;
+		      ftype = oiq_ftype_const_hi_pointer_oiq_si;
 		      break;
 		    case T_V4SI:
-		      ftype = oi_ftype_const_si_pointer_oi_si;
+		      ftype = oiq_ftype_const_si_pointer_oiq_si;
 		      break;
 		    case T_V4SF:
-		      ftype = oi_ftype_const_sf_pointer_oi_si;
+		      ftype = oiq_ftype_const_sf_pointer_oiq_si;
 		      break;
 		      /* vld4_lane cases.  */
 		    case T_V8QI:
 		      ftype = oi_ftype_const_qi_pointer_oi_si;
 		      break;
 		    case T_V4HI:
-		      ftype = oi_ftype_const_hi_pointer_oi_si;
+		      ftype = oid_ftype_const_hi_pointer_oid_si;
 		      break;
 		    case T_V2SI:
-		      ftype = oi_ftype_const_si_pointer_oi_si;
+		      ftype = oid_ftype_const_si_pointer_oid_si;
 		      break;
 		    case T_V2SF:
-		      ftype = oi_ftype_const_sf_pointer_oi_si;
+		      ftype = oid_ftype_const_sf_pointer_oid_si;
 		      break;
+                      /* LLVM LOCAL end multi-vector types */
 		    default:
 		      gcc_unreachable ();
 		    }
@@ -18859,15 +19091,17 @@
 		  switch (1 << j)
 		    {
 		      /* vst2q cases.  */
-		    case T_V16QI: ftype = void_ftype_qi_pointer_oi; break;
-		    case T_V8HI: ftype = void_ftype_hi_pointer_oi; break;
-		    case T_V4SI: ftype = void_ftype_si_pointer_oi; break;
-		    case T_V4SF: ftype = void_ftype_sf_pointer_oi; break;
+                      /* LLVM LOCAL begin multi-vector types */
+		    case T_V16QI: ftype = void_ftype_qi_pointer_oiq; break;
+		    case T_V8HI: ftype = void_ftype_hi_pointer_oiq; break;
+		    case T_V4SI: ftype = void_ftype_si_pointer_oiq; break;
+		    case T_V4SF: ftype = void_ftype_sf_pointer_oiq; break;
 		      /* vst4 cases.  */
-		    case T_V8QI: ftype = void_ftype_qi_pointer_oi; break;
-		    case T_V4HI: ftype = void_ftype_hi_pointer_oi; break;
-		    case T_V2SI: ftype = void_ftype_si_pointer_oi; break;
-		    case T_V2SF: ftype = void_ftype_sf_pointer_oi; break;
+		    case T_V8QI: ftype = void_ftype_qi_pointer_oid; break;
+		    case T_V4HI: ftype = void_ftype_hi_pointer_oid; break;
+		    case T_V2SI: ftype = void_ftype_si_pointer_oid; break;
+		    case T_V2SF: ftype = void_ftype_sf_pointer_oid; break;
+                      /* LLVM LOCAL end multi-vector types */
 		    case T_DI: ftype = void_ftype_di_pointer_oi; break;
 		    default: gcc_unreachable ();
 		    }
@@ -18952,28 +19186,30 @@
 		  switch (1 << j)
 		    {
 		      /* vst2q_lane cases.  */
+                      /* LLVM LOCAL begin multi-vector types */
 		    case T_V8HI:
-		      ftype = void_ftype_hi_pointer_oi_si;
+		      ftype = void_ftype_hi_pointer_oiq_si;
 		      break;
 		    case T_V4SI:
-		      ftype = void_ftype_si_pointer_oi_si;
+		      ftype = void_ftype_si_pointer_oiq_si;
 		      break;
 		    case T_V4SF:
-		      ftype = void_ftype_sf_pointer_oi_si;
+		      ftype = void_ftype_sf_pointer_oiq_si;
 		      break;
 		      /* vst4_lane cases.  */
 		    case T_V8QI:
 		      ftype = void_ftype_qi_pointer_oi_si;
 		      break;
 		    case T_V4HI:
-		      ftype = void_ftype_hi_pointer_oi_si;
+		      ftype = void_ftype_hi_pointer_oid_si;
 		      break;
 		    case T_V2SI:
-		      ftype = void_ftype_si_pointer_oi_si;
+		      ftype = void_ftype_si_pointer_oid_si;
 		      break;
 		    case T_V2SF:
-		      ftype = void_ftype_sf_pointer_oi_si;
+		      ftype = void_ftype_sf_pointer_oid_si;
 		      break;
+                      /* LLVM LOCAL end multi-vector types */
 		    default:
 		      gcc_unreachable ();
 		    }

Modified: llvm-gcc-4.2/trunk/gcc/config/arm/arm_neon.h
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/arm_neon.h?rev=77283&r1=77282&r2=77283&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/arm_neon.h (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/arm_neon.h Mon Jul 27 19:32:28 2009
@@ -3253,55 +3253,55 @@
 
 #define vtbl2_s8(__a, __b) \
   ({ \
-     union { int8x8x2_t __i; __builtin_neon_ti __o; } __au = { __a }; \
+     union { int8x8x2_t __i; __builtin_neon_v8qi2 __o; } __au = { __a }; \
      (int8x8_t)__builtin_neon_vtbl2v8qi (__au.__o, __b); \
    })
 
 #define vtbl2_u8(__a, __b) \
   ({ \
-     union { uint8x8x2_t __i; __builtin_neon_ti __o; } __au = { __a }; \
+     union { uint8x8x2_t __i; __builtin_neon_v8qi2 __o; } __au = { __a }; \
      (uint8x8_t)__builtin_neon_vtbl2v8qi (__au.__o, __b); \
    })
 
 #define vtbl2_p8(__a, __b) \
   ({ \
-     union { poly8x8x2_t __i; __builtin_neon_ti __o; } __au = { __a }; \
+     union { poly8x8x2_t __i; __builtin_neon_v8qi2 __o; } __au = { __a }; \
      (poly8x8_t)__builtin_neon_vtbl2v8qi (__au.__o, __b); \
    })
 
 #define vtbl3_s8(__a, __b) \
   ({ \
-     union { int8x8x3_t __i; __builtin_neon_ei __o; } __au = { __a }; \
+     union { int8x8x3_t __i; __builtin_neon_v8qi3 __o; } __au = { __a }; \
      (int8x8_t)__builtin_neon_vtbl3v8qi (__au.__o, __b); \
    })
 
 #define vtbl3_u8(__a, __b) \
   ({ \
-     union { uint8x8x3_t __i; __builtin_neon_ei __o; } __au = { __a }; \
+     union { uint8x8x3_t __i; __builtin_neon_v8qi3 __o; } __au = { __a }; \
      (uint8x8_t)__builtin_neon_vtbl3v8qi (__au.__o, __b); \
    })
 
 #define vtbl3_p8(__a, __b) \
   ({ \
-     union { poly8x8x3_t __i; __builtin_neon_ei __o; } __au = { __a }; \
+     union { poly8x8x3_t __i; __builtin_neon_v8qi3 __o; } __au = { __a }; \
      (poly8x8_t)__builtin_neon_vtbl3v8qi (__au.__o, __b); \
    })
 
 #define vtbl4_s8(__a, __b) \
   ({ \
-     union { int8x8x4_t __i; __builtin_neon_oi __o; } __au = { __a }; \
+     union { int8x8x4_t __i; __builtin_neon_v8qi4 __o; } __au = { __a }; \
      (int8x8_t)__builtin_neon_vtbl4v8qi (__au.__o, __b); \
    })
 
 #define vtbl4_u8(__a, __b) \
   ({ \
-     union { uint8x8x4_t __i; __builtin_neon_oi __o; } __au = { __a }; \
+     union { uint8x8x4_t __i; __builtin_neon_v8qi4 __o; } __au = { __a }; \
      (uint8x8_t)__builtin_neon_vtbl4v8qi (__au.__o, __b); \
    })
 
 #define vtbl4_p8(__a, __b) \
   ({ \
-     union { poly8x8x4_t __i; __builtin_neon_oi __o; } __au = { __a }; \
+     union { poly8x8x4_t __i; __builtin_neon_v8qi4 __o; } __au = { __a }; \
      (poly8x8_t)__builtin_neon_vtbl4v8qi (__au.__o, __b); \
    })
 
@@ -3316,55 +3316,55 @@
 
 #define vtbx2_s8(__a, __b, __c) \
   ({ \
-     union { int8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { int8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
      (int8x8_t)__builtin_neon_vtbx2v8qi (__a, __bu.__o, __c); \
    })
 
 #define vtbx2_u8(__a, __b, __c) \
   ({ \
-     union { uint8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { uint8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
      (uint8x8_t)__builtin_neon_vtbx2v8qi (__a, __bu.__o, __c); \
    })
 
 #define vtbx2_p8(__a, __b, __c) \
   ({ \
-     union { poly8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { poly8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
      (poly8x8_t)__builtin_neon_vtbx2v8qi (__a, __bu.__o, __c); \
    })
 
 #define vtbx3_s8(__a, __b, __c) \
   ({ \
-     union { int8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { int8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
      (int8x8_t)__builtin_neon_vtbx3v8qi (__a, __bu.__o, __c); \
    })
 
 #define vtbx3_u8(__a, __b, __c) \
   ({ \
-     union { uint8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { uint8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
      (uint8x8_t)__builtin_neon_vtbx3v8qi (__a, __bu.__o, __c); \
    })
 
 #define vtbx3_p8(__a, __b, __c) \
   ({ \
-     union { poly8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { poly8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
      (poly8x8_t)__builtin_neon_vtbx3v8qi (__a, __bu.__o, __c); \
    })
 
 #define vtbx4_s8(__a, __b, __c) \
   ({ \
-     union { int8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
      (int8x8_t)__builtin_neon_vtbx4v8qi (__a, __bu.__o, __c); \
    })
 
 #define vtbx4_u8(__a, __b, __c) \
   ({ \
-     union { uint8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
      (uint8x8_t)__builtin_neon_vtbx4v8qi (__a, __bu.__o, __c); \
    })
 
 #define vtbx4_p8(__a, __b, __c) \
   ({ \
-     union { poly8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { poly8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
      (poly8x8_t)__builtin_neon_vtbx4v8qi (__a, __bu.__o, __c); \
    })
 
@@ -4654,1642 +4654,1642 @@
 
 #define vld2_s8(__a) \
   ({ \
-     union { int8x8x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int8x8x2_t __i; __builtin_neon_v8qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v8qi (__a); \
      __rv.__i; \
    })
 
 #define vld2_s16(__a) \
   ({ \
-     union { int16x4x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int16x4x2_t __i; __builtin_neon_v4hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v4hi (__a); \
      __rv.__i; \
    })
 
 #define vld2_s32(__a) \
   ({ \
-     union { int32x2x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int32x2x2_t __i; __builtin_neon_v2si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v2si (__a); \
      __rv.__i; \
    })
 
 #define vld2_f32(__a) \
   ({ \
-     union { float32x2x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { float32x2x2_t __i; __builtin_neon_v2sf2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v2sf (__a); \
      __rv.__i; \
    })
 
 #define vld2_u8(__a) \
   ({ \
-     union { uint8x8x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint8x8x2_t __i; __builtin_neon_v8qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v8qi (__a); \
      __rv.__i; \
    })
 
 #define vld2_u16(__a) \
   ({ \
-     union { uint16x4x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint16x4x2_t __i; __builtin_neon_v4hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v4hi (__a); \
      __rv.__i; \
    })
 
 #define vld2_u32(__a) \
   ({ \
-     union { uint32x2x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint32x2x2_t __i; __builtin_neon_v2si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v2si (__a); \
      __rv.__i; \
    })
 
 #define vld2_p8(__a) \
   ({ \
-     union { poly8x8x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { poly8x8x2_t __i; __builtin_neon_v8qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v8qi (__a); \
      __rv.__i; \
    })
 
 #define vld2_p16(__a) \
   ({ \
-     union { poly16x4x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { poly16x4x2_t __i; __builtin_neon_v4hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v4hi (__a); \
      __rv.__i; \
    })
 
 #define vld2_s64(__a) \
   ({ \
-     union { int64x1x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int64x1x2_t __i; __builtin_neon_di2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2di (__a); \
      __rv.__i; \
    })
 
 #define vld2_u64(__a) \
   ({ \
-     union { uint64x1x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint64x1x2_t __i; __builtin_neon_di2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2di (__a); \
      __rv.__i; \
    })
 
 #define vld2q_s8(__a) \
   ({ \
-     union { int8x16x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int8x16x2_t __i; __builtin_neon_v16qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v16qi (__a); \
      __rv.__i; \
    })
 
 #define vld2q_s16(__a) \
   ({ \
-     union { int16x8x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int16x8x2_t __i; __builtin_neon_v8hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v8hi (__a); \
      __rv.__i; \
    })
 
 #define vld2q_s32(__a) \
   ({ \
-     union { int32x4x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int32x4x2_t __i; __builtin_neon_v4si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v4si (__a); \
      __rv.__i; \
    })
 
 #define vld2q_f32(__a) \
   ({ \
-     union { float32x4x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { float32x4x2_t __i; __builtin_neon_v4sf2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v4sf (__a); \
      __rv.__i; \
    })
 
 #define vld2q_u8(__a) \
   ({ \
-     union { uint8x16x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint8x16x2_t __i; __builtin_neon_v16qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v16qi (__a); \
      __rv.__i; \
    })
 
 #define vld2q_u16(__a) \
   ({ \
-     union { uint16x8x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint16x8x2_t __i; __builtin_neon_v8hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v8hi (__a); \
      __rv.__i; \
    })
 
 #define vld2q_u32(__a) \
   ({ \
-     union { uint32x4x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint32x4x2_t __i; __builtin_neon_v4si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v4si (__a); \
      __rv.__i; \
    })
 
 #define vld2q_p8(__a) \
   ({ \
-     union { poly8x16x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { poly8x16x2_t __i; __builtin_neon_v16qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v16qi (__a); \
      __rv.__i; \
    })
 
 #define vld2q_p16(__a) \
   ({ \
-     union { poly16x8x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { poly16x8x2_t __i; __builtin_neon_v8hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2v8hi (__a); \
      __rv.__i; \
    })
 
 #define vld2_lane_s8(__a, __b, __c) \
   ({ \
-     union { int8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
-     union { int8x8x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
+     union { int8x8x2_t __i; __builtin_neon_v8qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev8qi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
-     union { int16x4x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int16x4x2_t __i; __builtin_neon_v4hi2 __o; } __bu = { __b }; \
+     union { int16x4x2_t __i; __builtin_neon_v4hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev4hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
-     union { int32x2x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int32x2x2_t __i; __builtin_neon_v2si2 __o; } __bu = { __b }; \
+     union { int32x2x2_t __i; __builtin_neon_v2si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev2si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
-     union { float32x2x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { float32x2x2_t __i; __builtin_neon_v2sf2 __o; } __bu = { __b }; \
+     union { float32x2x2_t __i; __builtin_neon_v2sf2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev2sf (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2_lane_u8(__a, __b, __c) \
   ({ \
-     union { uint8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
-     union { uint8x8x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
+     union { uint8x8x2_t __i; __builtin_neon_v8qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev8qi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
-     union { uint16x4x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint16x4x2_t __i; __builtin_neon_v4hi2 __o; } __bu = { __b }; \
+     union { uint16x4x2_t __i; __builtin_neon_v4hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev4hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
-     union { uint32x2x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint32x2x2_t __i; __builtin_neon_v2si2 __o; } __bu = { __b }; \
+     union { uint32x2x2_t __i; __builtin_neon_v2si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev2si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2_lane_p8(__a, __b, __c) \
   ({ \
-     union { poly8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
-     union { poly8x8x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { poly8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
+     union { poly8x8x2_t __i; __builtin_neon_v8qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev8qi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
-     union { poly16x4x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { poly16x4x2_t __i; __builtin_neon_v4hi2 __o; } __bu = { __b }; \
+     union { poly16x4x2_t __i; __builtin_neon_v4hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev4hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2q_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { int16x8x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int16x8x2_t __i; __builtin_neon_v8hi2 __o; } __bu = { __b }; \
+     union { int16x8x2_t __i; __builtin_neon_v8hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev8hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2q_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { int32x4x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int32x4x2_t __i; __builtin_neon_v4si2 __o; } __bu = { __b }; \
+     union { int32x4x2_t __i; __builtin_neon_v4si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev4si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2q_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { float32x4x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { float32x4x2_t __i; __builtin_neon_v4sf2 __o; } __bu = { __b }; \
+     union { float32x4x2_t __i; __builtin_neon_v4sf2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev4sf (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2q_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { uint16x8x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint16x8x2_t __i; __builtin_neon_v8hi2 __o; } __bu = { __b }; \
+     union { uint16x8x2_t __i; __builtin_neon_v8hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev8hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2q_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { uint32x4x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint32x4x2_t __i; __builtin_neon_v4si2 __o; } __bu = { __b }; \
+     union { uint32x4x2_t __i; __builtin_neon_v4si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev4si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2q_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { poly16x8x2_t __i; __builtin_neon_oi __o; } __rv; \
+     union { poly16x8x2_t __i; __builtin_neon_v8hi2 __o; } __bu = { __b }; \
+     union { poly16x8x2_t __i; __builtin_neon_v8hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_lanev8hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld2_dup_s8(__a) \
   ({ \
-     union { int8x8x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int8x8x2_t __i; __builtin_neon_v8qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupv8qi (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_s16(__a) \
   ({ \
-     union { int16x4x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int16x4x2_t __i; __builtin_neon_v4hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupv4hi (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_s32(__a) \
   ({ \
-     union { int32x2x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int32x2x2_t __i; __builtin_neon_v2si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupv2si (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_f32(__a) \
   ({ \
-     union { float32x2x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { float32x2x2_t __i; __builtin_neon_v2sf2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupv2sf (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_u8(__a) \
   ({ \
-     union { uint8x8x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint8x8x2_t __i; __builtin_neon_v8qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupv8qi (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_u16(__a) \
   ({ \
-     union { uint16x4x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint16x4x2_t __i; __builtin_neon_v4hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupv4hi (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_u32(__a) \
   ({ \
-     union { uint32x2x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint32x2x2_t __i; __builtin_neon_v2si2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupv2si (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_p8(__a) \
   ({ \
-     union { poly8x8x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { poly8x8x2_t __i; __builtin_neon_v8qi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupv8qi (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_p16(__a) \
   ({ \
-     union { poly16x4x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { poly16x4x2_t __i; __builtin_neon_v4hi2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupv4hi (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_s64(__a) \
   ({ \
-     union { int64x1x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { int64x1x2_t __i; __builtin_neon_di2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupdi (__a); \
      __rv.__i; \
    })
 
 #define vld2_dup_u64(__a) \
   ({ \
-     union { uint64x1x2_t __i; __builtin_neon_ti __o; } __rv; \
+     union { uint64x1x2_t __i; __builtin_neon_di2 __o; } __rv; \
      __rv.__o = __builtin_neon_vld2_dupdi (__a); \
      __rv.__i; \
    })
 
 #define vst2_s8(__a, __b) \
   ({ \
-     union { int8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { int8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v8qi (__a, __bu.__o); \
    })
 
 #define vst2_s16(__a, __b) \
   ({ \
-     union { int16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { int16x4x2_t __i; __builtin_neon_v4hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v4hi (__a, __bu.__o); \
    })
 
 #define vst2_s32(__a, __b) \
   ({ \
-     union { int32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { int32x2x2_t __i; __builtin_neon_v2si2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v2si (__a, __bu.__o); \
    })
 
 #define vst2_f32(__a, __b) \
   ({ \
-     union { float32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { float32x2x2_t __i; __builtin_neon_v2sf2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v2sf (__a, __bu.__o); \
    })
 
 #define vst2_u8(__a, __b) \
   ({ \
-     union { uint8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { uint8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v8qi (__a, __bu.__o); \
    })
 
 #define vst2_u16(__a, __b) \
   ({ \
-     union { uint16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { uint16x4x2_t __i; __builtin_neon_v4hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v4hi (__a, __bu.__o); \
    })
 
 #define vst2_u32(__a, __b) \
   ({ \
-     union { uint32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { uint32x2x2_t __i; __builtin_neon_v2si2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v2si (__a, __bu.__o); \
    })
 
 #define vst2_p8(__a, __b) \
   ({ \
-     union { poly8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { poly8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v8qi (__a, __bu.__o); \
    })
 
 #define vst2_p16(__a, __b) \
   ({ \
-     union { poly16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { poly16x4x2_t __i; __builtin_neon_v4hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v4hi (__a, __bu.__o); \
    })
 
 #define vst2_s64(__a, __b) \
   ({ \
-     union { int64x1x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { int64x1x2_t __i; __builtin_neon_di2 __o; } __bu = { __b }; \
      __builtin_neon_vst2di (__a, __bu.__o); \
    })
 
 #define vst2_u64(__a, __b) \
   ({ \
-     union { uint64x1x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { uint64x1x2_t __i; __builtin_neon_di2 __o; } __bu = { __b }; \
      __builtin_neon_vst2di (__a, __bu.__o); \
    })
 
 #define vst2q_s8(__a, __b) \
   ({ \
-     union { int8x16x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int8x16x2_t __i; __builtin_neon_v16qi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v16qi (__a, __bu.__o); \
    })
 
 #define vst2q_s16(__a, __b) \
   ({ \
-     union { int16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int16x8x2_t __i; __builtin_neon_v8hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v8hi (__a, __bu.__o); \
    })
 
 #define vst2q_s32(__a, __b) \
   ({ \
-     union { int32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int32x4x2_t __i; __builtin_neon_v4si2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v4si (__a, __bu.__o); \
    })
 
 #define vst2q_f32(__a, __b) \
   ({ \
-     union { float32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { float32x4x2_t __i; __builtin_neon_v4sf2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v4sf (__a, __bu.__o); \
    })
 
 #define vst2q_u8(__a, __b) \
   ({ \
-     union { uint8x16x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint8x16x2_t __i; __builtin_neon_v16qi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v16qi (__a, __bu.__o); \
    })
 
 #define vst2q_u16(__a, __b) \
   ({ \
-     union { uint16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint16x8x2_t __i; __builtin_neon_v8hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v8hi (__a, __bu.__o); \
    })
 
 #define vst2q_u32(__a, __b) \
   ({ \
-     union { uint32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint32x4x2_t __i; __builtin_neon_v4si2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v4si (__a, __bu.__o); \
    })
 
 #define vst2q_p8(__a, __b) \
   ({ \
-     union { poly8x16x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { poly8x16x2_t __i; __builtin_neon_v16qi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v16qi (__a, __bu.__o); \
    })
 
 #define vst2q_p16(__a, __b) \
   ({ \
-     union { poly16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { poly16x8x2_t __i; __builtin_neon_v8hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2v8hi (__a, __bu.__o); \
    })
 
 #define vst2_lane_s8(__a, __b, __c) \
   ({ \
-     union { int8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { int8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev8qi (__a, __bu.__o, __c); \
    })
 
 #define vst2_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { int16x4x2_t __i; __builtin_neon_v4hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev4hi (__a, __bu.__o, __c); \
    })
 
 #define vst2_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { int32x2x2_t __i; __builtin_neon_v2si2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev2si (__a, __bu.__o, __c); \
    })
 
 #define vst2_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { float32x2x2_t __i; __builtin_neon_v2sf2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev2sf (__a, __bu.__o, __c); \
    })
 
 #define vst2_lane_u8(__a, __b, __c) \
   ({ \
-     union { uint8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { uint8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev8qi (__a, __bu.__o, __c); \
    })
 
 #define vst2_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { uint16x4x2_t __i; __builtin_neon_v4hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev4hi (__a, __bu.__o, __c); \
    })
 
 #define vst2_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x2x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { uint32x2x2_t __i; __builtin_neon_v2si2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev2si (__a, __bu.__o, __c); \
    })
 
 #define vst2_lane_p8(__a, __b, __c) \
   ({ \
-     union { poly8x8x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { poly8x8x2_t __i; __builtin_neon_v8qi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev8qi (__a, __bu.__o, __c); \
    })
 
 #define vst2_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x4x2_t __i; __builtin_neon_ti __o; } __bu = { __b }; \
+     union { poly16x4x2_t __i; __builtin_neon_v4hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev4hi (__a, __bu.__o, __c); \
    })
 
 #define vst2q_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int16x8x2_t __i; __builtin_neon_v8hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev8hi (__a, __bu.__o, __c); \
    })
 
 #define vst2q_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int32x4x2_t __i; __builtin_neon_v4si2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev4si (__a, __bu.__o, __c); \
    })
 
 #define vst2q_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { float32x4x2_t __i; __builtin_neon_v4sf2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev4sf (__a, __bu.__o, __c); \
    })
 
 #define vst2q_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint16x8x2_t __i; __builtin_neon_v8hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev8hi (__a, __bu.__o, __c); \
    })
 
 #define vst2q_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x4x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint32x4x2_t __i; __builtin_neon_v4si2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev4si (__a, __bu.__o, __c); \
    })
 
 #define vst2q_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x8x2_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { poly16x8x2_t __i; __builtin_neon_v8hi2 __o; } __bu = { __b }; \
      __builtin_neon_vst2_lanev8hi (__a, __bu.__o, __c); \
    })
 
 #define vld3_s8(__a) \
   ({ \
-     union { int8x8x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int8x8x3_t __i; __builtin_neon_v8qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v8qi (__a); \
      __rv.__i; \
    })
 
 #define vld3_s16(__a) \
   ({ \
-     union { int16x4x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int16x4x3_t __i; __builtin_neon_v4hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v4hi (__a); \
      __rv.__i; \
    })
 
 #define vld3_s32(__a) \
   ({ \
-     union { int32x2x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int32x2x3_t __i; __builtin_neon_v2si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v2si (__a); \
      __rv.__i; \
    })
 
 #define vld3_f32(__a) \
   ({ \
-     union { float32x2x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { float32x2x3_t __i; __builtin_neon_v2sf3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v2sf (__a); \
      __rv.__i; \
    })
 
 #define vld3_u8(__a) \
   ({ \
-     union { uint8x8x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint8x8x3_t __i; __builtin_neon_v8qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v8qi (__a); \
      __rv.__i; \
    })
 
 #define vld3_u16(__a) \
   ({ \
-     union { uint16x4x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint16x4x3_t __i; __builtin_neon_v4hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v4hi (__a); \
      __rv.__i; \
    })
 
 #define vld3_u32(__a) \
   ({ \
-     union { uint32x2x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint32x2x3_t __i; __builtin_neon_v2si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v2si (__a); \
      __rv.__i; \
    })
 
 #define vld3_p8(__a) \
   ({ \
-     union { poly8x8x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { poly8x8x3_t __i; __builtin_neon_v8qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v8qi (__a); \
      __rv.__i; \
    })
 
 #define vld3_p16(__a) \
   ({ \
-     union { poly16x4x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { poly16x4x3_t __i; __builtin_neon_v4hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v4hi (__a); \
      __rv.__i; \
    })
 
 #define vld3_s64(__a) \
   ({ \
-     union { int64x1x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int64x1x3_t __i; __builtin_neon_di3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3di (__a); \
      __rv.__i; \
    })
 
 #define vld3_u64(__a) \
   ({ \
-     union { uint64x1x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint64x1x3_t __i; __builtin_neon_di3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3di (__a); \
      __rv.__i; \
    })
 
 #define vld3q_s8(__a) \
   ({ \
-     union { int8x16x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { int8x16x3_t __i; __builtin_neon_v16qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v16qi (__a); \
      __rv.__i; \
    })
 
 #define vld3q_s16(__a) \
   ({ \
-     union { int16x8x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { int16x8x3_t __i; __builtin_neon_v8hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v8hi (__a); \
      __rv.__i; \
    })
 
 #define vld3q_s32(__a) \
   ({ \
-     union { int32x4x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { int32x4x3_t __i; __builtin_neon_v4si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v4si (__a); \
      __rv.__i; \
    })
 
 #define vld3q_f32(__a) \
   ({ \
-     union { float32x4x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { float32x4x3_t __i; __builtin_neon_v4sf3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v4sf (__a); \
      __rv.__i; \
    })
 
 #define vld3q_u8(__a) \
   ({ \
-     union { uint8x16x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { uint8x16x3_t __i; __builtin_neon_v16qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v16qi (__a); \
      __rv.__i; \
    })
 
 #define vld3q_u16(__a) \
   ({ \
-     union { uint16x8x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { uint16x8x3_t __i; __builtin_neon_v8hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v8hi (__a); \
      __rv.__i; \
    })
 
 #define vld3q_u32(__a) \
   ({ \
-     union { uint32x4x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { uint32x4x3_t __i; __builtin_neon_v4si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v4si (__a); \
      __rv.__i; \
    })
 
 #define vld3q_p8(__a) \
   ({ \
-     union { poly8x16x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { poly8x16x3_t __i; __builtin_neon_v16qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v16qi (__a); \
      __rv.__i; \
    })
 
 #define vld3q_p16(__a) \
   ({ \
-     union { poly16x8x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { poly16x8x3_t __i; __builtin_neon_v8hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3v8hi (__a); \
      __rv.__i; \
    })
 
 #define vld3_lane_s8(__a, __b, __c) \
   ({ \
-     union { int8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
-     union { int8x8x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
+     union { int8x8x3_t __i; __builtin_neon_v8qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev8qi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
-     union { int16x4x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int16x4x3_t __i; __builtin_neon_v4hi3 __o; } __bu = { __b }; \
+     union { int16x4x3_t __i; __builtin_neon_v4hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev4hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
-     union { int32x2x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int32x2x3_t __i; __builtin_neon_v2si3 __o; } __bu = { __b }; \
+     union { int32x2x3_t __i; __builtin_neon_v2si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev2si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
-     union { float32x2x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { float32x2x3_t __i; __builtin_neon_v2sf3 __o; } __bu = { __b }; \
+     union { float32x2x3_t __i; __builtin_neon_v2sf3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev2sf (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3_lane_u8(__a, __b, __c) \
   ({ \
-     union { uint8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
-     union { uint8x8x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
+     union { uint8x8x3_t __i; __builtin_neon_v8qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev8qi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
-     union { uint16x4x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint16x4x3_t __i; __builtin_neon_v4hi3 __o; } __bu = { __b }; \
+     union { uint16x4x3_t __i; __builtin_neon_v4hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev4hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
-     union { uint32x2x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint32x2x3_t __i; __builtin_neon_v2si3 __o; } __bu = { __b }; \
+     union { uint32x2x3_t __i; __builtin_neon_v2si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev2si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3_lane_p8(__a, __b, __c) \
   ({ \
-     union { poly8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
-     union { poly8x8x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { poly8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
+     union { poly8x8x3_t __i; __builtin_neon_v8qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev8qi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
-     union { poly16x4x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { poly16x4x3_t __i; __builtin_neon_v4hi3 __o; } __bu = { __b }; \
+     union { poly16x4x3_t __i; __builtin_neon_v4hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev4hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3q_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
-     union { int16x8x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { int16x8x3_t __i; __builtin_neon_v8hi3 __o; } __bu = { __b }; \
+     union { int16x8x3_t __i; __builtin_neon_v8hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev8hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3q_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
-     union { int32x4x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { int32x4x3_t __i; __builtin_neon_v4si3 __o; } __bu = { __b }; \
+     union { int32x4x3_t __i; __builtin_neon_v4si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev4si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3q_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
-     union { float32x4x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { float32x4x3_t __i; __builtin_neon_v4sf3 __o; } __bu = { __b }; \
+     union { float32x4x3_t __i; __builtin_neon_v4sf3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev4sf (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3q_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
-     union { uint16x8x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { uint16x8x3_t __i; __builtin_neon_v8hi3 __o; } __bu = { __b }; \
+     union { uint16x8x3_t __i; __builtin_neon_v8hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev8hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3q_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
-     union { uint32x4x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { uint32x4x3_t __i; __builtin_neon_v4si3 __o; } __bu = { __b }; \
+     union { uint32x4x3_t __i; __builtin_neon_v4si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev4si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3q_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
-     union { poly16x8x3_t __i; __builtin_neon_ci __o; } __rv; \
+     union { poly16x8x3_t __i; __builtin_neon_v8hi3 __o; } __bu = { __b }; \
+     union { poly16x8x3_t __i; __builtin_neon_v8hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_lanev8hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld3_dup_s8(__a) \
   ({ \
-     union { int8x8x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int8x8x3_t __i; __builtin_neon_v8qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupv8qi (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_s16(__a) \
   ({ \
-     union { int16x4x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int16x4x3_t __i; __builtin_neon_v4hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupv4hi (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_s32(__a) \
   ({ \
-     union { int32x2x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int32x2x3_t __i; __builtin_neon_v2si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupv2si (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_f32(__a) \
   ({ \
-     union { float32x2x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { float32x2x3_t __i; __builtin_neon_v2sf3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupv2sf (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_u8(__a) \
   ({ \
-     union { uint8x8x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint8x8x3_t __i; __builtin_neon_v8qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupv8qi (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_u16(__a) \
   ({ \
-     union { uint16x4x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint16x4x3_t __i; __builtin_neon_v4hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupv4hi (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_u32(__a) \
   ({ \
-     union { uint32x2x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint32x2x3_t __i; __builtin_neon_v2si3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupv2si (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_p8(__a) \
   ({ \
-     union { poly8x8x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { poly8x8x3_t __i; __builtin_neon_v8qi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupv8qi (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_p16(__a) \
   ({ \
-     union { poly16x4x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { poly16x4x3_t __i; __builtin_neon_v4hi3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupv4hi (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_s64(__a) \
   ({ \
-     union { int64x1x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { int64x1x3_t __i; __builtin_neon_di3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupdi (__a); \
      __rv.__i; \
    })
 
 #define vld3_dup_u64(__a) \
   ({ \
-     union { uint64x1x3_t __i; __builtin_neon_ei __o; } __rv; \
+     union { uint64x1x3_t __i; __builtin_neon_di3 __o; } __rv; \
      __rv.__o = __builtin_neon_vld3_dupdi (__a); \
      __rv.__i; \
    })
 
 #define vst3_s8(__a, __b) \
   ({ \
-     union { int8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { int8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v8qi (__a, __bu.__o); \
    })
 
 #define vst3_s16(__a, __b) \
   ({ \
-     union { int16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { int16x4x3_t __i; __builtin_neon_v4hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v4hi (__a, __bu.__o); \
    })
 
 #define vst3_s32(__a, __b) \
   ({ \
-     union { int32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { int32x2x3_t __i; __builtin_neon_v2si3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v2si (__a, __bu.__o); \
    })
 
 #define vst3_f32(__a, __b) \
   ({ \
-     union { float32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { float32x2x3_t __i; __builtin_neon_v2sf3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v2sf (__a, __bu.__o); \
    })
 
 #define vst3_u8(__a, __b) \
   ({ \
-     union { uint8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { uint8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v8qi (__a, __bu.__o); \
    })
 
 #define vst3_u16(__a, __b) \
   ({ \
-     union { uint16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { uint16x4x3_t __i; __builtin_neon_v4hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v4hi (__a, __bu.__o); \
    })
 
 #define vst3_u32(__a, __b) \
   ({ \
-     union { uint32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { uint32x2x3_t __i; __builtin_neon_v2si3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v2si (__a, __bu.__o); \
    })
 
 #define vst3_p8(__a, __b) \
   ({ \
-     union { poly8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { poly8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v8qi (__a, __bu.__o); \
    })
 
 #define vst3_p16(__a, __b) \
   ({ \
-     union { poly16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { poly16x4x3_t __i; __builtin_neon_v4hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v4hi (__a, __bu.__o); \
    })
 
 #define vst3_s64(__a, __b) \
   ({ \
-     union { int64x1x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { int64x1x3_t __i; __builtin_neon_di3 __o; } __bu = { __b }; \
      __builtin_neon_vst3di (__a, __bu.__o); \
    })
 
 #define vst3_u64(__a, __b) \
   ({ \
-     union { uint64x1x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { uint64x1x3_t __i; __builtin_neon_di3 __o; } __bu = { __b }; \
      __builtin_neon_vst3di (__a, __bu.__o); \
    })
 
 #define vst3q_s8(__a, __b) \
   ({ \
-     union { int8x16x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { int8x16x3_t __i; __builtin_neon_v16qi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v16qi (__a, __bu.__o); \
    })
 
 #define vst3q_s16(__a, __b) \
   ({ \
-     union { int16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { int16x8x3_t __i; __builtin_neon_v8hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v8hi (__a, __bu.__o); \
    })
 
 #define vst3q_s32(__a, __b) \
   ({ \
-     union { int32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { int32x4x3_t __i; __builtin_neon_v4si3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v4si (__a, __bu.__o); \
    })
 
 #define vst3q_f32(__a, __b) \
   ({ \
-     union { float32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { float32x4x3_t __i; __builtin_neon_v4sf3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v4sf (__a, __bu.__o); \
    })
 
 #define vst3q_u8(__a, __b) \
   ({ \
-     union { uint8x16x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { uint8x16x3_t __i; __builtin_neon_v16qi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v16qi (__a, __bu.__o); \
    })
 
 #define vst3q_u16(__a, __b) \
   ({ \
-     union { uint16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { uint16x8x3_t __i; __builtin_neon_v8hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v8hi (__a, __bu.__o); \
    })
 
 #define vst3q_u32(__a, __b) \
   ({ \
-     union { uint32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { uint32x4x3_t __i; __builtin_neon_v4si3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v4si (__a, __bu.__o); \
    })
 
 #define vst3q_p8(__a, __b) \
   ({ \
-     union { poly8x16x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { poly8x16x3_t __i; __builtin_neon_v16qi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v16qi (__a, __bu.__o); \
    })
 
 #define vst3q_p16(__a, __b) \
   ({ \
-     union { poly16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { poly16x8x3_t __i; __builtin_neon_v8hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3v8hi (__a, __bu.__o); \
    })
 
 #define vst3_lane_s8(__a, __b, __c) \
   ({ \
-     union { int8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { int8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev8qi (__a, __bu.__o, __c); \
    })
 
 #define vst3_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { int16x4x3_t __i; __builtin_neon_v4hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev4hi (__a, __bu.__o, __c); \
    })
 
 #define vst3_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { int32x2x3_t __i; __builtin_neon_v2si3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev2si (__a, __bu.__o, __c); \
    })
 
 #define vst3_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { float32x2x3_t __i; __builtin_neon_v2sf3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev2sf (__a, __bu.__o, __c); \
    })
 
 #define vst3_lane_u8(__a, __b, __c) \
   ({ \
-     union { uint8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { uint8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev8qi (__a, __bu.__o, __c); \
    })
 
 #define vst3_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { uint16x4x3_t __i; __builtin_neon_v4hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev4hi (__a, __bu.__o, __c); \
    })
 
 #define vst3_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x2x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { uint32x2x3_t __i; __builtin_neon_v2si3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev2si (__a, __bu.__o, __c); \
    })
 
 #define vst3_lane_p8(__a, __b, __c) \
   ({ \
-     union { poly8x8x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { poly8x8x3_t __i; __builtin_neon_v8qi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev8qi (__a, __bu.__o, __c); \
    })
 
 #define vst3_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x4x3_t __i; __builtin_neon_ei __o; } __bu = { __b }; \
+     union { poly16x4x3_t __i; __builtin_neon_v4hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev4hi (__a, __bu.__o, __c); \
    })
 
 #define vst3q_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { int16x8x3_t __i; __builtin_neon_v8hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev8hi (__a, __bu.__o, __c); \
    })
 
 #define vst3q_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { int32x4x3_t __i; __builtin_neon_v4si3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev4si (__a, __bu.__o, __c); \
    })
 
 #define vst3q_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { float32x4x3_t __i; __builtin_neon_v4sf3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev4sf (__a, __bu.__o, __c); \
    })
 
 #define vst3q_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { uint16x8x3_t __i; __builtin_neon_v8hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev8hi (__a, __bu.__o, __c); \
    })
 
 #define vst3q_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x4x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { uint32x4x3_t __i; __builtin_neon_v4si3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev4si (__a, __bu.__o, __c); \
    })
 
 #define vst3q_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x8x3_t __i; __builtin_neon_ci __o; } __bu = { __b }; \
+     union { poly16x8x3_t __i; __builtin_neon_v8hi3 __o; } __bu = { __b }; \
      __builtin_neon_vst3_lanev8hi (__a, __bu.__o, __c); \
    })
 
 #define vld4_s8(__a) \
   ({ \
-     union { int8x8x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int8x8x4_t __i; __builtin_neon_v8qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v8qi (__a); \
      __rv.__i; \
    })
 
 #define vld4_s16(__a) \
   ({ \
-     union { int16x4x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int16x4x4_t __i; __builtin_neon_v4hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v4hi (__a); \
      __rv.__i; \
    })
 
 #define vld4_s32(__a) \
   ({ \
-     union { int32x2x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int32x2x4_t __i; __builtin_neon_v2si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v2si (__a); \
      __rv.__i; \
    })
 
 #define vld4_f32(__a) \
   ({ \
-     union { float32x2x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { float32x2x4_t __i; __builtin_neon_v2sf4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v2sf (__a); \
      __rv.__i; \
    })
 
 #define vld4_u8(__a) \
   ({ \
-     union { uint8x8x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint8x8x4_t __i; __builtin_neon_v8qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v8qi (__a); \
      __rv.__i; \
    })
 
 #define vld4_u16(__a) \
   ({ \
-     union { uint16x4x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint16x4x4_t __i; __builtin_neon_v4hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v4hi (__a); \
      __rv.__i; \
    })
 
 #define vld4_u32(__a) \
   ({ \
-     union { uint32x2x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint32x2x4_t __i; __builtin_neon_v2si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v2si (__a); \
      __rv.__i; \
    })
 
 #define vld4_p8(__a) \
   ({ \
-     union { poly8x8x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { poly8x8x4_t __i; __builtin_neon_v8qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v8qi (__a); \
      __rv.__i; \
    })
 
 #define vld4_p16(__a) \
   ({ \
-     union { poly16x4x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { poly16x4x4_t __i; __builtin_neon_v4hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v4hi (__a); \
      __rv.__i; \
    })
 
 #define vld4_s64(__a) \
   ({ \
-     union { int64x1x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int64x1x4_t __i; __builtin_neon_di4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4di (__a); \
      __rv.__i; \
    })
 
 #define vld4_u64(__a) \
   ({ \
-     union { uint64x1x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint64x1x4_t __i; __builtin_neon_di4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4di (__a); \
      __rv.__i; \
    })
 
 #define vld4q_s8(__a) \
   ({ \
-     union { int8x16x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { int8x16x4_t __i; __builtin_neon_v16qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v16qi (__a); \
      __rv.__i; \
    })
 
 #define vld4q_s16(__a) \
   ({ \
-     union { int16x8x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { int16x8x4_t __i; __builtin_neon_v8hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v8hi (__a); \
      __rv.__i; \
    })
 
 #define vld4q_s32(__a) \
   ({ \
-     union { int32x4x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { int32x4x4_t __i; __builtin_neon_v4si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v4si (__a); \
      __rv.__i; \
    })
 
 #define vld4q_f32(__a) \
   ({ \
-     union { float32x4x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { float32x4x4_t __i; __builtin_neon_v4sf4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v4sf (__a); \
      __rv.__i; \
    })
 
 #define vld4q_u8(__a) \
   ({ \
-     union { uint8x16x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { uint8x16x4_t __i; __builtin_neon_v16qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v16qi (__a); \
      __rv.__i; \
    })
 
 #define vld4q_u16(__a) \
   ({ \
-     union { uint16x8x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { uint16x8x4_t __i; __builtin_neon_v8hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v8hi (__a); \
      __rv.__i; \
    })
 
 #define vld4q_u32(__a) \
   ({ \
-     union { uint32x4x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { uint32x4x4_t __i; __builtin_neon_v4si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v4si (__a); \
      __rv.__i; \
    })
 
 #define vld4q_p8(__a) \
   ({ \
-     union { poly8x16x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { poly8x16x4_t __i; __builtin_neon_v16qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v16qi (__a); \
      __rv.__i; \
    })
 
 #define vld4q_p16(__a) \
   ({ \
-     union { poly16x8x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { poly16x8x4_t __i; __builtin_neon_v8hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4v8hi (__a); \
      __rv.__i; \
    })
 
 #define vld4_lane_s8(__a, __b, __c) \
   ({ \
-     union { int8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { int8x8x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
+     union { int8x8x4_t __i; __builtin_neon_v8qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev8qi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { int16x4x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int16x4x4_t __i; __builtin_neon_v4hi4 __o; } __bu = { __b }; \
+     union { int16x4x4_t __i; __builtin_neon_v4hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev4hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { int32x2x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int32x2x4_t __i; __builtin_neon_v2si4 __o; } __bu = { __b }; \
+     union { int32x2x4_t __i; __builtin_neon_v2si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev2si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { float32x2x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { float32x2x4_t __i; __builtin_neon_v2sf4 __o; } __bu = { __b }; \
+     union { float32x2x4_t __i; __builtin_neon_v2sf4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev2sf (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4_lane_u8(__a, __b, __c) \
   ({ \
-     union { uint8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { uint8x8x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
+     union { uint8x8x4_t __i; __builtin_neon_v8qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev8qi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { uint16x4x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint16x4x4_t __i; __builtin_neon_v4hi4 __o; } __bu = { __b }; \
+     union { uint16x4x4_t __i; __builtin_neon_v4hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev4hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { uint32x2x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint32x2x4_t __i; __builtin_neon_v2si4 __o; } __bu = { __b }; \
+     union { uint32x2x4_t __i; __builtin_neon_v2si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev2si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4_lane_p8(__a, __b, __c) \
   ({ \
-     union { poly8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { poly8x8x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { poly8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
+     union { poly8x8x4_t __i; __builtin_neon_v8qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev8qi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
-     union { poly16x4x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { poly16x4x4_t __i; __builtin_neon_v4hi4 __o; } __bu = { __b }; \
+     union { poly16x4x4_t __i; __builtin_neon_v4hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev4hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4q_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
-     union { int16x8x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { int16x8x4_t __i; __builtin_neon_v8hi4 __o; } __bu = { __b }; \
+     union { int16x8x4_t __i; __builtin_neon_v8hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev8hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4q_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
-     union { int32x4x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { int32x4x4_t __i; __builtin_neon_v4si4 __o; } __bu = { __b }; \
+     union { int32x4x4_t __i; __builtin_neon_v4si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev4si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4q_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
-     union { float32x4x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { float32x4x4_t __i; __builtin_neon_v4sf4 __o; } __bu = { __b }; \
+     union { float32x4x4_t __i; __builtin_neon_v4sf4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev4sf (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4q_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
-     union { uint16x8x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { uint16x8x4_t __i; __builtin_neon_v8hi4 __o; } __bu = { __b }; \
+     union { uint16x8x4_t __i; __builtin_neon_v8hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev8hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4q_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
-     union { uint32x4x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { uint32x4x4_t __i; __builtin_neon_v4si4 __o; } __bu = { __b }; \
+     union { uint32x4x4_t __i; __builtin_neon_v4si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev4si (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4q_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
-     union { poly16x8x4_t __i; __builtin_neon_xi __o; } __rv; \
+     union { poly16x8x4_t __i; __builtin_neon_v8hi4 __o; } __bu = { __b }; \
+     union { poly16x8x4_t __i; __builtin_neon_v8hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_lanev8hi (__a, __bu.__o, __c); \
      __rv.__i; \
    })
 
 #define vld4_dup_s8(__a) \
   ({ \
-     union { int8x8x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int8x8x4_t __i; __builtin_neon_v8qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupv8qi (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_s16(__a) \
   ({ \
-     union { int16x4x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int16x4x4_t __i; __builtin_neon_v4hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupv4hi (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_s32(__a) \
   ({ \
-     union { int32x2x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int32x2x4_t __i; __builtin_neon_v2si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupv2si (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_f32(__a) \
   ({ \
-     union { float32x2x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { float32x2x4_t __i; __builtin_neon_v2sf4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupv2sf (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_u8(__a) \
   ({ \
-     union { uint8x8x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint8x8x4_t __i; __builtin_neon_v8qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupv8qi (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_u16(__a) \
   ({ \
-     union { uint16x4x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint16x4x4_t __i; __builtin_neon_v4hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupv4hi (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_u32(__a) \
   ({ \
-     union { uint32x2x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint32x2x4_t __i; __builtin_neon_v2si4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupv2si (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_p8(__a) \
   ({ \
-     union { poly8x8x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { poly8x8x4_t __i; __builtin_neon_v8qi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupv8qi (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_p16(__a) \
   ({ \
-     union { poly16x4x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { poly16x4x4_t __i; __builtin_neon_v4hi4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupv4hi (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_s64(__a) \
   ({ \
-     union { int64x1x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { int64x1x4_t __i; __builtin_neon_di4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupdi (__a); \
      __rv.__i; \
    })
 
 #define vld4_dup_u64(__a) \
   ({ \
-     union { uint64x1x4_t __i; __builtin_neon_oi __o; } __rv; \
+     union { uint64x1x4_t __i; __builtin_neon_di4 __o; } __rv; \
      __rv.__o = __builtin_neon_vld4_dupdi (__a); \
      __rv.__i; \
    })
 
 #define vst4_s8(__a, __b) \
   ({ \
-     union { int8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v8qi (__a, __bu.__o); \
    })
 
 #define vst4_s16(__a, __b) \
   ({ \
-     union { int16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int16x4x4_t __i; __builtin_neon_v4hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v4hi (__a, __bu.__o); \
    })
 
 #define vst4_s32(__a, __b) \
   ({ \
-     union { int32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int32x2x4_t __i; __builtin_neon_v2si4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v2si (__a, __bu.__o); \
    })
 
 #define vst4_f32(__a, __b) \
   ({ \
-     union { float32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { float32x2x4_t __i; __builtin_neon_v2sf4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v2sf (__a, __bu.__o); \
    })
 
 #define vst4_u8(__a, __b) \
   ({ \
-     union { uint8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v8qi (__a, __bu.__o); \
    })
 
 #define vst4_u16(__a, __b) \
   ({ \
-     union { uint16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint16x4x4_t __i; __builtin_neon_v4hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v4hi (__a, __bu.__o); \
    })
 
 #define vst4_u32(__a, __b) \
   ({ \
-     union { uint32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint32x2x4_t __i; __builtin_neon_v2si4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v2si (__a, __bu.__o); \
    })
 
 #define vst4_p8(__a, __b) \
   ({ \
-     union { poly8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { poly8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v8qi (__a, __bu.__o); \
    })
 
 #define vst4_p16(__a, __b) \
   ({ \
-     union { poly16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { poly16x4x4_t __i; __builtin_neon_v4hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v4hi (__a, __bu.__o); \
    })
 
 #define vst4_s64(__a, __b) \
   ({ \
-     union { int64x1x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int64x1x4_t __i; __builtin_neon_di4 __o; } __bu = { __b }; \
      __builtin_neon_vst4di (__a, __bu.__o); \
    })
 
 #define vst4_u64(__a, __b) \
   ({ \
-     union { uint64x1x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint64x1x4_t __i; __builtin_neon_di4 __o; } __bu = { __b }; \
      __builtin_neon_vst4di (__a, __bu.__o); \
    })
 
 #define vst4q_s8(__a, __b) \
   ({ \
-     union { int8x16x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { int8x16x4_t __i; __builtin_neon_v16qi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v16qi (__a, __bu.__o); \
    })
 
 #define vst4q_s16(__a, __b) \
   ({ \
-     union { int16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { int16x8x4_t __i; __builtin_neon_v8hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v8hi (__a, __bu.__o); \
    })
 
 #define vst4q_s32(__a, __b) \
   ({ \
-     union { int32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { int32x4x4_t __i; __builtin_neon_v4si4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v4si (__a, __bu.__o); \
    })
 
 #define vst4q_f32(__a, __b) \
   ({ \
-     union { float32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { float32x4x4_t __i; __builtin_neon_v4sf4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v4sf (__a, __bu.__o); \
    })
 
 #define vst4q_u8(__a, __b) \
   ({ \
-     union { uint8x16x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { uint8x16x4_t __i; __builtin_neon_v16qi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v16qi (__a, __bu.__o); \
    })
 
 #define vst4q_u16(__a, __b) \
   ({ \
-     union { uint16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { uint16x8x4_t __i; __builtin_neon_v8hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v8hi (__a, __bu.__o); \
    })
 
 #define vst4q_u32(__a, __b) \
   ({ \
-     union { uint32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { uint32x4x4_t __i; __builtin_neon_v4si4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v4si (__a, __bu.__o); \
    })
 
 #define vst4q_p8(__a, __b) \
   ({ \
-     union { poly8x16x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { poly8x16x4_t __i; __builtin_neon_v16qi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v16qi (__a, __bu.__o); \
    })
 
 #define vst4q_p16(__a, __b) \
   ({ \
-     union { poly16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { poly16x8x4_t __i; __builtin_neon_v8hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4v8hi (__a, __bu.__o); \
    })
 
 #define vst4_lane_s8(__a, __b, __c) \
   ({ \
-     union { int8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev8qi (__a, __bu.__o, __c); \
    })
 
 #define vst4_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int16x4x4_t __i; __builtin_neon_v4hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev4hi (__a, __bu.__o, __c); \
    })
 
 #define vst4_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { int32x2x4_t __i; __builtin_neon_v2si4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev2si (__a, __bu.__o, __c); \
    })
 
 #define vst4_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { float32x2x4_t __i; __builtin_neon_v2sf4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev2sf (__a, __bu.__o, __c); \
    })
 
 #define vst4_lane_u8(__a, __b, __c) \
   ({ \
-     union { uint8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev8qi (__a, __bu.__o, __c); \
    })
 
 #define vst4_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint16x4x4_t __i; __builtin_neon_v4hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev4hi (__a, __bu.__o, __c); \
    })
 
 #define vst4_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x2x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { uint32x2x4_t __i; __builtin_neon_v2si4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev2si (__a, __bu.__o, __c); \
    })
 
 #define vst4_lane_p8(__a, __b, __c) \
   ({ \
-     union { poly8x8x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { poly8x8x4_t __i; __builtin_neon_v8qi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev8qi (__a, __bu.__o, __c); \
    })
 
 #define vst4_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x4x4_t __i; __builtin_neon_oi __o; } __bu = { __b }; \
+     union { poly16x4x4_t __i; __builtin_neon_v4hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev4hi (__a, __bu.__o, __c); \
    })
 
 #define vst4q_lane_s16(__a, __b, __c) \
   ({ \
-     union { int16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { int16x8x4_t __i; __builtin_neon_v8hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev8hi (__a, __bu.__o, __c); \
    })
 
 #define vst4q_lane_s32(__a, __b, __c) \
   ({ \
-     union { int32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { int32x4x4_t __i; __builtin_neon_v4si4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev4si (__a, __bu.__o, __c); \
    })
 
 #define vst4q_lane_f32(__a, __b, __c) \
   ({ \
-     union { float32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { float32x4x4_t __i; __builtin_neon_v4sf4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev4sf (__a, __bu.__o, __c); \
    })
 
 #define vst4q_lane_u16(__a, __b, __c) \
   ({ \
-     union { uint16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { uint16x8x4_t __i; __builtin_neon_v8hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev8hi (__a, __bu.__o, __c); \
    })
 
 #define vst4q_lane_u32(__a, __b, __c) \
   ({ \
-     union { uint32x4x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { uint32x4x4_t __i; __builtin_neon_v4si4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev4si (__a, __bu.__o, __c); \
    })
 
 #define vst4q_lane_p16(__a, __b, __c) \
   ({ \
-     union { poly16x8x4_t __i; __builtin_neon_xi __o; } __bu = { __b }; \
+     union { poly16x8x4_t __i; __builtin_neon_v8hi4 __o; } __bu = { __b }; \
      __builtin_neon_vst4_lanev8hi (__a, __bu.__o, __c); \
    })
 

Modified: llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp?rev=77283&r1=77282&r2=77283&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/llvm-arm.cpp Mon Jul 27 19:32:28 2009
@@ -1988,7 +1988,9 @@
     Type *VPTy = Context.getPointerTypeUnqual(Type::Int8Ty);
     Result = Builder.CreateCall2(intFn, BitCastToType(Ops[0], VPTy),
                                  ConstantInt::get(Type::Int32Ty, N));
-    Result = BitCastToType(Result, ResultType);
+    Type *PtrToWideVec = Context.getPointerTypeUnqual(Result->getType());
+    Builder.CreateStore(Result, BitCastToType(DestLoc->Ptr, PtrToWideVec));
+    Result = 0;
     break;
   }
 
@@ -2018,7 +2020,9 @@
                                           LaneVal + (n * NUnits));
       Result = Builder.CreateInsertElement(Result, Elt, Ndx);
     }
-    Result = BitCastToType(Result, ResultType);
+    Type *PtrToWideVec = Context.getPointerTypeUnqual(VTy);
+    Builder.CreateStore(Result, BitCastToType(DestLoc->Ptr, PtrToWideVec));
+    Result = 0;
     break;
   }
 
@@ -2056,7 +2060,9 @@
       Result = Builder.CreateShuffleVector(Result, Context.getUndef(VTy),
                                            Context.getConstantVector(Idxs));
     }
-    Result = BitCastToType(Result, ResultType);
+    Type *PtrToWideVec = Context.getPointerTypeUnqual(VTy);
+    Builder.CreateStore(Result, BitCastToType(DestLoc->Ptr, PtrToWideVec));
+    Result = 0;
     break;
   }
 
@@ -2082,7 +2088,10 @@
     }
 
     Type *VPTy = Context.getPointerTypeUnqual(Type::Int8Ty);
-    Value *Vec = BitCastToType(Ops[1], VTy);
+    Value *Tmp = CreateTemporary(VTy);
+    Type *PtrToStruct = Context.getPointerTypeUnqual(Ops[1]->getType());
+    Builder.CreateStore(Ops[1], BitCastToType(Tmp, PtrToStruct));
+    Value *Vec = Builder.CreateLoad(Tmp);
     Builder.CreateCall3(intFn, BitCastToType(Ops[0], VPTy), Vec,
                         ConstantInt::get(Type::Int32Ty, N));
     Result = 0;
@@ -2106,7 +2115,10 @@
     unsigned NUnits = VTy->getNumElements() / NumVecs;
     if (!isValidLane(Ops[2], NUnits, &LaneVal))
       return UnexpectedError("%Hinvalid lane number", exp, Result);
-    Value *Vec = BitCastToType(Ops[1], VTy);
+    Value *Tmp = CreateTemporary(VTy);
+    Type *PtrToStruct = Context.getPointerTypeUnqual(Ops[1]->getType());
+    Builder.CreateStore(Ops[1], BitCastToType(Tmp, PtrToStruct));
+    Value *Vec = Builder.CreateLoad(Tmp);
     for (unsigned n = 0; n != NumVecs; ++n) {
       Value *Addr = (n == 0) ? Ops[0] :
         Builder.CreateGEP(Ops[0], ConstantInt::get(Type::Int32Ty, n));

Modified: llvm-gcc-4.2/trunk/gcc/config/arm/neon.ml
URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/config/arm/neon.ml?rev=77283&r1=77282&r2=77283&view=diff

==============================================================================
--- llvm-gcc-4.2/trunk/gcc/config/arm/neon.ml (original)
+++ llvm-gcc-4.2/trunk/gcc/config/arm/neon.ml Mon Jul 27 19:32:28 2009
@@ -62,7 +62,18 @@
      XImode : "heXadeca", eight registers (sixteen words).
 *)
 
-type inttype = B_TImode | B_EImode | B_OImode | B_CImode | B_XImode
+(* LLVM LOCAL begin Use a different type for each vector type.  *)
+type inttype = B_TId8mode  | B_EId8mode  | B_OId8mode
+	     | B_TId16mode | B_EId16mode | B_OId16mode
+	     | B_TId32mode | B_EId32mode | B_OId32mode
+	     | B_TId64mode | B_EId64mode | B_OId64mode
+	     | B_TIdSFmode | B_EIdSFmode | B_OIdSFmode
+	     | B_OIq8mode  | B_CIq8mode  | B_XIq8mode
+	     | B_OIq16mode | B_CIq16mode | B_XIq16mode
+	     | B_OIq32mode | B_CIq32mode | B_XIq32mode
+	     | B_OIq64mode | B_CIq64mode | B_XIq64mode
+	     | B_OIqSFmode | B_CIqSFmode | B_XIqSFmode
+(* LLVM LOCAL end Use a different type for each vector type.  *)
 
 type shape_elt = Dreg | Qreg | Corereg | Immed | VecArray of int * shape_elt
                | PtrTo of shape_elt | CstPtrTo of shape_elt
@@ -461,17 +472,60 @@
   | T_uint8x16 | T_uint16x8  | T_uint32x4  | T_uint64x2
   | T_float32x4 | T_poly8x16 | T_poly16x8 -> 128
   | _ -> raise Not_found
+
+(* LLVM LOCAL begin Map vector types to modes.  *)
+let vectype_mode = function
+    T_int8x8 | T_uint8x8 | T_poly8x8 -> V8QI
+  | T_int8x16 | T_uint8x16 | T_poly8x16 -> V16QI
+  | T_int16x4 | T_uint16x4 | T_poly16x4 -> V4HI
+  | T_int16x8 | T_uint16x8 | T_poly16x8 -> V8HI
+  | T_int32x2 | T_uint32x2 -> V2SI
+  | T_int32x4 | T_uint32x4 -> V4SI
+  | T_int64x1 | T_uint64x1 -> DI
+  | T_int64x2 | T_uint64x2 -> V2DI
+  | T_float32x2 -> V2SF
+  | T_float32x4 -> V4SF
+  | _ -> raise Not_found
+(* LLVM LOCAL end Map vector types to modes.  *)
   
 let inttype_for_array num elttype =
   let eltsize = vectype_size elttype in
   let numwords = (num * eltsize) / 32 in
-  match numwords with
-    4 -> B_TImode
-  | 6 -> B_EImode
-  | 8 -> B_OImode
-  | 12 -> B_CImode
-  | 16 -> B_XImode
+  (* LLVM LOCAL begin Match vector type, too. *)
+  let vecmode = vectype_mode elttype in
+  match numwords, vecmode with
+    4, V8QI -> B_TId8mode
+  | 4, V4HI -> B_TId16mode
+  | 4, V2SI -> B_TId32mode
+  | 4, DI   -> B_TId64mode
+  | 4, V2SF -> B_TIdSFmode
+  | 6, V8QI -> B_EId8mode
+  | 6, V4HI -> B_EId16mode
+  | 6, V2SI -> B_EId32mode
+  | 6, DI   -> B_EId64mode
+  | 6, V2SF -> B_EIdSFmode
+  | 8, V8QI -> B_OId8mode
+  | 8, V4HI -> B_OId16mode
+  | 8, V2SI -> B_OId32mode
+  | 8, DI   -> B_OId64mode
+  | 8, V2SF -> B_OIdSFmode
+  | 8, V16QI -> B_OIq8mode
+  | 8, V8HI -> B_OIq16mode
+  | 8, V4SI -> B_OIq32mode
+  | 8, V2DI -> B_OIq64mode
+  | 8, V4SF -> B_OIqSFmode
+  | 12, V16QI -> B_CIq8mode
+  | 12, V8HI -> B_CIq16mode
+  | 12, V4SI -> B_CIq32mode
+  | 12, V2DI -> B_CIq64mode
+  | 12, V4SF -> B_CIqSFmode
+  | 16, V16QI -> B_XIq8mode
+  | 16, V8HI -> B_XIq16mode
+  | 16, V4SI -> B_XIq32mode
+  | 16, V2DI -> B_XIq64mode
+  | 16, V4SF -> B_XIqSFmode
   | _ -> failwith ("no int type for size " ^ string_of_int numwords)
+  (* LLVM LOCAL end Match vector type, too. *)
 
 (* These functions return pairs of (internal, external) types, where "internal"
    types are those seen by GCC, and "external" are those seen by the assembler.
@@ -1707,12 +1761,39 @@
   in
     name (fun x -> x ^ "_t") vt
 
+(* LLVM LOCAL begin Print builtin type names that include the vector type.  *)
 let string_of_inttype = function
-    B_TImode -> "__builtin_neon_ti"
-  | B_EImode -> "__builtin_neon_ei"
-  | B_OImode -> "__builtin_neon_oi"
-  | B_CImode -> "__builtin_neon_ci"
-  | B_XImode -> "__builtin_neon_xi"
+    B_TId8mode  -> "__builtin_neon_v8qi2"
+  | B_TId16mode -> "__builtin_neon_v4hi2"
+  | B_TId32mode -> "__builtin_neon_v2si2"
+  | B_TId64mode -> "__builtin_neon_di2"
+  | B_TIdSFmode -> "__builtin_neon_v2sf2"
+  | B_EId8mode  -> "__builtin_neon_v8qi3"
+  | B_EId16mode -> "__builtin_neon_v4hi3"
+  | B_EId32mode -> "__builtin_neon_v2si3"
+  | B_EId64mode -> "__builtin_neon_di3"
+  | B_EIdSFmode -> "__builtin_neon_v2sf3"
+  | B_OId8mode  -> "__builtin_neon_v8qi4"
+  | B_OId16mode -> "__builtin_neon_v4hi4"
+  | B_OId32mode -> "__builtin_neon_v2si4"
+  | B_OId64mode -> "__builtin_neon_di4"
+  | B_OIdSFmode -> "__builtin_neon_v2sf4"
+  | B_OIq8mode  -> "__builtin_neon_v16qi2"
+  | B_OIq16mode -> "__builtin_neon_v8hi2"
+  | B_OIq32mode -> "__builtin_neon_v4si2"
+  | B_OIq64mode -> "__builtin_neon_v2di2"
+  | B_OIqSFmode -> "__builtin_neon_v4sf2"
+  | B_CIq8mode  -> "__builtin_neon_v16qi3"
+  | B_CIq16mode -> "__builtin_neon_v8hi3"
+  | B_CIq32mode -> "__builtin_neon_v4si3"
+  | B_CIq64mode -> "__builtin_neon_v2di3"
+  | B_CIqSFmode -> "__builtin_neon_v4sf3"
+  | B_XIq8mode  -> "__builtin_neon_v16qi4"
+  | B_XIq16mode -> "__builtin_neon_v8hi4"
+  | B_XIq32mode -> "__builtin_neon_v4si4"
+  | B_XIq64mode -> "__builtin_neon_v2di4"
+  | B_XIqSFmode -> "__builtin_neon_v4sf4"
+(* LLVM LOCAL end Print builtin type names that include the vector type.  *)
 
 let string_of_mode = function
     V8QI -> "v8qi" | V4HI  -> "v4hi"  | V2SI -> "v2si" | V2SF -> "v2sf"





More information about the llvm-commits mailing list