Index: bsps/arm/include/bsp/clock-armv7m.h
===================================================================
--- bsps/arm/include/bsp/clock-armv7m.h	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
+++ bsps/arm/include/bsp/clock-armv7m.h	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2011, 2018 Sebastian Huber.  All rights reserved.
+ *
+ *  embedded brains GmbH
+ *  Dornierstr. 4
+ *  82178 Puchheim
+ *  Germany
+ *  <rtems@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef BSP_CLOCK_ARMV7M_H
+#define BSP_CLOCK_ARMV7M_H
+
+#include <rtems/score/armv7m.h>
+#include <rtems/timecounter.h>
+
+#include <bsp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifdef ARM_MULTILIB_ARCH_V7M
+
+typedef struct {
+  struct timecounter base;
+  uint32_t ticks;
+} ARMV7M_Timecounter;
+
+extern ARMV7M_Timecounter _ARMV7M_TC;
+
+static inline uint32_t _ARMV7M_Clock_frequency(void)
+{
+#ifdef BSP_ARMV7M_SYSTICK_FREQUENCY
+  return BSP_ARMV7M_SYSTICK_FREQUENCY;
+#else
+  volatile ARMV7M_Systick *systick = _ARMV7M_Systick;
+  return ARMV7M_SYSTICK_CALIB_TENMS_GET(systick->calib) * 100;
+#endif
+}
+
+static uint32_t _ARMV7M_Clock_counter(ARMV7M_Timecounter *tc)
+{
+  volatile ARMV7M_Systick *systick;
+  rtems_interrupt_level level;
+  uint32_t interval;
+  uint32_t counter;
+  uint32_t ticks;
+
+  systick = _ARMV7M_Systick;
+  interval = systick->rvr;
+
+  rtems_interrupt_disable(level);
+  counter = systick->cvr;
+  ticks = tc->ticks;
+
+  if ((systick->csr & ARMV7M_SYSTICK_CSR_COUNTFLAG) != 0) {
+    ticks += interval;
+    tc->ticks = ticks;
+  }
+
+  counter = interval - counter + ticks;
+  rtems_interrupt_enable(level);
+
+  return counter;
+}
+
+#endif /* ARM_MULTILIB_ARCH_V7M */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* BSP_CLOCK_ARMV7M_H */
Index: bsps/arm/lpc176x/start/system-clocks.c
===================================================================
--- bsps/arm/lpc176x/start/system-clocks.c	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ bsps/arm/lpc176x/start/system-clocks.c	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -119,11 +119,2 @@
   return lpc176x_get_timer1();
 }
-
-inline CPU_Counter_ticks _CPU_Counter_difference(
-  CPU_Counter_ticks second,
-  CPU_Counter_ticks first
-)
-{
-  return second - first;
-}
-
Index: bsps/arm/shared/clock/clock-armv7m.c
===================================================================
--- bsps/arm/shared/clock/clock-armv7m.c	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ bsps/arm/shared/clock/clock-armv7m.c	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2011-2012 Sebastian Huber.  All rights reserved.
+ * Copyright (c) 2011, 2018 Sebastian Huber.  All rights reserved.
  *
  *  embedded brains GmbH
- *  Obere Lagerstr. 30
+ *  Dornierstr. 4
  *  82178 Puchheim
  *  Germany
@@ -13,9 +13,8 @@
  */
 
+#include <bsp/clock-armv7m.h>
+
 #include <rtems.h>
-#include <rtems/timecounter.h>
-#include <rtems/score/armv7m.h>
-
-#include <bsp.h>
+#include <rtems/sysinit.h>
 
 #ifdef ARM_MULTILIB_ARCH_V7M
@@ -24,75 +23,12 @@
 static void Clock_isr(void *arg);
 
-typedef struct {
-  rtems_timecounter_simple base;
-  void (*tick)(void);
-  bool countflag;
-} ARMV7M_Timecounter;
+ARMV7M_Timecounter _ARMV7M_TC;
 
-static ARMV7M_Timecounter _ARMV7M_TC;
-
-static uint32_t _ARMV7M_TC_systick_get(rtems_timecounter_simple *tc)
+static uint32_t _ARMV7M_TC_get_timecount(struct timecounter *base)
 {
-  volatile ARMV7M_Systick *systick = _ARMV7M_Systick;
-
-  return systick->cvr;
+  return _ARMV7M_Clock_counter((ARMV7M_Timecounter *) base);
 }
 
