systemc: Ensure SC_LONG_64 is defined and available.

The datatype code was checking if SC_LONG_64 was defined to determine
if a long was 64 bits. The code that would define that value was
dropped when porting over from the Accellera implementation, and so
the wrong code was being included. This change both makes those checks
look at the *value* of SC_LONG_64 to ensure that it's not missing by
accident, and assigns it a value in sc_fxdefs.hh.

Change-Id: Ie9bb1146452a3db1d9d99c0db575098bb06463ff
Reviewed-on: https://gem5-review.googlesource.com/c/12616
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
Gabe Black
2018-09-10 23:34:49 -07:00
parent 960c350053
commit 8454330257
4 changed files with 14 additions and 7 deletions

View File

@@ -147,7 +147,7 @@ scfx_rep::scfx_rep(long a) :
a = -a;
m_sign = -1;
}
# if defined(SC_LONG_64)
# if SC_LONG_64
m_wp = 1;
m_mant[1] = static_cast<word>(a);
m_mant[2] = static_cast<word>(a >> bits_in_word);
@@ -171,7 +171,7 @@ scfx_rep::scfx_rep(unsigned long a) :
m_mant.clear();
m_wp = m_msw = m_lsw = 2;
m_state = normal;
# if defined(SC_LONG_64)
# if SC_LONG_64
m_wp = 1;
m_mant[1] = static_cast<word>(a);
m_mant[2] = static_cast<word>(a >> bits_in_word);
@@ -1057,6 +1057,7 @@ print_other(scfx_string &s, const scfx_rep &a, sc_numrep numrep, int w_prefix,
lsb = (b.m_lsw - b.m_wp) * bits_in_word +
scfx_find_lsb(b.m_mant[b.m_lsw]);
}
}

View File

@@ -816,7 +816,7 @@ sc_proxy<X>::assign_(int a)
return x;
}
#if defined(SC_LONG_64)
#if SC_LONG_64
template <class X>
inline X &
sc_proxy<X>::assign_(unsigned long a)

View File

@@ -50,6 +50,12 @@
#include "../../utils/sc_report_handler.hh"
#include "../int/sc_nbutils.hh"
#if ULONG_MAX > 0xffffffffUL
# define SC_LONG_64 1
#else
# define SC_LONG_64 0
#endif
namespace sc_dt
{

View File

@@ -67,9 +67,9 @@ inline int
scfx_find_msb(unsigned long x)
{
int i = 0;
# if defined(SC_LONG_64)
# if SC_LONG_64
MSB_STATEMENT(32);
# endif // defined(SC_LONG_64)
# endif // SC_LONG_64
MSB_STATEMENT(16);
MSB_STATEMENT(8);
MSB_STATEMENT(4);
@@ -86,12 +86,12 @@ inline int
scfx_find_lsb(unsigned long x)
{
int i;
# if defined(SC_LONG_64)
# if SC_LONG_64
i = 63;
LSB_STATEMENT(32);
# else
i = 31;
# endif // defined(SC_LONG_64)
# endif // SC_LONG_64
LSB_STATEMENT(16);
LSB_STATEMENT(8);
LSB_STATEMENT(4);