From 35f3f0a87db2580041dd0f7dfd4361df48887796 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 --- py/nlraarch64.c | 2 +- py/nlrmips.c | 2 +- py/nlrpowerpc.c | 4 ++-- py/nlrthumb.c | 2 +- py/nlrx64.c | 2 +- py/nlrx86.c | 2 +- py/nlrxtensa.c | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/py/nlraarch64.c b/py/nlraarch64.c index fcc318f2dc..d6d87ebc50 100644 --- a/py/nlraarch64.c +++ b/py/nlraarch64.c @@ -75,7 +75,7 @@ NORETURN void nlr_jump(void *val) { "ret \n" : : "r" (top) - : + : "memory" ); MP_UNREACHABLE diff --git a/py/nlrmips.c b/py/nlrmips.c index bd5d73b6f7..cba52b16a2 100644 --- a/py/nlrmips.c +++ b/py/nlrmips.c @@ -78,7 +78,7 @@ NORETURN void nlr_jump(void *val) { "nop \n" : : "r" (top) - : + : "memory" ); MP_UNREACHABLE } diff --git a/py/nlrpowerpc.c b/py/nlrpowerpc.c index 448459216b..8a69fe1eec 100644 --- a/py/nlrpowerpc.c +++ b/py/nlrpowerpc.c @@ -114,7 +114,7 @@ NORETURN void nlr_jump(void *val) { "blr ;" : : "r" (&top->regs) - : + : "memory" ); MP_UNREACHABLE; @@ -203,7 +203,7 @@ NORETURN void nlr_jump(void *val) { "blr ;" : : "r" (&top->regs) - : + : "memory" ); MP_UNREACHABLE; diff --git a/py/nlrthumb.c b/py/nlrthumb.c index a8ffecc470..a22c5df5b9 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 6b7d0262f5..d1ad91ff7d 100644 --- a/py/nlrx64.c +++ b/py/nlrx64.c @@ -123,7 +123,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 f658d41910..085e30d203 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 abe9042af9..ff7af6edee 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