Source: python-greenlet Version: 3.0.1-3 Severity: normal Tags: patch User: debian-sup...@lists.debian.org Usertags: sh4 X-Debbugs-Cc: debian-sup...@lists.debian.org
Hi, the attached patch adds support for building python-greenlet on sh4, it's a modified (fixed) version that is currently open for review upstream [1]. The fixed version can be found here [2]. Thanks, Adrian > [1] https://github.com/python-greenlet/greenlet/pull/398 > [2] > https://github.com/glaubitz/greenlet/commit/e73592dec7950ad9fcdb5c0287ef3758df010f11 -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer `. `' Physicist `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913
>From e73592dec7950ad9fcdb5c0287ef3758df010f11 Mon Sep 17 00:00:00 2001 From: Pietro Monteiro <pie...@sociotechnical.xyz> Date: Wed, 6 Mar 2024 21:59:14 -0500 Subject: [PATCH] Add support for SuperH --- src/greenlet/platform/switch_sh_gcc.h | 36 +++++++++++++++++++++++++++ src/greenlet/slp_platformselect.h | 2 ++ 2 files changed, 38 insertions(+) create mode 100644 src/greenlet/platform/switch_sh_gcc.h diff --git a/src/greenlet/platform/switch_sh_gcc.h b/src/greenlet/platform/switch_sh_gcc.h new file mode 100644 index 0000000..5ecc3b3 --- /dev/null +++ b/src/greenlet/platform/switch_sh_gcc.h @@ -0,0 +1,36 @@ +#define STACK_REFPLUS 1 + +#ifdef SLP_EVAL +#define STACK_MAGIC 0 +#define REGS_TO_SAVE "r8", "r9", "r10", "r11", "r13", \ + "fr12", "fr13", "fr14", "fr15" + +// r12 Global context pointer, GP +// r14 Frame pointer, FP +// r15 Stack pointer, SP + +static int +slp_switch(void) +{ + int err; + void* fp; + int *stackref, stsizediff; + __asm__ volatile("" : : : REGS_TO_SAVE); + __asm__ volatile("mov.l r14, %0" : "=m"(fp) : :); + __asm__("mov r15, %0" : "=r"(stackref)); + { + SLP_SAVE_STATE(stackref, stsizediff); + __asm__ volatile( + "add %0, r15\n" + "add %0, r14\n" + : /* no outputs */ + : "r"(stsizediff)); + SLP_RESTORE_STATE(); + __asm__ volatile("mov r0, %0" : "=r"(err) : :); + } + __asm__ volatile("mov.l %0, r14" : : "m"(fp) :); + __asm__ volatile("" : : : REGS_TO_SAVE); + return err; +} + +#endif diff --git a/src/greenlet/slp_platformselect.h b/src/greenlet/slp_platformselect.h index c959f0f..8a77328 100644 --- a/src/greenlet/slp_platformselect.h +++ b/src/greenlet/slp_platformselect.h @@ -64,6 +64,8 @@ extern "C" { # include "platform/switch_aarch64_gcc.h" /* LLVM Aarch64 ABI for Windows */ #elif defined(__GNUC__) && defined(__loongarch64) && defined(__linux__) # include "platform/switch_loongarch64_linux.h" /* LoongArch64 */ +#elif defined(__GNUC__) && defined(__sh__) +# include "platform/switch_sh_gcc.h" /* SuperH */ #endif #ifdef __cplusplus -- 2.44.0