Cnstant evaluation of NE.
This commit is contained in:
parent
700bcfda70
commit
21e0e8a8a1
94
eval_tree.cc
94
eval_tree.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#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
|
#endif
|
||||||
|
|
||||||
# include "netlist.h"
|
# include "netlist.h"
|
||||||
|
|
@ -115,7 +115,91 @@ NetEConst* NetEBComp::eval_leeq_()
|
||||||
return 0;
|
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()
|
NetEConst* NetEBComp::eval_tree()
|
||||||
{
|
{
|
||||||
eval_sub_tree_();
|
eval_sub_tree_();
|
||||||
|
|
@ -127,6 +211,9 @@ NetEConst* NetEBComp::eval_tree()
|
||||||
case 'L':
|
case 'L':
|
||||||
return eval_leeq_();
|
return eval_leeq_();
|
||||||
|
|
||||||
|
case 'n':
|
||||||
|
return eval_neeq_();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -326,6 +413,9 @@ NetEConst* NetEUnary::eval_tree()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: eval_tree.cc,v $
|
* $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
|
* Revision 1.12 2000/09/27 18:28:37 steve
|
||||||
* multiply in parameter expressions.
|
* multiply in parameter expressions.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#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
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -2151,6 +2151,7 @@ class NetEBComp : public NetEBinary {
|
||||||
private:
|
private:
|
||||||
NetEConst*eval_eqeq_();
|
NetEConst*eval_eqeq_();
|
||||||
NetEConst*eval_leeq_();
|
NetEConst*eval_leeq_();
|
||||||
|
NetEConst*eval_neeq_();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -2795,6 +2796,9 @@ extern ostream& operator << (ostream&, NetNet::Type);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: netlist.h,v $
|
* $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
|
* Revision 1.168 2000/09/26 05:05:58 steve
|
||||||
* Detect indefinite widths where definite widths are required.
|
* Detect indefinite widths where definite widths are required.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue