From 1e364345534d88ff1894d91f848a97e00fbbb305 Mon Sep 17 00:00:00 2001 From: Raphael Lehmann Date: Sun, 21 Jan 2024 13:56:16 +0100 Subject: [PATCH] [fiber] arm64 contect switch: Use ASM labels instead of jinja template magic --- src/modm/processing/fiber/context.h | 2 +- .../{context_arm64.cpp.in => context_arm64.cpp} | 12 +----------- src/modm/processing/fiber/module.lb | 2 +- 3 files changed, 3 insertions(+), 13 deletions(-) rename src/modm/processing/fiber/{context_arm64.cpp.in => context_arm64.cpp} (94%) diff --git a/src/modm/processing/fiber/context.h b/src/modm/processing/fiber/context.h index f532d6be36..79ff76de25 100644 --- a/src/modm/processing/fiber/context.h +++ b/src/modm/processing/fiber/context.h @@ -72,7 +72,7 @@ modm_context_start(modm_context_t *to); * to jump from one fiber to the next. */ void -modm_context_jump(modm_context_t *from, modm_context_t *to); +modm_context_jump(modm_context_t *from, modm_context_t *to) asm("_modm_context_jump"); /** * Switches control from the fiber context back to the main context. diff --git a/src/modm/processing/fiber/context_arm64.cpp.in b/src/modm/processing/fiber/context_arm64.cpp similarity index 94% rename from src/modm/processing/fiber/context_arm64.cpp.in rename to src/modm/processing/fiber/context_arm64.cpp index 649f55493e..6056cb6a2d 100644 --- a/src/modm/processing/fiber/context_arm64.cpp.in +++ b/src/modm/processing/fiber/context_arm64.cpp @@ -57,16 +57,11 @@ constexpr uintptr_t StackWatermark = 0xc0ffee'f00d'facade; } -extern "C" void modm_context_entry(); +extern "C" void modm_context_entry() asm("_modm_context_entry"); asm ( -%% if is_darwin ".globl _modm_context_entry \n\t" "_modm_context_entry: \n\t" -%% else - ".globl modm_context_entry \n\t" - "modm_context_entry: \n\t" -%% endif "ldr x0, [sp] \n\t" // Load closure data pointer "ldr x1, [sp, #8] \n\t" // Load closure function "br x1 \n\t" // Jump to closure function @@ -156,13 +151,8 @@ See https://github.com/boostorg/context/tree/develop/src/asm asm ( -%% if is_darwin ".globl _modm_context_jump \n\t" "_modm_context_jump: \n\t" -%% else - ".globl modm_context_jump \n\t" - "modm_context_jump: \n\t" -%% endif /* move stack pointer down */ "sub sp, sp, #0xa0 \n\t" diff --git a/src/modm/processing/fiber/module.lb b/src/modm/processing/fiber/module.lb index 1d2e72c0c0..9289a2608f 100644 --- a/src/modm/processing/fiber/module.lb +++ b/src/modm/processing/fiber/module.lb @@ -69,7 +69,7 @@ def build(env): elif "arm64" in core: env.substitutions["stack_minimum"] = (20 + 2) * 8 env.substitutions["default_stack_size"] = 2**20 # 1MB - env.template("context_arm64.cpp.in") + env.copy("context_arm64.cpp") env.copy("context.h") env.template("stack.hpp.in")