From 4dfa6c6ee454d14a006033e218acbb7fa9ced8bd Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Fri, 24 Mar 2017 23:17:23 -0400 Subject: avr: Introduce optimized timer_is_before() Provide hand-coded assembler for timer_is_before() on AVR as that code is used frequently in the time-critical timer dispatch loop and gcc doesn't do a good job at compiling that comparison code. Remove the no longer needed waketime+1 hack from reschedule_timer(). Signed-off-by: Kevin O'Connor --- src/sched.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/sched.c') diff --git a/src/sched.c b/src/sched.c index 7a68db86..cae2f819 100644 --- a/src/sched.c +++ b/src/sched.c @@ -127,9 +127,9 @@ sched_del_timer(struct timer *del) static struct timer * reschedule_timer(struct timer *t) { + uint32_t waketime = t->waketime; struct timer *pos = t->next; - uint32_t minwaketime = t->waketime + 1; - if (!timer_is_before(pos->waketime, minwaketime)) + if (timer_is_before(waketime, pos->waketime)) // Timer is still the first - no insertion needed return t; @@ -142,7 +142,7 @@ reschedule_timer(struct timer *t) // micro optimization for AVR - reduces register pressure asm("" : "+r"(prev) : : "memory"); pos = pos->next; - if (!timer_is_before(pos->waketime, minwaketime)) + if (timer_is_before(waketime, pos->waketime)) break; } t->next = pos; -- cgit v1.2.3-70-g09d2