-static bool _ARMV7M_TC_systick_is_pending(rtems_timecounter_simple *base)
-{
-  ARMV7M_Timecounter *tc = (ARMV7M_Timecounter *) base;
-  rtems_interrupt_level level;
-  bool countflag;
-
-  rtems_interrupt_disable(level);
-
-  countflag = tc->countflag;
-  if (!countflag) {
-    volatile ARMV7M_Systick *systick = _ARMV7M_Systick;
-
-    countflag = ((systick->csr & ARMV7M_SYSTICK_CSR_COUNTFLAG) != 0);
-    tc->countflag = countflag;
-  }
-
-  rtems_interrupt_enable(level);
-
-  return countflag;
-}
-
-static uint32_t _ARMV7M_TC_systick_get_timecount(struct timecounter *tc)
-{
-  return rtems_timecounter_simple_downcounter_get(
-    tc,
-    _ARMV7M_TC_systick_get,
-    _ARMV7M_TC_systick_is_pending
-  );
-}
-
-static void _ARMV7M_TC_systick_at_tick(rtems_timecounter_simple *base)
-{
-  ARMV7M_Timecounter *tc = (ARMV7M_Timecounter *) base;
-  volatile ARMV7M_Systick *systick = _ARMV7M_Systick;
-
-  tc->countflag = false;
-
-  /* Clear COUNTFLAG */
-  systick->csr;
-}
-
-static void _ARMV7M_TC_systick_tick(void)
-{
-  rtems_timecounter_simple_downcounter_tick(
-    &_ARMV7M_TC.base,
-    _ARMV7M_TC_systick_get,
-    _ARMV7M_TC_systick_at_tick
-  );
-}
-
-static void _ARMV7M_TC_tick(void)
-{
-  (*_ARMV7M_TC.tick)();
-}
-
-static void _ARMV7M_Systick_handler(void)
+static void _ARMV7M_Clock_handler(void)
 {
   _ARMV7M_Interrupt_service_enter();
@@ -101,40 +37,57 @@
 }
 
-static void _ARMV7M_Systick_handler_install(void)
+static void _ARMV7M_Clock_handler_install(void)
 {
   _ARMV7M_Set_exception_priority_and_handler(
     ARMV7M_VECTOR_SYSTICK,
     BSP_ARMV7M_SYSTICK_PRIORITY,
-    _ARMV7M_Systick_handler
+    _ARMV7M_Clock_handler
   );
 }
 
-static void _ARMV7M_Systick_initialize(void)
+static void _ARMV7M_Clock_initialize(void)
 {
-  volatile ARMV7M_Systick *systick = _ARMV7M_Systick;
-  #ifdef BSP_ARMV7M_SYSTICK_FREQUENCY
-    uint64_t freq = BSP_ARMV7M_SYSTICK_FREQUENCY;
-  #else
-    uint64_t freq = ARMV7M_SYSTICK_CALIB_TENMS_GET(systick->calib) * 100ULL;
-  #endif
-  uint64_t us_per_tick = rtems_configuration_get_microseconds_per_tick();
-  uint64_t interval = (freq * us_per_tick) / 1000000ULL;
+  volatile ARMV7M_Systick *systick;
+  ARMV7M_Timecounter *tc;
 
-  systick->rvr = (uint32_t) interval;
-  systick->cvr = 0;
+  systick = _ARMV7M_Systick;
+  tc = &_ARMV7M_TC;
+
   systick->csr = ARMV7M_SYSTICK_CSR_ENABLE
     | ARMV7M_SYSTICK_CSR_TICKINT
     | ARMV7M_SYSTICK_CSR_CLKSOURCE;
 
-  _ARMV7M_TC.tick = _ARMV7M_TC_systick_tick;
-  rtems_timecounter_simple_install(
-    &_ARMV7M_TC.base,
-    freq,
-    interval,
-    _ARMV7M_TC_systick_get_timecount
-  );
+  tc->base.tc_get_timecount = _ARMV7M_TC_get_timecount;
+  tc->base.tc_counter_mask = 0xffffffff;
+  tc->base.tc_frequency = _ARMV7M_Clock_frequency();
+  tc->base.tc_quality = RTEMS_TIMECOUNTER_QUALITY_CLOCK_DRIVER;
+  rtems_timecounter_install(&tc->base);
 }
 
