removed double r2 saving/restoring

This commit is contained in:
2022-08-30 12:19:19 +02:00
parent b8970a05b3
commit 02c112b945

8
main.c
View File

@@ -76,7 +76,7 @@ typedef struct {
} task_t;
#define TASK_COUNT_REG 9
#define TASK_COUNT_REG 8
typedef struct __attribute__((packed)) {
struct {
@@ -164,20 +164,20 @@ void __attribute__((naked)) pend_sv_handler(void) {
uint32_t psp;
__asm__(
"mrs %0, psp\n"
"stmdb %0!, {r2,r4-r11}\n"
"stmdb %0!, {r4-r11}\n"
"msr psp, %0\n" : "=r"(psp)
);
g_scheduler.tasks[g_scheduler.current_task].sp = psp;
} else {
__asm__(
"stmdb sp!, {r2,r4-r11}\n");
"stmdb sp!, {r4-r11}\n");
}
scheduler_switch(&g_scheduler);
uint32_t psp = (uint32_t)g_scheduler.tasks[g_scheduler.current_task].sp;
__asm__(
"ldmfd %0!, {r2,r4-r11}\n"
"ldmfd %0!, {r4-r11}\n"
"msr psp, %0\n"::"r"(psp)
);