From 46505821ec00cead429af990358d2a4dd28e87b6 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 8 Nov 2007 18:51:50 -0800 Subject: ISA parser: Make the isa parser generate MaxInstSrcRegs and MaxInstDestRegs. --HG-- extra : convert_revision : 8c35891945c6b4ebc320f0c88a7a0449f3c4b4d5 --- src/arch/sparc/isa_traits.hh | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'src/arch/sparc') diff --git a/src/arch/sparc/isa_traits.hh b/src/arch/sparc/isa_traits.hh index 4f3d20606..133817eb5 100644 --- a/src/arch/sparc/isa_traits.hh +++ b/src/arch/sparc/isa_traits.hh @@ -33,6 +33,7 @@ #define __ARCH_SPARC_ISA_TRAITS_HH__ #include "arch/sparc/types.hh" +#include "arch/sparc/max_inst_regs.hh" #include "arch/sparc/sparc_traits.hh" #include "config/full_system.hh" #include "sim/host.hh" @@ -49,6 +50,8 @@ namespace SparcISA //This makes sure the big endian versions of certain functions are used. using namespace BigEndianGuest; + using SparcISAInst::MaxInstSrcRegs; + using SparcISAInst::MaxInstDestRegs; // SPARC has a delay slot #define ISA_HAS_DELAY_SLOT 1 @@ -76,10 +79,6 @@ namespace SparcISA // Some OS syscall use a second register (o1) to return a second value const int SyscallPseudoReturnReg = ArgumentReg[1]; - //XXX These numbers are bogus - const int MaxInstSrcRegs = 8; - const int MaxInstDestRegs = 9; - //8K. This value is implmentation specific; and should probably //be somewhere else. const int LogVMPageSize = 13; -- cgit v1.2.3 From ada071db53208bf02afee79390d1169130ce99ed Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Sun, 11 Nov 2007 17:23:22 -0800 Subject: SPARC: Force %g1 to be zero on process startup even though it normally already should be. --HG-- extra : convert_revision : 9feb63109e8c955b49c7e96acad1ad7c29a4349f --- src/arch/sparc/process.cc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/arch/sparc') diff --git a/src/arch/sparc/process.cc b/src/arch/sparc/process.cc index 1f5d0b077..0c40fe58d 100644 --- a/src/arch/sparc/process.cc +++ b/src/arch/sparc/process.cc @@ -429,6 +429,10 @@ Sparc64LiveProcess::argsInit(int intSize, int pageSize) threadContexts[0]->setIntReg(ArgumentReg[1], argv_array_base); threadContexts[0]->setIntReg(StackPointerReg, stack_min - StackBias); + // %g1 is a pointer to a function that should be run at exit. Since we + // don't have anything like that, it should be set to 0. + threadContexts[0]->setIntReg(1, 0); + Addr prog_entry = objFile->entryPoint(); threadContexts[0]->setPC(prog_entry); threadContexts[0]->setNextPC(prog_entry + sizeof(MachInst)); @@ -658,6 +662,10 @@ Sparc32LiveProcess::argsInit(int intSize, int pageSize) //threadContexts[0]->setIntReg(ArgumentReg[1], argv_array_base); threadContexts[0]->setIntReg(StackPointerReg, stack_min); + // %g1 is a pointer to a function that should be run at exit. Since we + // don't have anything like that, it should be set to 0. + threadContexts[0]->setIntReg(1, 0); + uint32_t prog_entry = objFile->entryPoint(); threadContexts[0]->setPC(prog_entry); threadContexts[0]->setNextPC(prog_entry + sizeof(MachInst)); -- cgit v1.2.3