-static void _ARMV7M_Systick_cleanup(void)
+static void _ARMV7M_Clock_initialize_early(void)
+{
+  volatile ARMV7M_Systick *systick;
+  uint32_t us_per_tick;
+  uint64_t freq;
+  uint32_t interval;
+
+  systick = _ARMV7M_Systick;
+  us_per_tick = rtems_configuration_get_microseconds_per_tick();
+  freq = _ARMV7M_Clock_frequency();
+
+  interval = (uint32_t) ((freq * us_per_tick) / 1000000);
+
+  systick->rvr = interval;
+  systick->cvr = 0;
+  systick->csr = ARMV7M_SYSTICK_CSR_ENABLE | ARMV7M_SYSTICK_CSR_CLKSOURCE;
+}
+
+RTEMS_SYSINIT_ITEM(
+  _ARMV7M_Clock_initialize_early,
+  RTEMS_SYSINIT_CPU_COUNTER,
+  RTEMS_SYSINIT_ORDER_FIRST
+);
+
+static void _ARMV7M_Clock_cleanup(void)
 {
   volatile ARMV7M_Systick *systick = _ARMV7M_Systick;
@@ -143,14 +96,12 @@
 }
 
-#define Clock_driver_timecounter_tick() _ARMV7M_TC_tick()
-
 #define Clock_driver_support_initialize_hardware() \
-  _ARMV7M_Systick_initialize()
+  _ARMV7M_Clock_initialize()
 
 #define Clock_driver_support_install_isr(isr) \
-  _ARMV7M_Systick_handler_install()
+  _ARMV7M_Clock_handler_install()
 
 #define Clock_driver_support_shutdown_hardware() \
-  _ARMV7M_Systick_cleanup()
+  _ARMV7M_Clock_cleanup()
 
 /* Include shared source clock driver code */
Index: bsps/arm/shared/cpucounter/cpucounter-armv7m.c
===================================================================
--- bsps/arm/shared/cpucounter/cpucounter-armv7m.c	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ bsps/arm/shared/cpucounter/cpucounter-armv7m.c	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2016 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2016, 2018 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
@@ -13,42 +13,13 @@
  */
 
-#include <rtems/score/armv7m.h>
-#include <rtems/counter.h>
-#include <rtems/sysinit.h>
-
-#include <bsp.h>
-#include <bsp/fatal.h>
+#include <bsp/clock-armv7m.h>
 
 uint32_t _CPU_Counter_frequency(void)
 {
-#ifdef BSP_ARMV7M_SYSTICK_FREQUENCY
-  return = BSP_ARMV7M_SYSTICK_FREQUENCY;
-#else
-  volatile ARMV7M_Systick *systick = _ARMV7M_Systick;
-  return ARMV7M_SYSTICK_CALIB_TENMS_GET(systick->calib) * 100;
-#endif
+  return _ARMV7M_Clock_frequency();
 }
 
 CPU_Counter_ticks _CPU_Counter_read(void)
 {
-  volatile ARMV7M_DWT *dwt = _ARMV7M_DWT;
-
-  return dwt->cyccnt;
+  return _ARMV7M_Clock_counter(&_ARMV7M_TC);
 }
-
-static void armv7m_cpu_counter_initialize(void)
-{
-  bool cyccnt_enabled;
-
-  cyccnt_enabled = _ARMV7M_DWT_Enable_CYCCNT();
-
-  if (!cyccnt_enabled) {
-    bsp_fatal(BSP_ARM_ARMV7M_CPU_COUNTER_INIT);
-  }
-}
-
-RTEMS_SYSINIT_ITEM(
-  armv7m_cpu_counter_initialize,
-  RTEMS_SYSINIT_CPU_COUNTER,
-  RTEMS_SYSINIT_ORDER_FIRST
-);
Index: c/src/lib/libbsp/arm/altera-cyclone-v/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/altera-cyclone-v/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/altera-cyclone-v/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -44,5 +44,4 @@
 # Shared
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/getentropy/getentropy-cpucounter.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c
Index: c/src/lib/libbsp/arm/atsam/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/atsam/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/atsam/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -37,5 +37,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c
Index: c/src/lib/libbsp/arm/beagle/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/beagle/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/beagle/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -45,5 +45,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/gpio/gpio-support.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
Index: c/src/lib/libbsp/arm/csb336/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/csb336/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/csb336/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -28,5 +28,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/csb336/clock/clockdrv.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb336/btimer/btimer.c
Index: c/src/lib/libbsp/arm/csb337/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/csb337/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/csb337/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -37,5 +37,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/csb337/start/pmc.c
 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/csb337/clock/clock.c
