summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/global.h
diff options
context:
space:
mode:
authorLukas Larsson <lukas@erlang.org>2021-11-25 09:09:18 +0100
committerLukas Larsson <lukas@erlang.org>2021-11-25 09:09:18 +0100
commit169e7968043ccdb09ba1b67601879400f59ccb80 (patch)
tree2ea684677dc8d90038a4654e86af4a50ec7e63cf /erts/emulator/beam/global.h
parent0e520fac4d4c7ddd7608e3310dd57e51bdeb1a93 (diff)
parentddf4165c0188f4ca49cf8c9205b928ce776f5f92 (diff)
downloaderlang-169e7968043ccdb09ba1b67601879400f59ccb80.tar.gz
Merge branch 'maint'
Diffstat (limited to 'erts/emulator/beam/global.h')
-rw-r--r--erts/emulator/beam/global.h74
1 files changed, 27 insertions, 47 deletions
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index f1f44351b3..b0dd2fe57c 100644
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -443,28 +443,29 @@ do { \
#define ESTACK_IS_STATIC(s) ((s).start == ESTK_DEF_STACK(s))
+#define ESTACK_RESERVE(s, push_cnt) \
+do { \
+ if ((s).end - (s).sp < (Sint)(push_cnt)) { \
+ erl_grow_estack(&(s), (push_cnt)); \
+ } \
+} while(0)
+
#define ESTACK_PUSH(s, x) \
do { \
- if ((s).sp == (s).end) { \
- erl_grow_estack(&(s), 1); \
- } \
+ ESTACK_RESERVE(s, 1); \
*(s).sp++ = (x); \
} while(0)
#define ESTACK_PUSH2(s, x, y) \
do { \
- if ((s).sp > (s).end - 2) { \
- erl_grow_estack(&(s), 2); \
- } \
+ ESTACK_RESERVE(s, 2); \
*(s).sp++ = (x); \
*(s).sp++ = (y); \
} while(0)
#define ESTACK_PUSH3(s, x, y, z) \
do { \
- if ((s).sp > (s).end - 3) { \
- erl_grow_estack(&s, 3); \
- } \
+ ESTACK_RESERVE(s, 3); \
*(s).sp++ = (x); \
*(s).sp++ = (y); \
*(s).sp++ = (z); \
@@ -472,22 +473,13 @@ do { \
#define ESTACK_PUSH4(s, E1, E2, E3, E4) \
do { \
- if ((s).sp > (s).end - 4) { \
- erl_grow_estack(&s, 4); \
- } \
+ ESTACK_RESERVE(s, 4); \
*(s).sp++ = (E1); \
*(s).sp++ = (E2); \
*(s).sp++ = (E3); \
*(s).sp++ = (E4); \
} while(0)
-#define ESTACK_RESERVE(s, push_cnt) \
-do { \
- if ((s).sp > (s).end - (push_cnt)) { \
- erl_grow_estack(&(s), (push_cnt)); \
- } \
-} while(0)
-
/* Must be preceded by ESTACK_RESERVE */
#define ESTACK_FAST_PUSH(s, x) \
do { \
@@ -642,28 +634,29 @@ do { \
#define WSTACK_IS_STATIC(s) (s.wstart == WSTK_DEF_STACK(s))
-#define WSTACK_PUSH(s, x) \
-do { \
- if (s.wsp == s.wend) { \
- erl_grow_wstack(&s, 1); \
- } \
- *s.wsp++ = (x); \
+#define WSTACK_RESERVE(s, push_cnt) \
+do { \
+ if (s.wend - s.wsp < (Sint)(push_cnt)) { \
+ erl_grow_wstack(&s, (push_cnt)); \
+ } \
+} while(0)
+
+#define WSTACK_PUSH(s, x) \
+do { \
+ WSTACK_RESERVE(s, 1); \
+ *s.wsp++ = (x); \
} while(0)
#define WSTACK_PUSH2(s, x, y) \
do { \
- if (s.wsp > s.wend - 2) { \
- erl_grow_wstack(&s, 2); \
- } \
+ WSTACK_RESERVE(s, 2); \
*s.wsp++ = (x); \
*s.wsp++ = (y); \
} while(0)
#define WSTACK_PUSH3(s, x, y, z) \
do { \
- if (s.wsp > s.wend - 3) { \
- erl_grow_wstack(&s, 3); \
- } \
+ WSTACK_RESERVE(s, 3); \
*s.wsp++ = (x); \
*s.wsp++ = (y); \
*s.wsp++ = (z); \
@@ -671,9 +664,7 @@ do { \
#define WSTACK_PUSH4(s, A1, A2, A3, A4) \
do { \
- if (s.wsp > s.wend - 4) { \
- erl_grow_wstack(&s, 4); \
- } \
+ WSTACK_RESERVE(s, 4); \
*s.wsp++ = (A1); \
*s.wsp++ = (A2); \
*s.wsp++ = (A3); \
@@ -682,9 +673,7 @@ do { \
#define WSTACK_PUSH5(s, A1, A2, A3, A4, A5) \
do { \
- if (s.wsp > s.wend - 5) { \
- erl_grow_wstack(&s, 5); \
- } \
+ WSTACK_RESERVE(s, 5); \
*s.wsp++ = (A1); \
*s.wsp++ = (A2); \
*s.wsp++ = (A3); \
@@ -694,9 +683,7 @@ do { \
#define WSTACK_PUSH6(s, A1, A2, A3, A4, A5, A6) \
do { \
- if (s.wsp > s.wend - 6) { \
- erl_grow_wstack(&s, 6); \
- } \
+ WSTACK_RESERVE(s, 6); \
*s.wsp++ = (A1); \
*s.wsp++ = (A2); \
*s.wsp++ = (A3); \
@@ -705,13 +692,6 @@ do { \
*s.wsp++ = (A6); \
} while(0)
-#define WSTACK_RESERVE(s, push_cnt) \
-do { \
- if (s.wsp > s.wend - (push_cnt)) { \
- erl_grow_wstack(&s, (push_cnt)); \
- } \
-} while(0)
-
/* Must be preceded by WSTACK_RESERVE */
#define WSTACK_FAST_PUSH(s, x) \
do { \