Replaced getArg with a SPARC implementation.

--HG--
extra : convert_revision : ba31171a81b6c46de2997de2701d35fcf8c614b7
This commit is contained in:
Gabe Black
2006-11-08 00:32:04 -05:00
parent 1a5d5d0b56
commit 746ceb93fd
2 changed files with 11 additions and 9 deletions

View File

@@ -54,16 +54,18 @@ Arguments::Data::alloc(size_t size)
uint64_t
Arguments::getArg(bool fp)
{
//XXX This needs to be replaced with the sparc version
//The caller uses %o0-%05 for the first 6 arguments even if their floating
//point. Double precision floating point values take two registers/args.
//Quads, structs, and unions are passed as pointers. All arguments beyond
//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.
if (number < 6) {
if (fp)
return tc->readFloatRegBits(16 + number);
else
return tc->readIntReg(16 + number);
return tc->readIntReg(8 + number);
} else {
Addr sp = tc->readIntReg(30);
Addr sp = tc->readIntReg(14);
VirtualPort *vp = tc->getVirtPort(tc);
uint64_t arg = vp->read<uint64_t>(sp + (number-6) * sizeof(uint64_t));
uint64_t arg = vp->read<uint64_t>(sp + 92 + (number-6) * sizeof(uint64_t));
tc->delVirtPort(vp);
return arg;
}

View File

@@ -144,6 +144,6 @@ class Arguments
}
};
}; // namespace AlphaISA
}; // namespace SparcISA
#endif // __ARCH_ALPHA_ARGUMENTS_HH__
#endif // __ARCH_SPARC_ARGUMENTS_HH__