mirror of
https://github.com/YosysHQ/yosys
synced 2025-06-06 14:13:23 +00:00
Implemented basic real arithmetic
This commit is contained in:
parent
9dd16fa41c
commit
442a8e2875
3 changed files with 51 additions and 6 deletions
|
@ -32,7 +32,7 @@
|
|||
|
||||
#include <sstream>
|
||||
#include <stdarg.h>
|
||||
#include <assert.h>
|
||||
#include <math.h>
|
||||
|
||||
using namespace AST;
|
||||
using namespace AST_INTERNAL;
|
||||
|
@ -760,6 +760,35 @@ bool AstNode::asBool()
|
|||
return false;
|
||||
}
|
||||
|
||||
int AstNode::isConst()
|
||||
{
|
||||
if (type == AST_CONSTANT)
|
||||
return 1;
|
||||
if (type == AST_REALVALUE)
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
|
||||
double AstNode::asReal(bool is_signed)
|
||||
{
|
||||
if (type == AST_CONSTANT) {
|
||||
RTLIL::Const val;
|
||||
val.bits = bits;
|
||||
|
||||
double p = exp2(val.bits.size()-32);
|
||||
if (val.bits.size() > 32)
|
||||
val.bits.erase(val.bits.begin(), val.bits.begin()+(val.bits.size()-32));
|
||||
int32_t v = val.as_int() << (32-val.bits.size());
|
||||
|
||||
if (is_signed)
|
||||
return v * p;
|
||||
return uint32_t(v) * p;
|
||||
}
|
||||
if (type == AST_REALVALUE)
|
||||
return realvalue;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// create a new AstModule from an AST_MODULE AST node
|
||||
static AstModule* process_module(AstNode *ast, bool defer)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue