# HG changeset patch # User lost@l-w.ca # Date 1312734194 21600 # Node ID 6a919c3ca0e91d8289586a782df490b0026148d3 # Parent 9960e05cbe3abc777a72e5f28dce4c1befc385fd Fixed pragma noindex0tonone to work diff -r 9960e05cbe3a -r 6a919c3ca0e9 lwasm/insn_indexed.c --- a/lwasm/insn_indexed.c Sun Aug 07 00:58:00 2011 -0600 +++ b/lwasm/insn_indexed.c Sun Aug 07 10:23:14 2011 -0600 @@ -340,7 +340,22 @@ v = lw_expr_intval(e2); // we have a reducible expression here which depends on // the size of this instruction - if (v < -128 || v > 127) + if (v == 0 && !CURPRAGMA(l, PRAGMA_NOINDEX0TONONE) && (l -> pb & 0x07) <= 4) + { + if ((l -> pb & 0x07) < 4) + { + pb = 0x84 | ((l -> pb & 0x03) << 5) | ((l -> pb & 0x80) ? 0x10 : 0); + } + else + { + pb = (l -> pb & 0x80) ? 0x90 : 0x8F; + } + l -> pb = pb; + lw_expr_destroy(e2); + l -> lint = 0; + return; + } + else if (v < -128 || v > 127) { l -> lint = 2; switch (l -> pb & 0x07) @@ -429,7 +444,21 @@ { // we know how big it is v = lw_expr_intval(e); - if (v < -128 || v > 127) + if (v == 0 && !CURPRAGMA(l, PRAGMA_NOINDEX0TONONE) && (l -> pb & 0x07) <= 4) + { + if ((l -> pb & 0x07) < 4) + { + pb = 0x84 | ((l -> pb & 0x03) << 5) | ((l -> pb & 0x80) ? 0x10 : 0); + } + else + { + pb = (l -> pb & 0x80) ? 0x90 : 0x8F; + } + l -> pb = pb; + l -> lint = 0; + return; + } + else if (v < -128 || v > 127) { do16bit: l -> lint = 2;