kopia lustrzana https://github.com/micropython/micropython
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>pull/14126/head
rodzic
35b2edfc24
commit
35f3f0a87d
|
@ -75,7 +75,7 @@ NORETURN void nlr_jump(void *val) {
|
|||
"ret \n"
|
||||
:
|
||||
: "r" (top)
|
||||
:
|
||||
: "memory"
|
||||
);
|
||||
|
||||
MP_UNREACHABLE
|
||||
|
|
|
@ -78,7 +78,7 @@ NORETURN void nlr_jump(void *val) {
|
|||
"nop \n"
|
||||
:
|
||||
: "r" (top)
|
||||
:
|
||||
: "memory"
|
||||
);
|
||||
MP_UNREACHABLE
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Ładowanie…
Reference in New Issue