From 9d2dd782c07575be22d942bcdfc4fefd128289e3 Mon Sep 17 00:00:00 2001 From: Stephen Williams Date: Fri, 15 Jun 2007 16:59:24 -0700 Subject: [PATCH] Get offsets right for non-zero and reversed part selects. Signed-off-by: Stephen Williams --- elab_expr.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/elab_expr.cc b/elab_expr.cc index 3e730dfec..14a789e87 100644 --- a/elab_expr.cc +++ b/elab_expr.cc @@ -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);