aboutsummaryrefslogtreecommitdiffstats
path: root/src/sched.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2017-03-24 23:17:23 -0400
committerKevin O'Connor <kevin@koconnor.net>2017-03-26 22:45:58 -0400
commit4dfa6c6ee454d14a006033e218acbb7fa9ced8bd (patch)
tree8d8708a7d2d6b9d63cfcd54fe60859f900117382 /src/sched.c
parent60e488eb177a35084669cb85d81131ce95eac959 (diff)
downloadkutter-4dfa6c6ee454d14a006033e218acbb7fa9ced8bd.tar.gz
kutter-4dfa6c6ee454d14a006033e218acbb7fa9ced8bd.tar.xz
kutter-4dfa6c6ee454d14a006033e218acbb7fa9ced8bd.zip
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 <kevin@koconnor.net>
Diffstat (limited to 'src/sched.c')
-rw-r--r--src/sched.c6
1 files changed, 3 insertions, 3 deletions
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;