mirror of
https://github.com/Klipper3d/klipper.git
synced 2025-07-10 00:07:54 -06:00
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>
This commit is contained in:
parent
60e488eb17
commit
4dfa6c6ee4
2 changed files with 22 additions and 9 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue