diff --git a/elab_expr.cc b/elab_expr.cc index 1918908cf..06395e5ca 100644 --- a/elab_expr.cc +++ b/elab_expr.cc @@ -1965,9 +1965,8 @@ NetExpr* PECallFunction::elaborate_sfunc_(Design*des, NetScope*scope, use_width = 1; while (const netuarray_t *utype = dynamic_cast(data_type)) { - const vector &dims = utype->static_dimensions(); - for (size_t i = 0; i < dims.size(); i++) - use_width *= dims[i].width(); + use_width = netrange_width(utype->static_dimensions(), + use_width); data_type = utype->element_type(); } if (!data_type->packed()) { diff --git a/netlist.cc b/netlist.cc index 5fbcb885c..3a7f70d97 100644 --- a/netlist.cc +++ b/netlist.cc @@ -819,12 +819,7 @@ bool NetNet::sb_to_slice(const list&indices, long sb, long&loff, unsigned unsigned NetNet::unpacked_count() const { - unsigned c = 1; - for (size_t idx = 0 ; idx < unpacked_dims_.size() ; idx += 1) { - c *= unpacked_dims_[idx].width(); - } - - return c; + return netrange_width(unpacked_dims_); } void NetNet::incr_eref() diff --git a/netparray.cc b/netparray.cc index df972f7e3..8819db183 100644 --- a/netparray.cc +++ b/netparray.cc @@ -42,14 +42,8 @@ bool netparray_t::packed(void) const long netparray_t::packed_width(void) const { - long cur_width = element_type()->packed_width(); - - for (vector::const_iterator cur = static_dimensions().begin() - ; cur != static_dimensions().end() ; ++cur) { - cur_width *= cur->width(); - } - - return cur_width; + return netrange_width(static_dimensions(), + element_type()->packed_width()); } vector netparray_t::slice_dimensions() const