aarch64 compatibility
[vpp.git] / vppinfra / vppinfra / vector.h
index a6f4111..491e7cf 100644 (file)
@@ -42,7 +42,7 @@
 
 /* Vector types. */
 
-#if defined (__MMX__) || defined (__IWMMXT__)
+#if defined (__MMX__) || defined (__IWMMXT__) || defined (__aarch64__)
 #define CLIB_HAVE_VEC64
 #endif
 
 
 #if defined (__aarch64__) || defined (__arm__)
 typedef unsigned int u32x4 _vector_size (16);
+typedef u8 u8x16 _vector_size (16);
+typedef u16 u16x8 _vector_size (16);
+typedef u32 u32x4 _vector_size (16);
+typedef u64 u64x2 _vector_size (16);
 #endif
 
 #ifdef CLIB_HAVE_VEC64
@@ -95,34 +99,49 @@ typedef u64 u64x2 _vector_size (16);
 
 typedef f32 f32x4 _vector_size (16);
 typedef f64 f64x2 _vector_size (16);
+
+/* Signed 256 bit. */
+typedef i8 i8x32 _vector_size (32);
+typedef i16 i16x16 _vector_size (32);
+typedef i32 i32x8 _vector_size (32);
+typedef long long i64x4 _vector_size (32);
+
+/* Unsigned 256 bit. */
+typedef u8 u8x32 _vector_size (32);
+typedef u16 u16x16 _vector_size (32);
+typedef u32 u32x8 _vector_size (32);
+typedef u64 u64x4 _vector_size (32);
+
+typedef f32 f32x8 _vector_size (32);
+typedef f64 f64x4 _vector_size (32);
 #endif /* CLIB_HAVE_VEC128 */
 
 /* Vector word sized types. */
 #ifndef CLIB_VECTOR_WORD_BITS
-# ifdef CLIB_HAVE_VEC128
-#  define CLIB_VECTOR_WORD_BITS 128
-# else
-#  define CLIB_VECTOR_WORD_BITS 64
-# endif
+#ifdef CLIB_HAVE_VEC128
+#define CLIB_VECTOR_WORD_BITS 128
+#else
+#define CLIB_VECTOR_WORD_BITS 64
+#endif
 #endif /* CLIB_VECTOR_WORD_BITS */
 
 /* Vector word sized types. */
 #if CLIB_VECTOR_WORD_BITS == 128
-typedef  i8  i8x _vector_size (16);
+typedef i8 i8x _vector_size (16);
 typedef i16 i16x _vector_size (16);
 typedef i32 i32x _vector_size (16);
 typedef i64 i64x _vector_size (16);
-typedef  u8  u8x _vector_size (16);
+typedef u8 u8x _vector_size (16);
 typedef u16 u16x _vector_size (16);
 typedef u32 u32x _vector_size (16);
 typedef u64 u64x _vector_size (16);
 #endif
 #if CLIB_VECTOR_WORD_BITS == 64
-typedef  i8  i8x _vector_size (8);
+typedef i8 i8x _vector_size (8);
 typedef i16 i16x _vector_size (8);
 typedef i32 i32x _vector_size (8);
 typedef i64 i64x _vector_size (8);
-typedef  u8  u8x _vector_size (8);
+typedef u8 u8x _vector_size (8);
 typedef u16 u16x _vector_size (8);
 typedef u32 u32x _vector_size (8);
 typedef u64 u64x _vector_size (8);
@@ -142,14 +161,14 @@ typedef u64 u64x _vector_size (8);
     t as_##t[VECTOR_WORD_TYPE_LEN (t)];        \
   } t##x##_union_t;
 
-_ (u8);
-_ (u16);
-_ (u32);
-_ (u64);
-_ (i8);
-_ (i16);
-_ (i32);
-_ (i64);
+_(u8);
+_(u16);
+_(u32);
+_(u64);
+_(i8);
+_(i16);
+_(i32);
+_(i64);
 
 #undef _
 
@@ -163,12 +182,12 @@ _ (i64);
     t as_##t[n];                               \
   } t##x##n##_union_t;                         \
 
-_ (u8, 8);
-_ (u16, 4);
-_ (u32, 2);
-_ (i8, 8);
-_ (i16, 4);
-_ (i32, 2);
+_(u8, 8);
+_(u16, 4);
+_(u32, 2);
+_(i8, 8);
+_(i16, 4);
+_(i32, 2);
 
 #undef _
 
@@ -182,16 +201,16 @@ _ (i32, 2);
     t as_##t[n];                               \
   } t##x##n##_union_t;                         \
 
-_ (u8, 16);
-_ (u16, 8);
-_ (u32, 4);
-_ (u64, 2);
-_ (i8, 16);
-_ (i16, 8);
-_ (i32, 4);
-_ (i64, 2);
-_ (f32, 4);
-_ (f64, 2);
+_(u8, 16);
+_(u16, 8);
+_(u32, 4);
+_(u64, 2);
+_(i8, 16);
+_(i16, 8);
+_(i32, 4);
+_(i64, 2);
+_(f32, 4);
+_(f64, 2);
 
 #undef _
 
@@ -205,14 +224,14 @@ _ (f64, 2);
     t as_##t[n];                               \
   } t##x##n##_union_t;                         \
 
-_ (u8, 16);
-_ (u16, 8);
-_ (u32, 4);
-_ (u64, 2);
-_ (i8, 16);
-_ (i16, 8);
-_ (i32, 4);
-_ (i64, 2);
+_(u8, 16);
+_(u16, 8);
+_(u32, 4);
+_(u64, 2);
+_(i8, 16);
+_(i16, 8);
+_(i32, 4);
+_(i64, 2);
 
 #undef _
 
@@ -230,8 +249,20 @@ _ (i64, 2);
 #include <vppinfra/vector_iwmmxt.h>
 #endif
 
+#if defined (__aarch64__)
+#include <vppinfra/vector_neon.h>
+#endif
+
 #if (defined(CLIB_HAVE_VEC128) || defined(CLIB_HAVE_VEC64))
 #include <vppinfra/vector_funcs.h>
 #endif
 
 #endif /* included_clib_vector_h */
+
+/*
+ * fd.io coding-style-patch-verification: ON
+ *
+ * Local Variables:
+ * eval: (c-set-style "gnu")
+ * End:
+ */