Merge zizzer:/bk/newmem

into  zower.eecs.umich.edu:/eecshome/m5/newmem

--HG--
extra : convert_revision : 2398e48722dd71ddf270e93bd7b387078fb30e6b
This commit is contained in:
Gabe Black
2007-01-28 14:46:56 -05:00
14 changed files with 88 additions and 81 deletions

View File

@@ -209,14 +209,18 @@ if False:
env.Append(ENV = { 'M5_PLY' : Dir('ext/ply') })
env['GCC'] = False
env['SUNCC'] = False
env['ICC'] = False
env['GCC'] = subprocess.Popen(env['CXX'] + ' --version', shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
close_fds=True).communicate()[0].find('GCC') >= 0
env['SUNCC'] = subprocess.Popen(env['CXX'] + ' -V', shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
close_fds=True).communicate()[0].find('Sun C++') >= 0
if (env['GCC'] and env['SUNCC']):
print 'Error: How can we have both g++ and Sun C++ at the same time?'
env['ICC'] = subprocess.Popen(env['CXX'] + ' -V', shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
close_fds=True).communicate()[0].find('Intel') >= 0
if env['GCC'] + env['SUNCC'] + env['ICC'] > 1:
print 'Error: How can we have two at the same time?'
Exit(1)
@@ -225,6 +229,8 @@ if env['GCC']:
env.Append(CCFLAGS='-pipe')
env.Append(CCFLAGS='-fno-strict-aliasing')
env.Append(CCFLAGS=Split('-Wall -Wno-sign-compare -Werror -Wundef'))
elif env['ICC']:
pass #Fix me... add warning flags once we clean up icc warnings
elif env['SUNCC']:
env.Append(CCFLAGS='-Qoption ccfe')
env.Append(CCFLAGS='-features=gcc')
@@ -234,7 +240,7 @@ elif env['SUNCC']:
# env.Append(CCFLAGS='-instances=semiexplicit')
else:
print 'Error: Don\'t know what compiler options to use for your compiler.'
print ' Please fix SConstruct and try again.'
print ' Please fix SConstruct and src/SConscript and try again.'
Exit(1)
if sys.platform == 'cygwin':

View File

@@ -325,6 +325,11 @@ elif env['SUNCC']:
ccflags['opt'] = '-g -O'
ccflags['fast'] = '-fast'
ccflags['prof'] = '-fast -g -pg'
elif env['ICC']:
ccflags['debug'] = '-g -O0'
ccflags['opt'] = '-g -O'
ccflags['fast'] = '-fast'
ccflags['prof'] = '-fast -g -pg'
else:
print 'Unknown compiler, please fix compiler options'
Exit(1)

View File

@@ -44,7 +44,8 @@
// this doesn't do anything with sun cc, but why not
#define M5_ATTR_NORETURN __sun_attr__((__noreturn__))
#define M5_DUMMY_RETURN return (0);
#define M5_PRAGMA_NORETURN(x) _Pragma("does_not_return(x)")
#define DO_PRAGMA(x) _Pragma(#x)
#define M5_PRAGMA_NORETURN(x) DO_PRAGMA(does_not_return(x))
#else
#error "Need to define compiler options in base/compiler.hh"
#endif

View File

@@ -84,21 +84,21 @@ _format_integer(std::ostream &out, const T &data, Format &fmt)
switch (fmt.base) {
case Format::hex:
out.setf(ios::hex, ios::basefield);
out.setf(std::ios::hex, std::ios::basefield);
break;
case Format::oct:
out.setf(ios::oct, ios::basefield);
out.setf(std::ios::oct, std::ios::basefield);
break;
case Format::dec:
out.setf(ios::dec, ios::basefield);
out.setf(std::ios::dec, std::ios::basefield);
break;
}
if (fmt.alternate_form) {
if (!fmt.fill_zero)
out.setf(ios::showbase);
out.setf(std::ios::showbase);
else {
switch (fmt.base) {
case Format::hex:
@@ -122,13 +122,13 @@ _format_integer(std::ostream &out, const T &data, Format &fmt)
out.width(fmt.width);
if (fmt.flush_left && !fmt.fill_zero)
out.setf(ios::left);
out.setf(std::ios::left);
if (fmt.print_sign)
out.setf(ios::showpos);
out.setf(std::ios::showpos);
if (fmt.uppercase)
out.setf(ios::uppercase);
out.setf(std::ios::uppercase);
out << data;
}
@@ -148,7 +148,7 @@ _format_float(std::ostream &out, const T &data, Format &fmt)
if (fmt.precision == 0)
fmt.precision = 1;
else
out.setf(ios::scientific);
out.setf(std::ios::scientific);
out.precision(fmt.precision);
} else
@@ -156,7 +156,7 @@ _format_float(std::ostream &out, const T &data, Format &fmt)
out.width(fmt.width);
if (fmt.uppercase)
out.setf(ios::uppercase);
out.setf(std::ios::uppercase);
break;
case Format::fixed:
@@ -164,7 +164,7 @@ _format_float(std::ostream &out, const T &data, Format &fmt)
if (fmt.width > 0)
out.width(fmt.width);
out.setf(ios::fixed);
out.setf(std::ios::fixed);
out.precision(fmt.precision);
} else
if (fmt.width > 0)
@@ -216,7 +216,7 @@ _format_string(std::ostream &out, const T &data, Format &fmt)
if (fmt.width > 0)
out.width(fmt.width);
if (fmt.flush_left)
out.setf(ios::left);
out.setf(std::ios::left);
out << data;
#endif

