Skip to content

Commit 35f3f0a

Browse files
committedMar 25, 2024
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 micropython#14115. Signed-off-by: Damien George <[email protected]>
1 parent 35b2edf commit 35f3f0a

7 files changed

+8
-8
lines changed
 

‎py/nlraarch64.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ NORETURN void nlr_jump(void *val) {
7575
"ret \n"
7676
:
7777
: "r" (top)
78-
:
78+
: "memory"
7979
);
8080

8181
MP_UNREACHABLE

‎py/nlrmips.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ NORETURN void nlr_jump(void *val) {
7878
"nop \n"
7979
:
8080
: "r" (top)
81-
:
81+
: "memory"
8282
);
8383
MP_UNREACHABLE
8484
}

‎py/nlrpowerpc.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ NORETURN void nlr_jump(void *val) {
114114
"blr ;"
115115
:
116116
: "r" (&top->regs)
117-
:
117+
: "memory"
118118
);
119119

120120
MP_UNREACHABLE;
@@ -203,7 +203,7 @@ NORETURN void nlr_jump(void *val) {
203203
"blr ;"
204204
:
205205
: "r" (&top->regs)
206-
:
206+
: "memory"
207207
);
208208

209209
MP_UNREACHABLE;

‎py/nlrthumb.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ NORETURN void nlr_jump(void *val) {
132132
"bx lr \n" // return
133133
: // output operands
134134
: "r" (top) // input operands
135-
: // clobbered registers
135+
: "memory" // clobbered registers
136136
);
137137

138138
MP_UNREACHABLE

‎py/nlrx64.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ NORETURN void nlr_jump(void *val) {
123123
"ret \n" // return
124124
: // output operands
125125
: "r" (top) // input operands
126-
: // clobbered registers
126+
: "memory" // clobbered registers
127127
);
128128

129129
MP_UNREACHABLE

‎py/nlrx86.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ NORETURN void nlr_jump(void *val) {
9595
"ret \n" // return
9696
: // output operands
9797
: "r" (top) // input operands
98-
: // clobbered registers
98+
: "memory" // clobbered registers
9999
);
100100

101101
MP_UNREACHABLE

‎py/nlrxtensa.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ NORETURN void nlr_jump(void *val) {
7474
"ret.n \n" // return
7575
: // output operands
7676
: "r" (top) // input operands
77-
: // clobbered registers
77+
: "memory" // clobbered registers
7878
);
7979

8080
MP_UNREACHABLE

0 commit comments

Comments
 (0)
Please sign in to comment.