Cnstant evaluation of NE.

This commit is contained in:
steve 2000-09-29 04:42:56 +00:00
parent 700bcfda70
commit 21e0e8a8a1
2 changed files with 97 additions and 3 deletions

View File

@ -17,7 +17,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: eval_tree.cc,v 1.12 2000/09/27 18:28:37 steve Exp $"
#ident "$Id: eval_tree.cc,v 1.13 2000/09/29 04:42:56 steve Exp $"
#endif
# include "netlist.h"
@ -115,7 +115,91 @@ NetEConst* NetEBComp::eval_leeq_()
return 0;
}
NetEConst* NetEBComp::eval_neeq_()
{
NetEConst*l = dynamic_cast<NetEConst*>(left_);
if (l == 0) return 0;
NetEConst*r = dynamic_cast<NetEConst*>(right_);
if (r == 0) return 0;
const verinum&lv = l->value();
const verinum&rv = r->value();
verinum::V res = verinum::V0;
unsigned top = lv.len();
if (rv.len() < top)
top = rv.len();
for (unsigned idx = 0 ; idx < top ; idx += 1) {
switch (lv.get(idx)) {
case verinum::Vx:
case verinum::Vz:
res = verinum::Vx;
break;
default:
break;
}
switch (rv.get(idx)) {
case verinum::Vx:
case verinum::Vz:
res = verinum::Vx;
break;
default:
break;
}
if (res == verinum::Vx)
break;
if (rv.get(idx) != lv.get(idx))
res = verinum::V1;
}
if (res != verinum::Vx) {
for (unsigned idx = top ; idx < lv.len() ; idx += 1)
switch (lv.get(idx)) {
case verinum::Vx:
case verinum::Vz:
res = verinum::Vx;
break;
case verinum::V1:
if (res != verinum::Vx)
res = verinum::V1;
break;
default:
break;
}
for (unsigned idx = top ; idx < rv.len() ; idx += 1)
switch (rv.get(idx)) {
case verinum::Vx:
case verinum::Vz:
res = verinum::Vx;
break;
case verinum::V1:
if (res != verinum::Vx)
res = verinum::V1;
break;
default:
break;
}
}
return new NetEConst(verinum(res));
}
NetEConst* NetEBComp::eval_tree()
{
eval_sub_tree_();
@ -127,6 +211,9 @@ NetEConst* NetEBComp::eval_tree()
case 'L':
return eval_leeq_();
case 'n':
return eval_neeq_();
default:
return 0;
}
@ -326,6 +413,9 @@ NetEConst* NetEUnary::eval_tree()
/*
* $Log: eval_tree.cc,v $
* Revision 1.13 2000/09/29 04:42:56 steve
* Cnstant evaluation of NE.
*
* Revision 1.12 2000/09/27 18:28:37 steve
* multiply in parameter expressions.
*

View File

@ -19,7 +19,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*/
#if !defined(WINNT) && !defined(macintosh)
#ident "$Id: netlist.h,v 1.168 2000/09/26 05:05:58 steve Exp $"
#ident "$Id: netlist.h,v 1.169 2000/09/29 04:43:09 steve Exp $"
#endif
/*
@ -2151,6 +2151,7 @@ class NetEBComp : public NetEBinary {
private:
NetEConst*eval_eqeq_();
NetEConst*eval_leeq_();
NetEConst*eval_neeq_();
};
@ -2795,6 +2796,9 @@ extern ostream& operator << (ostream&, NetNet::Type);
/*
* $Log: netlist.h,v $
* Revision 1.169 2000/09/29 04:43:09 steve
* Cnstant evaluation of NE.
*
* Revision 1.168 2000/09/26 05:05:58 steve
* Detect indefinite widths where definite widths are required.
*