Index: c/src/lib/libbsp/arm/edb7312/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/edb7312/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/edb7312/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -26,5 +26,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 
 # clock
Index: c/src/lib/libbsp/arm/gdbarmsim/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/gdbarmsim/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/gdbarmsim/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -28,5 +28,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 # console
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/console-polled.c
Index: c/src/lib/libbsp/arm/gumstix/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/gumstix/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/gumstix/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -27,5 +27,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/gumstix/clock/clock.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/gumstix/btimer/btimer.c
Index: c/src/lib/libbsp/arm/imx/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/imx/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/imx/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -32,5 +32,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/getentropy/getentropy-cpucounter.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
Index: c/src/lib/libbsp/arm/lm3s69xx/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/lm3s69xx/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/lm3s69xx/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -37,5 +37,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c
Index: c/src/lib/libbsp/arm/lpc24xx/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/lpc24xx/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/lpc24xx/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -56,5 +56,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/serial/uart-output-char.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 
 # Startup
Index: c/src/lib/libbsp/arm/lpc32xx/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/lpc32xx/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/lpc32xx/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -44,5 +44,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c
Index: c/src/lib/libbsp/arm/raspberrypi/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/raspberrypi/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/raspberrypi/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -42,5 +42,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c
Index: c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -41,5 +41,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c
Index: c/src/lib/libbsp/arm/rtl22xx/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/rtl22xx/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/rtl22xx/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -28,5 +28,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/rtl22xx/btimer/btimer.c
 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/rtl22xx/clock/clockdrv.c
Index: c/src/lib/libbsp/arm/smdk2410/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/smdk2410/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/smdk2410/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -28,5 +28,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/smdk2410/btimer/btimer.c
 librtemsbsp_a_SOURCES +=../../../../../../bsps/arm/smdk2410/clock/clockdrv.c
Index: c/src/lib/libbsp/arm/stm32f4/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/stm32f4/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/stm32f4/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -36,5 +36,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterfrequency.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterread.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c
Index: c/src/lib/libbsp/arm/tms570/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/tms570/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/tms570/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -45,5 +45,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/stackalloc.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/cp15/arm-cp15-set-exception-handler.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/arm/shared/cp15/arm-cp15-set-ttb-entries.c
Index: c/src/lib/libbsp/arm/xilinx-zynq/Makefile.am
===================================================================
--- c/src/lib/libbsp/arm/xilinx-zynq/Makefile.am	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ c/src/lib/libbsp/arm/xilinx-zynq/Makefile.am	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -39,5 +39,4 @@
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspfatal-default.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/bspgetworkarea-default.c
-librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/cpucounter/cpucounterdiff.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/start/sbrk.c
 librtemsbsp_a_SOURCES += ../../../../../../bsps/shared/dev/btimer/btimer-stub.c
Index: cpukit/score/cpu/arm/include/rtems/score/cpu.h
===================================================================
--- cpukit/score/cpu/arm/include/rtems/score/cpu.h	(revision 65f868cac6f7fd5c3ad02046574c19f8f4673255)
+++ cpukit/score/cpu/arm/include/rtems/score/cpu.h	(revision 762fa62ccaebadb7fa486da634c27b02960112b1)
@@ -601,8 +601,11 @@
 CPU_Counter_ticks _CPU_Counter_read( void );
 
-CPU_Counter_ticks _CPU_Counter_difference(
+static inline CPU_Counter_ticks _CPU_Counter_difference(
   CPU_Counter_ticks second,
   CPU_Counter_ticks first
-);
+)
+{
+  return second - first;
+}
 
 #if CPU_PROVIDES_IDLE_THREAD_BODY == TRUE
