Refactor SystemStack function for arm targets.

Removing usage of AsmFull in favor of writing inline assembly in C.
Этот коммит содержится в:
Justin A. Wilson 2023-03-05 00:57:23 -06:00 коммит произвёл Ron Evans
родитель 360f6904f5
коммит a3fdbec13d
2 изменённых файлов: 16 добавлений и 4 удалений

12
src/internal/task/task_stack_cortexm.c Обычный файл
Просмотреть файл

@ -0,0 +1,12 @@
#include <stdint.h>
uintptr_t SystemStack() {
uintptr_t sp;
asm volatile(
"mrs %0, MSP"
: "=r"(sp)
:
: "memory"
);
return sp;
}

Просмотреть файл

@ -8,8 +8,8 @@ package task
// PSP, which is used for goroutines) so that goroutines do not need extra stack // PSP, which is used for goroutines) so that goroutines do not need extra stack
// space for interrupts. // space for interrupts.
import "C"
import ( import (
"device/arm"
"unsafe" "unsafe"
) )
@ -67,6 +67,6 @@ func (s *state) pause() {
// SystemStack returns the system stack pointer. On Cortex-M, it is always // SystemStack returns the system stack pointer. On Cortex-M, it is always
// available. // available.
func SystemStack() uintptr { //
return arm.AsmFull("mrs {}, MSP", nil) //export SystemStack
} func SystemStack() uintptr