Support more real arithmetic in delay constants.
This commit is contained in:
parent
1ff36dc892
commit
9572ddd7e8
14
PExpr.cc
14
PExpr.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: PExpr.cc,v 1.24 2001/07/25 03:10:48 steve Exp $"
|
#ident "$Id: PExpr.cc,v 1.25 2001/11/06 06:11:55 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -65,6 +65,15 @@ NetNet* PExpr::elaborate_lnet(Design*des, const string&path) const
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PEBinary::PEBinary(char op, PExpr*l, PExpr*r)
|
||||||
|
: op_(op), left_(l), right_(r)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
PEBinary::~PEBinary()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
bool PEBinary::is_constant(Module*mod) const
|
bool PEBinary::is_constant(Module*mod) const
|
||||||
{
|
{
|
||||||
return left_->is_constant(mod) && right_->is_constant(mod);
|
return left_->is_constant(mod) && right_->is_constant(mod);
|
||||||
|
|
@ -255,6 +264,9 @@ bool PEUnary::is_constant(Module*m) const
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: PExpr.cc,v $
|
* $Log: PExpr.cc,v $
|
||||||
|
* Revision 1.25 2001/11/06 06:11:55 steve
|
||||||
|
* Support more real arithmetic in delay constants.
|
||||||
|
*
|
||||||
* Revision 1.24 2001/07/25 03:10:48 steve
|
* Revision 1.24 2001/07/25 03:10:48 steve
|
||||||
* Create a config.h.in file to hold all the config
|
* Create a config.h.in file to hold all the config
|
||||||
* junk, and support gcc 3.0. (Stephan Boettcher)
|
* junk, and support gcc 3.0. (Stephan Boettcher)
|
||||||
|
|
|
||||||
12
PExpr.h
12
PExpr.h
|
|
@ -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: PExpr.h,v 1.48 2001/01/14 23:04:55 steve Exp $"
|
#ident "$Id: PExpr.h,v 1.49 2001/11/06 06:11:55 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include <string>
|
# include <string>
|
||||||
|
|
@ -234,6 +234,7 @@ class PEIdent : public PExpr {
|
||||||
|
|
||||||
virtual bool is_constant(Module*) const;
|
virtual bool is_constant(Module*) const;
|
||||||
verinum* eval_const(const Design*des, const string&path) const;
|
verinum* eval_const(const Design*des, const string&path) const;
|
||||||
|
verireal*eval_rconst(const Design*des, const NetScope*sc) const;
|
||||||
|
|
||||||
string name() const;
|
string name() const;
|
||||||
|
|
||||||
|
|
@ -275,6 +276,7 @@ class PENumber : public PExpr {
|
||||||
virtual NetEConst*elaborate_expr(Design*des, NetScope*) const;
|
virtual NetEConst*elaborate_expr(Design*des, NetScope*) const;
|
||||||
virtual NetExpr*elaborate_pexpr(Design*des, NetScope*sc) const;
|
virtual NetExpr*elaborate_pexpr(Design*des, NetScope*sc) const;
|
||||||
virtual verinum* eval_const(const Design*des, const string&path) const;
|
virtual verinum* eval_const(const Design*des, const string&path) const;
|
||||||
|
virtual verireal*eval_rconst(const Design*, const NetScope*) const;
|
||||||
|
|
||||||
virtual bool is_the_same(const PExpr*that) const;
|
virtual bool is_the_same(const PExpr*that) const;
|
||||||
virtual bool is_constant(Module*) const;
|
virtual bool is_constant(Module*) const;
|
||||||
|
|
@ -328,8 +330,8 @@ class PEUnary : public PExpr {
|
||||||
class PEBinary : public PExpr {
|
class PEBinary : public PExpr {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PEBinary(char op, PExpr*l, PExpr*r)
|
explicit PEBinary(char op, PExpr*l, PExpr*r);
|
||||||
: op_(op), left_(l), right_(r) { }
|
~PEBinary();
|
||||||
|
|
||||||
virtual bool is_constant(Module*) const;
|
virtual bool is_constant(Module*) const;
|
||||||
|
|
||||||
|
|
@ -344,6 +346,7 @@ class PEBinary : public PExpr {
|
||||||
virtual NetEBinary*elaborate_expr(Design*des, NetScope*) const;
|
virtual NetEBinary*elaborate_expr(Design*des, NetScope*) const;
|
||||||
virtual NetExpr*elaborate_pexpr(Design*des, NetScope*sc) const;
|
virtual NetExpr*elaborate_pexpr(Design*des, NetScope*sc) const;
|
||||||
virtual verinum* eval_const(const Design*des, const string&path) const;
|
virtual verinum* eval_const(const Design*des, const string&path) const;
|
||||||
|
virtual verireal*eval_rconst(const Design*des, const NetScope*sc) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char op_;
|
char op_;
|
||||||
|
|
@ -446,6 +449,9 @@ class PECallFunction : public PExpr {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: PExpr.h,v $
|
* $Log: PExpr.h,v $
|
||||||
|
* Revision 1.49 2001/11/06 06:11:55 steve
|
||||||
|
* Support more real arithmetic in delay constants.
|
||||||
|
*
|
||||||
* Revision 1.48 2001/01/14 23:04:55 steve
|
* Revision 1.48 2001/01/14 23:04:55 steve
|
||||||
* Generalize the evaluation of floating point delays, and
|
* Generalize the evaluation of floating point delays, and
|
||||||
* get it working with delay assignment statements.
|
* get it working with delay assignment statements.
|
||||||
|
|
|
||||||
6
eval.cc
6
eval.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.cc,v 1.21 2001/07/25 03:10:49 steve Exp $"
|
#ident "$Id: eval.cc,v 1.22 2001/11/06 06:11:55 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -42,7 +42,6 @@ verinum* PEBinary::eval_const(const Design*des, const string&path) const
|
||||||
delete l;
|
delete l;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
verinum*res;
|
verinum*res;
|
||||||
|
|
||||||
switch (op_) {
|
switch (op_) {
|
||||||
|
|
@ -198,6 +197,9 @@ verinum* PEUnary::eval_const(const Design*des, const string&path) const
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: eval.cc,v $
|
* $Log: eval.cc,v $
|
||||||
|
* Revision 1.22 2001/11/06 06:11:55 steve
|
||||||
|
* Support more real arithmetic in delay constants.
|
||||||
|
*
|
||||||
* Revision 1.21 2001/07/25 03:10:49 steve
|
* Revision 1.21 2001/07/25 03:10:49 steve
|
||||||
* Create a config.h.in file to hold all the config
|
* Create a config.h.in file to hold all the config
|
||||||
* junk, and support gcc 3.0. (Stephan Boettcher)
|
* junk, and support gcc 3.0. (Stephan Boettcher)
|
||||||
|
|
|
||||||
|
|
@ -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_rconst.cc,v 1.2 2001/07/25 03:10:49 steve Exp $"
|
#ident "$Id: eval_rconst.cc,v 1.3 2001/11/06 06:11:55 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -36,8 +36,54 @@ verireal* PEFNumber::eval_rconst(const Design*, const NetScope*) const
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
verireal* PENumber::eval_rconst(const Design*, const NetScope*) const
|
||||||
|
{
|
||||||
|
verireal*res = new verireal(value_->as_long());
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
verireal* PEBinary::eval_rconst(const Design*des, const NetScope*scope) const
|
||||||
|
{
|
||||||
|
verireal*lef = left_->eval_rconst(des, scope);
|
||||||
|
verireal*rig = right_->eval_rconst(des, scope);
|
||||||
|
verireal*res = 0;
|
||||||
|
|
||||||
|
switch (op_) {
|
||||||
|
case '*':
|
||||||
|
if (lef == 0)
|
||||||
|
break;
|
||||||
|
if (rig == 0)
|
||||||
|
break;
|
||||||
|
res = new verireal;
|
||||||
|
*res = (*lef) * (*rig);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete lef;
|
||||||
|
delete rig;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
verireal* PEIdent::eval_rconst(const Design*des, const NetScope*scope) const
|
||||||
|
{
|
||||||
|
verinum* val = eval_const(des, scope->name());
|
||||||
|
if (val == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
verireal*res = new verireal(val->as_long());
|
||||||
|
delete val;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: eval_rconst.cc,v $
|
* $Log: eval_rconst.cc,v $
|
||||||
|
* Revision 1.3 2001/11/06 06:11:55 steve
|
||||||
|
* Support more real arithmetic in delay constants.
|
||||||
|
*
|
||||||
* Revision 1.2 2001/07/25 03:10:49 steve
|
* Revision 1.2 2001/07/25 03:10:49 steve
|
||||||
* Create a config.h.in file to hold all the config
|
* Create a config.h.in file to hold all the config
|
||||||
* junk, and support gcc 3.0. (Stephan Boettcher)
|
* junk, and support gcc 3.0. (Stephan Boettcher)
|
||||||
|
|
|
||||||
|
|
@ -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: verinum.cc,v 1.27 2001/07/25 03:10:50 steve Exp $"
|
#ident "$Id: verinum.cc,v 1.28 2001/11/06 06:11:55 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -117,6 +117,8 @@ verinum::verinum(long that)
|
||||||
tmp /= 2;
|
tmp /= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nbits_ += 1;
|
||||||
|
|
||||||
bits_ = new V[nbits_];
|
bits_ = new V[nbits_];
|
||||||
for (unsigned idx = 0 ; idx < nbits_ ; idx += 1) {
|
for (unsigned idx = 0 ; idx < nbits_ ; idx += 1) {
|
||||||
bits_[idx] = (that & 1)? V1 : V0;
|
bits_[idx] = (that & 1)? V1 : V0;
|
||||||
|
|
@ -768,6 +770,9 @@ verinum::V operator & (verinum::V l, verinum::V r)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: verinum.cc,v $
|
* $Log: verinum.cc,v $
|
||||||
|
* Revision 1.28 2001/11/06 06:11:55 steve
|
||||||
|
* Support more real arithmetic in delay constants.
|
||||||
|
*
|
||||||
* Revision 1.27 2001/07/25 03:10:50 steve
|
* Revision 1.27 2001/07/25 03:10:50 steve
|
||||||
* Create a config.h.in file to hold all the config
|
* Create a config.h.in file to hold all the config
|
||||||
* junk, and support gcc 3.0. (Stephan Boettcher)
|
* junk, and support gcc 3.0. (Stephan Boettcher)
|
||||||
|
|
|
||||||
20
verireal.cc
20
verireal.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: verireal.cc,v 1.5 2001/07/25 03:10:50 steve Exp $"
|
#ident "$Id: verireal.cc,v 1.6 2001/11/06 06:11:55 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -88,6 +88,12 @@ verireal::verireal(const char*txt)
|
||||||
assert(*ptr == 0);
|
assert(*ptr == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
verireal::verireal(long val)
|
||||||
|
{
|
||||||
|
sign_ = val < 0;
|
||||||
|
mant_ = sign_? -val : +val;
|
||||||
|
exp10_ = 0;
|
||||||
|
}
|
||||||
|
|
||||||
verireal::~verireal()
|
verireal::~verireal()
|
||||||
{
|
{
|
||||||
|
|
@ -118,6 +124,15 @@ long verireal::as_long(int shift) const
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
verireal operator* (const verireal&l, const verireal&r)
|
||||||
|
{
|
||||||
|
verireal res;
|
||||||
|
res.sign_ = l.sign_ != r.sign_;
|
||||||
|
res.mant_ = l.mant_ * r.mant_;
|
||||||
|
res.exp10_= l.exp10_ + r.exp10_;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
ostream& operator<< (ostream&out, const verireal&v)
|
ostream& operator<< (ostream&out, const verireal&v)
|
||||||
{
|
{
|
||||||
out << (v.sign_? "-" : "+") << v.mant_ << "e" << v.exp10_;
|
out << (v.sign_? "-" : "+") << v.mant_ << "e" << v.exp10_;
|
||||||
|
|
@ -126,6 +141,9 @@ ostream& operator<< (ostream&out, const verireal&v)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: verireal.cc,v $
|
* $Log: verireal.cc,v $
|
||||||
|
* Revision 1.6 2001/11/06 06:11:55 steve
|
||||||
|
* Support more real arithmetic in delay constants.
|
||||||
|
*
|
||||||
* Revision 1.5 2001/07/25 03:10:50 steve
|
* Revision 1.5 2001/07/25 03:10:50 steve
|
||||||
* Create a config.h.in file to hold all the config
|
* Create a config.h.in file to hold all the config
|
||||||
* junk, and support gcc 3.0. (Stephan Boettcher)
|
* junk, and support gcc 3.0. (Stephan Boettcher)
|
||||||
|
|
|
||||||
|
|
@ -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: verireal.h,v 1.4 2001/01/16 02:44:18 steve Exp $"
|
#ident "$Id: verireal.h,v 1.5 2001/11/06 06:11:55 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_IOSFWD
|
#ifdef HAVE_IOSFWD
|
||||||
|
|
@ -38,10 +38,12 @@ class ostream;
|
||||||
class verireal {
|
class verireal {
|
||||||
|
|
||||||
friend ostream& operator<< (ostream&, const verireal&);
|
friend ostream& operator<< (ostream&, const verireal&);
|
||||||
|
friend verireal operator* (const verireal&, const verireal&);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit verireal();
|
explicit verireal();
|
||||||
explicit verireal(const char*text);
|
explicit verireal(const char*text);
|
||||||
|
explicit verireal(long val);
|
||||||
~verireal();
|
~verireal();
|
||||||
|
|
||||||
/* Return the value of the floating point number as an
|
/* Return the value of the floating point number as an
|
||||||
|
|
@ -59,9 +61,13 @@ class verireal {
|
||||||
};
|
};
|
||||||
|
|
||||||
extern ostream& operator<< (ostream&, const verireal&);
|
extern ostream& operator<< (ostream&, const verireal&);
|
||||||
|
extern verireal operator* (const verireal&, const verireal&);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: verireal.h,v $
|
* $Log: verireal.h,v $
|
||||||
|
* Revision 1.5 2001/11/06 06:11:55 steve
|
||||||
|
* Support more real arithmetic in delay constants.
|
||||||
|
*
|
||||||
* Revision 1.4 2001/01/16 02:44:18 steve
|
* Revision 1.4 2001/01/16 02:44:18 steve
|
||||||
* Use the iosfwd header if available.
|
* Use the iosfwd header if available.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue