diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | doc/sdccman.lyx | 46 | ||||
-rw-r--r-- | src/SDCC.lex | 84 |
3 files changed, 104 insertions, 32 deletions
@@ -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 }, }; /* |