move code from packet.hh to packet.cc and packet_impl.hh
authorAli Saidi <saidi@eecs.umich.edu>
Mon, 1 May 2006 22:53:28 +0000 (18:53 -0400)
committerAli Saidi <saidi@eecs.umich.edu>
Mon, 1 May 2006 22:53:28 +0000 (18:53 -0400)
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

arch/sparc/regfile.hh
cpu/simple/cpu.cc
dev/io_device.hh
mem/packet.cc
mem/packet.hh
mem/physical.cc

index 744d51771907f683a9348c4af17fd7075ae06b53..5169a332fda90a4950fda84cec4320a110b7ae3e 100644 (file)
@@ -140,7 +140,16 @@ namespace SparcISA
             DPRINTF(Sparc, "Now using %s globals",
                     useAlt ? "alternate" : "regular");
             regView[Globals] = useAlt ? altGlobals : regGlobals;
-            offset[Globals] = useAlt ? AltGlobalOffset : RegGlobalOffset;
+
+            // 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.
+            if (useAlt)
+                offset[Globals] = AltGlobalOffset;
+            else
+                offset[Globals] = RegGlobalOffset;
         }
 
         void serialize(std::ostream &os);
index be34d1791eca598da06f9e504057faabe733380a..33fe63c2635c73267e67effde248ce0604a8bcb7 100644 (file)
@@ -54,6 +54,7 @@
 #include "cpu/smt.hh"
 #include "cpu/static_inst.hh"
 #include "kern/kernel_stats.hh"
+#include "mem/packet_impl.hh"
 #include "sim/byteswap.hh"
 #include "sim/builder.hh"
 #include "sim/debug.hh"
@@ -480,7 +481,7 @@ SimpleCPU::read(Addr addr, T &data, unsigned flags)
 //     Fault fault = xc->read(memReq,data);
         // Not sure what to check for no fault...
         if (data_read_pkt->result == Success) {
-            data = gtoh(data_read_pkt->get<T>());
+            data = data_read_pkt->get<T>();
         }
 
         if (traceData) {
@@ -523,7 +524,7 @@ SimpleCPU::read(Addr addr, T &data, unsigned flags)
         // Need to find a way to not duplicate code above.
 
         if (data_read_pkt->result == Success) {
-            data = gtoh(data_read_pkt->get<T>());
+            data = data_read_pkt->get<T>();
         }
 
         if (traceData) {
@@ -627,9 +628,8 @@ SimpleCPU::write(T data, Addr addr, unsigned flags, uint64_t *res)
         data_write_pkt = new Packet;
         data_write_pkt->cmd = Write;
         data_write_pkt->req = data_write_req;
-        T hostData = htog(data);
         data_write_pkt->allocate();
-        data_write_pkt->set(hostData);
+        data_write_pkt->set(data);
 #else
         data_write_pkt->reset();
         data = htog(data);
index 1f4ef4b6ee980e7555274d82bf2e0d4a596db17e..e492ccf0b292ad7d1d2aece73ec9899c064ecdac 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "base/chunk_generator.hh"
 #include "mem/mem_object.hh"
+#include "mem/packet_impl.hh"
 #include "sim/eventq.hh"
 #include "sim/sim_object.hh"
 
index 85b76919b681b466d61d6d93925d5af5e2813508..ecd2a7be1a9462ed08955e82a78c95f6b10cbf42 100644 (file)
 #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!"); }
index a5bd6bc597588c899680f4dfcedd48e2b396a27b..69d00675df28651732d5878f3f23950a2335b833 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2003 The Regents of The University of Michigan
+ * Copyright (c) 2006 The Regents of The University of Michigan
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -150,102 +150,42 @@ struct Packet
 
 
     /** Minimally reset a packet so something like simple cpu can reuse it. */
-    void reset() {
-        result = Unknown;
-        if (dynamicData) {
-           deleteData();
-           dynamicData = false;
-           arrayData = false;
-           time = curTick;
-        }
-    }
+    void reset();
 
     /** Set the data pointer to the following value that should not be freed. */
     template <typename T>
-    void dataStatic(T *p) {
-        assert(!dynamicData);
-        data = (PacketDataPtr)p;
-        staticData = true;
-    }
+    void dataStatic(T *p);
 
     /** Set the data pointer to a value that should have delete [] called on it.
      */
     template <typename T>
-    void dataDynamicArray(T *p) {
-        assert(!staticData && !dynamicData);
-        data = (PacketDataPtr)p;
-        dynamicData = true;
-        arrayData = true;
-    }
+    void dataDynamicArray(T *p);
 
     /** set the data pointer to a value that should have delete called on it. */
     template <typename T>
-    void dataDynamic(T *p) {
-        assert(!staticData && !dynamicData);
-        data = (PacketDataPtr)p;
-        dynamicData = true;
-        arrayData = false;
-    }
+    void dataDynamic(T *p);
 
     /** return the value of what is pointed to in the packet. */
     template <typename T>
-    T get() {
-        assert(staticData || dynamicData);
-        assert(sizeof(T) <= size);
-        return *(T*)data;
-    }
+    T get();
 
     /** get a pointer to the data ptr. */
     template <typename T>
-    T* getPtr() {
-        assert(staticData || dynamicData);
-        return (T*)data;
-    }
-
+    T* getPtr();
 
     /** set the value in the data pointer to v. */
     template <typename T>
-    void set(T v) {
-        assert(sizeof(T) <= size);
-        *(T*)data = v;
-    }
+    void set(T v);
 
     /** delete the data pointed to in the data pointer. Ok to call to matter how
      * data was allocted. */
-    void deleteData() {
-        assert(staticData || dynamicData);
-        if (staticData)
-            return;
-
-        if (arrayData)
-            delete [] data;
-        else
-            delete data;
-    }
+    void deleteData();
 
     /** If there isn't data in the packet, allocate some. */
-    void allocate() {
-        if (data)
-            return;
-        assert(!staticData);
-        dynamicData = true;
-        arrayData = true;
-        data = new uint8_t[size];
-    }
+    void allocate();
 
     /** Do the packet modify the same addresses. */
-    bool 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;
-    }
+    bool intersect(Packet *p);
 };
 
 bool fixPacket(Packet &func, Packet &timing);
index fd304e63b02d2b13d24660ddfaebc667efb3e57a..a9cefc70b7a6c002b8e5abcb7823810395483a94 100644 (file)
@@ -40,6 +40,7 @@
 
 #include "base/misc.hh"
 #include "config/full_system.hh"
+#include "mem/packet_impl.hh"
 #include "mem/physical.hh"
 #include "sim/host.hh"
 #include "sim/builder.hh"