- 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;
+#if defined(__LP64__)
+ timer->all_bits += delta;
+#else /* defined(__LP64__) */
+ extern void timer_advance_internal_32(timer_t timer, uint32_t high,
+ uint32_t low);
+ uint64_t low = delta + timer->low_bits;
+ if (low >> 32) {
+ timer_advance_internal_32(timer,
+ (uint32_t)(timer->high_bits + (low >> 32)), (uint32_t)low);
+ } else {
+ timer->low_bits = (uint32_t)low;