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