summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--doc/sdccman.lyx46
-rw-r--r--src/SDCC.lex84
3 files changed, 104 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index af6c49fd8..51771cd97 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2025-07-16 Philipp Klaus Krause <philipp@colecovision.eu>
+
+ * src/SDCC.lex,
+ doc/sdccman.lyx:
+ #pragma max_allocs_per_node.
+
2025-07-15 Benedikt Freisen <b.freisen AT gmx.net>
* device/include/mcs51/at89x51.h:
diff --git a/doc/sdccman.lyx b/doc/sdccman.lyx
index a290b2309..1f2c093df 100644
--- a/doc/sdccman.lyx
+++ b/doc/sdccman.lyx
@@ -39607,6 +39607,52 @@ pragma nooverlay
\begin_layout Itemize
\series bold
+max_allocs_per_node
+\series default
+ <value>
+\begin_inset Index idx
+range none
+pageformat default
+status open
+
+\begin_layout Plain Layout
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+
+\backslash
+#
+\end_layout
+
+\end_inset
+
+pragma max_allocs_per_node
+\end_layout
+
+\end_inset
+
+- Use this value as limit for some optimizations.
+ See option -
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+
+\backslash
+/
+\end_layout
+
+\end_inset
+
+-max-allocs-per-node.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
stackauto
\series default
diff --git a/src/SDCC.lex b/src/SDCC.lex
index 2433232e0..f4090970e 100644
--- a/src/SDCC.lex
+++ b/src/SDCC.lex
@@ -819,6 +819,7 @@ enum {
P_INDUCTION,
P_NOINDUCTION,
P_NOINVARIANT,
+ P_MAX_ALLOCS_PER_NODE,
P_STACKAUTO,
P_OVERLAY_, /* I had a strange conflict with P_OVERLAY while */
/* cross-compiling for MINGW32 with gcc 3.2 */
@@ -1015,6 +1016,24 @@ doPragma (int id, const char *name, const char *cp)
optimize.loopInvariant = 0;
break;
+ case P_MAX_ALLOCS_PER_NODE:
+ cp = get_pragma_token(cp, &token);
+ if (TOKEN_INT != token.type)
+ {
+ err = 1;
+ break;
+ }
+
+ options.max_allocs_per_node = token.val.int_val;
+
+ cp = get_pragma_token(cp, &token);
+ if (TOKEN_EOL != token.type)
+ {
+ err = 1;
+ break;
+ }
+ break;
+
case P_STACKAUTO:
cp = get_pragma_token(cp, &token);
if (TOKEN_EOL != token.type)
@@ -1362,38 +1381,39 @@ doPragma (int id, const char *name, const char *cp)
}
static struct pragma_s pragma_tbl[] = {
- { "save", P_SAVE, 0, doPragma },
- { "restore", P_RESTORE, 0, doPragma },
- { "induction", P_INDUCTION, 0, doPragma },
- { "noinduction", P_NOINDUCTION, 0, doPragma },
- { "noinvariant", P_NOINVARIANT, 0, doPragma },
- { "noloopreverse", P_LOOPREV, 0, doPragma },
- { "stackauto", P_STACKAUTO, 0, doPragma },
- { "nogcse", P_NOGCSE, 0, doPragma },
- { "overlay", P_OVERLAY_, 0, doPragma },
- { "nooverlay", P_NOOVERLAY, 0, doPragma },
- { "callee_saves", P_CALLEE_SAVES, 0, doPragma },
- { "exclude", P_EXCLUDE, 0, doPragma },
- { "noiv", P_NOIV, 0, doPragma },
- { "less_pedantic", P_LESSPEDANTIC, 0, doPragma },
- { "disable_warning", P_DISABLEWARN, 0, doPragma },
- { "opt_code_speed", P_OPTCODESPEED, 0, doPragma },
- { "opt_code_size", P_OPTCODESIZE, 0, doPragma },
- { "opt_code_balanced", P_OPTCODEBALANCED, 0, doPragma },
- { "std_c89", P_STD_C89, 0, doPragma },
- { "std_c99", P_STD_C99, 0, doPragma },
- { "std_c11", P_STD_C11, 0, doPragma },
- { "std_c23", P_STD_C23, 0, doPragma },
- { "std_c2x", P_STD_C2X, 1, doPragma },
- { "std_c2y", P_STD_C2Y, 0, doPragma },
- { "std_sdcc89", P_STD_SDCC89, 0, doPragma },
- { "std_sdcc99", P_STD_SDCC99, 0, doPragma },
- { "std_sdcc11", P_STD_SDCC11, 0, doPragma },
- { "std_sdcc23", P_STD_SDCC23, 0, doPragma },
- { "std_sdcc2y", P_STD_SDCC2Y, 0, doPragma },
- { "codeseg", P_CODESEG, 0, doPragma },
- { "constseg", P_CONSTSEG, 0, doPragma },
- { NULL, 0, 0, NULL },
+ { "save", P_SAVE, 0, doPragma },
+ { "restore", P_RESTORE, 0, doPragma },
+ { "induction", P_INDUCTION, 0, doPragma },
+ { "noinduction", P_NOINDUCTION, 0, doPragma },
+ { "noinvariant", P_NOINVARIANT, 0, doPragma },
+ { "max_allocs_per_node", P_MAX_ALLOCS_PER_NODE, 0, doPragma },
+ { "noloopreverse", P_LOOPREV, 0, doPragma },
+ { "stackauto", P_STACKAUTO, 0, doPragma },
+ { "nogcse", P_NOGCSE, 0, doPragma },
+ { "overlay", P_OVERLAY_, 0, doPragma },
+ { "nooverlay", P_NOOVERLAY, 0, doPragma },
+ { "callee_saves", P_CALLEE_SAVES, 0, doPragma },
+ { "exclude", P_EXCLUDE, 0, doPragma },
+ { "noiv", P_NOIV, 0, doPragma },
+ { "less_pedantic", P_LESSPEDANTIC, 0, doPragma },
+ { "disable_warning", P_DISABLEWARN, 0, doPragma },
+ { "opt_code_speed", P_OPTCODESPEED, 0, doPragma },
+ { "opt_code_size", P_OPTCODESIZE, 0, doPragma },
+ { "opt_code_balanced", P_OPTCODEBALANCED, 0, doPragma },
+ { "std_c89", P_STD_C89, 0, doPragma },
+ { "std_c99", P_STD_C99, 0, doPragma },
+ { "std_c11", P_STD_C11, 0, doPragma },
+ { "std_c23", P_STD_C23, 0, doPragma },
+ { "std_c2x", P_STD_C2X, 1, doPragma },
+ { "std_c2y", P_STD_C2Y, 0, doPragma },
+ { "std_sdcc89", P_STD_SDCC89, 0, doPragma },
+ { "std_sdcc99", P_STD_SDCC99, 0, doPragma },
+ { "std_sdcc11", P_STD_SDCC11, 0, doPragma },
+ { "std_sdcc23", P_STD_SDCC23, 0, doPragma },
+ { "std_sdcc2y", P_STD_SDCC2Y, 0, doPragma },
+ { "codeseg", P_CODESEG, 0, doPragma },
+ { "constseg", P_CONSTSEG, 0, doPragma },
+ { NULL, 0, 0, NULL },
};
/*