Add support for AArch32
[vpp.git] / vppinfra / vppinfra / time.h
index 524eff6..29398f3 100644 (file)
@@ -113,7 +113,14 @@ always_inline u64 clib_cpu_time_now (void)
 }
 
 #elif defined (__arm__)
-
+#if defined(__ARM_ARCH_7A__)
+always_inline u64 clib_cpu_time_now (void)
+{
+  u64 tsc;
+  asm volatile("mrrc p15, 0, %Q0, %R0, c9" : "=r" (tsc));
+  return tsc;
+}
+#else
 always_inline u64 clib_cpu_time_now (void)
 {
   u32 lo;
@@ -121,6 +128,7 @@ always_inline u64 clib_cpu_time_now (void)
                : [lo] "=r" (lo));
   return (u64) lo;
 }
+#endif
 
 #elif defined (__xtensa__)
 
@@ -143,8 +151,18 @@ always_inline u64 clib_cpu_time_now (void)
   return ((u64)h << 32) | l;
 }
 
-#else
+#elif defined (__aarch64__)
+always_inline u64 clib_cpu_time_now (void)
+{
+  u64 tsc;
+
+  /* Works on Cavium ThunderX. Other platforms: YMMV */
+  asm volatile("mrs %0, cntvct_el0" : "=r" (tsc));
 
+  return tsc;
+}
+
+#else
 #error "don't know how to read CPU time stamp"
 
 #endif