From e8bfcefdb17fa117ec0bef48484b146acf489ded Mon Sep 17 00:00:00 2001 From: Zeex Date: Mon, 13 Jan 2014 01:43:12 +0700 Subject: [PATCH] Normalize line endings --- source/compiler/sc5.scp | 384 ++--- source/compiler/sc7.scp | 3392 +++++++++++++++++++-------------------- 2 files changed, 1888 insertions(+), 1888 deletions(-) diff --git a/source/compiler/sc5.scp b/source/compiler/sc5.scp index 546d83b..d442e11 100644 --- a/source/compiler/sc5.scp +++ b/source/compiler/sc5.scp @@ -1,31 +1,31 @@ -/* Pawn compiler - Error message strings (plain and compressed formats) - * - * Copyright (c) ITB CompuPhase, 2000-2006 - * - * This software is provided "as-is", without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc5.sch 3633 2006-08-11 16:20:18Z thiadmer $ - */ - -SC_FUNC int strexpand(char *dest, unsigned char *source, int maxlen, unsigned char pairtable[128][2]); - -#define SCPACK_TABLE errstr_table +/* Pawn compiler - Error message strings (plain and compressed formats) + * + * Copyright (c) ITB CompuPhase, 2000-2006 + * + * This software is provided "as-is", without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in + * a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Version: $Id: sc5.sch 3633 2006-08-11 16:20:18Z thiadmer $ + */ + +SC_FUNC int strexpand(char *dest, unsigned char *source, int maxlen, unsigned char pairtable[128][2]); + +#define SCPACK_TABLE errstr_table /*-*SCPACK start of pair table, do not change or remove this line */ -unsigned char errstr_table [][2] = { +unsigned char errstr_table[][2] = { {101,32}, {111,110}, {116,32}, {105,110}, {97,114}, {116,105}, {100,32}, {115,32}, {101,114}, {37,115}, {97,108}, {101,110}, {133,129}, {34,137}, {141,34}, {117,110}, {114,101}, {110,111}, {115,105}, {121,32}, {97,116}, {111,114}, {97,110}, {32,142}, {109,98}, {115,116}, {41,10}, {100,101}, {109,139}, {101,134}, {98,108}, {140,32}, {111,108}, {114,97}, {145,130}, {118,138}, {143,99}, {102,164}, {115,121}, {166,152}, {167,160}, {117,115}, {97,32}, {115,146}, {97,158}, {149,32}, {132,161}, {105,134}, @@ -36,101 +36,101 @@ unsigned char errstr_table [][2] = { {212,203}, {102,105}, {119,105}, {185,238}, {109,112}, {116,136}, {165,140}, {197,147}, {102,149}, {111,32}, {131,32}, {213,176}, {110,117}, {115,117}, {118,128} }; /*-*SCPACK end of pair table, do not change or remove this line */ - -static char *errmsg[] = { -#ifdef SCPACK -/*001*/ "expected token: \"%s\", but found \"%s\"\n", -/*002*/ "only a single statement (or expression) can follow each \"case\"\n", -/*003*/ "declaration of a local variable must appear in a compound block\n", -/*004*/ "function \"%s\" is not implemented\n", -/*005*/ "function may not have arguments\n", -/*006*/ "must be assigned to an array\n", -/*007*/ "operator cannot be redefined\n", -/*008*/ "must be a constant expression; assumed zero\n", -/*009*/ "invalid array size (negative, zero or out of bounds)\n", -/*010*/ "invalid function or declaration\n", -/*011*/ "invalid outside functions\n", -/*012*/ "invalid function call, not a valid address\n", -/*013*/ "no entry point (no public functions)\n", -/*014*/ "invalid statement; not in switch\n", -/*015*/ "\"default\" case must be the last case in switch statement\n", -/*016*/ "multiple defaults in \"switch\"\n", -/*017*/ "undefined symbol \"%s\"\n", -/*018*/ "initialization data exceeds declared size\n", -/*019*/ "not a label: \"%s\"\n", -/*020*/ "invalid symbol name \"%s\"\n", -/*021*/ "symbol already defined: \"%s\"\n", -/*022*/ "must be lvalue (non-constant)\n", -/*023*/ "array assignment must be simple assignment\n", -/*024*/ "\"break\" or \"continue\" is out of context\n", -/*025*/ "function heading differs from prototype\n", -/*026*/ "no matching \"#if...\"\n", -/*027*/ "invalid character constant\n", -/*028*/ "invalid subscript (not an array or too many subscripts): \"%s\"\n", -/*029*/ "invalid expression, assumed zero\n", -/*030*/ "compound statement not closed at the end of file (started at line %d)\n", -/*031*/ "unknown directive\n", -/*032*/ "array index out of bounds (variable \"%s\")\n", -/*033*/ "array must be indexed (variable \"%s\")\n", -/*034*/ "argument does not have a default value (argument %d)\n", -/*035*/ "argument type mismatch (argument %d)\n", -/*036*/ "empty statement\n", -/*037*/ "invalid string (possibly non-terminated string)\n", -/*038*/ "extra characters on line\n", -/*039*/ "constant symbol has no size\n", -/*040*/ "duplicate \"case\" label (value %d)\n", -/*041*/ "invalid ellipsis, array size is not known\n", -/*042*/ "invalid combination of class specifiers\n", -/*043*/ "character constant exceeds range for packed string\n", -/*044*/ "positional parameters must precede all named parameters\n", -/*045*/ "too many function arguments\n", -/*046*/ "unknown array size (variable \"%s\")\n", -/*047*/ "array sizes do not match, or destination array is too small\n", -/*048*/ "array dimensions do not match\n", -/*049*/ "invalid line continuation\n", -/*050*/ "invalid range\n", -/*051*/ "invalid subscript, use \"[ ]\" operators on major dimensions\n", -/*052*/ "multi-dimensional arrays must be fully initialized\n", -/*053*/ "exceeding maximum number of dimensions\n", -/*054*/ "unmatched closing brace (\"}\")\n", -/*055*/ "start of function body without function header\n", -/*056*/ "arrays, local variables and function arguments cannot be public (variable \"%s\")\n", -/*057*/ "unfinished expression before compiler directive\n", -/*058*/ "duplicate argument; same argument is passed twice\n", -/*059*/ "function argument may not have a default value (variable \"%s\")\n", -/*060*/ "multiple \"#else\" directives between \"#if ... #endif\"\n", -/*061*/ "\"#elseif\" directive follows an \"#else\" directive\n", -/*062*/ "number of operands does not fit the operator\n", -/*063*/ "function result tag of operator \"%s\" must be \"%s\"\n", -/*064*/ "cannot change predefined operators\n", -/*065*/ "function argument may only have a single tag (argument %d)\n", -/*066*/ "function argument may not be a reference argument or an array (argument \"%s\")\n", -/*067*/ "variable cannot be both a reference and an array (variable \"%s\")\n", -/*068*/ "invalid rational number precision in #pragma\n", -/*069*/ "rational number format already defined\n", -/*070*/ "rational number support was not enabled\n", -/*071*/ "user-defined operator must be declared before use (function \"%s\")\n", -/*072*/ "\"sizeof\" operator is invalid on \"function\" symbols\n", -/*073*/ "function argument must be an array (argument \"%s\")\n", -/*074*/ "#define pattern must start with an alphabetic character\n", -/*075*/ "input line too long (after substitutions)\n", -/*076*/ "syntax error in the expression, or invalid function call\n", -/*077*/ "malformed UTF-8 encoding, or corrupted file: %s\n", -/*078*/ "function uses both \"return\" and \"return \"\n", -/*079*/ "inconsistent return types (array & non-array)\n", -/*080*/ "unknown symbol, or not a constant symbol (symbol \"%s\")\n", -/*081*/ "cannot take a tag as a default value for an indexed array parameter (symbol \"%s\")\n", -/*082*/ "user-defined operators and native functions may not have states\n", -/*083*/ "a function or variable may only belong to a single automaton (symbol \"%s\")\n", -/*084*/ "state conflict: one of the states is already assigned to another implementation (symbol \"%s\")\n", -/*085*/ "no states are defined for symbol \"%s\"\n", -/*086*/ "unknown automaton \"%s\"\n", -/*087*/ "unknown state \"%s\" for automaton \"%s\"\n", -/*088*/ "public variables and local variables may not have states (symbol \"%s\")\n", -/*089*/ "state variables may not be initialized (symbol \"%s\")\n", -/*090*/ "public functions may not return arrays (symbol \"%s\")\n", -/*091*/ "ambiguous constant; tag override is required (symbol \"%s\")\n" -#else + +static char *errmsg[] = { +#ifdef SCPACK +/*001*/ "expected token: \"%s\", but found \"%s\"\n", +/*002*/ "only a single statement (or expression) can follow each \"case\"\n", +/*003*/ "declaration of a local variable must appear in a compound block\n", +/*004*/ "function \"%s\" is not implemented\n", +/*005*/ "function may not have arguments\n", +/*006*/ "must be assigned to an array\n", +/*007*/ "operator cannot be redefined\n", +/*008*/ "must be a constant expression; assumed zero\n", +/*009*/ "invalid array size (negative, zero or out of bounds)\n", +/*010*/ "invalid function or declaration\n", +/*011*/ "invalid outside functions\n", +/*012*/ "invalid function call, not a valid address\n", +/*013*/ "no entry point (no public functions)\n", +/*014*/ "invalid statement; not in switch\n", +/*015*/ "\"default\" case must be the last case in switch statement\n", +/*016*/ "multiple defaults in \"switch\"\n", +/*017*/ "undefined symbol \"%s\"\n", +/*018*/ "initialization data exceeds declared size\n", +/*019*/ "not a label: \"%s\"\n", +/*020*/ "invalid symbol name \"%s\"\n", +/*021*/ "symbol already defined: \"%s\"\n", +/*022*/ "must be lvalue (non-constant)\n", +/*023*/ "array assignment must be simple assignment\n", +/*024*/ "\"break\" or \"continue\" is out of context\n", +/*025*/ "function heading differs from prototype\n", +/*026*/ "no matching \"#if...\"\n", +/*027*/ "invalid character constant\n", +/*028*/ "invalid subscript (not an array or too many subscripts): \"%s\"\n", +/*029*/ "invalid expression, assumed zero\n", +/*030*/ "compound statement not closed at the end of file (started at line %d)\n", +/*031*/ "unknown directive\n", +/*032*/ "array index out of bounds (variable \"%s\")\n", +/*033*/ "array must be indexed (variable \"%s\")\n", +/*034*/ "argument does not have a default value (argument %d)\n", +/*035*/ "argument type mismatch (argument %d)\n", +/*036*/ "empty statement\n", +/*037*/ "invalid string (possibly non-terminated string)\n", +/*038*/ "extra characters on line\n", +/*039*/ "constant symbol has no size\n", +/*040*/ "duplicate \"case\" label (value %d)\n", +/*041*/ "invalid ellipsis, array size is not known\n", +/*042*/ "invalid combination of class specifiers\n", +/*043*/ "character constant exceeds range for packed string\n", +/*044*/ "positional parameters must precede all named parameters\n", +/*045*/ "too many function arguments\n", +/*046*/ "unknown array size (variable \"%s\")\n", +/*047*/ "array sizes do not match, or destination array is too small\n", +/*048*/ "array dimensions do not match\n", +/*049*/ "invalid line continuation\n", +/*050*/ "invalid range\n", +/*051*/ "invalid subscript, use \"[ ]\" operators on major dimensions\n", +/*052*/ "multi-dimensional arrays must be fully initialized\n", +/*053*/ "exceeding maximum number of dimensions\n", +/*054*/ "unmatched closing brace (\"}\")\n", +/*055*/ "start of function body without function header\n", +/*056*/ "arrays, local variables and function arguments cannot be public (variable \"%s\")\n", +/*057*/ "unfinished expression before compiler directive\n", +/*058*/ "duplicate argument; same argument is passed twice\n", +/*059*/ "function argument may not have a default value (variable \"%s\")\n", +/*060*/ "multiple \"#else\" directives between \"#if ... #endif\"\n", +/*061*/ "\"#elseif\" directive follows an \"#else\" directive\n", +/*062*/ "number of operands does not fit the operator\n", +/*063*/ "function result tag of operator \"%s\" must be \"%s\"\n", +/*064*/ "cannot change predefined operators\n", +/*065*/ "function argument may only have a single tag (argument %d)\n", +/*066*/ "function argument may not be a reference argument or an array (argument \"%s\")\n", +/*067*/ "variable cannot be both a reference and an array (variable \"%s\")\n", +/*068*/ "invalid rational number precision in #pragma\n", +/*069*/ "rational number format already defined\n", +/*070*/ "rational number support was not enabled\n", +/*071*/ "user-defined operator must be declared before use (function \"%s\")\n", +/*072*/ "\"sizeof\" operator is invalid on \"function\" symbols\n", +/*073*/ "function argument must be an array (argument \"%s\")\n", +/*074*/ "#define pattern must start with an alphabetic character\n", +/*075*/ "input line too long (after substitutions)\n", +/*076*/ "syntax error in the expression, or invalid function call\n", +/*077*/ "malformed UTF-8 encoding, or corrupted file: %s\n", +/*078*/ "function uses both \"return\" and \"return \"\n", +/*079*/ "inconsistent return types (array & non-array)\n", +/*080*/ "unknown symbol, or not a constant symbol (symbol \"%s\")\n", +/*081*/ "cannot take a tag as a default value for an indexed array parameter (symbol \"%s\")\n", +/*082*/ "user-defined operators and native functions may not have states\n", +/*083*/ "a function or variable may only belong to a single automaton (symbol \"%s\")\n", +/*084*/ "state conflict: one of the states is already assigned to another implementation (symbol \"%s\")\n", +/*085*/ "no states are defined for symbol \"%s\"\n", +/*086*/ "unknown automaton \"%s\"\n", +/*087*/ "unknown state \"%s\" for automaton \"%s\"\n", +/*088*/ "public variables and local variables may not have states (symbol \"%s\")\n", +/*089*/ "state variables may not be initialized (symbol \"%s\")\n", +/*090*/ "public functions may not return arrays (symbol \"%s\")\n", +/*091*/ "ambiguous constant; tag override is required (symbol \"%s\")\n" +#else "\271pect\235\306k\213:\227\316bu\202fo\217\206\216\012", "\201l\223\252s\203g\352\315e\234\202(\255\363\201) c\355f\240\344w ea\275 \042c\351e\042\012", "\233cl\333\237\304\252\344c\337\327\324appe\204 \372\252\343\364o\217\206\236ock\012", @@ -222,30 +222,30 @@ static char *errmsg[] = { "\315\200\301\310\367\242\313\203i\205\212iz\235\323", "pu\236\332 \366\207\367\242\220tur\336\256y\207\323", "a\230i\263ou\207\354t; \373ov\210rid\200\272\220qui\220\206\323" -#endif - }; - -static char *fatalmsg[] = { -#ifdef SCPACK -/*100*/ "cannot read from file: \"%s\"\n", -/*101*/ "cannot write to file: \"%s\"\n", -/*102*/ "table overflow: \"%s\"\n", - /* table can be: loop table - * literal table - * staging buffer - * option table (response file) - * peephole optimizer table - */ -/*103*/ "insufficient memory\n", -/*104*/ "invalid assembler instruction \"%s\"\n", -/*105*/ "numeric overflow, exceeding capacity\n", -/*106*/ "compiled script exceeds the maximum memory size (%ld bytes)\n", -/*107*/ "too many error messages on one line\n", -/*108*/ "codepage mapping file not found\n", -/*109*/ "invalid path: \"%s\"\n", -/*110*/ "assertion failed: %s\n", -/*111*/ "user error: %s\n" -#else +#endif + }; + +static char *fatalmsg[] = { +#ifdef SCPACK +/*100*/ "cannot read from file: \"%s\"\n", +/*101*/ "cannot write to file: \"%s\"\n", +/*102*/ "table overflow: \"%s\"\n", + /* table can be: loop table + * literal table + * staging buffer + * option table (response file) + * peephole optimizer table + */ +/*103*/ "insufficient memory\n", +/*104*/ "invalid assembler instruction \"%s\"\n", +/*105*/ "numeric overflow, exceeding capacity\n", +/*106*/ "compiled script exceeds the maximum memory size (%ld bytes)\n", +/*107*/ "too many error messages on one line\n", +/*108*/ "codepage mapping file not found\n", +/*109*/ "invalid path: \"%s\"\n", +/*110*/ "assertion failed: %s\n", +/*111*/ "user error: %s\n" +#else "c\226\242\220a\206from \361le\347", "c\226\242writ\200\306 \361le\347", "t\254\200ov\210f\344w\347", @@ -258,50 +258,50 @@ static char *fatalmsg[] = { "\265p\224h\347", "\351s\210\237fail\274: \211\012", "\251\261\210r\225: \211\012" -#endif - }; - -static char *warnmsg[] = { -#ifdef SCPACK -/*200*/ "symbol \"%s\" is truncated to %d characters\n", -/*201*/ "redefinition of constant/macro (symbol \"%s\")\n", -/*202*/ "number of arguments does not match definition\n", -/*203*/ "symbol is never used: \"%s\"\n", -/*204*/ "symbol is assigned a value that is never used: \"%s\"\n", -/*205*/ "redundant code: constant expression is zero\n", -/*206*/ "redundant test: constant expression is non-zero\n", -/*207*/ "unknown #pragma\n", -/*208*/ "function with tag result used before definition, forcing reparse\n", -/*209*/ "function \"%s\" should return a value\n", -/*210*/ "possible use of symbol before initialization: \"%s\"\n", -/*211*/ "possibly unintended assignment\n", -/*212*/ "possibly unintended bitwise operation\n", -/*213*/ "tag mismatch\n", -/*214*/ "possibly a \"const\" array argument was intended: \"%s\"\n", -/*215*/ "expression has no effect\n", -/*216*/ "nested comment\n", -/*217*/ "loose indentation\n", -/*218*/ "old style prototypes used with optional semicolumns\n", -/*219*/ "local variable \"%s\" shadows a variable at a preceding level\n", -/*220*/ "expression with tag override must appear between parentheses\n", -/*221*/ "label name \"%s\" shadows tag name\n", -/*222*/ "number of digits exceeds rational number precision\n", -/*223*/ "redundant \"sizeof\": argument size is always 1 (symbol \"%s\")\n", -/*224*/ "indeterminate array size in \"sizeof\" expression (symbol \"%s\")\n", -/*225*/ "unreachable code\n", -/*226*/ "a variable is assigned to itself (symbol \"%s\")\n", -/*227*/ "more initiallers than enum fields\n", -/*228*/ "length of initialler exceeds size of the enum field\n", -/*229*/ "index tag mismatch (symbol \"%s\")\n", -/*230*/ "no implementation for state \"%s\" in function \"%s\", no fall-back\n", -/*231*/ "state specification on forward declaration is ignored\n", -/*232*/ "output file is written, but with compact encoding disabled\n", -/*233*/ "state variable \"%s\" shadows a global variable\n", -/*234*/ "function is deprecated (symbol \"%s\") %s\n", -/*235*/ "public function lacks forward declaration (symbol \"%s\")\n", -/*236*/ "unknown parameter in substitution (incorrect #define pattern)\n" -/*237*/ "user warning: %s\n" -#else +#endif + }; + +static char *warnmsg[] = { +#ifdef SCPACK +/*200*/ "symbol \"%s\" is truncated to %d characters\n", +/*201*/ "redefinition of constant/macro (symbol \"%s\")\n", +/*202*/ "number of arguments does not match definition\n", +/*203*/ "symbol is never used: \"%s\"\n", +/*204*/ "symbol is assigned a value that is never used: \"%s\"\n", +/*205*/ "redundant code: constant expression is zero\n", +/*206*/ "redundant test: constant expression is non-zero\n", +/*207*/ "unknown #pragma\n", +/*208*/ "function with tag result used before definition, forcing reparse\n", +/*209*/ "function \"%s\" should return a value\n", +/*210*/ "possible use of symbol before initialization: \"%s\"\n", +/*211*/ "possibly unintended assignment\n", +/*212*/ "possibly unintended bitwise operation\n", +/*213*/ "tag mismatch\n", +/*214*/ "possibly a \"const\" array argument was intended: \"%s\"\n", +/*215*/ "expression has no effect\n", +/*216*/ "nested comment\n", +/*217*/ "loose indentation\n", +/*218*/ "old style prototypes used with optional semicolumns\n", +/*219*/ "local variable \"%s\" shadows a variable at a preceding level\n", +/*220*/ "expression with tag override must appear between parentheses\n", +/*221*/ "label name \"%s\" shadows tag name\n", +/*222*/ "number of digits exceeds rational number precision\n", +/*223*/ "redundant \"sizeof\": argument size is always 1 (symbol \"%s\")\n", +/*224*/ "indeterminate array size in \"sizeof\" expression (symbol \"%s\")\n", +/*225*/ "unreachable code\n", +/*226*/ "a variable is assigned to itself (symbol \"%s\")\n", +/*227*/ "more initiallers than enum fields\n", +/*228*/ "length of initialler exceeds size of the enum field\n", +/*229*/ "index tag mismatch (symbol \"%s\")\n", +/*230*/ "no implementation for state \"%s\" in function \"%s\", no fall-back\n", +/*231*/ "state specification on forward declaration is ignored\n", +/*232*/ "output file is written, but with compact encoding disabled\n", +/*233*/ "state variable \"%s\" shadows a global variable\n", +/*234*/ "function is deprecated (symbol \"%s\") %s\n", +/*235*/ "public function lacks forward declaration (symbol \"%s\")\n", +/*236*/ "unknown parameter in substitution (incorrect #define pattern)\n" +/*237*/ "user warning: %s\n" +#else "\277 \272tr\244\224\235\306 %\206\275\333c\365\314", "\220\326i\237\304\354t/\305cr\371\323", "\374\230\261\304\266t\207do\310\242\345\275 \326i\214\012", @@ -340,5 +340,5 @@ static char *warnmsg[] = { "pu\236\332 \273lack\207\370w\204\206\233cl\333\237\323", "\217k\221w\336p\333met\261\372\375bs\205tu\237(\203c\225\220c\202#\326\200p\224\365n\232", "\251\261w\204n\203g: \211\012" -#endif - }; +#endif + }; diff --git a/source/compiler/sc7.scp b/source/compiler/sc7.scp index 43681c5..76180f1 100644 --- a/source/compiler/sc7.scp +++ b/source/compiler/sc7.scp @@ -1,34 +1,34 @@ -/* Pawn compiler - Peephole optimizer "sequences" strings (plain - * and compressed formats) - * - * Copyright (c) ITB CompuPhase, 2000-2006 - * - * This software is provided "as-is", without any express or implied warranty. - * In no event will the authors be held liable for any damages arising from - * the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * 1. The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software in - * a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * 2. Altered source versions must be plainly marked as such, and must not be - * misrepresented as being the original software. - * 3. This notice may not be removed or altered from any source distribution. - * - * Version: $Id: sc7.sch 3662 2006-11-07 08:44:33Z thiadmer $ - */ - -SC_FUNC int strexpand(char *dest, unsigned char *source, int maxlen, unsigned char pairtable[128][2]); - -#define SCPACK_TERMINATOR , /* end each section with a comma */ - -#define SCPACK_TABLE sequences_table +/* Pawn compiler - Peephole optimizer "sequences" strings (plain + * and compressed formats) + * + * Copyright (c) ITB CompuPhase, 2000-2006 + * + * This software is provided "as-is", without any express or implied warranty. + * In no event will the authors be held liable for any damages arising from + * the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software in + * a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + * + * Version: $Id: sc7.sch 3662 2006-11-07 08:44:33Z thiadmer $ + */ + +SC_FUNC int strexpand(char *dest, unsigned char *source, int maxlen, unsigned char pairtable[128][2]); + +#define SCPACK_TERMINATOR , /* end each section with a comma */ + +#define SCPACK_TABLE sequences_table /*-*SCPACK start of pair table, do not change or remove this line */ -unsigned char sequences_table [][2] = { +unsigned char sequences_table[][2] = { {49,33}, {37,128}, {32,129}, {32,37}, {114,105}, {112,132}, {46,133}, {97,100}, {46,97}, {136,108}, {137,116}, {115,104}, {111,135}, {117,139}, {112,141}, {108,140}, {131,50}, {144,33}, {46,115}, {59,36}, {138,33}, {134,130}, {143,146}, {115,116}, {134,145}, {114,33}, {110,151}, {111,154}, {99,155}, {112,148}, {135,100}, {134,33}, {97,153}, {112,160}, {147,161}, {111,157}, {112,163}, {46,99}, {138,130}, {142,159}, {131,51}, {150,152}, {112,33}, {120,170}, {101,171}, {147,172}, {168,33}, {162,142}, @@ -39,1985 +39,1985 @@ unsigned char sequences_table [][2] = { {156,166}, {176,130}, {214,32}, {242,50}, {156,198}, {181,198}, {143,197}, {181,201}, {108,209}, {46,98}, {243,225}, {106,110}, {237,153}, {223,159}, {143,166} }; /*-*SCPACK end of pair table, do not change or remove this line */ - -#define seqsize(o,p) (opcodes(o)+opargs(p)) -typedef struct { - char *find; - char *replace; - int savesize; /* number of bytes saved (in bytecode) */ -} SEQUENCE; -static SEQUENCE sequences_cmp[] = { - /* A very common sequence in four varieties - * load.s.pri n1 load.s.pri n2 - * push.pri load.s.alt n1 - * load.s.pri n2 - - * pop.alt - - * -------------------------------------- - * load.pri n1 load.s.pri n2 - * push.pri load.alt n1 - * load.s.pri n2 - - * pop.alt - - * -------------------------------------- - * load.s.pri n1 load.pri n2 - * push.pri load.s.alt n1 - * load.pri n2 - - * pop.alt - - * -------------------------------------- - * load.pri n1 load.pri n2 - * push.pri load.alt n1 - * load.pri n2 - - * pop.alt - - */ - { - #ifdef SCPACK - "load.s.pri %1!push.pri!load.s.pri %2!pop.alt!", - "load.s.pri %2!load.s.alt %1!", - #else + +#define seqsize(o,p) (opcodes(o)+opargs(p)) +typedef struct { + char *find; + char *replace; + int savesize; /* number of bytes saved (in bytecode) */ +} SEQUENCE; +static SEQUENCE sequences_cmp[] = { + /* A very common sequence in four varieties + * load.s.pri n1 load.s.pri n2 + * push.pri load.s.alt n1 + * load.s.pri n2 - + * pop.alt - + * -------------------------------------- + * load.pri n1 load.s.pri n2 + * push.pri load.alt n1 + * load.s.pri n2 - + * pop.alt - + * -------------------------------------- + * load.s.pri n1 load.pri n2 + * push.pri load.s.alt n1 + * load.pri n2 - + * pop.alt - + * -------------------------------------- + * load.pri n1 load.pri n2 + * push.pri load.alt n1 + * load.pri n2 - + * pop.alt - + */ + { + #ifdef SCPACK + "load.s.pri %1!push.pri!load.s.pri %2!pop.alt!", + "load.s.pri %2!load.s.alt %1!", + #else "\226\306\244", "\251\226\246", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!push.pri!load.s.pri %2!pop.alt!", - "load.s.pri %2!load.alt %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!push.pri!load.s.pri %2!pop.alt!", + "load.s.pri %2!load.alt %1!", + #else "\217\306\244", "\251\376", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.s.pri %1!push.pri!load.pri %2!pop.alt!", - "load.pri %2!load.s.alt %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.s.pri %1!push.pri!load.pri %2!pop.alt!", + "load.pri %2!load.s.alt %1!", + #else "\226\264\333\244", "\333\226\246", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!push.pri!load.pri %2!pop.alt!", - "load.pri %2!load.alt %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!push.pri!load.pri %2!pop.alt!", + "load.pri %2!load.alt %1!", + #else "\217\264\333\244", "\333\376", - #endif - seqsize(4,2) - seqsize(2,2) - }, - /* (#1#) The above also occurs with "addr.pri" (array - * indexing) as the first line; so that adds 2 cases. - */ - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!pop.alt!", - "addr.alt %1!load.s.pri %2!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + /* (#1#) The above also occurs with "addr.pri" (array + * indexing) as the first line; so that adds 2 cases. + */ + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!pop.alt!", + "addr.alt %1!load.s.pri %2!", + #else "\365\244", "\367", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.pri %2!pop.alt!", - "addr.alt %1!load.pri %2!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.pri %2!pop.alt!", + "addr.alt %1!load.pri %2!", + #else "\265\264\333\244", "\265\246\333", - #endif - seqsize(4,2) - seqsize(2,2) - }, - /* And the same sequence with const.pri as either the first - * or the second load instruction: four more cases. - */ - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!pop.alt!", - "load.s.pri %2!const.alt %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + /* And the same sequence with const.pri as either the first + * or the second load instruction: four more cases. + */ + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!pop.alt!", + "load.s.pri %2!const.alt %1!", + #else "\364\244", "\251\360", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.pri %2!pop.alt!", - "load.pri %2!const.alt %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.pri %2!pop.alt!", + "load.pri %2!const.alt %1!", + #else "\234\264\333\244", "\333\360", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.s.pri %1!push.pri!const.pri %2!pop.alt!", - "const.pri %2!load.s.alt %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.s.pri %1!push.pri!const.pri %2!pop.alt!", + "const.pri %2!load.s.alt %1!", + #else "\226\264\344\244", "\344\226\246", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!push.pri!const.pri %2!pop.alt!", - "const.pri %2!load.alt %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!push.pri!const.pri %2!pop.alt!", + "const.pri %2!load.alt %1!", + #else "\217\264\344\244", "\344\376", - #endif - seqsize(4,2) - seqsize(2,2) - }, - /* The same as above, but now with "addr.pri" (array - * indexing) on the first line and const.pri on - * the second. - */ - { - #ifdef SCPACK - "addr.pri %1!push.pri!const.pri %2!pop.alt!", - "addr.alt %1!const.pri %2!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + /* The same as above, but now with "addr.pri" (array + * indexing) on the first line and const.pri on + * the second. + */ + { + #ifdef SCPACK + "addr.pri %1!push.pri!const.pri %2!pop.alt!", + "addr.alt %1!const.pri %2!", + #else "\265\264\344\244", "\265\246\344", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "addr.pri %1!push.pri!zero.pri!pop.alt!", - "addr.alt %1!zero.pri!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "addr.pri %1!push.pri!zero.pri!pop.alt!", + "addr.alt %1!zero.pri!", + #else "\265\264\375\244", "\265\246\375", - #endif - seqsize(4,1) - seqsize(2,1) - }, - /* ??? add references */ - /* Chained relational operators can contain sequences like: - * move.pri load.s.pri n1 - * push.pri - - * load.s.pri n1 - - * pop.alt - - * The above also accurs for "load.pri" and for "const.pri", - * so add another two cases. - */ - { - #ifdef SCPACK - "move.pri!push.pri!load.s.pri %1!pop.alt!", - "load.s.pri %1!", - #else + #endif + seqsize(4,1) - seqsize(2,1) + }, + /* ??? add references */ + /* Chained relational operators can contain sequences like: + * move.pri load.s.pri n1 + * push.pri - + * load.s.pri n1 - + * pop.alt - + * The above also accurs for "load.pri" and for "const.pri", + * so add another two cases. + */ + { + #ifdef SCPACK + "move.pri!push.pri!load.s.pri %1!pop.alt!", + "load.s.pri %1!", + #else "\300\237\247\332\244", "\332", - #endif - seqsize(4,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "move.pri!push.pri!load.pri %1!pop.alt!", - "load.pri %1!", - #else + #endif + seqsize(4,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "move.pri!push.pri!load.pri %1!pop.alt!", + "load.pri %1!", + #else "\300\237\247\312\244", "\312", - #endif - seqsize(4,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "move.pri!push.pri!const.pri %1!pop.alt!", - "const.pri %1!", - #else + #endif + seqsize(4,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "move.pri!push.pri!const.pri %1!pop.alt!", + "const.pri %1!", + #else "\300\237\247\327\244", "\327", - #endif - seqsize(4,1) - seqsize(1,1) - }, - /* More optimizations for chained relational operators; the - * continuation sequences can be simplified if they turn out - * to be termination sequences: - * xchg sless also for sless, sgeq and sleq - * sgrtr pop.alt - * swap.alt and - * and ;$exp - * pop.alt - - * ;$exp - - * -------------------------------------- - * xchg sless also for sless, sgeq and sleq - * sgrtr pop.alt - * swap.alt and - * and jzer n1 - * pop.alt - - * jzer n1 - - * -------------------------------------- - * xchg jsgeq n1 also for sless, sgeq and sleq - * sgrtr ;$exp (occurs for non-chained comparisons) - * jzer n1 - - * ;$exp - - * -------------------------------------- - * xchg sless also for sless, sgeq and sleq - * sgrtr ;$exp (occurs for non-chained comparisons) - * ;$exp - - */ - { - #ifdef SCPACK - "xchg!sgrtr!swap.alt!and!pop.alt!;$exp!", - "sless!pop.alt!and!;$exp!", - #else + #endif + seqsize(4,1) - seqsize(1,1) + }, + /* More optimizations for chained relational operators; the + * continuation sequences can be simplified if they turn out + * to be termination sequences: + * xchg sless also for sless, sgeq and sleq + * sgrtr pop.alt + * swap.alt and + * and ;$exp + * pop.alt - + * ;$exp - + * -------------------------------------- + * xchg sless also for sless, sgeq and sleq + * sgrtr pop.alt + * swap.alt and + * and jzer n1 + * pop.alt - + * jzer n1 - + * -------------------------------------- + * xchg jsgeq n1 also for sless, sgeq and sleq + * sgrtr ;$exp (occurs for non-chained comparisons) + * jzer n1 - + * ;$exp - + * -------------------------------------- + * xchg sless also for sless, sgeq and sleq + * sgrtr ;$exp (occurs for non-chained comparisons) + * ;$exp - + */ + { + #ifdef SCPACK + "xchg!sgrtr!swap.alt!and!pop.alt!;$exp!", + "sless!pop.alt!and!;$exp!", + #else "\274\374swa\235\336\266\255", "\353\266\336!\255", - #endif - seqsize(5,0) - seqsize(3,0) - }, - { - #ifdef SCPACK - "xchg!sless!swap.alt!and!pop.alt!;$exp!", - "sgrtr!pop.alt!and!;$exp!", - #else + #endif + seqsize(5,0) - seqsize(3,0) + }, + { + #ifdef SCPACK + "xchg!sless!swap.alt!and!pop.alt!;$exp!", + "sgrtr!pop.alt!and!;$exp!", + #else "\274\353!swa\235\336\266\255", "\374\244\336!\255", - #endif - seqsize(5,0) - seqsize(3,0) - }, - { - #ifdef SCPACK - "xchg!sgeq!swap.alt!and!pop.alt!;$exp!", - "sleq!pop.alt!and!;$exp!", - #else + #endif + seqsize(5,0) - seqsize(3,0) + }, + { + #ifdef SCPACK + "xchg!sgeq!swap.alt!and!pop.alt!;$exp!", + "sleq!pop.alt!and!;$exp!", + #else "\274\303\323swa\235\336\266\255", "\304\260\266\336!\255", - #endif - seqsize(5,0) - seqsize(3,0) - }, - { - #ifdef SCPACK - "xchg!sleq!swap.alt!and!pop.alt!;$exp!", - "sgeq!pop.alt!and!;$exp!", - #else + #endif + seqsize(5,0) - seqsize(3,0) + }, + { + #ifdef SCPACK + "xchg!sleq!swap.alt!and!pop.alt!;$exp!", + "sgeq!pop.alt!and!;$exp!", + #else "\274\304\323swa\235\336\266\255", "\303\260\266\336!\255", - #endif - seqsize(5,0) - seqsize(3,0) - }, - { - #ifdef SCPACK - "xchg!sgrtr!swap.alt!and!pop.alt!jzer %1!", - "sless!pop.alt!and!jzer %1!", - #else + #endif + seqsize(5,0) - seqsize(3,0) + }, + { + #ifdef SCPACK + "xchg!sgrtr!swap.alt!and!pop.alt!jzer %1!", + "sless!pop.alt!and!jzer %1!", + #else "\274\374swa\235\336\266\340", "\353\266\336!\340", - #endif - seqsize(5,0) - seqsize(3,0) - }, - { - #ifdef SCPACK - "xchg!sless!swap.alt!and!pop.alt!jzer %1!", - "sgrtr!pop.alt!and!jzer %1!", - #else + #endif + seqsize(5,0) - seqsize(3,0) + }, + { + #ifdef SCPACK + "xchg!sless!swap.alt!and!pop.alt!jzer %1!", + "sgrtr!pop.alt!and!jzer %1!", + #else "\274\353!swa\235\336\266\340", "\374\244\336!\340", - #endif - seqsize(5,0) - seqsize(3,0) - }, - { - #ifdef SCPACK - "xchg!sgeq!swap.alt!and!pop.alt!jzer %1!", - "sleq!pop.alt!and!jzer %1!", - #else + #endif + seqsize(5,0) - seqsize(3,0) + }, + { + #ifdef SCPACK + "xchg!sgeq!swap.alt!and!pop.alt!jzer %1!", + "sleq!pop.alt!and!jzer %1!", + #else "\274\303\323swa\235\336\266\340", "\304\260\266\336!\340", - #endif - seqsize(5,0) - seqsize(3,0) - }, - { - #ifdef SCPACK - "xchg!sleq!swap.alt!and!pop.alt!jzer %1!", - "sgeq!pop.alt!and!jzer %1!", - #else + #endif + seqsize(5,0) - seqsize(3,0) + }, + { + #ifdef SCPACK + "xchg!sleq!swap.alt!and!pop.alt!jzer %1!", + "sgeq!pop.alt!and!jzer %1!", + #else "\274\304\323swa\235\336\266\340", "\303\260\266\336!\340", - #endif - seqsize(5,0) - seqsize(3,0) - }, - { - #ifdef SCPACK - "xchg!sgrtr!jzer %1!;$exp!", - "jsgeq %1!;$exp!", - #else + #endif + seqsize(5,0) - seqsize(3,0) + }, + { + #ifdef SCPACK + "xchg!sgrtr!jzer %1!;$exp!", + "jsgeq %1!;$exp!", + #else "\274\374\324\301", "j\303\260\301", - #endif - seqsize(3,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "xchg!sless!jzer %1!;$exp!", - "jsleq %1!;$exp!", - #else + #endif + seqsize(3,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "xchg!sless!jzer %1!;$exp!", + "jsleq %1!;$exp!", + #else "\274\353!\324\301", "j\304\260\301", - #endif - seqsize(3,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "xchg!sgeq!jzer %1!;$exp!", - "jsgrtr %1!;$exp!", - #else + #endif + seqsize(3,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "xchg!sgeq!jzer %1!;$exp!", + "jsgrtr %1!;$exp!", + #else "\274\303\323\324\301", "j\355r\301", - #endif - seqsize(3,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "xchg!sleq!jzer %1!;$exp!", - "jsless %1!;$exp!", - #else + #endif + seqsize(3,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "xchg!sleq!jzer %1!;$exp!", + "jsless %1!;$exp!", + #else "\274\304\323\324\301", "j\353\301", - #endif - seqsize(3,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "xchg!sgrtr!;$exp!", - "sless!;$exp!", - #else + #endif + seqsize(3,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "xchg!sgrtr!;$exp!", + "sless!;$exp!", + #else "\274\374\255", "\353!\255", - #endif - seqsize(2,0) - seqsize(1,0) - }, - { - #ifdef SCPACK - "xchg!sless!;$exp!", - "sgrtr!;$exp!", - #else + #endif + seqsize(2,0) - seqsize(1,0) + }, + { + #ifdef SCPACK + "xchg!sless!;$exp!", + "sgrtr!;$exp!", + #else "\274\353!\255", "\374\255", - #endif - seqsize(2,0) - seqsize(1,0) - }, - { - #ifdef SCPACK - "xchg!sgeq!;$exp!", - "sleq!;$exp!", - #else + #endif + seqsize(2,0) - seqsize(1,0) + }, + { + #ifdef SCPACK + "xchg!sgeq!;$exp!", + "sleq!;$exp!", + #else "\274\303\323\255", "\304\323\255", - #endif - seqsize(2,0) - seqsize(1,0) - }, - { - #ifdef SCPACK - "xchg!sleq!;$exp!", - "sgeq!;$exp!", - #else + #endif + seqsize(2,0) - seqsize(1,0) + }, + { + #ifdef SCPACK + "xchg!sleq!;$exp!", + "sgeq!;$exp!", + #else "\274\304\323\255", "\303\323\255", - #endif - seqsize(2,0) - seqsize(1,0) - }, - /* The entry to chained operators is also opt to optimization - * load.s.pri n1 load.s.pri n2 - * load.s.alt n2 load.s.alt n1 - * xchg - - * -------------------------------------- - * load.s.pri n1 load.pri n2 - * load.alt n2 load.s.alt n1 - * xchg - - * -------------------------------------- - * load.s.pri n1 const.pri n2 - * const.alt n2 load.s.alt n1 - * xchg - - * -------------------------------------- - * and all permutations... - */ - { - #ifdef SCPACK - "load.s.pri %1!load.s.alt %2!xchg!", - "load.s.pri %2!load.s.alt %1!", - #else + #endif + seqsize(2,0) - seqsize(1,0) + }, + /* The entry to chained operators is also opt to optimization + * load.s.pri n1 load.s.pri n2 + * load.s.alt n2 load.s.alt n1 + * xchg - + * -------------------------------------- + * load.s.pri n1 load.pri n2 + * load.alt n2 load.s.alt n1 + * xchg - + * -------------------------------------- + * load.s.pri n1 const.pri n2 + * const.alt n2 load.s.alt n1 + * xchg - + * -------------------------------------- + * and all permutations... + */ + { + #ifdef SCPACK + "load.s.pri %1!load.s.alt %2!xchg!", + "load.s.pri %2!load.s.alt %1!", + #else "\332\226\305\274", "\251\226\246", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.s.pri %1!load.alt %2!xchg!", - "load.pri %2!load.s.alt %1!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.s.pri %1!load.alt %2!xchg!", + "load.pri %2!load.s.alt %1!", + #else "\332\366\274", "\333\226\246", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.s.pri %1!const.alt %2!xchg!", - "const.pri %2!load.s.alt %1!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.s.pri %1!const.alt %2!xchg!", + "const.pri %2!load.s.alt %1!", + #else "\332\234\305\274", "\344\226\246", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!load.s.alt %2!xchg!", - "load.s.pri %2!load.alt %1!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!load.s.alt %2!xchg!", + "load.s.pri %2!load.alt %1!", + #else "\312\226\305\274", "\251\376", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!load.alt %2!xchg!", - "load.pri %2!load.alt %1!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!load.alt %2!xchg!", + "load.pri %2!load.alt %1!", + #else "\312\366\274", "\333\376", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!const.alt %2!xchg!", - "const.pri %2!load.alt %1!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!const.alt %2!xchg!", + "const.pri %2!load.alt %1!", + #else "\312\234\305\274", "\344\376", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "const.pri %1!load.s.alt %2!xchg!", - "load.s.pri %2!const.alt %1!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "const.pri %1!load.s.alt %2!xchg!", + "load.s.pri %2!const.alt %1!", + #else "\327\226\305\274", "\251\360", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "const.pri %1!load.alt %2!xchg!", - "load.pri %2!const.alt %1!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "const.pri %1!load.alt %2!xchg!", + "load.pri %2!const.alt %1!", + #else "\327\366\274", "\333\360", - #endif - seqsize(3,2) - seqsize(2,2) - }, - /* some sequences where PRI is moved to ALT can be optimized - * further when considering what follows - * move.alt const.alt n1 - * const.pri %1 - - * xchg - - * (also for load.s.pri and load.pri) - * -------------------------------------- - * lref.pri %1 lref.alt %1 - * move.alt [load.pri %2] - * [load.pri %2] - - * (where [load.pri %2] may also be another operatrion loading PRI) - */ - { - #ifdef SCPACK - "move.alt!const.pri %1!xchg!", - "const.alt %1!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + /* some sequences where PRI is moved to ALT can be optimized + * further when considering what follows + * move.alt const.alt n1 + * const.pri %1 - + * xchg - + * (also for load.s.pri and load.pri) + * -------------------------------------- + * lref.pri %1 lref.alt %1 + * move.alt [load.pri %2] + * [load.pri %2] - + * (where [load.pri %2] may also be another operatrion loading PRI) + */ + { + #ifdef SCPACK + "move.alt!const.pri %1!xchg!", + "const.alt %1!", + #else "\307\327\274", "\360", - #endif - seqsize(3,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "move.alt!load.pri %1!xchg!", - "load.alt %1!", - #else + #endif + seqsize(3,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "move.alt!load.pri %1!xchg!", + "load.alt %1!", + #else "\307\312\274", "\376", - #endif - seqsize(3,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "move.alt!load.s.pri %1!xchg!", - "load.s.alt %1!", - #else + #endif + seqsize(3,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "move.alt!load.s.pri %1!xchg!", + "load.s.alt %1!", + #else "\307\332\274", "\226\246", - #endif - seqsize(3,1) - seqsize(1,1) - }, - /* ----- */ - { - #ifdef SCPACK - "lref.pri %1!move.alt!load.pri %2!", - "lref.alt %1!load.pri %2!", - #else + #endif + seqsize(3,1) - seqsize(1,1) + }, + /* ----- */ + { + #ifdef SCPACK + "lref.pri %1!move.alt!load.pri %2!", + "lref.alt %1!load.pri %2!", + #else "\351\225\307\333", "\351\246\333", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "lref.pri %1!move.alt!load.s.pri %2!", - "lref.alt %1!load.s.pri %2!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "lref.pri %1!move.alt!load.s.pri %2!", + "lref.alt %1!load.s.pri %2!", + #else "\351\225\307\251", "\351\311", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "lref.pri %1!move.alt!const.pri %2!", - "lref.alt %1!const.pri %2!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "lref.pri %1!move.alt!const.pri %2!", + "lref.alt %1!const.pri %2!", + #else "\351\225\307\344", "\351\246\344", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "lref.s.pri %1!move.alt!load.pri %2!", - "lref.s.alt %1!load.pri %2!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "lref.s.pri %1!move.alt!load.pri %2!", + "lref.s.alt %1!load.pri %2!", + #else "\351\222\225\307\333", "\351\222\246\333", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "lref.s.pri %1!move.alt!load.s.pri %2!", - "lref.s.alt %1!load.s.pri %2!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "lref.s.pri %1!move.alt!load.s.pri %2!", + "lref.s.alt %1!load.s.pri %2!", + #else "\351\222\225\307\251", "\351\222\311", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "lref.s.pri %1!move.alt!const.pri %2!", - "lref.s.alt %1!const.pri %2!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "lref.s.pri %1!move.alt!const.pri %2!", + "lref.s.alt %1!const.pri %2!", + #else "\351\222\225\307\344", "\351\222\246\344", - #endif - seqsize(3,2) - seqsize(2,2) - }, - /* Array indexing can merit from special instructions. - * Simple indexed array lookup can be optimized quite - * a bit. - * addr.pri n1 addr.alt n1 - * push.pri load.s.pri n2 - * load.s.pri n2 bounds n3 - * bounds n3 lidx.b n4 - * shl.c.pri n4 - - * pop.alt - - * add - - * load.i - - * - * And to prepare for storing a value in an array - * addr.pri n1 addr.alt n1 - * push.pri load.s.pri n2 - * load.s.pri n2 bounds n3 - * bounds n3 idxaddr.b n4 - * shl.c.pri n4 - - * pop.alt - - * add - - * - * Notes (additional cases): - * 1. instruction addr.pri can also be const.pri (for - * global arrays) - * 2. the bounds instruction can be absent - * 3. when "n4" (the shift value) is the 2 (with 32-bit cells), use the - * even more optimal instructions LIDX and IDDXADDR - * - * If the array index is more complex, one can only optimize - * the last four instructions: - * shl.c.pri n1 pop.alt - * pop.alt lidx.b n1 - * add - - * loadi - - * -------------------------------------- - * shl.c.pri n1 pop.alt - * pop.alt idxaddr.b n1 - * add - - */ -#if !defined BIT16 - /* loading from array, "cell" shifted */ - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri 2!pop.alt!add!load.i!", - "addr.alt %1!load.s.pri %2!bounds %3!lidx!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + /* Array indexing can merit from special instructions. + * Simple indexed array lookup can be optimized quite + * a bit. + * addr.pri n1 addr.alt n1 + * push.pri load.s.pri n2 + * load.s.pri n2 bounds n3 + * bounds n3 lidx.b n4 + * shl.c.pri n4 - + * pop.alt - + * add - + * load.i - + * + * And to prepare for storing a value in an array + * addr.pri n1 addr.alt n1 + * push.pri load.s.pri n2 + * load.s.pri n2 bounds n3 + * bounds n3 idxaddr.b n4 + * shl.c.pri n4 - + * pop.alt - + * add - + * + * Notes (additional cases): + * 1. instruction addr.pri can also be const.pri (for + * global arrays) + * 2. the bounds instruction can be absent + * 3. when "n4" (the shift value) is the 2 (with 32-bit cells), use the + * even more optimal instructions LIDX and IDDXADDR + * + * If the array index is more complex, one can only optimize + * the last four instructions: + * shl.c.pri n1 pop.alt + * pop.alt lidx.b n1 + * add - + * loadi - + * -------------------------------------- + * shl.c.pri n1 pop.alt + * pop.alt idxaddr.b n1 + * add - + */ +#if !defined BIT16 + /* loading from array, "cell" shifted */ + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri 2!pop.alt!add!load.i!", + "addr.alt %1!load.s.pri %2!bounds %3!lidx!", + #else "\365\317\372\342\357", "\367\317\370!", - #endif - seqsize(8,4) - seqsize(4,3) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri 2!pop.alt!add!load.i!", - "const.alt %1!load.s.pri %2!bounds %3!lidx!", - #else + #endif + seqsize(8,4) - seqsize(4,3) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri 2!pop.alt!add!load.i!", + "const.alt %1!load.s.pri %2!bounds %3!lidx!", + #else "\364\317\372\342\357", "\234\311\317\370!", - #endif - seqsize(8,4) - seqsize(4,3) - }, - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!shl.c.pri 2!pop.alt!add!load.i!", - "addr.alt %1!load.s.pri %2!lidx!", - #else + #endif + seqsize(8,4) - seqsize(4,3) + }, + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!shl.c.pri 2!pop.alt!add!load.i!", + "addr.alt %1!load.s.pri %2!lidx!", + #else "\365\372\342\357", "\367\370!", - #endif - seqsize(7,3) - seqsize(3,2) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!shl.c.pri 2!pop.alt!add!load.i!", - "const.alt %1!load.s.pri %2!lidx!", - #else + #endif + seqsize(7,3) - seqsize(3,2) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!shl.c.pri 2!pop.alt!add!load.i!", + "const.alt %1!load.s.pri %2!lidx!", + #else "\364\372\342\357", "\234\311\370!", - #endif - seqsize(7,3) - seqsize(3,2) - }, -#endif - /* loading from array, not "cell" shifted */ - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri %4!pop.alt!add!load.i!", - "addr.alt %1!load.s.pri %2!bounds %3!lidx.b %4!", - #else + #endif + seqsize(7,3) - seqsize(3,2) + }, +#endif + /* loading from array, not "cell" shifted */ + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri %4!pop.alt!add!load.i!", + "addr.alt %1!load.s.pri %2!bounds %3!lidx.b %4!", + #else "\365\317\326\302\341\342\357", "\367\317\370\371\334", - #endif - seqsize(8,4) - seqsize(4,4) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri %4!pop.alt!add!load.i!", - "const.alt %1!load.s.pri %2!bounds %3!lidx.b %4!", - #else + #endif + seqsize(8,4) - seqsize(4,4) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri %4!pop.alt!add!load.i!", + "const.alt %1!load.s.pri %2!bounds %3!lidx.b %4!", + #else "\364\317\326\302\341\342\357", "\234\311\317\370\371\334", - #endif - seqsize(8,4) - seqsize(4,4) - }, - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!shl.c.pri %3!pop.alt!add!load.i!", - "addr.alt %1!load.s.pri %2!lidx.b %3!", - #else + #endif + seqsize(8,4) - seqsize(4,4) + }, + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!shl.c.pri %3!pop.alt!add!load.i!", + "addr.alt %1!load.s.pri %2!lidx.b %3!", + #else "\365\326\256\244\271\342\357", "\367\370\371\256", - #endif - seqsize(7,3) - seqsize(3,3) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!shl.c.pri %3!pop.alt!add!load.i!", - "const.alt %1!load.s.pri %2!lidx.b %3!", - #else + #endif + seqsize(7,3) - seqsize(3,3) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!shl.c.pri %3!pop.alt!add!load.i!", + "const.alt %1!load.s.pri %2!lidx.b %3!", + #else "\364\326\256\244\271\342\357", "\234\311\370\371\256", - #endif - seqsize(7,3) - seqsize(3,3) - }, -#if !defined BIT16 - /* array index calculation for storing a value, "cell" aligned */ - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri 2!pop.alt!add!", - "addr.alt %1!load.s.pri %2!bounds %3!idxaddr!", - #else + #endif + seqsize(7,3) - seqsize(3,3) + }, +#if !defined BIT16 + /* array index calculation for storing a value, "cell" aligned */ + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri 2!pop.alt!add!", + "addr.alt %1!load.s.pri %2!bounds %3!idxaddr!", + #else "\365\317\372", "\367\317\321\236\231", - #endif - seqsize(7,4) - seqsize(4,3) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri 2!pop.alt!add!", - "const.alt %1!load.s.pri %2!bounds %3!idxaddr!", - #else + #endif + seqsize(7,4) - seqsize(4,3) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri 2!pop.alt!add!", + "const.alt %1!load.s.pri %2!bounds %3!idxaddr!", + #else "\364\317\372", "\234\311\317\321\236\231", - #endif - seqsize(7,4) - seqsize(4,3) - }, - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!shl.c.pri 2!pop.alt!add!", - "addr.alt %1!load.s.pri %2!idxaddr!", - #else + #endif + seqsize(7,4) - seqsize(4,3) + }, + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!shl.c.pri 2!pop.alt!add!", + "addr.alt %1!load.s.pri %2!idxaddr!", + #else "\365\372", "\367\321\236\231", - #endif - seqsize(6,3) - seqsize(3,2) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!shl.c.pri 2!pop.alt!add!", - "const.alt %1!load.s.pri %2!idxaddr!", - #else + #endif + seqsize(6,3) - seqsize(3,2) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!shl.c.pri 2!pop.alt!add!", + "const.alt %1!load.s.pri %2!idxaddr!", + #else "\364\372", "\234\311\321\236\231", - #endif - seqsize(6,3) - seqsize(3,2) - }, -#endif - /* array index calculation for storing a value, not "cell" packed */ - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri %4!pop.alt!add!", - "addr.alt %1!load.s.pri %2!bounds %3!idxaddr.b %4!", - #else + #endif + seqsize(6,3) - seqsize(3,2) + }, +#endif + /* array index calculation for storing a value, not "cell" packed */ + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri %4!pop.alt!add!", + "addr.alt %1!load.s.pri %2!bounds %3!idxaddr.b %4!", + #else "\365\317\326\302\341", "\367\317\321\265\371\334", - #endif - seqsize(7,4) - seqsize(4,4) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri %4!pop.alt!add!", - "const.alt %1!load.s.pri %2!bounds %3!idxaddr.b %4!", - #else + #endif + seqsize(7,4) - seqsize(4,4) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!bounds %3!shl.c.pri %4!pop.alt!add!", + "const.alt %1!load.s.pri %2!bounds %3!idxaddr.b %4!", + #else "\364\317\326\302\341", "\234\311\317\321\265\371\334", - #endif - seqsize(7,4) - seqsize(4,4) - }, - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!shl.c.pri %3!pop.alt!add!", - "addr.alt %1!load.s.pri %2!idxaddr.b %3!", - #else + #endif + seqsize(7,4) - seqsize(4,4) + }, + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!shl.c.pri %3!pop.alt!add!", + "addr.alt %1!load.s.pri %2!idxaddr.b %3!", + #else "\365\326\256\244\271", "\367\321\265\371\256", - #endif - seqsize(6,3) - seqsize(3,3) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!shl.c.pri %3!pop.alt!add!", - "const.alt %1!load.s.pri %2!idxaddr.b %3!", - #else + #endif + seqsize(6,3) - seqsize(3,3) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!shl.c.pri %3!pop.alt!add!", + "const.alt %1!load.s.pri %2!idxaddr.b %3!", + #else "\364\326\256\244\271", "\234\311\321\265\371\256", - #endif - seqsize(6,3) - seqsize(3,3) - }, -#if !defined BIT16 - /* the shorter array indexing sequences, see above for comments */ - { - #ifdef SCPACK - "shl.c.pri 2!pop.alt!add!loadi!", - "pop.alt!lidx!", - #else + #endif + seqsize(6,3) - seqsize(3,3) + }, +#if !defined BIT16 + /* the shorter array indexing sequences, see above for comments */ + { + #ifdef SCPACK + "shl.c.pri 2!pop.alt!add!loadi!", + "pop.alt!lidx!", + #else "\372\217\357", "\244\370!", - #endif - seqsize(4,1) - seqsize(2,0) - }, - { - #ifdef SCPACK - "shl.c.pri 2!pop.alt!add!", - "pop.alt!idxaddr!", - #else + #endif + seqsize(4,1) - seqsize(2,0) + }, + { + #ifdef SCPACK + "shl.c.pri 2!pop.alt!add!", + "pop.alt!idxaddr!", + #else "\372", "\244\321\236\231", - #endif - seqsize(3,1) - seqsize(2,0) - }, -#endif - { - #ifdef SCPACK - "shl.c.pri %1!pop.alt!add!loadi!", - "pop.alt!lidx.b %1!", - #else + #endif + seqsize(3,1) - seqsize(2,0) + }, +#endif + { + #ifdef SCPACK + "shl.c.pri %1!pop.alt!add!loadi!", + "pop.alt!lidx.b %1!", + #else "\316\225\244\271\217\357", "\244\370\371\202", - #endif - seqsize(4,1) - seqsize(2,1) - }, - { - #ifdef SCPACK - "shl.c.pri %1!pop.alt!add!", - "pop.alt!idxaddr.b %1!", - #else + #endif + seqsize(4,1) - seqsize(2,1) + }, + { + #ifdef SCPACK + "shl.c.pri %1!pop.alt!add!", + "pop.alt!idxaddr.b %1!", + #else "\316\225\244\271", "\244\321\265\371\202", - #endif - seqsize(3,1) - seqsize(2,1) - }, - /* For packed arrays, there is another case (packed arrays - * do not take advantage of the LIDX or IDXADDR instructions). - * addr.pri n1 addr.alt n1 - * push.pri load.s.pri n2 - * load.s.pri n2 bounds n3 - * bounds n3 - - * pop.alt - - * - * Notes (additional cases): - * 1. instruction addr.pri can also be const.pri (for - * global arrays) - * 2. the bounds instruction can be absent, but that - * case is already handled (see #1#) - */ - { - #ifdef SCPACK - "addr.pri %1!push.pri!load.s.pri %2!bounds %3!pop.alt!", - "addr.alt %1!load.s.pri %2!bounds %3!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + /* For packed arrays, there is another case (packed arrays + * do not take advantage of the LIDX or IDXADDR instructions). + * addr.pri n1 addr.alt n1 + * push.pri load.s.pri n2 + * load.s.pri n2 bounds n3 + * bounds n3 - + * pop.alt - + * + * Notes (additional cases): + * 1. instruction addr.pri can also be const.pri (for + * global arrays) + * 2. the bounds instruction can be absent, but that + * case is already handled (see #1#) + */ + { + #ifdef SCPACK + "addr.pri %1!push.pri!load.s.pri %2!bounds %3!pop.alt!", + "addr.alt %1!load.s.pri %2!bounds %3!", + #else "\365\317\244", "\367\317", - #endif - seqsize(5,3) - seqsize(3,3) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!load.s.pri %2!bounds %3!pop.alt!", - "const.alt %1!load.s.pri %2!bounds %3!", - #else + #endif + seqsize(5,3) - seqsize(3,3) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!load.s.pri %2!bounds %3!pop.alt!", + "const.alt %1!load.s.pri %2!bounds %3!", + #else "\364\317\244", "\234\311\317", - #endif - seqsize(5,3) - seqsize(3,3) - }, - /* Declaration of simple variables often follows the sequence: - * ;$lcl ;$lcl - * stack -4 push.c - * const.pri ;$exp - * stor.s.pri - - * ;$exp - - */ - { - #ifdef SCPACK - ";$lcl %1 %2!stack -4!const.pri %3!stor.s.pri %2!;$exp!", - ";$lcl %1 %2!push.c %3!;$exp!", - #else + #endif + seqsize(5,3) - seqsize(3,3) + }, + /* Declaration of simple variables often follows the sequence: + * ;$lcl ;$lcl + * stack -4 push.c + * const.pri ;$exp + * stor.s.pri - + * ;$exp - + */ + { + #ifdef SCPACK + ";$lcl %1 %2!stack -4!const.pri %3!stor.s.pri %2!;$exp!", + ";$lcl %1 %2!push.c %3!;$exp!", + #else "\223lcl\331\227ack -4!\234\206\256\227or\222\230\255", "\223lcl\331\330\256\255", - #endif - seqsize(3,3) - seqsize(1,1) - }, - { - #ifdef SCPACK - ";$lcl %1 %2!stack -4!zero.pri!stor.s.pri %2!;$exp!", - ";$lcl %1 %2!push.c 0!;$exp!", - #else + #endif + seqsize(3,3) - seqsize(1,1) + }, + { + #ifdef SCPACK + ";$lcl %1 %2!stack -4!zero.pri!stor.s.pri %2!;$exp!", + ";$lcl %1 %2!push.c 0!;$exp!", + #else "\223lcl\331\227ack -4!\375\227or\222\230\255", "\223lcl\331\330 0!\255", - #endif - seqsize(3,2) - seqsize(1,1) - }, - /* During a calculation, the intermediate result must sometimes - * be moved from PRI to ALT, like in: - * push.pri move.alt - * load.s.pri n1 load.s.pri n1 - * pop.alt - - * - * The above also accurs for "load.pri" and for "const.pri", - * so add another two cases. - */ - { - #ifdef SCPACK - "push.pri!load.s.pri %1!pop.alt!", - "move.alt!load.s.pri %1!", - #else + #endif + seqsize(3,2) - seqsize(1,1) + }, + /* During a calculation, the intermediate result must sometimes + * be moved from PRI to ALT, like in: + * push.pri move.alt + * load.s.pri n1 load.s.pri n1 + * pop.alt - + * + * The above also accurs for "load.pri" and for "const.pri", + * so add another two cases. + */ + { + #ifdef SCPACK + "push.pri!load.s.pri %1!pop.alt!", + "move.alt!load.s.pri %1!", + #else "\247\332\244", "\307\332", - #endif - seqsize(3,1) - seqsize(2,1) - }, - { - #ifdef SCPACK - "push.pri!load.pri %1!pop.alt!", - "move.alt!load.pri %1!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + { + #ifdef SCPACK + "push.pri!load.pri %1!pop.alt!", + "move.alt!load.pri %1!", + #else "\247\312\244", "\307\312", - #endif - seqsize(3,1) - seqsize(2,1) - }, - { - #ifdef SCPACK - "push.pri!const.pri %1!pop.alt!", - "move.alt!const.pri %1!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + { + #ifdef SCPACK + "push.pri!const.pri %1!pop.alt!", + "move.alt!const.pri %1!", + #else "\247\327\244", "\307\327", - #endif - seqsize(3,1) - seqsize(2,1) - }, - { - #ifdef SCPACK - "push.pri!zero.pri!pop.alt!", - "move.alt!zero.pri!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + { + #ifdef SCPACK + "push.pri!zero.pri!pop.alt!", + "move.alt!zero.pri!", + #else "\247\375\244", "\307\375", - #endif - seqsize(3,0) - seqsize(2,0) - }, - /* saving PRI and then loading from its address - * occurs when indexing a multi-dimensional array - */ - { - #ifdef SCPACK - "push.pri!load.i!pop.alt!", - "move.alt!load.i!", - #else + #endif + seqsize(3,0) - seqsize(2,0) + }, + /* saving PRI and then loading from its address + * occurs when indexing a multi-dimensional array + */ + { + #ifdef SCPACK + "push.pri!load.i!pop.alt!", + "move.alt!load.i!", + #else "\247\342i\266", "\307\342\357", - #endif - seqsize(3,0) - seqsize(2,0) - }, - /* An even simpler PUSH/POP optimization (occurs in - * switch statements): - * push.pri move.alt - * pop.alt - - */ - { - #ifdef SCPACK - "push.pri!pop.alt!", - "move.alt!", - #else + #endif + seqsize(3,0) - seqsize(2,0) + }, + /* An even simpler PUSH/POP optimization (occurs in + * switch statements): + * push.pri move.alt + * pop.alt - + */ + { + #ifdef SCPACK + "push.pri!pop.alt!", + "move.alt!", + #else "\247\244", "\307", - #endif - seqsize(2,0) - seqsize(1,0) - }, - /* Some simple arithmetic sequences - */ - { - #ifdef SCPACK - "move.alt!load.s.pri %1!add!", - "load.s.alt %1!add!", - #else + #endif + seqsize(2,0) - seqsize(1,0) + }, + /* Some simple arithmetic sequences + */ + { + #ifdef SCPACK + "move.alt!load.s.pri %1!add!", + "load.s.alt %1!add!", + #else "\307\332\271", "\226\246\271", - #endif - seqsize(3,1) - seqsize(2,1) - }, - { - #ifdef SCPACK - "move.alt!load.pri %1!add!", - "load.alt %1!add!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + { + #ifdef SCPACK + "move.alt!load.pri %1!add!", + "load.alt %1!add!", + #else "\307\312\271", "\376\271", - #endif - seqsize(3,1) - seqsize(2,1) - }, - { - #ifdef SCPACK - "move.alt!const.pri %1!add!", - "const.alt %1!add!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + { + #ifdef SCPACK + "move.alt!const.pri %1!add!", + "const.alt %1!add!", + #else "\307\327\271", "\360\271", - #endif - seqsize(3,1) - seqsize(2,1) - }, - { - #ifdef SCPACK - "move.alt!load.s.pri %1!sub.alt!", - "load.s.alt %1!sub!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + { + #ifdef SCPACK + "move.alt!load.s.pri %1!sub.alt!", + "load.s.alt %1!sub!", + #else "\307\332sub\224", "\226\246sub!", - #endif - seqsize(3,1) - seqsize(2,1) - }, - { - #ifdef SCPACK - "move.alt!load.pri %1!sub.alt!", - "load.alt %1!sub!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + { + #ifdef SCPACK + "move.alt!load.pri %1!sub.alt!", + "load.alt %1!sub!", + #else "\307\312sub\224", "\376sub!", - #endif - seqsize(3,1) - seqsize(2,1) - }, - { - #ifdef SCPACK - "move.alt!const.pri %1!sub.alt!", - "const.alt %1!sub!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + { + #ifdef SCPACK + "move.alt!const.pri %1!sub.alt!", + "const.alt %1!sub!", + #else "\307\327sub\224", "\360sub!", - #endif - seqsize(3,1) - seqsize(2,1) - }, - /* User-defined operators first load the operands into registers and - * then have them pushed onto the stack. This can give rise to sequences - * like: - * const.pri n1 push.c n1 - * const.alt n2 push.c n2 - * push.pri - - * push.alt - - * A similar sequence occurs with the two PUSH.pri/alt instructions inverted. - * The first, second, or both CONST.pri/alt instructions can also be - * LOAD.pri/alt. - * This gives 2 x 4 cases. - */ - { - #ifdef SCPACK - "const.pri %1!const.alt %2!push.pri!push.alt!", - "push.c %1!push.c %2!", - #else + #endif + seqsize(3,1) - seqsize(2,1) + }, + /* User-defined operators first load the operands into registers and + * then have them pushed onto the stack. This can give rise to sequences + * like: + * const.pri n1 push.c n1 + * const.alt n2 push.c n2 + * push.pri - + * push.alt - + * A similar sequence occurs with the two PUSH.pri/alt instructions inverted. + * The first, second, or both CONST.pri/alt instructions can also be + * LOAD.pri/alt. + * This gives 2 x 4 cases. + */ + { + #ifdef SCPACK + "const.pri %1!const.alt %2!push.pri!push.alt!", + "push.c %1!push.c %2!", + #else "\327\234\305\247\356", "\330\202\330\221", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "const.pri %1!const.alt %2!push.alt!push.pri!", - "push.c %2!push.c %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "const.pri %1!const.alt %2!push.alt!push.pri!", + "push.c %2!push.c %1!", + #else "\327\234\305\356\247", "\330\221\330\202", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "const.pri %1!load.alt %2!push.pri!push.alt!", - "push.c %1!push %2!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "const.pri %1!load.alt %2!push.pri!push.alt!", + "push.c %1!push %2!", + #else "\327\366\247\356", "\330\202\216\221", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "const.pri %1!load.alt %2!push.alt!push.pri!", - "push %2!push.c %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "const.pri %1!load.alt %2!push.alt!push.pri!", + "push %2!push.c %1!", + #else "\327\366\356\247", "\216\221\330\202", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!const.alt %2!push.pri!push.alt!", - "push %1!push.c %2!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!const.alt %2!push.pri!push.alt!", + "push %1!push.c %2!", + #else "\312\234\305\247\356", "\216\202\330\221", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!const.alt %2!push.alt!push.pri!", - "push.c %2!push %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!const.alt %2!push.alt!push.pri!", + "push.c %2!push %1!", + #else "\312\234\305\356\247", "\330\221\216\202", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!load.alt %2!push.pri!push.alt!", - "push %1!push %2!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!load.alt %2!push.pri!push.alt!", + "push %1!push %2!", + #else "\312\366\247\356", "\216\202\216\221", - #endif - seqsize(4,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "load.pri %1!load.alt %2!push.alt!push.pri!", - "push %2!push %1!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "load.pri %1!load.alt %2!push.alt!push.pri!", + "push %2!push %1!", + #else "\312\366\356\247", "\216\221\216\202", - #endif - seqsize(4,2) - seqsize(2,2) - }, - /* Function calls (parameters are passed on the stack) - * load.s.pri n1 push.s n1 - * push.pri - - * -------------------------------------- - * load.pri n1 push n1 - * push.pri - - * -------------------------------------- - * const.pri n1 push.c n1 - * push.pri - - * -------------------------------------- - * zero.pri push.c 0 - * push.pri - - * -------------------------------------- - * addr.pri n1 push.adr n1 - * push.pri - - * - * However, PRI must not be needed after this instruction - * if this shortcut is used. Check for the ;$par comment. - */ - { - #ifdef SCPACK - "load.s.pri %1!push.pri!;$par!", - "push.s %1!;$par!", - #else + #endif + seqsize(4,2) - seqsize(2,2) + }, + /* Function calls (parameters are passed on the stack) + * load.s.pri n1 push.s n1 + * push.pri - + * -------------------------------------- + * load.pri n1 push n1 + * push.pri - + * -------------------------------------- + * const.pri n1 push.c n1 + * push.pri - + * -------------------------------------- + * zero.pri push.c 0 + * push.pri - + * -------------------------------------- + * addr.pri n1 push.adr n1 + * push.pri - + * + * However, PRI must not be needed after this instruction + * if this shortcut is used. Check for the ;$par comment. + */ + { + #ifdef SCPACK + "load.s.pri %1!push.pri!;$par!", + "push.s %1!;$par!", + #else "\226\264\242", "\216\222\202\242", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "load.pri %1!push.pri!;$par!", - "push %1!;$par!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "load.pri %1!push.pri!;$par!", + "push %1!;$par!", + #else "\217\264\242", "\216\202\242", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "const.pri %1!push.pri!;$par!", - "push.c %1!;$par!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "const.pri %1!push.pri!;$par!", + "push.c %1!;$par!", + #else "\234\264\242", "\330\202\242", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "zero.pri!push.pri!;$par!", - "push.c 0!;$par!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "zero.pri!push.pri!;$par!", + "push.c 0!;$par!", + #else "\375\247\242", "\330 0!\242", - #endif - seqsize(2,0) - seqsize(1,1) - }, - { - #ifdef SCPACK - "addr.pri %1!push.pri!;$par!", - "push.adr %1!;$par!", - #else + #endif + seqsize(2,0) - seqsize(1,1) + }, + { + #ifdef SCPACK + "addr.pri %1!push.pri!;$par!", + "push.adr %1!;$par!", + #else "\265\264\242", "\216\325\202\242", - #endif - seqsize(2,1) - seqsize(1,1) - }, - /* References with a default value generate new cells on the heap - * dynamically. That code often ends with: - * move.pri push.alt - * push.pri - - */ - { - #ifdef SCPACK - "move.pri!push.pri!", - "push.alt!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + /* References with a default value generate new cells on the heap + * dynamically. That code often ends with: + * move.pri push.alt + * push.pri - + */ + { + #ifdef SCPACK + "move.pri!push.pri!", + "push.alt!", + #else "\300\237\247", "\356", - #endif - seqsize(2,0) - seqsize(1,0) - }, - /* Simple arithmetic operations on constants. Noteworthy is the - * subtraction of a constant, since it is converted to the addition - * of the inverse value. - * const.alt n1 add.c n1 - * add - - * -------------------------------------- - * const.alt n1 add.c -n1 - * sub - - * -------------------------------------- - * const.alt n1 smul.c n1 - * smul - - * -------------------------------------- - * const.alt n1 eq.c.pri n1 - * eq - - */ - { - #ifdef SCPACK - "const.alt %1!add!", - "add.c %1!", - #else + #endif + seqsize(2,0) - seqsize(1,0) + }, + /* Simple arithmetic operations on constants. Noteworthy is the + * subtraction of a constant, since it is converted to the addition + * of the inverse value. + * const.alt n1 add.c n1 + * add - + * -------------------------------------- + * const.alt n1 add.c -n1 + * sub - + * -------------------------------------- + * const.alt n1 smul.c n1 + * smul - + * -------------------------------------- + * const.alt n1 eq.c.pri n1 + * eq - + */ + { + #ifdef SCPACK + "const.alt %1!add!", + "add.c %1!", + #else "\360\271", "\236\245\202", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "const.alt %1!sub!", - "add.c -%1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "const.alt %1!sub!", + "add.c -%1!", + #else "\360sub!", "\236\245 -\201", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "const.alt %1!smul!", - "smul.c %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "const.alt %1!smul!", + "smul.c %1!", + #else "\360smul!", "smu\310\202", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "const.alt %1!eq!", - "eq.c.pri %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "const.alt %1!eq!", + "eq.c.pri %1!", + #else "\360\323", "\260\245\225", - #endif - seqsize(2,1) - seqsize(1,1) - }, - /* Some operations use the alternative subtraction operation --these - * can also be optimized. - * const.pri n1 load.s.pri n2 - * load.s.alt n2 add.c -n1 - * sub.alt - - * -------------------------------------- - * const.pri n1 load.pri n2 - * load.alt n2 add.c -n1 - * sub.alt - - */ - { - #ifdef SCPACK - "const.pri %1!load.s.alt %2!sub.alt!", - "load.s.pri %2!add.c -%1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + /* Some operations use the alternative subtraction operation --these + * can also be optimized. + * const.pri n1 load.s.pri n2 + * load.s.alt n2 add.c -n1 + * sub.alt - + * -------------------------------------- + * const.pri n1 load.pri n2 + * load.alt n2 add.c -n1 + * sub.alt - + */ + { + #ifdef SCPACK + "const.pri %1!load.s.alt %2!sub.alt!", + "load.s.pri %2!add.c -%1!", + #else "\327\226\305sub\224", "\251\236\245 -\201", - #endif - seqsize(3,2) - seqsize(2,2) - }, - { - #ifdef SCPACK - "const.pri %1!load.alt %2!sub.alt!", - "load.pri %2!add.c -%1!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + { + #ifdef SCPACK + "const.pri %1!load.alt %2!sub.alt!", + "load.pri %2!add.c -%1!", + #else "\327\366sub\224", "\333\236\245 -\201", - #endif - seqsize(3,2) - seqsize(2,2) - }, - /* With arrays indexed with constants that come from enumerations, it happens - * multiple add.c opcodes follow in sequence. - * add.c n1 add.c n1+n2 - * add.c n2 - - */ - { - #ifdef SCPACK - "add.c %1!add.c %2!", - "add.c %1+%2!", - #else + #endif + seqsize(3,2) - seqsize(2,2) + }, + /* With arrays indexed with constants that come from enumerations, it happens + * multiple add.c opcodes follow in sequence. + * add.c n1 add.c n1+n2 + * add.c n2 - + */ + { + #ifdef SCPACK + "add.c %1!add.c %2!", + "add.c %1+%2!", + #else "\236\245\202\236\245\221", "\236\245\267+%2!", - #endif - seqsize(2,2) - seqsize(1,1) - }, - /* Compare and jump - * eq jneq n1 - * jzer n1 - - * -------------------------------------- - * eq jeq n1 - * jnz n1 - - * -------------------------------------- - * neq jeq n1 - * jzer n1 - - * -------------------------------------- - * neq jneq n1 - * jnz n1 - - * An similarly for other relations - * sless jsgeq n1 - * jzer n1 - - * -------------------------------------- - * sless jsless n1 - * jnz n1 - - * -------------------------------------- - * sleq jsgrtr n1 - * jzer n1 - - * -------------------------------------- - * sleq jsleq n1 - * jnz n1 - - * -------------------------------------- - * sgrtr jsleq n1 - * jzer n1 - - * -------------------------------------- - * sgrtr jsgrtr n1 - * jnz n1 - - * -------------------------------------- - * sgeq jsless n1 - * jzer n1 - - * -------------------------------------- - * sgeq jsgeq n1 - * jnz n1 - - * We can relax the optimizations for the unsigned comparisons, - * because the Pawn compiler currently only generates signed - * comparisons. - */ - { - #ifdef SCPACK - "eq!jzer %1!", - "jneq %1!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + /* Compare and jump + * eq jneq n1 + * jzer n1 - + * -------------------------------------- + * eq jeq n1 + * jnz n1 - + * -------------------------------------- + * neq jeq n1 + * jzer n1 - + * -------------------------------------- + * neq jneq n1 + * jnz n1 - + * An similarly for other relations + * sless jsgeq n1 + * jzer n1 - + * -------------------------------------- + * sless jsless n1 + * jnz n1 - + * -------------------------------------- + * sleq jsgrtr n1 + * jzer n1 - + * -------------------------------------- + * sleq jsleq n1 + * jnz n1 - + * -------------------------------------- + * sgrtr jsleq n1 + * jzer n1 - + * -------------------------------------- + * sgrtr jsgrtr n1 + * jnz n1 - + * -------------------------------------- + * sgeq jsless n1 + * jzer n1 - + * -------------------------------------- + * sgeq jsgeq n1 + * jnz n1 - + * We can relax the optimizations for the unsigned comparisons, + * because the Pawn compiler currently only generates signed + * comparisons. + */ + { + #ifdef SCPACK + "eq!jzer %1!", + "jneq %1!", + #else "\323\340", "\373\361", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "eq!jnz %1!", - "jeq %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "eq!jnz %1!", + "jeq %1!", + #else "\323\373z\202", "j\361", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "neq!jzer %1!", - "jeq %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "neq!jzer %1!", + "jeq %1!", + #else "n\323\340", "j\361", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "neq!jnz %1!", - "jneq %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "neq!jnz %1!", + "jneq %1!", + #else "n\323\373z\202", "\373\361", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "sless!jzer %1!", - "jsgeq %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "sless!jzer %1!", + "jsgeq %1!", + #else "\353!\340", "j\303\361", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "sless!jnz %1!", - "jsless %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "sless!jnz %1!", + "jsless %1!", + #else "\353!\373z\202", "j\353\202", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "sleq!jzer %1!", - "jsgrtr %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "sleq!jzer %1!", + "jsgrtr %1!", + #else "\304\323\340", "j\355r\202", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "sleq!jnz %1!", - "jsleq %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "sleq!jnz %1!", + "jsleq %1!", + #else "\304\323\373z\202", "j\304\361", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "sgrtr!jzer %1!", - "jsleq %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "sgrtr!jzer %1!", + "jsleq %1!", + #else "\374\340", "j\304\361", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "sgrtr!jnz %1!", - "jsgrtr %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "sgrtr!jnz %1!", + "jsgrtr %1!", + #else "\374\373z\202", "j\355r\202", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "sgeq!jzer %1!", - "jsless %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "sgeq!jzer %1!", + "jsless %1!", + #else "\303\323\340", "j\353\202", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "sgeq!jnz %1!", - "jsgeq %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "sgeq!jnz %1!", + "jsgeq %1!", + #else "\303\323\373z\202", "j\303\361", - #endif - seqsize(2,1) - seqsize(1,1) - }, - /* Test for zero (common case, especially for strings) - * E.g. the test expression of: "for (i=0; str{i}!=0; ++i)" - * - * zero.alt jzer n1 - * jeq n1 - - * -------------------------------------- - * zero.alt jnz n1 - * jneq n1 - - */ - { - #ifdef SCPACK - "zero.alt!jeq %1!", - "jzer %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + /* Test for zero (common case, especially for strings) + * E.g. the test expression of: "for (i=0; str{i}!=0; ++i)" + * + * zero.alt jzer n1 + * jeq n1 - + * -------------------------------------- + * zero.alt jnz n1 + * jneq n1 - + */ + { + #ifdef SCPACK + "zero.alt!jeq %1!", + "jzer %1!", + #else "\337\224j\361", "\340", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "zero.alt!jneq %1!", - "jnz %1!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "zero.alt!jneq %1!", + "jnz %1!", + #else "\337\224\373\361", "\373z\202", - #endif - seqsize(2,1) - seqsize(1,1) - }, - /* Incrementing and decrementing leaves a value in - * in PRI which may not be used (for example, as the - * third expression in a "for" loop). - * inc n1 inc n1 ; ++n - * load.pri n1 ;$exp - * ;$exp - - * -------------------------------------- - * load.pri n1 inc n1 ; n++, e.g. "for (n=0; n<10; n++)" - * inc n1 ;$exp - * ;$exp - - * Plus the varieties for stack relative increments - * and decrements. - */ - { - #ifdef SCPACK - "inc %1!load.pri %1!;$exp!", - "inc %1!;$exp!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + /* Incrementing and decrementing leaves a value in + * in PRI which may not be used (for example, as the + * third expression in a "for" loop). + * inc n1 inc n1 ; ++n + * load.pri n1 ;$exp + * ;$exp - + * -------------------------------------- + * load.pri n1 inc n1 ; n++, e.g. "for (n=0; n<10; n++)" + * inc n1 ;$exp + * ;$exp - + * Plus the varieties for stack relative increments + * and decrements. + */ + { + #ifdef SCPACK + "inc %1!load.pri %1!;$exp!", + "inc %1!;$exp!", + #else "inc\202\312\255", "inc\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - { - #ifdef SCPACK - "load.pri %1!inc %1!;$exp!", - "inc %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + { + #ifdef SCPACK + "load.pri %1!inc %1!;$exp!", + "inc %1!;$exp!", + #else "\312inc\301", "inc\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - { - #ifdef SCPACK - "inc.s %1!load.s.pri %1!;$exp!", - "inc.s %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + { + #ifdef SCPACK + "inc.s %1!load.s.pri %1!;$exp!", + "inc.s %1!;$exp!", + #else "inc\222\202\332\255", "inc\222\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - { - #ifdef SCPACK - "load.s.pri %1!inc.s %1!;$exp!", - "inc.s %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + { + #ifdef SCPACK + "load.s.pri %1!inc.s %1!;$exp!", + "inc.s %1!;$exp!", + #else "\332inc\222\301", "inc\222\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - { - #ifdef SCPACK - "dec %1!load.pri %1!;$exp!", - "dec %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + { + #ifdef SCPACK + "dec %1!load.pri %1!;$exp!", + "dec %1!;$exp!", + #else "dec\202\312\255", "dec\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - { - #ifdef SCPACK - "load.pri %1!dec %1!;$exp!", - "dec %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + { + #ifdef SCPACK + "load.pri %1!dec %1!;$exp!", + "dec %1!;$exp!", + #else "\312dec\301", "dec\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - { - #ifdef SCPACK - "dec.s %1!load.s.pri %1!;$exp!", - "dec.s %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + { + #ifdef SCPACK + "dec.s %1!load.s.pri %1!;$exp!", + "dec.s %1!;$exp!", + #else "dec\222\202\332\255", "dec\222\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - { - #ifdef SCPACK - "load.s.pri %1!dec.s %1!;$exp!", - "dec.s %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + { + #ifdef SCPACK + "load.s.pri %1!dec.s %1!;$exp!", + "dec.s %1!;$exp!", + #else "\332dec\222\301", "dec\222\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - /* ??? the same (increments and decrements) for references */ - /* Loading the constant zero has a special opcode. - * When storing zero in memory, the value of PRI must not be later on. - * const.pri 0 zero n1 - * stor.pri n1 ;$exp - * ;$exp - - * -------------------------------------- - * const.pri 0 zero.s n1 - * stor.s.pri n1 ;$exp - * ;$exp - - * -------------------------------------- - * zero.pri zero n1 - * stor.pri n1 ;$exp - * ;$exp - - * -------------------------------------- - * zero.pri zero.s n1 - * stor.s.pri n1 ;$exp - * ;$exp - - * -------------------------------------- - * const.pri 0 zero.pri - * -------------------------------------- - * const.alt 0 zero.alt - * The last two alternatives save more memory than they save - * time, but anyway... - */ - { - #ifdef SCPACK - "const.pri 0!stor.pri %1!;$exp!", - "zero %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + /* ??? the same (increments and decrements) for references */ + /* Loading the constant zero has a special opcode. + * When storing zero in memory, the value of PRI must not be later on. + * const.pri 0 zero n1 + * stor.pri n1 ;$exp + * ;$exp - + * -------------------------------------- + * const.pri 0 zero.s n1 + * stor.s.pri n1 ;$exp + * ;$exp - + * -------------------------------------- + * zero.pri zero n1 + * stor.pri n1 ;$exp + * ;$exp - + * -------------------------------------- + * zero.pri zero.s n1 + * stor.s.pri n1 ;$exp + * ;$exp - + * -------------------------------------- + * const.pri 0 zero.pri + * -------------------------------------- + * const.alt 0 zero.alt + * The last two alternatives save more memory than they save + * time, but anyway... + */ + { + #ifdef SCPACK + "const.pri 0!stor.pri %1!;$exp!", + "zero %1!;$exp!", + #else "\234\206 0!\227or\225\255", "\337\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - { - #ifdef SCPACK - "const.pri 0!stor.s.pri %1!;$exp!", - "zero.s %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + { + #ifdef SCPACK + "const.pri 0!stor.s.pri %1!;$exp!", + "zero.s %1!;$exp!", + #else "\234\206 0!\227or\222\225\255", "\337\222\301", - #endif - seqsize(2,2) - seqsize(1,1) - }, - { - #ifdef SCPACK - "zero.pri!stor.pri %1!;$exp!", - "zero %1!;$exp!", - #else + #endif + seqsize(2,2) - seqsize(1,1) + }, + { + #ifdef SCPACK + "zero.pri!stor.pri %1!;$exp!", + "zero %1!;$exp!", + #else "\375\227or\225\255", "\337\301", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "zero.pri!stor.s.pri %1!;$exp!", - "zero.s %1!;$exp!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "zero.pri!stor.s.pri %1!;$exp!", + "zero.s %1!;$exp!", + #else "\375\227or\222\225\255", "\337\222\301", - #endif - seqsize(2,1) - seqsize(1,1) - }, - { - #ifdef SCPACK - "const.pri 0!", - "zero.pri!", - #else + #endif + seqsize(2,1) - seqsize(1,1) + }, + { + #ifdef SCPACK + "const.pri 0!", + "zero.pri!", + #else "\234\206 0!", "\375", - #endif - seqsize(1,1) - seqsize(1,0) - }, - { - #ifdef SCPACK - "const.alt 0!", - "zero.alt!", - #else + #endif + seqsize(1,1) - seqsize(1,0) + }, + { + #ifdef SCPACK + "const.alt 0!", + "zero.alt!", + #else "\234\212 0!", "\337\224", - #endif - seqsize(1,1) - seqsize(1,0) - }, - - /* ------------------ */ - /* Macro instructions */ - /* ------------------ */ - - { "", "", 0 }, /* separator, so optimizer can stop before generating macro opcodes */ - - /* optimizing the calling of native functions (which always have a parameter - * count pushed before, and the stack pointer restored afterwards - */ - { - #ifdef SCPACK - "push.c %1!sysreq.c %2!stack %3!", //note: %3 == %1 + 4 - "sysreq.n %2 %1!", - #else + #endif + seqsize(1,1) - seqsize(1,0) + }, + + /* ------------------ */ + /* Macro instructions */ + /* ------------------ */ + + { "", "", 0 }, /* separator, so optimizer can stop before generating macro opcodes */ + + /* optimizing the calling of native functions (which always have a parameter + * count pushed before, and the stack pointer restored afterwards + */ + { + #ifdef SCPACK + "push.c %1!sysreq.c %2!stack %3!", //note: %3 == %1 + 4 + "sysreq.n %2 %1!", + #else "\330\202sysr\260\245\221\227ack\256", "sysr\260.n\220\202", - #endif - seqsize(3,3) - seqsize(1,2) - }, - /* ----- */ - /* Functions with many parameters with the same "type" have sequences like: - * push.c n1 push3.c n1 n2 n3 - * ;$par ;$par - * push.c n2 - - * ;$par - - * push.c n3 - - * ;$par - - * etc. etc. - * - * Similar sequences occur with PUSH, PUSH.s and PUSHADDR - */ - { - #ifdef SCPACK - "push.c %1!;$par!push.c %2!;$par!push.c %3!;$par!push.c %4!;$par!push.c %5!;$par!", - "push5.c %1 %2 %3 %4 %5!", - #else + #endif + seqsize(3,3) - seqsize(1,2) + }, + /* ----- */ + /* Functions with many parameters with the same "type" have sequences like: + * push.c n1 push3.c n1 n2 n3 + * ;$par ;$par + * push.c n2 - + * ;$par - + * push.c n3 - + * ;$par - + * etc. etc. + * + * Similar sequences occur with PUSH, PUSH.s and PUSHADDR + */ + { + #ifdef SCPACK + "push.c %1!;$par!push.c %2!;$par!push.c %3!;$par!push.c %4!;$par!push.c %5!;$par!", + "push5.c %1 %2 %3 %4 %5!", + #else "\330\335\245\345\245\256\257\245\334\257\245\2035!\242", "\2165\245\343\250\302\2035!", - #endif - seqsize(5,5) - seqsize(1,5) - }, - { - #ifdef SCPACK - "push.c %1!;$par!push.c %2!;$par!push.c %3!;$par!push.c %4!;$par!", - "push4.c %1 %2 %3 %4!", - #else + #endif + seqsize(5,5) - seqsize(1,5) + }, + { + #ifdef SCPACK + "push.c %1!;$par!push.c %2!;$par!push.c %3!;$par!push.c %4!;$par!", + "push4.c %1 %2 %3 %4!", + #else "\330\335\245\345\245\256\257\245\334\242", "\2164\245\343\250\334", - #endif - seqsize(4,4) - seqsize(1,4) - }, - { - #ifdef SCPACK - "push.c %1!;$par!push.c %2!;$par!push.c %3!;$par!", - "push3.c %1 %2 %3!", - #else + #endif + seqsize(4,4) - seqsize(1,4) + }, + { + #ifdef SCPACK + "push.c %1!;$par!push.c %2!;$par!push.c %3!;$par!", + "push3.c %1 %2 %3!", + #else "\330\335\245\345\245\256\242", "\2163\245\343\256", - #endif - seqsize(3,3) - seqsize(1,3) - }, - { - #ifdef SCPACK - "push.c %1!;$par!push.c %2!;$par!", - "push2.c %1 %2!", - #else + #endif + seqsize(3,3) - seqsize(1,3) + }, + { + #ifdef SCPACK + "push.c %1!;$par!push.c %2!;$par!", + "push2.c %1 %2!", + #else "\330\335\245\221\242", "\2162\245\331", - #endif - seqsize(2,2) - seqsize(1,2) - }, - /* ----- */ - { - #ifdef SCPACK - "push %1!;$par!push %2!;$par!push %3!;$par!push %4!;$par!push %5!;$par!", - "push5 %1 %2 %3 %4 %5!", - #else + #endif + seqsize(2,2) - seqsize(1,2) + }, + /* ----- */ + { + #ifdef SCPACK + "push %1!;$par!push %2!;$par!push %3!;$par!push %4!;$par!push %5!;$par!", + "push5 %1 %2 %3 %4 %5!", + #else "\216\335\345\256\257\334\257\2035!\242", "\2165\343\250\302\2035!", - #endif - seqsize(5,5) - seqsize(1,5) - }, - { - #ifdef SCPACK - "push %1!;$par!push %2!;$par!push %3!;$par!push %4!;$par!", - "push4 %1 %2 %3 %4!", - #else + #endif + seqsize(5,5) - seqsize(1,5) + }, + { + #ifdef SCPACK + "push %1!;$par!push %2!;$par!push %3!;$par!push %4!;$par!", + "push4 %1 %2 %3 %4!", + #else "\216\335\345\256\257\334\242", "\2164\343\250\334", - #endif - seqsize(4,4) - seqsize(1,4) - }, - { - #ifdef SCPACK - "push %1!;$par!push %2!;$par!push %3!;$par!", - "push3 %1 %2 %3!", - #else + #endif + seqsize(4,4) - seqsize(1,4) + }, + { + #ifdef SCPACK + "push %1!;$par!push %2!;$par!push %3!;$par!", + "push3 %1 %2 %3!", + #else "\216\335\345\256\242", "\2163\343\256", - #endif - seqsize(3,3) - seqsize(1,3) - }, - { - #ifdef SCPACK - "push %1!;$par!push %2!;$par!", - "push2 %1 %2!", - #else + #endif + seqsize(3,3) - seqsize(1,3) + }, + { + #ifdef SCPACK + "push %1!;$par!push %2!;$par!", + "push2 %1 %2!", + #else "\216\335\221\242", "\2162\331", - #endif - seqsize(2,2) - seqsize(1,2) - }, - /* ----- */ - { - #ifdef SCPACK - "push.s %1!;$par!push.s %2!;$par!push.s %3!;$par!push.s %4!;$par!push.s %5!;$par!", - "push5.s %1 %2 %3 %4 %5!", - #else + #endif + seqsize(2,2) - seqsize(1,2) + }, + /* ----- */ + { + #ifdef SCPACK + "push.s %1!;$par!push.s %2!;$par!push.s %3!;$par!push.s %4!;$par!push.s %5!;$par!", + "push5.s %1 %2 %3 %4 %5!", + #else "\216\222\335\222\345\222\256\257\222\334\257\222\2035!\242", "\2165\222\343\250\302\2035!", - #endif - seqsize(5,5) - seqsize(1,5) - }, - { - #ifdef SCPACK - "push.s %1!;$par!push.s %2!;$par!push.s %3!;$par!push.s %4!;$par!", - "push4.s %1 %2 %3 %4!", - #else + #endif + seqsize(5,5) - seqsize(1,5) + }, + { + #ifdef SCPACK + "push.s %1!;$par!push.s %2!;$par!push.s %3!;$par!push.s %4!;$par!", + "push4.s %1 %2 %3 %4!", + #else "\216\222\335\222\345\222\256\257\222\334\242", "\2164\222\343\250\334", - #endif - seqsize(4,4) - seqsize(1,4) - }, - { - #ifdef SCPACK - "push.s %1!;$par!push.s %2!;$par!push.s %3!;$par!", - "push3.s %1 %2 %3!", - #else + #endif + seqsize(4,4) - seqsize(1,4) + }, + { + #ifdef SCPACK + "push.s %1!;$par!push.s %2!;$par!push.s %3!;$par!", + "push3.s %1 %2 %3!", + #else "\216\222\335\222\345\222\256\242", "\2163\222\343\256", - #endif - seqsize(3,3) - seqsize(1,3) - }, - { - #ifdef SCPACK - "push.s %1!;$par!push.s %2!;$par!", - "push2.s %1 %2!", - #else + #endif + seqsize(3,3) - seqsize(1,3) + }, + { + #ifdef SCPACK + "push.s %1!;$par!push.s %2!;$par!", + "push2.s %1 %2!", + #else "\216\222\335\222\221\242", "\2162\222\331", - #endif - seqsize(2,2) - seqsize(1,2) - }, - /* ----- */ - { - #ifdef SCPACK - "push.adr %1!;$par!push.adr %2!;$par!push.adr %3!;$par!push.adr %4!;$par!push.adr %5!;$par!", - "push5.adr %1 %2 %3 %4 %5!", - #else + #endif + seqsize(2,2) - seqsize(1,2) + }, + /* ----- */ + { + #ifdef SCPACK + "push.adr %1!;$par!push.adr %2!;$par!push.adr %3!;$par!push.adr %4!;$par!push.adr %5!;$par!", + "push5.adr %1 %2 %3 %4 %5!", + #else "\216\325\335\325\345\325\256\257\325\334\257\325\2035!\242", "\2165\325\343\250\302\2035!", - #endif - seqsize(5,5) - seqsize(1,5) - }, - { - #ifdef SCPACK - "push.adr %1!;$par!push.adr %2!;$par!push.adr %3!;$par!push.adr %4!;$par!", - "push4.adr %1 %2 %3 %4!", - #else + #endif + seqsize(5,5) - seqsize(1,5) + }, + { + #ifdef SCPACK + "push.adr %1!;$par!push.adr %2!;$par!push.adr %3!;$par!push.adr %4!;$par!", + "push4.adr %1 %2 %3 %4!", + #else "\216\325\335\325\345\325\256\257\325\334\242", "\2164\325\343\250\334", - #endif - seqsize(4,4) - seqsize(1,4) - }, - { - #ifdef SCPACK - "push.adr %1!;$par!push.adr %2!;$par!push.adr %3!;$par!", - "push3.adr %1 %2 %3!", - #else + #endif + seqsize(4,4) - seqsize(1,4) + }, + { + #ifdef SCPACK + "push.adr %1!;$par!push.adr %2!;$par!push.adr %3!;$par!", + "push3.adr %1 %2 %3!", + #else "\216\325\335\325\345\325\256\242", "\2163\325\343\256", - #endif - seqsize(3,3) - seqsize(1,3) - }, - { - #ifdef SCPACK - "push.adr %1!;$par!push.adr %2!;$par!", - "push2.adr %1 %2!", - #else + #endif + seqsize(3,3) - seqsize(1,3) + }, + { + #ifdef SCPACK + "push.adr %1!;$par!push.adr %2!;$par!", + "push2.adr %1 %2!", + #else "\216\325\335\325\221\242", "\2162\325\331", - #endif - seqsize(2,2) - seqsize(1,2) - }, - /* Loading two registers at a time - * load.pri n1 load.both n1 n2 - * load.alt n2 - - * -------------------------------------- - * load.alt n2 load.both n1 n2 - * load.pri n1 - - * -------------------------------------- - * load.s.pri n1 load.s.both n1 n2 - * load.s.alt n2 - - * -------------------------------------- - * load.s.alt n2 load.s.both n1 n2 - * load.s.pri n1 - - */ - { - #ifdef SCPACK - "load.pri %1!load.alt %2!", - "load.both %1 %2!", - #else + #endif + seqsize(2,2) - seqsize(1,2) + }, + /* Loading two registers at a time + * load.pri n1 load.both n1 n2 + * load.alt n2 - + * -------------------------------------- + * load.alt n2 load.both n1 n2 + * load.pri n1 - + * -------------------------------------- + * load.s.pri n1 load.s.both n1 n2 + * load.s.alt n2 - + * -------------------------------------- + * load.s.alt n2 load.s.both n1 n2 + * load.s.pri n1 - + */ + { + #ifdef SCPACK + "load.pri %1!load.alt %2!", + "load.both %1 %2!", + #else "\312\366", "\342\275th\331", - #endif - seqsize(2,2) - seqsize(1,2) - }, - { - #ifdef SCPACK - "load.alt %2!load.pri %1!", - "load.both %1 %2!", - #else + #endif + seqsize(2,2) - seqsize(1,2) + }, + { + #ifdef SCPACK + "load.alt %2!load.pri %1!", + "load.both %1 %2!", + #else "\366\312", "\342\275th\331", - #endif - seqsize(2,2) - seqsize(1,2) - }, - { - #ifdef SCPACK - "load.s.pri %1!load.s.alt %2!", - "load.s.both %1 %2!", - #else + #endif + seqsize(2,2) - seqsize(1,2) + }, + { + #ifdef SCPACK + "load.s.pri %1!load.s.alt %2!", + "load.s.both %1 %2!", + #else "\332\226\305", "\226.\275th\331", - #endif - seqsize(2,2) - seqsize(1,2) - }, - { - #ifdef SCPACK - "load.s.alt %2!load.s.pri %1!", - "load.s.both %1 %2!", - #else + #endif + seqsize(2,2) - seqsize(1,2) + }, + { + #ifdef SCPACK + "load.s.alt %2!load.s.pri %1!", + "load.s.both %1 %2!", + #else "\226\305\332", "\226.\275th\331", - #endif - seqsize(2,2) - seqsize(1,2) - }, - /* Loading two registers and then pushing them occurs with user operators - * load.both n1 n2 push2 n1 n2 - * push.pri - - * push.alt - - * -------------------------------------- - * load.s.both n1 n2 push2.s n1 n2 - * push.pri - - * push.alt - - */ - { - #ifdef SCPACK - "load.both %1 %2!push.pri!push.alt!", - "push2 %1 %2!", - #else + #endif + seqsize(2,2) - seqsize(1,2) + }, + /* Loading two registers and then pushing them occurs with user operators + * load.both n1 n2 push2 n1 n2 + * push.pri - + * push.alt - + * -------------------------------------- + * load.s.both n1 n2 push2.s n1 n2 + * push.pri - + * push.alt - + */ + { + #ifdef SCPACK + "load.both %1 %2!push.pri!push.alt!", + "push2 %1 %2!", + #else "\342\275th\331\247\356", "\2162\331", - #endif - seqsize(3,2) - seqsize(1,2) - }, - { - #ifdef SCPACK - "load.s.both %1 %2!push.pri!push.alt!", - "push2.s %1 %2!", - #else + #endif + seqsize(3,2) - seqsize(1,2) + }, + { + #ifdef SCPACK + "load.s.both %1 %2!push.pri!push.alt!", + "push2.s %1 %2!", + #else "\226.\275th\331\247\356", "\2162\222\331", - #endif - seqsize(3,2) - seqsize(1,2) - }, - /* Load a constant in a variable - * const.pri n1 const n2 n1 - * stor.pri n2 - - * -------------------------------------- - * const.pri n1 const.s n2 n1 - * stor.s.pri n2 - - */ - { - #ifdef SCPACK - "const.pri %1!stor.pri %2!", - "const %2 %1!", - #else + #endif + seqsize(3,2) - seqsize(1,2) + }, + /* Load a constant in a variable + * const.pri n1 const n2 n1 + * stor.pri n2 - + * -------------------------------------- + * const.pri n1 const.s n2 n1 + * stor.s.pri n2 - + */ + { + #ifdef SCPACK + "const.pri %1!stor.pri %2!", + "const %2 %1!", + #else "\327\227or\230", "\234\220\202", - #endif - seqsize(2,2) - seqsize(1,2) - }, - { - #ifdef SCPACK - "const.pri %1!stor.s.pri %2!", - "const.s %2 %1!", - #else + #endif + seqsize(2,2) - seqsize(1,2) + }, + { + #ifdef SCPACK + "const.pri %1!stor.s.pri %2!", + "const.s %2 %1!", + #else "\327\227or\222\230", "\234\222\220\202", - #endif - seqsize(2,2) - seqsize(1,2) - }, - /* ----- */ - { NULL, NULL, 0 } -}; + #endif + seqsize(2,2) - seqsize(1,2) + }, + /* ----- */ + { NULL, NULL, 0 } +};