3
0
Fork 0
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:
Clifford Wolf 2014-06-14 08:51:22 +02:00
parent 9dd16fa41c
commit 442a8e2875
3 changed files with 51 additions and 6 deletions

View file

@ -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)
{