Skip to content

Commit 8a23477

Browse files
committed
py: Move global variable nlr_top to one place, in a .c file.
This reduces dependency on assembler, and allows to consolidate global variables in the future.
1 parent 0b2a60a commit 8a23477

File tree

6 files changed

+14
-56
lines changed

6 files changed

+14
-56
lines changed

py/nlr.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,14 @@ struct _nlr_buf_t {
6464
#endif
6565
};
6666

67+
extern nlr_buf_t *nlr_top;
68+
6769
#if MICROPY_NLR_SETJMP
68-
extern nlr_buf_t *nlr_setjmp_top;
6970
NORETURN void nlr_setjmp_jump(void *val);
7071
// nlr_push() must be defined as a macro, because "The stack context will be
7172
// invalidated if the function which called setjmp() returns."
72-
#define nlr_push(buf) ((buf)->prev = nlr_setjmp_top, nlr_setjmp_top = (buf), setjmp((buf)->jmpbuf))
73-
#define nlr_pop() { nlr_setjmp_top = nlr_setjmp_top->prev; }
73+
#define nlr_push(buf) ((buf)->prev = nlr_top, nlr_top = (buf), setjmp((buf)->jmpbuf))
74+
#define nlr_pop() { nlr_top = nlr_top->prev; }
7475
#define nlr_jump(val) nlr_setjmp_jump(val)
7576
#else
7677
unsigned int nlr_push(nlr_buf_t *);

py/nlrsetjmp.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,14 @@
2626

2727
#include "py/nlr.h"
2828

29-
#if MICROPY_NLR_SETJMP
29+
// this global variable is used for all nlr implementations
30+
nlr_buf_t *nlr_top;
3031

31-
nlr_buf_t *nlr_setjmp_top;
32+
#if MICROPY_NLR_SETJMP
3233

3334
void nlr_setjmp_jump(void *val) {
34-
nlr_buf_t *buf = nlr_setjmp_top;
35-
nlr_setjmp_top = buf->prev;
35+
nlr_buf_t *buf = nlr_top;
36+
nlr_top = buf->prev;
3637
buf->ret_val = val;
3738
longjmp(buf->jmpbuf, 1);
3839
}

py/nlrthumb.S

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,16 @@ nlr_push:
5959
str r11, [r0, #40] @ store r11 into nlr_buf
6060
str r13, [r0, #44] @ store r13=sp into nlr_buf
6161

62-
ldr r3, .L2 @ load addr of nlr_top
62+
ldr r3, nlr_top_addr @ load addr of nlr_top
6363
ldr r2, [r3] @ load nlr_top
6464
str r2, [r0] @ store nlr_top into nlr_buf
6565
str r0, [r3] @ store nlr_buf into nlr_top (to link list)
6666

6767
movs r0, #0 @ return 0, normal return
6868
bx lr @ return
6969
.align 2
70-
.L2:
71-
.word .LANCHOR0
70+
nlr_top_addr:
71+
.word nlr_top
7272
.size nlr_push, .-nlr_push
7373

7474
/**************************************/
@@ -81,14 +81,11 @@ nlr_push:
8181
#endif
8282
.type nlr_pop, %function
8383
nlr_pop:
84-
ldr r3, .L5 @ load addr of nlr_top
84+
ldr r3, nlr_top_addr @ load addr of nlr_top
8585
ldr r2, [r3] @ load nlr_top
8686
ldr r2, [r2] @ load prev nlr_buf
8787
str r2, [r3] @ store prev nlr_buf to nlr_top (to unlink list)
8888
bx lr @ return
89-
.align 2
90-
.L5:
91-
.word .LANCHOR0
9289
.size nlr_pop, .-nlr_pop
9390

9491
/**************************************/
@@ -101,7 +98,7 @@ nlr_pop:
10198
#endif
10299
.type nlr_jump, %function
103100
nlr_jump:
104-
ldr r3, .L2 @ load addr of nlr_top
101+
ldr r3, nlr_top_addr @ load addr of nlr_top
105102
ldr r2, [r3] @ load nlr_top
106103
cmp r2, #0 @ test if nlr_top is NULL
107104
beq nlr_jump_fail @ if nlr_top is NULL, transfer control to nlr_jump_fail
@@ -122,20 +119,6 @@ nlr_jump:
122119

123120
movs r0, #1 @ return 1, non-local return
124121
bx lr @ return
125-
.align 2
126-
.L6:
127-
.word .LANCHOR0
128122
.size nlr_jump, .-nlr_jump
129123

130-
/**************************************/
131-
// local variable nlr_top
132-
133-
.bss
134-
.align 2
135-
.set .LANCHOR0,. + 0
136-
.type nlr_top, %object
137-
.size nlr_top, 4
138-
nlr_top:
139-
.space 4
140-
141124
#endif // (!defined(MICROPY_NLR_SETJMP) || !MICROPY_NLR_SETJMP) && (defined(__thumb2__) || defined(__thumb__) || defined(__arm__))

py/nlrx64.S

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,6 @@ nlr_jump:
131131
je _nlr_jump_fail # transfer control to nlr_jump_fail
132132
#endif
133133

134-
/**************************************/
135-
// local variable nlr_top
136-
137-
#if !(defined(__APPLE__) && defined(__MACH__))
138-
.bss
139-
.local nlr_top
140-
#endif
141-
.comm nlr_top,8,8
142-
143134
#else // !defined(__CYGWIN__)
144135

145136
/******************************************************************************/
@@ -210,12 +201,6 @@ nlr_jump:
210201
movq %rax, %rcx # put argument back in first-arg register
211202
je nlr_jump_fail # transfer control to nlr_jump_fail
212203

213-
/**************************************/
214-
// local variable nlr_top
215-
216-
.bss
217-
.comm nlr_top,8,8
218-
219204
#endif // !defined(__CYGWIN__)
220205

221206
#endif // defined(__x86_64__) && !MICROPY_NLR_SETJMP

py/nlrx86.S

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,4 @@ nlr_jump:
121121
.size nlr_jump, .-nlr_jump
122122
#endif
123123

124-
/**************************************/
125-
// local variable nlr_top
126-
127-
.bss
128-
#ifndef _WIN32
129-
.local nlr_top
130-
#endif
131-
.comm nlr_top,4,4
132-
133124
#endif // defined(__i386__) && !MICROPY_NLR_SETJMP

py/nlrxtensa.S

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,4 @@ nlr_jump:
108108
ret.n
109109
.size nlr_jump, .-nlr_jump
110110

111-
.local nlr_top
112-
.comm nlr_top,4,4
113-
114111
#endif // defined(__xtensa__)

0 commit comments

Comments
 (0)