GetArgument: Rework getArgument so that X86_FS compiles again.
authorGabe Black <gblack@eecs.umich.edu>
Sat, 16 Oct 2010 06:57:06 +0000 (23:57 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sat, 16 Oct 2010 06:57:06 +0000 (23:57 -0700)
When no size is specified for an argument, push the decision about what size
to use into the ISA by passing a size of -1.

12 files changed:
src/arch/alpha/utility.cc
src/arch/alpha/utility.hh
src/arch/arm/utility.cc
src/arch/arm/utility.hh
src/arch/mips/utility.cc
src/arch/mips/utility.hh
src/arch/sparc/utility.cc
src/arch/sparc/utility.hh
src/arch/x86/utility.cc
src/arch/x86/utility.hh
src/sim/arguments.cc
src/sim/arguments.hh

index 80ec360b7b6404ad82b13aa337f49a2ec5899b0b..11560259f41250ca5c084316b989e53dae800798 100644 (file)
@@ -40,7 +40,7 @@
 namespace AlphaISA {
 
 uint64_t
-getArgument(ThreadContext *tc, int &number, uint8_t size, bool fp)
+getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp)
 {
 #if FULL_SYSTEM
     const int NumArgumentRegs = 6;
index 360e155f811f55199438121be54c0b23d5557b57..6d5b8baf63106cd7abd31b81728d9e28ff68c8a2 100644 (file)
@@ -41,7 +41,7 @@
 
 namespace AlphaISA {
 
-uint64_t getArgument(ThreadContext *tc, int &number, uint8_t size,  bool fp);
+uint64_t getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp);
 
 inline bool
 inUserMode(ThreadContext *tc)
index 9672c5136a3ecb823c087e2200ccf47550d4b509..7609b39918404da795601a78c48d1582e077b0a8 100644 (file)
@@ -39,6 +39,7 @@
 
 
 #include "arch/arm/faults.hh"
+#include "arch/arm/isa_traits.hh"
 #include "arch/arm/utility.hh"
 #include "cpu/thread_context.hh"
 
@@ -61,8 +62,12 @@ initCPU(ThreadContext *tc, int cpuId)
         reset->invoke(tc);
 }
 
-uint64_t getArgument(ThreadContext *tc, int &number, uint8_t size, bool fp) {
+uint64_t
+getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp)
+{
 #if FULL_SYSTEM
+    if (size == (uint16_t)(-1))
+        size = ArmISA::MachineBytes;
     if (fp)
         panic("getArgument(): Floating point arguments not implemented\n");
 
index 21c0a9c0494fe1bf5026547fb29984b5a61e0eb2..571a74ef8b55b861899ea4979e6f44669b2cafde 100644 (file)
@@ -156,7 +156,7 @@ namespace ArmISA {
         return !cpacr.asedis && vfpEnabled(cpacr, cpsr, fpexc);
     }
 
-uint64_t getArgument(ThreadContext *tc, int &number, uint8_t size, bool fp);
+uint64_t getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp);
     
 Fault setCp15Register(uint32_t &Rd, int CRn, int opc1, int CRm, int opc2);
 Fault readCp15Register(uint32_t &Rd, int CRn, int opc1, int CRm, int opc2);
index 7dd74551ea6a64355f374b082b5ad1b7b318e261..faae1e937e3f31fa77342bfab2c1c7bd7ab5f0c0 100644 (file)
@@ -52,7 +52,7 @@ using namespace std;
 namespace MipsISA {
 
 uint64_t
-getArgument(ThreadContext *tc, int &number, uint8_t size, bool fp)
+getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp)
 {
 #if FULL_SYSTEM
     if (number < 4) {
index d073f311680f4f3e9553fe2620ab0d8065d6329c..bc50027c0df0e9ba20d724005284aad21a2943b9 100644 (file)
@@ -45,7 +45,7 @@ class ThreadContext;
 
 namespace MipsISA {
 
-uint64_t getArgument(ThreadContext *tc, int &number, uint8_t size, bool fp);
+uint64_t getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp);
 
 ////////////////////////////////////////////////////////////////////////
 //
index e14be48e2d7ba5e3d6b3addd6a4bbf868d1ce8bf..be4dfac84ca136a08fef6e6a2b79e03eacc3bef8 100644 (file)
@@ -45,7 +45,9 @@ namespace SparcISA {
 //the sixth are passed on the stack past the 16 word window save area,
 //space for the struct/union return pointer, and space reserved for the
 //first 6 arguments which the caller may use but doesn't have to.
-uint64_t getArgument(ThreadContext *tc, int &number, uint8_t size, bool fp) {
+uint64_t
+getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp)
+{
 #if FULL_SYSTEM
     const int NumArgumentRegs = 6;
     if (number < NumArgumentRegs) {
index 39e23aa26b5120e24b28c40b55495dc2b7bf5cc4..f6a585e2399a97e73619f39137b00b765517a776 100644 (file)
@@ -41,7 +41,8 @@
 
 namespace SparcISA
 {
-    uint64_t getArgument(ThreadContext *tc, int &number, uint8_t size, bool fp);
+    uint64_t
+    getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp);
 
     static inline bool
     inUserMode(ThreadContext *tc)
index d74bb74b6ca4816b4f3b3d251b3cbbdec2f8db05..624e8132f8b346ac210c39c2f7c77f00703ba368 100644 (file)
@@ -52,7 +52,9 @@
 
 namespace X86ISA {
 
-uint64_t getArgument(ThreadContext *tc, int &number, uint8_t size, bool fp) {
+uint64_t
+getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp)
+{
 #if FULL_SYSTEM
     panic("getArgument() not implemented for x86!\n");
 #else
index fd9ac59fde2c303e7338f1fe83c1bad79a08c429..05ce53347a74dd37078ee163ee8d0110aece42f2 100644 (file)
@@ -52,7 +52,8 @@ class ThreadContext;
 
 namespace X86ISA
 {
-    uint64_t getArgument(ThreadContext *tc, int &number, uint8_t size, bool fp);
+    uint64_t
+    getArgument(ThreadContext *tc, int &number, uint16_t size, bool fp);
 
     static inline bool
     inUserMode(ThreadContext *tc)
index 511fc630d36862346a8ab12188d5461d69f3cdb4..6d45e3b3d4b78bc5946e5bdd4a15f043145c6876 100644 (file)
@@ -50,7 +50,7 @@ Arguments::Data::alloc(size_t size)
 }
 
 uint64_t
-Arguments::getArg(uint8_t size, bool fp)
+Arguments::getArg(uint16_t size, bool fp)
 {
     return TheISA::getArgument(tc, number, size, fp);
 }
index 97b848e03046c26db82f9b1cf3f971e37dbbe9a7..ef94cbb2567a2e2de0899568c462987b9b780197 100644 (file)
@@ -45,7 +45,7 @@ class Arguments
   protected:
     ThreadContext *tc;
     int number;
-    uint64_t getArg(uint8_t size, bool fp = false);
+    uint64_t getArg(uint16_t size = (uint16_t)(-1), bool fp = false);
 
   protected:
     class Data : public RefCounted
@@ -82,7 +82,7 @@ class Arguments
 
     // for checking if an argument is NULL
     bool operator!() {
-        return getArg(TheISA::MachineBytes) == 0;
+        return getArg() == 0;
     }
 
     Arguments &operator++() {
@@ -143,7 +143,7 @@ class Arguments
 
     operator char *() {
         char *buf = data->alloc(2048);
-        CopyStringOut(tc, buf, getArg(TheISA::MachineBytes), 2048);
+        CopyStringOut(tc, buf, getArg(), 2048);
         return buf;
     }
 };