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 <damien@micropython.org>
This commit is contained in:
Damien George 2024-03-19 15:08:42 +11:00
parent 35b2edfc24
commit 35f3f0a87d
7 changed files with 8 additions and 8 deletions

View File

@ -75,7 +75,7 @@ NORETURN void nlr_jump(void *val) {
"ret \n" "ret \n"
: :
: "r" (top) : "r" (top)
: : "memory"
); );
MP_UNREACHABLE MP_UNREACHABLE

View File

@ -78,7 +78,7 @@ NORETURN void nlr_jump(void *val) {
"nop \n" "nop \n"
: :
: "r" (top) : "r" (top)
: : "memory"
); );
MP_UNREACHABLE MP_UNREACHABLE
} }

View File

@ -114,7 +114,7 @@ NORETURN void nlr_jump(void *val) {
"blr ;" "blr ;"
: :
: "r" (&top->regs) : "r" (&top->regs)
: : "memory"
); );
MP_UNREACHABLE; MP_UNREACHABLE;
@ -203,7 +203,7 @@ NORETURN void nlr_jump(void *val) {
"blr ;" "blr ;"
: :
: "r" (&top->regs) : "r" (&top->regs)
: : "memory"
); );
MP_UNREACHABLE; MP_UNREACHABLE;

View File

@ -132,7 +132,7 @@ NORETURN void nlr_jump(void *val) {
"bx lr \n" // return "bx lr \n" // return
: // output operands : // output operands
: "r" (top) // input operands : "r" (top) // input operands
: // clobbered registers : "memory" // clobbered registers
); );
MP_UNREACHABLE MP_UNREACHABLE

View File

@ -123,7 +123,7 @@ NORETURN void nlr_jump(void *val) {
"ret \n" // return "ret \n" // return
: // output operands : // output operands
: "r" (top) // input operands : "r" (top) // input operands
: // clobbered registers : "memory" // clobbered registers
); );
MP_UNREACHABLE MP_UNREACHABLE

View File

@ -95,7 +95,7 @@ NORETURN void nlr_jump(void *val) {
"ret \n" // return "ret \n" // return
: // output operands : // output operands
: "r" (top) // input operands : "r" (top) // input operands
: // clobbered registers : "memory" // clobbered registers
); );
MP_UNREACHABLE MP_UNREACHABLE

View File

@ -74,7 +74,7 @@ NORETURN void nlr_jump(void *val) {
"ret.n \n" // return "ret.n \n" // return
: // output operands : // output operands
: "r" (top) // input operands : "r" (top) // input operands
: // clobbered registers : "memory" // clobbered registers
); );
MP_UNREACHABLE MP_UNREACHABLE