diff options
author | Ali Saidi <saidi@eecs.umich.edu> | 2006-05-01 18:53:28 -0400 |
---|---|---|
committer | Ali Saidi <saidi@eecs.umich.edu> | 2006-05-01 18:53:28 -0400 |
commit | 8a9d270f6c17efa79f38e629c7cbcafa51aa8494 (patch) | |
tree | 75bbf24f940af2b8bf6fe00d42c56b1715bdf07b /mem/packet.cc | |
parent | a8fbc4ec76169a6d735817df2aa8bc2085df5ac8 (diff) | |
download | gem5-8a9d270f6c17efa79f38e629c7cbcafa51aa8494.tar.xz |
move code from packet.hh to packet.cc and packet_impl.hh
fix very annoying not-compiler bug
arch/sparc/regfile.hh:
You have not included an out-of-class definition of your static members. See [9.4.2]/4 and about a billion gcc bug reports.
If statements get around the problem through some magic, and than seems nicer that putting a definition of them in a c file
somewhere.
cpu/simple/cpu.cc:
get() and set() do the conversion now
dev/io_device.hh:
need get() and set() defentions in all the devices
mem/packet.cc:
mem/packet.hh:
move code from packet.hh to packet.cc
mem/physical.cc:
packet_impl needed for templated packet functions
--HG--
extra : convert_revision : 6c11842aa928d9af7b4cabe826306fe1fe09e693
Diffstat (limited to 'mem/packet.cc')
-rw-r--r-- | mem/packet.cc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/mem/packet.cc b/mem/packet.cc index 85b76919b..ecd2a7be1 100644 --- a/mem/packet.cc +++ b/mem/packet.cc @@ -34,5 +34,61 @@ #include "base/misc.hh" #include "mem/packet.hh" + +/** delete the data pointed to in the data pointer. Ok to call to matter how + * data was allocted. */ +void +Packet::deleteData() { + assert(staticData || dynamicData); + if (staticData) + return; + + if (arrayData) + delete [] data; + else + delete data; +} + +/** If there isn't data in the packet, allocate some. */ +void +Packet::allocate() { + if (data) + return; + assert(!staticData); + dynamicData = true; + arrayData = true; + data = new uint8_t[size]; +} + +/** Do the packet modify the same addresses. */ +bool +Packet::intersect(Packet *p) { + Addr s1 = addr; + Addr e1 = addr + size; + Addr s2 = p->addr; + Addr e2 = p->addr + p->size; + + if (s1 >= s2 && s1 < e2) + return true; + if (e1 >= s2 && e1 < e2) + return true; + return false; +} + +/** Minimally reset a packet so something like simple cpu can reuse it. */ +void +Packet::reset() { + result = Unknown; + if (dynamicData) { + deleteData(); + dynamicData = false; + arrayData = false; + time = curTick; + } +} + + + + bool fixPacket(Packet &func, Packet &timing) { panic("Need to implement!"); } |