Added found_real feature to AstNode::detectSignWidth

This commit is contained in:
Clifford Wolf 2014-06-16 15:00:57 +02:00
parent b1b96d199f
commit 5bfe865cec
2 changed files with 11 additions and 6 deletions

View File

@ -214,8 +214,8 @@ namespace AST
void dumpVlog(FILE *f, std::string indent);
// used by genRTLIL() for detecting expression width and sign
void detectSignWidthWorker(int &width_hint, bool &sign_hint);
void detectSignWidth(int &width_hint, bool &sign_hint);
void detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *found_real = NULL);
void detectSignWidth(int &width_hint, bool &sign_hint, bool *found_real = NULL);
// create RTLIL code for this AST node
// for expressions the resulting signal vector is returned

View File

@ -585,7 +585,7 @@ struct AST_INTERNAL::ProcessGenerator
};
// detect sign and width of an expression
void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint)
void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint, bool *found_real)
{
std::string type_name;
bool sub_sign_hint = true;
@ -603,6 +603,8 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint)
break;
case AST_REALVALUE:
if (found_real)
*found_real = true;
width_hint = std::max(width_hint, 32);
break;
@ -788,10 +790,13 @@ void AstNode::detectSignWidthWorker(int &width_hint, bool &sign_hint)
}
// detect sign and width of an expression
void AstNode::detectSignWidth(int &width_hint, bool &sign_hint)
void AstNode::detectSignWidth(int &width_hint, bool &sign_hint, bool *found_real)
{
width_hint = -1, sign_hint = true;
detectSignWidthWorker(width_hint, sign_hint);
width_hint = -1;
sign_hint = true;
if (found_real)
*found_real = false;
detectSignWidthWorker(width_hint, sign_hint, found_real);
}
// create RTLIL from an AST node