Mercurial > hg > index.cgi
diff lwasm/pass3.c @ 142:697bc543368c
Implement distinction between . and * for OS9 modules
author | lost@l-w.ca |
---|---|
date | Fri, 19 Aug 2011 23:55:40 -0600 |
parents | 2c24602be78f |
children |
line wrap: on
line diff
--- a/lwasm/pass3.c Fri Aug 19 20:36:43 2011 -0600 +++ b/lwasm/pass3.c Fri Aug 19 23:55:40 2011 -0600 @@ -51,18 +51,29 @@ // simplify address lwasm_reduce_expr(as, cl -> addr); + // simplify data address + lwasm_reduce_expr(as, cl -> daddr); + // simplify each expression for (le = cl -> exprs; le; le = le -> next) lwasm_reduce_expr(as, le -> expr); - if (cl -> len == -1) + if (cl -> len == -1 || cl -> dlen == -1) { // try resolving the instruction length // but don't force resolution if (cl -> insn >= 0 && instab[cl -> insn].resolve) { (instab[cl -> insn].resolve)(as, cl, 0); - if (cl -> len != -1) + debug_message(as, 100, "len = %d, dlen = %d", cl -> len, cl -> dlen); + if ((cl -> inmod == 0) && cl -> len >= 0 && cl -> dlen >= 0) + { + if (cl -> len == 0) + cl -> len = cl -> dlen; + else + cl -> dlen = cl -> len; + } + if (cl -> len != -1 && cl -> dlen != -1) rc++; } }