Apply patch from upstream SVN r4641

BUG fix: the optimizer created incorrect code for subtraction a variable from a
constant.

https://code.google.com/p/pawnscript/source/detail?r=38

Fixes #10.
This commit is contained in:
Zeex 2014-01-25 23:21:33 +07:00
parent 8a32378617
commit 0aba449b68

View File

@ -30,13 +30,13 @@ SC_FUNC int strexpand(char *dest, unsigned char *source, int maxlen, unsigned ch
/*-*SCPACK start of pair table, do not change or remove this line */
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},
{131,50}, {144,33}, {46,115}, {59,36}, {138,33}, {134,130}, {143,146}, {134,145}, {115,116}, {114,33}, {110,152}, {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,151}, {112,33}, {120,170}, {101,171}, {147,172}, {168,33}, {162,142},
{101,113}, {110,100}, {122,101}, {178,114}, {149,167}, {158,114}, {33,164}, {131,49}, {103,33}, {158,33}, {104,184}, {99,186}, {120,187}, {98,111}, {118,101}, {111,190},
{109,191}, {130,173}, {131,52}, {115,103}, {115,108}, {138,145}, {180,169}, {192,148}, {108,165}, {166,169}, {143,149}, {115,174}, {117,177}, {204,203}, {139,200}, {189,205},
{105,100}, {208,120}, {46,135}, {176,33}, {106,179}, {210,114}, {206,134}, {156,149}, {142,165}, {183,145}, {150,149}, {143,152}, {194,33}, {130,175}, {97,177}, {179,111},
{212,130}, {182,185}, {143,46}, {183,144}, {156,152}, {145,175}, {114,101}, {230,102}, {196,101}, {108,231}, {232,115}, {234,115}, {195,114}, {236,116}, {142,148}, {105,33},
{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}
{105,100}, {208,120}, {46,135}, {176,33}, {106,179}, {210,114}, {206,134}, {156,149}, {142,165}, {183,145}, {143,151}, {150,149}, {194,33}, {130,175}, {97,177}, {179,111},
{212,130}, {182,185}, {143,46}, {183,144}, {156,151}, {145,175}, {114,101}, {230,102}, {196,101}, {108,231}, {232,115}, {234,115}, {195,114}, {236,116}, {142,148}, {105,33},
{176,130}, {214,32}, {156,166}, {241,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 */
@ -93,8 +93,8 @@ static SEQUENCE sequences_cmp[] = {
"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",
"\226\264\332\244",
"\332\226\246",
#endif
seqsize(4,2) - seqsize(2,2)
},
@ -103,8 +103,8 @@ static SEQUENCE sequences_cmp[] = {
"load.pri %1!push.pri!load.pri %2!pop.alt!",
"load.pri %2!load.alt %1!",
#else
"\217\264\333\244",
"\333\376",
"\217\264\332\244",
"\332\376",
#endif
seqsize(4,2) - seqsize(2,2)
},
@ -126,8 +126,8 @@ static SEQUENCE sequences_cmp[] = {
"addr.pri %1!push.pri!load.pri %2!pop.alt!",
"addr.alt %1!load.pri %2!",
#else
"\265\264\333\244",
"\265\246\333",
"\265\264\332\244",
"\265\246\332",
#endif
seqsize(4,2) - seqsize(2,2)
},
@ -140,7 +140,7 @@ static SEQUENCE sequences_cmp[] = {
"load.s.pri %2!const.alt %1!",
#else
"\364\244",
"\251\360",
"\251\362",
#endif
seqsize(4,2) - seqsize(2,2)
},
@ -149,8 +149,8 @@ static SEQUENCE sequences_cmp[] = {
"const.pri %1!push.pri!load.pri %2!pop.alt!",
"load.pri %2!const.alt %1!",
#else
"\234\264\333\244",
"\333\360",
"\234\264\332\244",
"\332\362",
#endif
seqsize(4,2) - seqsize(2,2)
},
@ -212,8 +212,8 @@ static SEQUENCE sequences_cmp[] = {
"move.pri!push.pri!load.s.pri %1!pop.alt!",
"load.s.pri %1!",
#else
"\300\237\247\332\244",
"\332",
"\300\237\247\333\244",
"\333",
#endif
seqsize(4,1) - seqsize(1,1)
},
@ -443,7 +443,7 @@ static SEQUENCE sequences_cmp[] = {
"load.s.pri %1!load.s.alt %2!xchg!",
"load.s.pri %2!load.s.alt %1!",
#else
"\332\226\305\274",
"\333\226\305\274",
"\251\226\246",
#endif
seqsize(3,2) - seqsize(2,2)
@ -453,8 +453,8 @@ static SEQUENCE sequences_cmp[] = {
"load.s.pri %1!load.alt %2!xchg!",
"load.pri %2!load.s.alt %1!",
#else
"\332\366\274",
"\333\226\246",
"\333\366\274",
"\332\226\246",
#endif
seqsize(3,2) - seqsize(2,2)
},
@ -463,7 +463,7 @@ static SEQUENCE sequences_cmp[] = {
"load.s.pri %1!const.alt %2!xchg!",
"const.pri %2!load.s.alt %1!",
#else
"\332\234\305\274",
"\333\234\305\274",
"\344\226\246",
#endif
seqsize(3,2) - seqsize(2,2)
@ -484,7 +484,7 @@ static SEQUENCE sequences_cmp[] = {
"load.pri %2!load.alt %1!",
#else
"\312\366\274",
"\333\376",
"\332\376",
#endif
seqsize(3,2) - seqsize(2,2)
},
@ -504,7 +504,7 @@ static SEQUENCE sequences_cmp[] = {
"load.s.pri %2!const.alt %1!",
#else
"\327\226\305\274",
"\251\360",
"\251\362",
#endif
seqsize(3,2) - seqsize(2,2)
},
@ -514,7 +514,7 @@ static SEQUENCE sequences_cmp[] = {
"load.pri %2!const.alt %1!",
#else
"\327\366\274",
"\333\360",
"\332\362",
#endif
seqsize(3,2) - seqsize(2,2)
},
@ -536,7 +536,7 @@ static SEQUENCE sequences_cmp[] = {
"const.alt %1!",
#else
"\307\327\274",
"\360",
"\362",
#endif
seqsize(3,1) - seqsize(1,1)
},
@ -555,7 +555,7 @@ static SEQUENCE sequences_cmp[] = {
"move.alt!load.s.pri %1!xchg!",
"load.s.alt %1!",
#else
"\307\332\274",
"\307\333\274",
"\226\246",
#endif
seqsize(3,1) - seqsize(1,1)
@ -566,8 +566,8 @@ static SEQUENCE sequences_cmp[] = {
"lref.pri %1!move.alt!load.pri %2!",
"lref.alt %1!load.pri %2!",
#else
"\351\225\307\333",
"\351\246\333",
"\351\225\307\332",
"\351\246\332",
#endif
seqsize(3,2) - seqsize(2,2)
},
@ -596,8 +596,8 @@ static SEQUENCE sequences_cmp[] = {
"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",
"\351\222\225\307\332",
"\351\222\246\332",
#endif
seqsize(3,2) - seqsize(2,2)
},
@ -917,7 +917,7 @@ static SEQUENCE sequences_cmp[] = {
";$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\230ack -4!\234\206\256\230or\222\227\255",
"\223lcl\331\330\256\255",
#endif
seqsize(3,3) - seqsize(1,1)
@ -927,7 +927,7 @@ static SEQUENCE sequences_cmp[] = {
";$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\230ack -4!\375\230or\222\227\255",
"\223lcl\331\330 0!\255",
#endif
seqsize(3,2) - seqsize(1,1)
@ -946,8 +946,8 @@ static SEQUENCE sequences_cmp[] = {
"push.pri!load.s.pri %1!pop.alt!",
"move.alt!load.s.pri %1!",
#else
"\247\332\244",
"\307\332",
"\247\333\244",
"\307\333",
#endif
seqsize(3,1) - seqsize(2,1)
},
@ -1016,7 +1016,7 @@ static SEQUENCE sequences_cmp[] = {
"move.alt!load.s.pri %1!add!",
"load.s.alt %1!add!",
#else
"\307\332\271",
"\307\333\271",
"\226\246\271",
#endif
seqsize(3,1) - seqsize(2,1)
@ -1037,7 +1037,7 @@ static SEQUENCE sequences_cmp[] = {
"const.alt %1!add!",
#else
"\307\327\271",
"\360\271",
"\362\271",
#endif
seqsize(3,1) - seqsize(2,1)
},
@ -1046,7 +1046,7 @@ static SEQUENCE sequences_cmp[] = {
"move.alt!load.s.pri %1!sub.alt!",
"load.s.alt %1!sub!",
#else
"\307\332sub\224",
"\307\333sub\224",
"\226\246sub!",
#endif
seqsize(3,1) - seqsize(2,1)
@ -1067,7 +1067,7 @@ static SEQUENCE sequences_cmp[] = {
"const.alt %1!sub!",
#else
"\307\327sub\224",
"\360sub!",
"\362sub!",
#endif
seqsize(3,1) - seqsize(2,1)
},
@ -1267,27 +1267,17 @@ static SEQUENCE sequences_cmp[] = {
"const.alt %1!add!",
"add.c %1!",
#else
"\360\271",
"\362\271",
"\236\245\202",
#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
"\360smul!",
"\362smul!",
"smu\310\202",
#endif
seqsize(2,1) - seqsize(1,1)
@ -1297,27 +1287,27 @@ static SEQUENCE sequences_cmp[] = {
"const.alt %1!eq!",
"eq.c.pri %1!",
#else
"\360\323",
"\362\323",
"\260\245\225",
#endif
seqsize(2,1) - seqsize(1,1)
},
/* Some operations use the alternative subtraction operation --these
* can also be optimized.
/* Subtraction of a constant. Note that the subtraction is converted to
* the addition of the inverse value.
* const.pri n1 load.s.pri n2
* load.s.alt n2 add.c -n1
* sub.alt -
* sub -
* --------------------------------------
* const.pri n1 load.pri n2
* load.alt n2 add.c -n1
* sub.alt -
* sub -
*/
{
#ifdef SCPACK
"const.pri %1!load.s.alt %2!sub.alt!",
"const.pri %1!load.s.alt %2!sub!",
"load.s.pri %2!add.c -%1!",
#else
"\327\226\305sub\224",
"\327\226\305sub!",
"\251\236\245 -\201",
#endif
seqsize(3,2) - seqsize(2,2)
@ -1328,7 +1318,7 @@ static SEQUENCE sequences_cmp[] = {
"load.pri %2!add.c -%1!",
#else
"\327\366sub\224",
"\333\236\245 -\201",
"\332\236\245 -\201",
#endif
seqsize(3,2) - seqsize(2,2)
},
@ -1393,7 +1383,7 @@ static SEQUENCE sequences_cmp[] = {
"jneq %1!",
#else
"\323\340",
"\373\361",
"\373\360",
#endif
seqsize(2,1) - seqsize(1,1)
},
@ -1403,7 +1393,7 @@ static SEQUENCE sequences_cmp[] = {
"jeq %1!",
#else
"\323\373z\202",
"j\361",
"j\360",
#endif
seqsize(2,1) - seqsize(1,1)
},
@ -1413,7 +1403,7 @@ static SEQUENCE sequences_cmp[] = {
"jeq %1!",
#else
"n\323\340",
"j\361",
"j\360",
#endif
seqsize(2,1) - seqsize(1,1)
},
@ -1423,7 +1413,7 @@ static SEQUENCE sequences_cmp[] = {
"jneq %1!",
#else
"n\323\373z\202",
"\373\361",
"\373\360",
#endif
seqsize(2,1) - seqsize(1,1)
},
@ -1433,7 +1423,7 @@ static SEQUENCE sequences_cmp[] = {
"jsgeq %1!",
#else
"\353!\340",
"j\303\361",
"j\303\360",
#endif
seqsize(2,1) - seqsize(1,1)
},
@ -1463,7 +1453,7 @@ static SEQUENCE sequences_cmp[] = {
"jsleq %1!",
#else
"\304\323\373z\202",
"j\304\361",
"j\304\360",
#endif
seqsize(2,1) - seqsize(1,1)
},
@ -1473,7 +1463,7 @@ static SEQUENCE sequences_cmp[] = {
"jsleq %1!",
#else
"\374\340",
"j\304\361",
"j\304\360",
#endif
seqsize(2,1) - seqsize(1,1)
},
@ -1503,7 +1493,7 @@ static SEQUENCE sequences_cmp[] = {
"jsgeq %1!",
#else
"\303\323\373z\202",
"j\303\361",
"j\303\360",
#endif
seqsize(2,1) - seqsize(1,1)
},
@ -1521,7 +1511,7 @@ static SEQUENCE sequences_cmp[] = {
"zero.alt!jeq %1!",
"jzer %1!",
#else
"\337\224j\361",
"\337\224j\360",
"\340",
#endif
seqsize(2,1) - seqsize(1,1)
@ -1531,7 +1521,7 @@ static SEQUENCE sequences_cmp[] = {
"zero.alt!jneq %1!",
"jnz %1!",
#else
"\337\224\373\361",
"\337\224\373\360",
"\373z\202",
#endif
seqsize(2,1) - seqsize(1,1)
@ -1574,7 +1564,7 @@ static SEQUENCE sequences_cmp[] = {
"inc.s %1!load.s.pri %1!;$exp!",
"inc.s %1!;$exp!",
#else
"inc\222\202\332\255",
"inc\222\202\333\255",
"inc\222\301",
#endif
seqsize(2,2) - seqsize(1,1)
@ -1584,7 +1574,7 @@ static SEQUENCE sequences_cmp[] = {
"load.s.pri %1!inc.s %1!;$exp!",
"inc.s %1!;$exp!",
#else
"\332inc\222\301",
"\333inc\222\301",
"inc\222\301",
#endif
seqsize(2,2) - seqsize(1,1)
@ -1614,7 +1604,7 @@ static SEQUENCE sequences_cmp[] = {
"dec.s %1!load.s.pri %1!;$exp!",
"dec.s %1!;$exp!",
#else
"dec\222\202\332\255",
"dec\222\202\333\255",
"dec\222\301",
#endif
seqsize(2,2) - seqsize(1,1)
@ -1624,7 +1614,7 @@ static SEQUENCE sequences_cmp[] = {
"load.s.pri %1!dec.s %1!;$exp!",
"dec.s %1!;$exp!",
#else
"\332dec\222\301",
"\333dec\222\301",
"dec\222\301",
#endif
seqsize(2,2) - seqsize(1,1)
@ -1659,7 +1649,7 @@ static SEQUENCE sequences_cmp[] = {
"const.pri 0!stor.pri %1!;$exp!",
"zero %1!;$exp!",
#else
"\234\206 0!\227or\225\255",
"\234\206 0!\230or\225\255",
"\337\301",
#endif
seqsize(2,2) - seqsize(1,1)
@ -1669,7 +1659,7 @@ static SEQUENCE sequences_cmp[] = {
"const.pri 0!stor.s.pri %1!;$exp!",
"zero.s %1!;$exp!",
#else
"\234\206 0!\227or\222\225\255",
"\234\206 0!\230or\222\225\255",
"\337\222\301",
#endif
seqsize(2,2) - seqsize(1,1)
@ -1679,7 +1669,7 @@ static SEQUENCE sequences_cmp[] = {
"zero.pri!stor.pri %1!;$exp!",
"zero %1!;$exp!",
#else
"\375\227or\225\255",
"\375\230or\225\255",
"\337\301",
#endif
seqsize(2,1) - seqsize(1,1)
@ -1689,7 +1679,7 @@ static SEQUENCE sequences_cmp[] = {
"zero.pri!stor.s.pri %1!;$exp!",
"zero.s %1!;$exp!",
#else
"\375\227or\222\225\255",
"\375\230or\222\225\255",
"\337\222\301",
#endif
seqsize(2,1) - seqsize(1,1)
@ -1729,7 +1719,7 @@ static SEQUENCE sequences_cmp[] = {
"push.c %1!sysreq.c %2!stack %3!", //note: %3 == %1 + 4
"sysreq.n %2 %1!",
#else
"\330\202sysr\260\245\221\227ack\256",
"\330\202sysr\260\245\221\230ack\256",
"sysr\260.n\220\202",
#endif
seqsize(3,3) - seqsize(1,2)
@ -1947,7 +1937,7 @@ static SEQUENCE sequences_cmp[] = {
"load.s.pri %1!load.s.alt %2!",
"load.s.both %1 %2!",
#else
"\332\226\305",
"\333\226\305",
"\226.\275th\331",
#endif
seqsize(2,2) - seqsize(1,2)
@ -1957,7 +1947,7 @@ static SEQUENCE sequences_cmp[] = {
"load.s.alt %2!load.s.pri %1!",
"load.s.both %1 %2!",
#else
"\226\305\332",
"\226\305\333",
"\226.\275th\331",
#endif
seqsize(2,2) - seqsize(1,2)
@ -2003,7 +1993,7 @@ static SEQUENCE sequences_cmp[] = {
"const.pri %1!stor.pri %2!",
"const %2 %1!",
#else
"\327\227or\230",
"\327\230or\227",
"\234\220\202",
#endif
seqsize(2,2) - seqsize(1,2)
@ -2013,7 +2003,7 @@ static SEQUENCE sequences_cmp[] = {
"const.pri %1!stor.s.pri %2!",
"const.s %2 %1!",
#else
"\327\227or\222\230",
"\327\230or\222\227",
"\234\222\220\202",
#endif
seqsize(2,2) - seqsize(1,2)