Fix a bunch of bugs I introduced when I changed the flags stuff for packets.
I did some of the flags and assertions wrong. Thanks to Brad Beckmann for pointing this out. I should have run the opt regressions instead of the fast. I also screwed up some of the logical functions in the Flags class.
This commit is contained in:
@@ -678,7 +678,7 @@ def LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags,
|
||||
|
||||
if mem_flags:
|
||||
mem_flags = [ 'Request::%s' % flag for flag in mem_flags ]
|
||||
s = '\n\tmemAccessFlags.reset(' + string.join(mem_flags, '|') + ');'
|
||||
s = '\n\tmemAccessFlags = ' + string.join(mem_flags, '|') + ';'
|
||||
iop.constructor += s
|
||||
memacc_iop.constructor += s
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ def LoadStoreBase(name, Name, ea_code, memacc_code, mem_flags, inst_flags,
|
||||
|
||||
if mem_flags:
|
||||
mem_flags = [ 'Request::%s' % flag for flag in mem_flags ]
|
||||
s = '\n\tmemAccessFlags.reset(' + string.join(mem_flags, '|') + ');'
|
||||
s = '\n\tmemAccessFlags = ' + string.join(mem_flags, '|') + ';'
|
||||
iop.constructor += s
|
||||
memacc_iop.constructor += s
|
||||
|
||||
|
||||
@@ -61,16 +61,14 @@ class Flags
|
||||
|
||||
bool any() const { return _flags; }
|
||||
bool any(Type flags) const { return (_flags & flags); }
|
||||
bool all() const { return (~_flags); }
|
||||
bool all(Type flags) const { return (_flags & flags) != flags; }
|
||||
bool all() const { return !(~_flags); }
|
||||
bool all(Type flags) const { return (_flags & flags) == flags; }
|
||||
bool none() const { return _flags == 0; }
|
||||
bool none(Type flags) const { return (_flags & flags) == 0; }
|
||||
bool exact(Type flags) const { return _flags = flags; }
|
||||
void clear() { _flags = 0; }
|
||||
void clear(Type flags) { _flags &= ~flags; }
|
||||
void reset(Type flags) { _flags = flags;}
|
||||
void set(Type flags) { _flags |= flags; }
|
||||
void set(Type f, bool val) { _flags = (_flags & f) | (val ? f : 0); }
|
||||
void set(Type f, bool val) { _flags = (_flags & ~f) | (val ? f : 0); }
|
||||
void
|
||||
update(Type flags, Type mask)
|
||||
{
|
||||
|
||||
@@ -461,9 +461,12 @@ class Packet : public FastAlloc, public Printable
|
||||
* supplied.
|
||||
*/
|
||||
Packet(Request *_req, MemCmd _cmd, NodeID _dest)
|
||||
: cmd(_cmd), req(_req), data(NULL), addr(_req->paddr),
|
||||
size(_req->size), dest(_dest), time(curTick), senderState(NULL)
|
||||
: flags(VALID_DST), cmd(_cmd), req(_req), data(NULL),
|
||||
addr(_req->paddr), size(_req->size), dest(_dest), time(curTick),
|
||||
senderState(NULL)
|
||||
{
|
||||
if (req->flags.any(Request::VALID_PADDR))
|
||||
flags.set(VALID_ADDR|VALID_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -472,10 +475,12 @@ class Packet : public FastAlloc, public Printable
|
||||
* req. this allows for overriding the size/addr of the req.
|
||||
*/
|
||||
Packet(Request *_req, MemCmd _cmd, NodeID _dest, int _blkSize)
|
||||
: cmd(_cmd), req(_req), data(NULL),
|
||||
: flags(VALID_DST), cmd(_cmd), req(_req), data(NULL),
|
||||
addr(_req->paddr & ~(_blkSize - 1)), size(_blkSize), dest(_dest),
|
||||
time(curTick), senderState(NULL)
|
||||
{
|
||||
if (req->flags.any(Request::VALID_PADDR))
|
||||
flags.set(VALID_ADDR|VALID_SIZE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -544,13 +549,10 @@ class Packet : public FastAlloc, public Printable
|
||||
assert(isRequest());
|
||||
origCmd = cmd;
|
||||
cmd = cmd.responseCommand();
|
||||
if (flags.any(VALID_SRC)) {
|
||||
dest = src;
|
||||
flags.set(VALID_DST);
|
||||
flags.clear(VALID_SRC);
|
||||
} else {
|
||||
flags.clear(VALID_DST);
|
||||
}
|
||||
|
||||
dest = src;
|
||||
flags.set(VALID_DST, flags.any(VALID_SRC));
|
||||
flags.clear(VALID_SRC);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -690,7 +692,6 @@ class Packet : public FastAlloc, public Printable
|
||||
if (flags.any(ARRAY_DATA))
|
||||
delete [] data;
|
||||
else if (flags.any(DYNAMIC_DATA))
|
||||
|
||||
delete data;
|
||||
|
||||
flags.clear(STATIC_DATA|DYNAMIC_DATA|ARRAY_DATA);
|
||||
@@ -702,11 +703,13 @@ class Packet : public FastAlloc, public Printable
|
||||
allocate()
|
||||
{
|
||||
if (data) {
|
||||
assert(flags.none(STATIC_DATA|DYNAMIC_DATA));
|
||||
} else {
|
||||
flags.set(DYNAMIC_DATA|ARRAY_DATA);
|
||||
data = new uint8_t[getSize()];
|
||||
assert(flags.any(STATIC_DATA|DYNAMIC_DATA));
|
||||
return;
|
||||
}
|
||||
|
||||
assert(flags.none(STATIC_DATA|DYNAMIC_DATA));
|
||||
flags.set(DYNAMIC_DATA|ARRAY_DATA);
|
||||
data = new uint8_t[getSize()];
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -53,6 +53,8 @@ typedef Request* RequestPtr;
|
||||
|
||||
class Request : public FastAlloc
|
||||
{
|
||||
friend class Packet;
|
||||
|
||||
public:
|
||||
typedef uint32_t FlagsType;
|
||||
typedef ::Flags<FlagsType> Flags;
|
||||
@@ -455,8 +457,6 @@ class Request : public FastAlloc
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
friend class Packet;
|
||||
};
|
||||
|
||||
#endif // __MEM_REQUEST_HH__
|
||||
|
||||
Reference in New Issue
Block a user