- processor_t processor = current_processor();
- timer_t timer;
- uint32_t old_low, low;
-
- /*
- * Update current timer.
- */
- timer = PROCESSOR_DATA(processor, current_timer);
- if (timer != NULL) {
- old_low = timer->low_bits;
- low = old_low + tstamp - timer->tstamp;
- if (low < old_low)
- timer_update(timer, timer->high_bits + 1, low);
- else
- timer->low_bits = low;
- }
-
- /*
- * Start new timer.
- */
- PROCESSOR_DATA(processor, current_timer) = new_timer;
- if (new_timer != NULL)
- new_timer->tstamp = tstamp;
+ timer_advance(timer, tstamp - timer->tstamp);
+ new_timer->tstamp = tstamp;