View File

@@ -398,7 +398,7 @@ class Wrap : public Child
public:
Wrap()
{
map(new Data<Child>(*this));
this->map(new Data<Child>(*this));
}
/**

View File

@@ -379,6 +379,7 @@ class StaticInst : public StaticInstBase
{
panic("StaticInst::branchTarget() called on instruction "
"that is not a PC-relative branch.");
M5_DUMMY_RETURN
}
/**
@@ -393,6 +394,7 @@ class StaticInst : public StaticInstBase
panic("StaticInst::branchTarget() called on instruction "
"that is not an indirect branch.");
}
M5_DUMMY_RETURN
/**
* Return true if the instruction is a control transfer, and if so,

View File

@@ -65,69 +65,32 @@ TsunamiIO::RTC::RTC(const string &n, Tsunami* tsunami, const vector<int> &t,
stat_regA = RTCA_32768HZ | RTCA_1024HZ;
stat_regB = RTCB_PRDC_IE |RTCB_BIN | RTCB_24HR;
if (year_is_bcd) {
// The RTC uses BCD for the last two digits in the year.
// They python year is a full year.
int _year = t[0] % 100;
int tens = _year / 10;
int ones = _year % 10;
year = (tens << 4) + ones;
} else {
// Even though the datasheet says that the year field should be
// interpreted as BCD, we just enter the number of years since
// 1900 since linux seems to be happy with that (and I believe
// that Tru64 was as well)
year = t[0] - 1900;
}
mon = t[1];
mday = t[2];
hour = t[3];
min = t[4];
sec = t[5];
// wday is defined to be in the range from 1 - 7 with 1 being Sunday.
// the value coming from python is in the range from 0 - 6 with 0 being
// Monday. Fix that here.
wday = t[6] + 2;
if (wday > 7)
wday -= 7;
DPRINTFN("Real-time clock set to %s", getDateString());
}
std::string
TsunamiIO::RTC::getDateString()
{
struct tm tm;
parseTime(t, &tm);
memset(&tm, 0, sizeof(tm));
year = tm.tm_year;
if (year_is_bcd) {
// undo the BCD and conver to years since 1900 guessing that
// anything before 1970 is actually after 2000
int _year = (year >> 4) * 10 + (year & 0xf);
if (_year < 70)
_year += 100;
tm.tm_year = _year;
} else {
// number of years since 1900
tm.tm_year = year;
// The datasheet says that the year field can be either BCD or
// years since 1900. Linux seems to be happy with years since
// 1900.
year = year % 100;
int tens = year / 10;
int ones = year % 10;
year = (tens << 4) + ones;
}
// unix is 0-11 for month
tm.tm_mon = mon - 1;
tm.tm_mday = mday;
tm.tm_hour = hour;
tm.tm_min = min;
tm.tm_sec = sec;
// Unix is 0-11 for month, data seet says start at 1
mon = tm.tm_mon + 1;
mday = tm.tm_mday;
hour = tm.tm_hour;
min = tm.tm_min;
sec = tm.tm_sec;
// to add more annoyance unix is 0 - 6 with 0 as sunday
tm.tm_wday = wday - 1;
// Datasheet says 1 is sunday
wday = tm.tm_wday + 1;
return asctime(&tm);
DPRINTFN("Real-time clock set to %s", asctime(&tm));
}
void

View File

@@ -125,9 +125,6 @@ class TsunamiIO : public BasicPioDevice
/** RTC read data */
uint8_t readData();
/** RTC get the date */
std::string getDateString();
/**
* Serialize this object to the given output stream.
* @param base The base name of the counter object.

View File

@@ -49,12 +49,14 @@ using namespace std;
using namespace TheISA;
DumbTOD::DumbTOD(Params *p)
: BasicPioDevice(p), todTime(p->init_time)
: BasicPioDevice(p)
{
pioSize = 0x08;
struct tm tm;
gmtime_r((time_t*)&todTime, &tm);
parseTime(p->init_time, &tm);
todTime = timegm(&tm);
DPRINTFN("Real-time clock set to %s\n", asctime(&tm));
DPRINTFN("Real-time clock set to %d\n", todTime);
}
@@ -86,7 +88,7 @@ BEGIN_DECLARE_SIM_OBJECT_PARAMS(DumbTOD)
Param<Tick> pio_latency;
SimObjectParam<Platform *> platform;
SimObjectParam<System *> system;
Param<time_t> time;
VectorParam<int> time;
END_DECLARE_SIM_OBJECT_PARAMS(DumbTOD)
@@ -96,7 +98,7 @@ BEGIN_INIT_SIM_OBJECT_PARAMS(DumbTOD)
INIT_PARAM(pio_latency, "Programmed IO latency"),
INIT_PARAM(platform, "platform"),
INIT_PARAM(system, "system object"),
INIT_PARAM(time, "System time to use (0 for actual time")
INIT_PARAM(time, "")
END_INIT_SIM_OBJECT_PARAMS(DumbTOD)

View File

@@ -36,6 +36,8 @@
#ifndef __DEV_SPARC_DTOD_HH__
#define __DEV_SPARC_DTOD_HH__
#include <vector>
#include "base/range.hh"
#include "dev/io_device.hh"
@@ -52,7 +54,7 @@ class DumbTOD : public BasicPioDevice
public:
struct Params : public BasicPioDevice::Params
{
time_t init_time;
std::vector<int> init_time;
};
protected:
const Params *params() const { return (const Params *)_params; }

View File

@@ -41,10 +41,12 @@
#include <cassert>
#include <list>
#include "base/misc.hh"
#include "mem/request.hh"
#include "sim/host.hh"
#include "sim/root.hh"
struct Packet;
typedef Packet *PacketPtr;
typedef uint8_t* PacketDataPtr;
@@ -238,7 +240,7 @@ class Packet
bool isNoAllocate() const { return (flags & NO_ALLOCATE) != 0; }
bool isCompressed() const { return (flags & COMPRESSED) != 0; }
bool nic_pkt() { assert("Unimplemented\n" && 0); return false; }
bool nic_pkt() { panic("Unimplemented"); M5_DUMMY_RETURN }
/** Possible results of a packet's request. */
enum Result

