Get offsets right for non-zero and reversed part selects.

Signed-off-by: Stephen Williams <steve@icarus.com>
This commit is contained in:
Stephen Williams 2007-06-15 16:59:24 -07:00
parent 87e813766a
commit 9d2dd782c0
1 changed files with 8 additions and 2 deletions

View File

@ -1264,8 +1264,14 @@ NetExpr* PEIdent::elaborate_expr_net_idx_up_(Design*des, NetScope*scope,
return ss;
}
if (long offset = net->lsi())
base = make_add_expr(base, 0-offset);
if (net->msi() > net->lsi()) {
if (long offset = net->lsi())
base = make_add_expr(base, 0-offset);
} else {
long vwid = net->lsi() - net->msi() + 1;
long offset = net->msi();
base = make_sub_expr(vwid-offset-wid, base);
}
NetESelect*ss = new NetESelect(net, base, wid);
ss->set_line(*this);