scfx_utils.hh revision 12853
12810Srdreslin@umich.edu/***************************************************************************** 213732Snikos.nikoleris@arm.com 311051Sandreas.hansson@arm.com Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 411051Sandreas.hansson@arm.com more contributor license agreements. See the NOTICE file distributed 511051Sandreas.hansson@arm.com with this work for additional information regarding copyright ownership. 611051Sandreas.hansson@arm.com Accellera licenses this file to you under the Apache License, Version 2.0 711051Sandreas.hansson@arm.com (the "License"); you may not use this file except in compliance with the 811051Sandreas.hansson@arm.com License. You may obtain a copy of the License at 911051Sandreas.hansson@arm.com 1011051Sandreas.hansson@arm.com http://www.apache.org/licenses/LICENSE-2.0 1111051Sandreas.hansson@arm.com 1211051Sandreas.hansson@arm.com Unless required by applicable law or agreed to in writing, software 1311051Sandreas.hansson@arm.com distributed under the License is distributed on an "AS IS" BASIS, 1411051Sandreas.hansson@arm.com WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 1511051Sandreas.hansson@arm.com implied. See the License for the specific language governing 162810Srdreslin@umich.edu permissions and limitations under the License. 172810Srdreslin@umich.edu 182810Srdreslin@umich.edu *****************************************************************************/ 192810Srdreslin@umich.edu 202810Srdreslin@umich.edu/***************************************************************************** 212810Srdreslin@umich.edu 222810Srdreslin@umich.edu scfx_utils.h - 232810Srdreslin@umich.edu 242810Srdreslin@umich.edu Original Author: Martin Janssen, Synopsys, Inc. 252810Srdreslin@umich.edu 262810Srdreslin@umich.edu *****************************************************************************/ 272810Srdreslin@umich.edu 282810Srdreslin@umich.edu/***************************************************************************** 292810Srdreslin@umich.edu 302810Srdreslin@umich.edu MODIFICATION LOG - modifiers, enter your name, affiliation, date and 312810Srdreslin@umich.edu changes you are making here. 322810Srdreslin@umich.edu 332810Srdreslin@umich.edu Name, Affiliation, Date: 342810Srdreslin@umich.edu Description of Modification: 352810Srdreslin@umich.edu 362810Srdreslin@umich.edu *****************************************************************************/ 372810Srdreslin@umich.edu 382810Srdreslin@umich.edu// $Log: scfx_utils.h,v $ 392810Srdreslin@umich.edu// Revision 1.2 2009/02/28 00:26:20 acg 402810Srdreslin@umich.edu// Andy Goodrich: bug fixes. 412810Srdreslin@umich.edu// 4211051Sandreas.hansson@arm.com// Revision 1.1.1.1 2006/12/15 20:31:36 acg 4311051Sandreas.hansson@arm.com// SystemC 2.2 442810Srdreslin@umich.edu// 4511051Sandreas.hansson@arm.com// Revision 1.3 2006/01/13 18:53:58 acg 4611051Sandreas.hansson@arm.com// Andy Goodrich: added $Log command so that CVS comments are reproduced in 4712349Snikos.nikoleris@arm.com// the source. 482810Srdreslin@umich.edu// 492810Srdreslin@umich.edu 502810Srdreslin@umich.edu#ifndef __SYSTEMC_EXT_DT_FX_SCFX_UTILS_HH__ 512810Srdreslin@umich.edu#define __SYSTEMC_EXT_DT_FX_SCFX_UTILS_HH__ 5211051Sandreas.hansson@arm.com 532810Srdreslin@umich.edu#include "sc_fxdefs.hh" 542810Srdreslin@umich.edu#include "scfx_params.hh" 5511051Sandreas.hansson@arm.com#include "scfx_string.hh" 562810Srdreslin@umich.edu 5712724Snikos.nikoleris@arm.comnamespace sc_dt 5812724Snikos.nikoleris@arm.com{ 5912724Snikos.nikoleris@arm.com 6012334Sgabeblack@google.com// ---------------------------------------------------------------------------- 6112724Snikos.nikoleris@arm.com// Find the most and least significant non-zero bits in a unsigned long 6211051Sandreas.hansson@arm.com// ---------------------------------------------------------------------------- 6311051Sandreas.hansson@arm.com 6411051Sandreas.hansson@arm.com#define MSB_STATEMENT(n) if (x >> n) { x >>= n; i += n; } 6511288Ssteve.reinhardt@amd.com 6612724Snikos.nikoleris@arm.cominline int 6713223Sodanrc@yahoo.com.brscfx_find_msb(unsigned long x) 6811051Sandreas.hansson@arm.com{ 6912724Snikos.nikoleris@arm.com int i = 0; 7012724Snikos.nikoleris@arm.com# if defined(SC_LONG_64) 7112724Snikos.nikoleris@arm.com MSB_STATEMENT(32); 7212724Snikos.nikoleris@arm.com# endif // defined(SC_LONG_64) 7311051Sandreas.hansson@arm.com MSB_STATEMENT(16); 7411053Sandreas.hansson@arm.com MSB_STATEMENT(8); 7511053Sandreas.hansson@arm.com MSB_STATEMENT(4); 7612724Snikos.nikoleris@arm.com MSB_STATEMENT(2); 7711051Sandreas.hansson@arm.com MSB_STATEMENT(1); 7811051Sandreas.hansson@arm.com return i; 7911051Sandreas.hansson@arm.com} 8011051Sandreas.hansson@arm.com 8111601Sandreas.hansson@arm.com#undef MSB_STATEMENT 8211601Sandreas.hansson@arm.com 8311051Sandreas.hansson@arm.com#define LSB_STATEMENT(n) if (x << n) { x <<= n; i -= n; } 8412724Snikos.nikoleris@arm.com 8511051Sandreas.hansson@arm.cominline int 8612724Snikos.nikoleris@arm.comscfx_find_lsb(unsigned long x) 8711600Sandreas.hansson@arm.com{ 8811600Sandreas.hansson@arm.com int i; 8911051Sandreas.hansson@arm.com# if defined(SC_LONG_64) 9011051Sandreas.hansson@arm.com i = 63; 9111051Sandreas.hansson@arm.com LSB_STATEMENT(32); 9211284Sandreas.hansson@arm.com# else 9311051Sandreas.hansson@arm.com i = 31; 9411051Sandreas.hansson@arm.com# endif // defined(SC_LONG_64) 9511051Sandreas.hansson@arm.com LSB_STATEMENT(16); 9611602Sandreas.hansson@arm.com LSB_STATEMENT(8); 9711051Sandreas.hansson@arm.com LSB_STATEMENT(4); 9811051Sandreas.hansson@arm.com LSB_STATEMENT(2); 9911284Sandreas.hansson@arm.com LSB_STATEMENT(1); 10011051Sandreas.hansson@arm.com return i; 10111284Sandreas.hansson@arm.com} 10211602Sandreas.hansson@arm.com 10311051Sandreas.hansson@arm.com#undef LSB_STATEMENT 10411051Sandreas.hansson@arm.com 10511284Sandreas.hansson@arm.com 10611051Sandreas.hansson@arm.com// ---------------------------------------------------------------------------- 10711284Sandreas.hansson@arm.com// Utilities for parsing a character string number 10811284Sandreas.hansson@arm.com// ---------------------------------------------------------------------------- 10911284Sandreas.hansson@arm.com 11011051Sandreas.hansson@arm.cominline int 11111051Sandreas.hansson@arm.comscfx_parse_sign(const char *&s, bool &sign_char) 11211051Sandreas.hansson@arm.com{ 11311284Sandreas.hansson@arm.com int sign = 1; 11411284Sandreas.hansson@arm.com 11511284Sandreas.hansson@arm.com if (*s == '+') { 11611284Sandreas.hansson@arm.com ++s; 11711051Sandreas.hansson@arm.com sign_char = true; 11811051Sandreas.hansson@arm.com } else if (*s == '-' ) { 11911051Sandreas.hansson@arm.com sign = -1; 12011284Sandreas.hansson@arm.com ++s; 12111284Sandreas.hansson@arm.com sign_char = true; 12211284Sandreas.hansson@arm.com } else { 12311197Sandreas.hansson@arm.com sign_char = false; 12411601Sandreas.hansson@arm.com } 12511601Sandreas.hansson@arm.com 12611601Sandreas.hansson@arm.com return sign; 12711601Sandreas.hansson@arm.com} 12811601Sandreas.hansson@arm.com 12911601Sandreas.hansson@arm.cominline sc_numrep 13011601Sandreas.hansson@arm.comscfx_parse_prefix(const char *&s) 13111601Sandreas.hansson@arm.com{ 13211197Sandreas.hansson@arm.com if (s[0] == '0') { 13311601Sandreas.hansson@arm.com switch (s[1]) { 13411601Sandreas.hansson@arm.com case 'b': 13511601Sandreas.hansson@arm.com case 'B': 13611601Sandreas.hansson@arm.com { 13711601Sandreas.hansson@arm.com if ((s[2] == 'u' || s[2] == 'U') && 13811601Sandreas.hansson@arm.com (s[3] == 's' || s[3] == 'S')) { 13911601Sandreas.hansson@arm.com s += 4; 14011051Sandreas.hansson@arm.com return SC_BIN_US; 14111051Sandreas.hansson@arm.com } 14211051Sandreas.hansson@arm.com if ((s[2] == 's' || s[2] == 'S') && 14311051Sandreas.hansson@arm.com (s[3] == 'm' || s[3] == 'M')) { 14411051Sandreas.hansson@arm.com s += 4; 14511284Sandreas.hansson@arm.com return SC_BIN_SM; 14611284Sandreas.hansson@arm.com } 14711051Sandreas.hansson@arm.com s += 2; 14811051Sandreas.hansson@arm.com return SC_BIN; 14911051Sandreas.hansson@arm.com } 15011051Sandreas.hansson@arm.com case 'o': 15111284Sandreas.hansson@arm.com case 'O': 15211051Sandreas.hansson@arm.com { 15311051Sandreas.hansson@arm.com if ((s[2] == 'u' || s[2] == 'U') && 15411051Sandreas.hansson@arm.com (s[3] == 's' || s[3] == 'S')) { 15511051Sandreas.hansson@arm.com s += 4; 15611051Sandreas.hansson@arm.com return SC_OCT_US; 15711051Sandreas.hansson@arm.com } 15811051Sandreas.hansson@arm.com if ((s[2] == 's' || s[2] == 'S') && 15911051Sandreas.hansson@arm.com (s[3] == 'm' || s[3] == 'M')) { 16011051Sandreas.hansson@arm.com s += 4; 16111051Sandreas.hansson@arm.com return SC_OCT_SM; 16211051Sandreas.hansson@arm.com } 16311051Sandreas.hansson@arm.com s += 2; 16413948Sodanrc@yahoo.com.br return SC_OCT; 16511051Sandreas.hansson@arm.com } 16611051Sandreas.hansson@arm.com case 'x': 16711051Sandreas.hansson@arm.com case 'X': 16812724Snikos.nikoleris@arm.com { 16912724Snikos.nikoleris@arm.com if ((s[2] == 'u' || s[2] == 'U') && 17012724Snikos.nikoleris@arm.com (s[3] == 's' || s[3] == 'S')) { 17112724Snikos.nikoleris@arm.com s += 4; 17212724Snikos.nikoleris@arm.com return SC_HEX_US; 17312724Snikos.nikoleris@arm.com } 17412724Snikos.nikoleris@arm.com if ((s[2] == 's' || s[2] == 'S') && 17511051Sandreas.hansson@arm.com (s[3] == 'm' || s[3] == 'M')) { 17613948Sodanrc@yahoo.com.br s += 4; 17713948Sodanrc@yahoo.com.br return SC_HEX_SM; 17813948Sodanrc@yahoo.com.br } 17911051Sandreas.hansson@arm.com s += 2; 18011051Sandreas.hansson@arm.com return SC_HEX; 18111051Sandreas.hansson@arm.com } 18213948Sodanrc@yahoo.com.br case 'd': 18311051Sandreas.hansson@arm.com case 'D': 18411051Sandreas.hansson@arm.com { 18511484Snikos.nikoleris@arm.com s += 2; 18611051Sandreas.hansson@arm.com return SC_DEC; 18711051Sandreas.hansson@arm.com } 18811051Sandreas.hansson@arm.com case 'c': 18913948Sodanrc@yahoo.com.br case 'C': 19011601Sandreas.hansson@arm.com { 19111601Sandreas.hansson@arm.com if ((s[2] == 's' || s[2] == 'S') && 19211601Sandreas.hansson@arm.com (s[3] == 'd' || s[3] == 'D')) { 19313948Sodanrc@yahoo.com.br s += 4; 19411051Sandreas.hansson@arm.com return SC_CSD; 19513948Sodanrc@yahoo.com.br } 19613948Sodanrc@yahoo.com.br break; 19712345Snikos.nikoleris@arm.com } 19813948Sodanrc@yahoo.com.br default: 19913948Sodanrc@yahoo.com.br break; 20013948Sodanrc@yahoo.com.br } 20113948Sodanrc@yahoo.com.br } 20213948Sodanrc@yahoo.com.br 20313948Sodanrc@yahoo.com.br return SC_DEC; 20413948Sodanrc@yahoo.com.br} 20513948Sodanrc@yahoo.com.br 20613948Sodanrc@yahoo.com.brinline int 20713948Sodanrc@yahoo.com.brscfx_parse_base(const char *&s) 20813948Sodanrc@yahoo.com.br{ 20913948Sodanrc@yahoo.com.br const char *s1 = s + 1; 21013948Sodanrc@yahoo.com.br 21113948Sodanrc@yahoo.com.br int base = 10; 21211051Sandreas.hansson@arm.com 21313948Sodanrc@yahoo.com.br if (*s == '0') { 21413948Sodanrc@yahoo.com.br switch (*s1) { 21513948Sodanrc@yahoo.com.br case 'b': 21613948Sodanrc@yahoo.com.br case 'B': base = 2; s += 2; break; 21713948Sodanrc@yahoo.com.br case 'o': 21813948Sodanrc@yahoo.com.br case 'O': base = 8; s += 2; break; 21913948Sodanrc@yahoo.com.br case 'd': 22011051Sandreas.hansson@arm.com case 'D': base = 10; s += 2; break; 22113948Sodanrc@yahoo.com.br case 'x': 22213948Sodanrc@yahoo.com.br case 'X': base = 16; s += 2; break; 22313948Sodanrc@yahoo.com.br } 22413948Sodanrc@yahoo.com.br } 22513948Sodanrc@yahoo.com.br 22613948Sodanrc@yahoo.com.br return base; 22711051Sandreas.hansson@arm.com} 22811051Sandreas.hansson@arm.com 22911051Sandreas.hansson@arm.cominline bool 23011130Sali.jafri@arm.comscfx_is_equal(const char *a, const char *b) 23113948Sodanrc@yahoo.com.br{ 23211130Sali.jafri@arm.com while (*a != 0 && *b != 0 && *a == *b) { 23313948Sodanrc@yahoo.com.br ++ a; 23413948Sodanrc@yahoo.com.br ++ b; 23513948Sodanrc@yahoo.com.br } 23613948Sodanrc@yahoo.com.br return (*a == 0 && *b == 0); 23713948Sodanrc@yahoo.com.br} 23813948Sodanrc@yahoo.com.br 23913948Sodanrc@yahoo.com.brinline bool 24013948Sodanrc@yahoo.com.brscfx_is_nan(const char *s) 24113948Sodanrc@yahoo.com.br{ 24213948Sodanrc@yahoo.com.br return scfx_is_equal(s, "NaN"); 24313948Sodanrc@yahoo.com.br} 24413948Sodanrc@yahoo.com.br 24513948Sodanrc@yahoo.com.brinline bool 24611130Sali.jafri@arm.comscfx_is_inf(const char *s) 24713948Sodanrc@yahoo.com.br{ 24813948Sodanrc@yahoo.com.br return (scfx_is_equal(s, "Inf") || scfx_is_equal(s, "Infinity")); 24913948Sodanrc@yahoo.com.br} 25013948Sodanrc@yahoo.com.br 25113948Sodanrc@yahoo.com.brinline bool 25213948Sodanrc@yahoo.com.brscfx_exp_start(const char *s) 25311130Sali.jafri@arm.com{ 25413948Sodanrc@yahoo.com.br if (*s == 'e' || *s == 'E') { 25513948Sodanrc@yahoo.com.br ++s; 25613948Sodanrc@yahoo.com.br if (*s == '+' || *s == '-') 25713948Sodanrc@yahoo.com.br return true; 25813948Sodanrc@yahoo.com.br } 25911130Sali.jafri@arm.com return false; 26011130Sali.jafri@arm.com} 26111051Sandreas.hansson@arm.com 26211051Sandreas.hansson@arm.cominline bool 26311051Sandreas.hansson@arm.comscfx_is_digit(char c, sc_numrep numrep) 26411744Snikos.nikoleris@arm.com{ 26511051Sandreas.hansson@arm.com bool is_digit; 26611276Sandreas.hansson@arm.com 26711276Sandreas.hansson@arm.com switch(numrep) { 26811276Sandreas.hansson@arm.com case SC_DEC: 26911276Sandreas.hansson@arm.com { 27011276Sandreas.hansson@arm.com switch(c) { 27111276Sandreas.hansson@arm.com case '0': case '1': case '2': case '3': case '4': 27211276Sandreas.hansson@arm.com case '5': case '6': case '7': case '8': case '9': 27311276Sandreas.hansson@arm.com { 27411276Sandreas.hansson@arm.com is_digit = true; 27511051Sandreas.hansson@arm.com break; 27611276Sandreas.hansson@arm.com } 27711276Sandreas.hansson@arm.com default: 27811276Sandreas.hansson@arm.com is_digit = false; 27911276Sandreas.hansson@arm.com } 28011276Sandreas.hansson@arm.com break; 28111051Sandreas.hansson@arm.com } 28211051Sandreas.hansson@arm.com case SC_BIN: 28311051Sandreas.hansson@arm.com case SC_BIN_US: 28411051Sandreas.hansson@arm.com case SC_BIN_SM: 28511051Sandreas.hansson@arm.com { 28611051Sandreas.hansson@arm.com switch(c) { 28711051Sandreas.hansson@arm.com case '0': case '1': 28811051Sandreas.hansson@arm.com { 28911051Sandreas.hansson@arm.com is_digit = true; 29011051Sandreas.hansson@arm.com break; 29111051Sandreas.hansson@arm.com } 29212724Snikos.nikoleris@arm.com default: 29311051Sandreas.hansson@arm.com is_digit = false; 29411051Sandreas.hansson@arm.com } 29511051Sandreas.hansson@arm.com break; 29611051Sandreas.hansson@arm.com } 29711051Sandreas.hansson@arm.com case SC_OCT: 29811051Sandreas.hansson@arm.com case SC_OCT_US: 29911051Sandreas.hansson@arm.com case SC_OCT_SM: 30011051Sandreas.hansson@arm.com { 30111051Sandreas.hansson@arm.com switch(c) { 30211051Sandreas.hansson@arm.com case '0': case '1': case '2': case '3': 30311051Sandreas.hansson@arm.com case '4': case '5': case '6': case '7': 30411051Sandreas.hansson@arm.com { 30511051Sandreas.hansson@arm.com is_digit = true; 30612630Snikos.nikoleris@arm.com break; 30712720Snikos.nikoleris@arm.com } 30812720Snikos.nikoleris@arm.com default: 30912720Snikos.nikoleris@arm.com is_digit = false; 31012720Snikos.nikoleris@arm.com } 31112720Snikos.nikoleris@arm.com break; 31212720Snikos.nikoleris@arm.com } 31312720Snikos.nikoleris@arm.com case SC_HEX: 31412724Snikos.nikoleris@arm.com case SC_HEX_US: 31512720Snikos.nikoleris@arm.com case SC_HEX_SM: 31612720Snikos.nikoleris@arm.com { 31712720Snikos.nikoleris@arm.com switch (c) { 31812720Snikos.nikoleris@arm.com case '0': case '1': case '2': case '3': case '4': 31912720Snikos.nikoleris@arm.com case '5': case '6': case '7': case '8': case '9': 32012720Snikos.nikoleris@arm.com case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': 32112724Snikos.nikoleris@arm.com case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': 32212724Snikos.nikoleris@arm.com { 32312724Snikos.nikoleris@arm.com is_digit = true; 32412724Snikos.nikoleris@arm.com break; 32512724Snikos.nikoleris@arm.com } 32612724Snikos.nikoleris@arm.com default: 32712724Snikos.nikoleris@arm.com is_digit = false; 32812724Snikos.nikoleris@arm.com } 32912724Snikos.nikoleris@arm.com break; 33012724Snikos.nikoleris@arm.com } 33112724Snikos.nikoleris@arm.com case SC_CSD: 33212724Snikos.nikoleris@arm.com { 33312724Snikos.nikoleris@arm.com switch (c) { 33412724Snikos.nikoleris@arm.com case '0': case '1': case '-': 33512724Snikos.nikoleris@arm.com { 33612724Snikos.nikoleris@arm.com is_digit = true; 33712724Snikos.nikoleris@arm.com break; 33812724Snikos.nikoleris@arm.com } 33912724Snikos.nikoleris@arm.com default: 34012724Snikos.nikoleris@arm.com is_digit = false; 34112724Snikos.nikoleris@arm.com } 34212724Snikos.nikoleris@arm.com break; 34312724Snikos.nikoleris@arm.com } 34412724Snikos.nikoleris@arm.com default: 34512724Snikos.nikoleris@arm.com is_digit = false; 34612720Snikos.nikoleris@arm.com } 34712720Snikos.nikoleris@arm.com 34812724Snikos.nikoleris@arm.com return is_digit; 34912720Snikos.nikoleris@arm.com} 35012720Snikos.nikoleris@arm.com 35112720Snikos.nikoleris@arm.cominline int 35212720Snikos.nikoleris@arm.comscfx_to_digit(char c, sc_numrep numrep) 35312720Snikos.nikoleris@arm.com{ 35412720Snikos.nikoleris@arm.com int to_digit; 35512720Snikos.nikoleris@arm.com 35612720Snikos.nikoleris@arm.com switch (numrep) { 35712720Snikos.nikoleris@arm.com case SC_DEC: 35812720Snikos.nikoleris@arm.com case SC_BIN: 35912720Snikos.nikoleris@arm.com case SC_BIN_US: 36012720Snikos.nikoleris@arm.com case SC_BIN_SM: 36112720Snikos.nikoleris@arm.com case SC_OCT: 36212720Snikos.nikoleris@arm.com case SC_OCT_US: 36312720Snikos.nikoleris@arm.com case SC_OCT_SM: 36412720Snikos.nikoleris@arm.com { 36512720Snikos.nikoleris@arm.com to_digit = c - '0'; 36612720Snikos.nikoleris@arm.com break; 36712720Snikos.nikoleris@arm.com } 36812720Snikos.nikoleris@arm.com case SC_HEX: 36912720Snikos.nikoleris@arm.com case SC_HEX_US: 37012720Snikos.nikoleris@arm.com case SC_HEX_SM: 37112720Snikos.nikoleris@arm.com { 37212749Sgiacomo.travaglini@arm.com switch (c) { 37312749Sgiacomo.travaglini@arm.com case '0': case '1': case '2': case '3': case '4': 37412749Sgiacomo.travaglini@arm.com case '5': case '6': case '7': case '8': case '9': 37512749Sgiacomo.travaglini@arm.com to_digit = c - '0'; 37612720Snikos.nikoleris@arm.com break; 37712720Snikos.nikoleris@arm.com case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': 37813860Sodanrc@yahoo.com.br to_digit = c - 'a' + 10; 37912720Snikos.nikoleris@arm.com break; 38012720Snikos.nikoleris@arm.com case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': 38112720Snikos.nikoleris@arm.com to_digit = c - 'A' + 10; 38212720Snikos.nikoleris@arm.com break; 38312720Snikos.nikoleris@arm.com default: 38412720Snikos.nikoleris@arm.com to_digit = -2; 38512720Snikos.nikoleris@arm.com } 38613564Snikos.nikoleris@arm.com break; 38712720Snikos.nikoleris@arm.com } 38812720Snikos.nikoleris@arm.com case SC_CSD: 38912720Snikos.nikoleris@arm.com { 39012720Snikos.nikoleris@arm.com if (c == '-') 39112720Snikos.nikoleris@arm.com to_digit = -1; 39212720Snikos.nikoleris@arm.com else 39312724Snikos.nikoleris@arm.com to_digit = c - '0'; 39412720Snikos.nikoleris@arm.com break; 39512720Snikos.nikoleris@arm.com } 39612720Snikos.nikoleris@arm.com default: 39711051Sandreas.hansson@arm.com to_digit = -2; 39811051Sandreas.hansson@arm.com } 39911830Sbaz21@cam.ac.uk 40011051Sandreas.hansson@arm.com return to_digit; 40111051Sandreas.hansson@arm.com} 40211051Sandreas.hansson@arm.com 40311284Sandreas.hansson@arm.com 40411051Sandreas.hansson@arm.com// ---------------------------------------------------------------------------- 40511284Sandreas.hansson@arm.com// Utilities for printing a character string number 40611284Sandreas.hansson@arm.com// ---------------------------------------------------------------------------- 40711744Snikos.nikoleris@arm.com 40811744Snikos.nikoleris@arm.cominline void scfx_print_nan(scfx_string &s) { s += "NaN"; } 40911051Sandreas.hansson@arm.cominline void 41011284Sandreas.hansson@arm.comscfx_print_inf(scfx_string &s, bool negative) 41111284Sandreas.hansson@arm.com{ 41211284Sandreas.hansson@arm.com if (negative) 41311284Sandreas.hansson@arm.com s += "-Inf"; 41411284Sandreas.hansson@arm.com else 41511334Sandreas.hansson@arm.com s += "Inf"; 41611284Sandreas.hansson@arm.com} 41711334Sandreas.hansson@arm.com 41811334Sandreas.hansson@arm.cominline void 41911334Sandreas.hansson@arm.comscfx_print_prefix(scfx_string &s, sc_numrep numrep) 42011334Sandreas.hansson@arm.com{ 42111284Sandreas.hansson@arm.com switch (numrep) { 42211334Sandreas.hansson@arm.com case SC_DEC: 42311334Sandreas.hansson@arm.com s += "0d"; 42411334Sandreas.hansson@arm.com break; 42511334Sandreas.hansson@arm.com case SC_BIN: 42611334Sandreas.hansson@arm.com s += "0b"; 42711334Sandreas.hansson@arm.com break; 42811051Sandreas.hansson@arm.com case SC_BIN_US: 42911334Sandreas.hansson@arm.com s += "0bus"; 43011334Sandreas.hansson@arm.com break; 43111334Sandreas.hansson@arm.com case SC_BIN_SM: 43211334Sandreas.hansson@arm.com s += "0bsm"; 43311051Sandreas.hansson@arm.com break; 43411334Sandreas.hansson@arm.com case SC_OCT: 43511334Sandreas.hansson@arm.com s += "0o"; 43611334Sandreas.hansson@arm.com break; 43711051Sandreas.hansson@arm.com case SC_OCT_US: 43811334Sandreas.hansson@arm.com s += "0ous"; 43911334Sandreas.hansson@arm.com break; 44011334Sandreas.hansson@arm.com case SC_OCT_SM: 44111334Sandreas.hansson@arm.com s += "0osm"; 44211334Sandreas.hansson@arm.com break; 44311334Sandreas.hansson@arm.com case SC_HEX: 44411334Sandreas.hansson@arm.com s += "0x"; 44511051Sandreas.hansson@arm.com break; 44611334Sandreas.hansson@arm.com case SC_HEX_US: 44711334Sandreas.hansson@arm.com s += "0xus"; 44811334Sandreas.hansson@arm.com break; 44912724Snikos.nikoleris@arm.com case SC_HEX_SM: 45011334Sandreas.hansson@arm.com s += "0xsm"; 45111334Sandreas.hansson@arm.com break; 45211334Sandreas.hansson@arm.com case SC_CSD: 45311334Sandreas.hansson@arm.com s += "0csd"; 45411051Sandreas.hansson@arm.com break; 45511284Sandreas.hansson@arm.com default: 45611284Sandreas.hansson@arm.com s += "unknown"; 45711190Sandreas.hansson@arm.com } 45811051Sandreas.hansson@arm.com} 45911334Sandreas.hansson@arm.com 46011334Sandreas.hansson@arm.cominline void 46111334Sandreas.hansson@arm.comscfx_print_exp(scfx_string &s, int exp) 46211334Sandreas.hansson@arm.com{ 46311334Sandreas.hansson@arm.com if (exp != 0) { 46412630Snikos.nikoleris@arm.com s += 'e'; 46511051Sandreas.hansson@arm.com 46611051Sandreas.hansson@arm.com if (exp < 0) { 46712724Snikos.nikoleris@arm.com exp = - exp; 46811051Sandreas.hansson@arm.com s += '-'; 46911051Sandreas.hansson@arm.com } else { 47011051Sandreas.hansson@arm.com s += '+'; 47111452Sandreas.hansson@arm.com } 47213350Snikos.nikoleris@arm.com 47313350Snikos.nikoleris@arm.com bool first = true; 47411051Sandreas.hansson@arm.com int scale = 1000000000; 47511452Sandreas.hansson@arm.com do { 47611452Sandreas.hansson@arm.com int digit = exp / scale; 47711452Sandreas.hansson@arm.com exp = exp % scale; 47811051Sandreas.hansson@arm.com if (digit != 0 || !first) { 47911051Sandreas.hansson@arm.com s += static_cast<char>(digit + '0'); 48011452Sandreas.hansson@arm.com first = false; 48111745Sandreas.hansson@arm.com } 48212349Snikos.nikoleris@arm.com scale /= 10; 48311452Sandreas.hansson@arm.com } 48411452Sandreas.hansson@arm.com while (scale > 0); 48511452Sandreas.hansson@arm.com } 48611051Sandreas.hansson@arm.com} 48711051Sandreas.hansson@arm.com 48811051Sandreas.hansson@arm.comvoid scfx_tc2csd(scfx_string &, int); 48911051Sandreas.hansson@arm.comvoid scfx_csd2tc(scfx_string &); 49011051Sandreas.hansson@arm.com 49111051Sandreas.hansson@arm.com} // namespace sc_dt 49211051Sandreas.hansson@arm.com 49311051Sandreas.hansson@arm.com#endif // __SYSTEMC_EXT_DT_FX_SCFX_UTILS_HH__ 49411051Sandreas.hansson@arm.com