View File

@@ -38,6 +38,8 @@
#define __HOST_HH__
#include <inttypes.h>
#include <limits>
/** uint64_t constant */
#define ULL(N) ((uint64_t)N##ULL)
@@ -56,7 +58,7 @@ typedef int64_t Counter;
*/
typedef int64_t Tick;
const Tick MaxTick = (1LL << 63) - 1;
const Tick MaxTick = std::numeric_limits<Tick>::max();
/**
* Address type

View File

@@ -777,3 +777,27 @@ ParamContext::describeAllContexts(ostream &os)
os << endl;
}
}
void
parseTime(const std::vector<int> &time, struct tm *tm)
{
memset(tm, 0, sizeof(struct tm));
// UNIX is years since 1900
tm->tm_year = time[0] - 1900;
// Python starts at 1, UNIX starts at 0
tm->tm_mon = time[1] - 1;
tm->tm_mday = time[2];
tm->tm_hour = time[3];
tm->tm_min = time[4];
tm->tm_sec = time[5];
// Python has 0 as Monday, UNIX is 0 as sunday
tm->tm_wday = time[6] + 1;
if (tm->tm_wday > 6)
tm->tm_wday -= 7;
// Python starts at 1, Unix starts at 0
tm->tm_yday = time[7] - 1;
}

View File

@@ -781,4 +781,5 @@ SimObjectVectorParam<OBJ_CLASS *>::showType(std::ostream &os) const \
template <class T> bool parseParam(const std::string &str, T &data);
template <class T> void showParam(std::ostream &os, const T &data);
void parseTime(const std::vector<int> &time, struct tm *tm);
#endif // _SIM_PARAM_HH_