Get offsets right for non-zero and reversed part selects.
Signed-off-by: Stephen Williams <steve@icarus.com>
This commit is contained in:
parent
87e813766a
commit
9d2dd782c0
10
elab_expr.cc
10
elab_expr.cc
|
|
@ -1264,8 +1264,14 @@ NetExpr* PEIdent::elaborate_expr_net_idx_up_(Design*des, NetScope*scope,
|
||||||
return ss;
|
return ss;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (long offset = net->lsi())
|
if (net->msi() > net->lsi()) {
|
||||||
base = make_add_expr(base, 0-offset);
|
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);
|
NetESelect*ss = new NetESelect(net, base, wid);
|
||||||
ss->set_line(*this);
|
ss->set_line(*this);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue