From 0d53dd7b5a025ca30ff4acf4f386c4490d3e0034 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 19 Mar 2024 15:08:42 +1100 Subject: [PATCH] py/nlr: Add "memory" to asm clobbers list in nlr_jump. Newer versions of gcc (14 and up) have more sophisticated dead-code detection, and the asm clobbers list needs to contain "memory" to inform the compiler that the asm code actually does something. Tested that adding this "memory" line does not change the generated code on ARM Thumb2, x86-64 and Xtensa targets (using gcc 13.2). Fixes issue #14115. Signed-off-by: Damien George (cherry picked from commit 35f3f0a87db2580041dd0f7dfd4361df48887796) --- py/nlraarch64.c | 2 +- py/nlrthumb.c | 2 +- py/nlrx64.c | 2 +- py/nlrx86.c | 2 +- py/nlrxtensa.c | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/py/nlraarch64.c b/py/nlraarch64.c index 1295351cbe828..5f7f1ad39ea18 100644 --- a/py/nlraarch64.c +++ b/py/nlraarch64.c @@ -74,7 +74,7 @@ NORETURN void nlr_jump(void *val) { "ret \n" : : "r" (top) - : + : "memory" ); MP_UNREACHABLE diff --git a/py/nlrthumb.c b/py/nlrthumb.c index a8ffecc470335..a22c5df5b9418 100644 --- a/py/nlrthumb.c +++ b/py/nlrthumb.c @@ -132,7 +132,7 @@ NORETURN void nlr_jump(void *val) { "bx lr \n" // return : // output operands : "r" (top) // input operands - : // clobbered registers + : "memory" // clobbered registers ); MP_UNREACHABLE diff --git a/py/nlrx64.c b/py/nlrx64.c index 6f006e755ec7c..c37d9093f16c6 100644 --- a/py/nlrx64.c +++ b/py/nlrx64.c @@ -105,7 +105,7 @@ NORETURN void nlr_jump(void *val) { "ret \n" // return : // output operands : "r" (top) // input operands - : // clobbered registers + : "memory" // clobbered registers ); MP_UNREACHABLE diff --git a/py/nlrx86.c b/py/nlrx86.c index f658d41910c8d..085e30d2034a1 100644 --- a/py/nlrx86.c +++ b/py/nlrx86.c @@ -95,7 +95,7 @@ NORETURN void nlr_jump(void *val) { "ret \n" // return : // output operands : "r" (top) // input operands - : // clobbered registers + : "memory" // clobbered registers ); MP_UNREACHABLE diff --git a/py/nlrxtensa.c b/py/nlrxtensa.c index abe9042af9f17..ff7af6edeef98 100644 --- a/py/nlrxtensa.c +++ b/py/nlrxtensa.c @@ -74,7 +74,7 @@ NORETURN void nlr_jump(void *val) { "ret.n \n" // return : // output operands : "r" (top) // input operands - : // clobbered registers + : "memory" // clobbered registers ); MP_UNREACHABLE