Added u8x16,u32x4,u64x2 variants of _zero_byte_mask(x) for ARM/NEON platform. VPP... 88/10788/4
authorAdrian Oanca <adrian.oanca@enea.com>
Fri, 23 Feb 2018 15:27:41 +0000 (16:27 +0100)
committerDamjan Marion <dmarion.lists@gmail.com>
Mon, 26 Feb 2018 22:28:50 +0000 (22:28 +0000)
Change-Id: I954acb56d901e42976e71534317f38d7c4359bcf
Signed-off-by: Adrian Oanca <adrian.oanca@enea.com>
src/vnet/classify/vnet_classify.h
src/vppinfra/vector_neon.h

index 6cbbf10..791b8fd 100644 (file)
@@ -41,10 +41,6 @@ extern vlib_node_registration_t ip6_classify_node;
 
 #define CLASSIFY_TRACE 0
 
-#ifdef CLIB_HAVE_VEC128
-#define CLASSIFY_USE_SSE       //Allow usage of SSE operations
-#endif
-
 #define U32X4_ALIGNED(p) PREDICT_TRUE((((intptr_t)p) & 0xf) == 0)
 
 /*
@@ -233,7 +229,7 @@ vnet_classify_hash_packet_inline (vnet_classify_table_t * t, u8 * h)
 
   ASSERT (t);
   mask = t->mask;
-#ifdef CLASSIFY_USE_SSE
+#ifdef CLIB_HAVE_VEC128
   if (U32X4_ALIGNED (h))
     {                          //SSE can't handle unaligned data
       u32x4 *data = (u32x4 *) h;
@@ -259,7 +255,7 @@ vnet_classify_hash_packet_inline (vnet_classify_table_t * t, u8 * h)
        }
     }
   else
-#endif /* CLASSIFY_USE_SSE */
+#endif /* CLIB_HAVE_VEC128 */
     {
       u32 skip_u64 = t->skip_n_vectors * 2;
       u64 *data64 = (u64 *) h;
@@ -407,7 +403,7 @@ vnet_classify_find_entry_inline (vnet_classify_table_t * t,
 
   v = vnet_classify_entry_at_index (t, v, value_index);
 
-#ifdef CLASSIFY_USE_SSE
+#ifdef CLIB_HAVE_VEC128
   if (U32X4_ALIGNED (h))
     {
       u32x4 *data = (u32x4 *) h;
@@ -452,7 +448,7 @@ vnet_classify_find_entry_inline (vnet_classify_table_t * t,
        }
     }
   else
-#endif /* CLASSIFY_USE_SSE */
+#endif /* CLIB_HAVE_VEC128 */
     {
       u32 skip_u64 = t->skip_n_vectors * 2;
       u64 *data64 = (u64 *) h;
index 331b8ed..3ed7836 100644 (file)
@@ -86,6 +86,26 @@ u16x8_zero_byte_mask (u16x8 input)
   return (u32) (vgetq_lane_u64 (merge3, 1) << 8) + vgetq_lane_u64 (merge3, 0);
 }
 
+always_inline u32
+u8x16_zero_byte_mask (u8x16 input)
+{
+  return u16x8_zero_byte_mask ((u16x8) input);
+}
+
+always_inline u32
+u32x4_zero_byte_mask (u32x4 input)
+{
+  return u16x8_zero_byte_mask ((u16x8) input);
+}
+
+always_inline u32
+u64x2_zero_byte_mask (u64x2 input)
+{
+  return u16x8_zero_byte_mask ((u16x8) input);
+}
+
+
+
 #endif /* included_vector_neon_h */
 
 /*