Cleaned things up a little.
--HG-- extra : convert_revision : 7091b0d02e5b7c80be43b5ab1ac003dc89c4c136
This commit is contained in:
parent
44974a4462
commit
b7b603f9a7
|
@ -85,7 +85,12 @@ output header {{
|
||||||
std::string generateDisassembly(Addr pc,
|
std::string generateDisassembly(Addr pc,
|
||||||
const SymbolTable *symtab) const;
|
const SymbolTable *symtab) const;
|
||||||
|
|
||||||
void printReg(std::ostream &os, int reg) const;
|
void printReg(std::ostream &os, RegIndex reg) const;
|
||||||
|
void printSrcReg(std::ostream &os, int reg) const;
|
||||||
|
void printDestReg(std::ostream &os, int reg) const;
|
||||||
|
|
||||||
|
void printRegArray(std::ostream &os,
|
||||||
|
const RegIndex indexArray[], int num) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
bool passesCondition(uint32_t codes, uint32_t condition);
|
bool passesCondition(uint32_t codes, uint32_t condition);
|
||||||
|
@ -150,8 +155,35 @@ output decoder {{
|
||||||
ccprintf(os, "\t%s ", mnemonic);
|
ccprintf(os, "\t%s ", mnemonic);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SparcStaticInst::printRegArray(std::ostream &os,
|
||||||
|
const RegIndex indexArray[], int num) const
|
||||||
|
{
|
||||||
|
if(num <= 0)
|
||||||
|
return;
|
||||||
|
printReg(os, indexArray[0]);
|
||||||
|
for(int x = 1; x < num; x++)
|
||||||
|
{
|
||||||
|
os << ", ";
|
||||||
|
printReg(os, indexArray[x]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SparcStaticInst::printReg(std::ostream &os, int reg) const
|
SparcStaticInst::printSrcReg(std::ostream &os, int reg) const
|
||||||
|
{
|
||||||
|
if(_numSrcRegs > reg)
|
||||||
|
printReg(os, _srcRegIdx[reg]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SparcStaticInst::printDestReg(std::ostream &os, int reg) const
|
||||||
|
{
|
||||||
|
if(_numDestRegs > reg)
|
||||||
|
printReg(os, _destRegIdx[reg]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SparcStaticInst::printReg(std::ostream &os, RegIndex reg) const
|
||||||
{
|
{
|
||||||
const int MaxGlobal = 8;
|
const int MaxGlobal = 8;
|
||||||
const int MaxOutput = 16;
|
const int MaxOutput = 16;
|
||||||
|
|
|
@ -39,30 +39,30 @@ decode OP default Unknown::unknown()
|
||||||
{
|
{
|
||||||
//Throw an illegal instruction acception
|
//Throw an illegal instruction acception
|
||||||
0x0: Trap::illtrap({{fault = new IllegalInstruction;}});
|
0x0: Trap::illtrap({{fault = new IllegalInstruction;}});
|
||||||
|
format BranchN
|
||||||
|
{
|
||||||
0x1: decode BPCC
|
0x1: decode BPCC
|
||||||
{
|
{
|
||||||
format Branch19
|
0x0: bpcci(19, {{
|
||||||
{
|
|
||||||
0x0: bpcci({{
|
|
||||||
if(passesCondition(Ccr<3:0>, COND2))
|
if(passesCondition(Ccr<3:0>, COND2))
|
||||||
NNPC = xc->readPC() + disp;
|
NNPC = xc->readPC() + disp;
|
||||||
else
|
else
|
||||||
handle_annul
|
handle_annul
|
||||||
}});
|
}});
|
||||||
0x2: bpccx({{
|
0x2: bpccx(19, {{
|
||||||
if(passesCondition(Ccr<7:4>, COND2))
|
if(passesCondition(Ccr<7:4>, COND2))
|
||||||
NNPC = xc->readPC() + disp;
|
NNPC = xc->readPC() + disp;
|
||||||
else
|
else
|
||||||
handle_annul
|
handle_annul
|
||||||
}});
|
}});
|
||||||
}
|
}
|
||||||
}
|
0x2: bicc(22, {{
|
||||||
0x2: Branch22::bicc({{
|
|
||||||
if(passesCondition(Ccr<3:0>, COND2))
|
if(passesCondition(Ccr<3:0>, COND2))
|
||||||
NNPC = xc->readPC() + disp;
|
NNPC = xc->readPC() + disp;
|
||||||
else
|
else
|
||||||
handle_annul
|
handle_annul
|
||||||
}});
|
}});
|
||||||
|
}
|
||||||
0x3: decode RCOND2
|
0x3: decode RCOND2
|
||||||
{
|
{
|
||||||
format BranchSplit
|
format BranchSplit
|
||||||
|
@ -110,7 +110,7 @@ decode OP default Unknown::unknown()
|
||||||
0x5: Trap::fbpfcc({{fault = new FpDisabled;}});
|
0x5: Trap::fbpfcc({{fault = new FpDisabled;}});
|
||||||
0x6: Trap::fbfcc({{fault = new FpDisabled;}});
|
0x6: Trap::fbfcc({{fault = new FpDisabled;}});
|
||||||
}
|
}
|
||||||
0x1: Branch30::call({{
|
0x1: BranchN::call(30, {{
|
||||||
R15 = xc->readPC();
|
R15 = xc->readPC();
|
||||||
NNPC = R15 + disp;
|
NNPC = R15 + disp;
|
||||||
}});
|
}});
|
||||||
|
|
|
@ -63,7 +63,6 @@ def template BasicExecute {{
|
||||||
{
|
{
|
||||||
Fault fault = NoFault;
|
Fault fault = NoFault;
|
||||||
|
|
||||||
%(fp_enable_check)s;
|
|
||||||
%(op_decl)s;
|
%(op_decl)s;
|
||||||
%(op_rd)s;
|
%(op_rd)s;
|
||||||
%(code)s;
|
%(code)s;
|
||||||
|
@ -81,11 +80,6 @@ def template BasicDecode {{
|
||||||
return new %(class_name)s(machInst);
|
return new %(class_name)s(machInst);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
// Basic decode template, passing mnemonic in as string arg to constructor.
|
|
||||||
def template BasicDecodeWithMnemonic {{
|
|
||||||
return new %(class_name)s("%(mnemonic)s", machInst);
|
|
||||||
}};
|
|
||||||
|
|
||||||
// The most basic instruction format... used only for a few misc. insts
|
// The most basic instruction format... used only for a few misc. insts
|
||||||
def format BasicOperate(code, *flags) {{
|
def format BasicOperate(code, *flags) {{
|
||||||
iop = InstObjParams(name, Name, 'SparcStaticInst',
|
iop = InstObjParams(name, Name, 'SparcStaticInst',
|
||||||
|
|
|
@ -69,47 +69,18 @@ output header {{
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for branches with 19 bit displacements.
|
* Base class for branches with n bit displacements.
|
||||||
*/
|
*/
|
||||||
class Branch19 : public BranchDisp
|
template<int bits>
|
||||||
|
class BranchNBits : public BranchDisp
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
// Constructor
|
// Constructor
|
||||||
Branch19(const char *mnem, MachInst _machInst,
|
BranchNBits(const char *mnem, MachInst _machInst,
|
||||||
OpClass __opClass) :
|
OpClass __opClass) :
|
||||||
BranchDisp(mnem, _machInst, __opClass)
|
BranchDisp(mnem, _machInst, __opClass)
|
||||||
{
|
{
|
||||||
disp = sign_ext(DISP19 << 2, 21);
|
disp = sign_ext(_machInst << 2, bits + 2);
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base class for branches with 22 bit displacements.
|
|
||||||
*/
|
|
||||||
class Branch22 : public BranchDisp
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
// Constructor
|
|
||||||
Branch22(const char *mnem, MachInst _machInst,
|
|
||||||
OpClass __opClass) :
|
|
||||||
BranchDisp(mnem, _machInst, __opClass)
|
|
||||||
{
|
|
||||||
disp = sign_ext(DISP22 << 2, 24);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base class for branches with 30 bit displacements.
|
|
||||||
*/
|
|
||||||
class Branch30 : public BranchDisp
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
// Constructor
|
|
||||||
Branch30(const char *mnem, MachInst _machInst,
|
|
||||||
OpClass __opClass) :
|
|
||||||
BranchDisp(mnem, _machInst, __opClass)
|
|
||||||
{
|
|
||||||
disp = sign_ext(DISP30 << 2, 32);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -149,29 +120,23 @@ output header {{
|
||||||
}};
|
}};
|
||||||
|
|
||||||
output decoder {{
|
output decoder {{
|
||||||
|
|
||||||
|
template class BranchNBits<19>;
|
||||||
|
|
||||||
|
template class BranchNBits<22>;
|
||||||
|
|
||||||
|
template class BranchNBits<30>;
|
||||||
|
|
||||||
std::string Branch::generateDisassembly(Addr pc,
|
std::string Branch::generateDisassembly(Addr pc,
|
||||||
const SymbolTable *symtab) const
|
const SymbolTable *symtab) const
|
||||||
{
|
{
|
||||||
std::stringstream response;
|
std::stringstream response;
|
||||||
|
|
||||||
printMnemonic(response, mnemonic);
|
printMnemonic(response, mnemonic);
|
||||||
|
printRegArray(response, _srcRegIdx, _numSrcRegs);
|
||||||
if (_numSrcRegs > 0)
|
if(_numDestRegs && _numSrcRegs)
|
||||||
{
|
|
||||||
printReg(response, _srcRegIdx[0]);
|
|
||||||
for(int x = 1; x < _numSrcRegs; x++)
|
|
||||||
{
|
|
||||||
response << ", ";
|
response << ", ";
|
||||||
printReg(response, _srcRegIdx[x]);
|
printDestReg(response, 0);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_numDestRegs > 0)
|
|
||||||
{
|
|
||||||
if(_numSrcRegs > 0)
|
|
||||||
response << ", ";
|
|
||||||
printReg(response, _destRegIdx[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return response.str();
|
return response.str();
|
||||||
}
|
}
|
||||||
|
@ -182,27 +147,13 @@ output decoder {{
|
||||||
std::stringstream response;
|
std::stringstream response;
|
||||||
|
|
||||||
printMnemonic(response, mnemonic);
|
printMnemonic(response, mnemonic);
|
||||||
|
printRegArray(response, _srcRegIdx, _numSrcRegs);
|
||||||
if (_numSrcRegs > 0)
|
|
||||||
{
|
|
||||||
printReg(response, _srcRegIdx[0]);
|
|
||||||
for(int x = 1; x < _numSrcRegs; x++)
|
|
||||||
{
|
|
||||||
response << ", ";
|
|
||||||
printReg(response, _srcRegIdx[x]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_numSrcRegs > 0)
|
if(_numSrcRegs > 0)
|
||||||
response << ", ";
|
response << ", ";
|
||||||
|
|
||||||
ccprintf(response, "0x%x", imm);
|
ccprintf(response, "0x%x", imm);
|
||||||
|
|
||||||
if (_numDestRegs > 0)
|
if (_numDestRegs > 0)
|
||||||
{
|
|
||||||
response << ", ";
|
response << ", ";
|
||||||
printReg(response, _destRegIdx[0]);
|
printDestReg(response, 0);
|
||||||
}
|
|
||||||
|
|
||||||
return response.str();
|
return response.str();
|
||||||
}
|
}
|
||||||
|
@ -292,32 +243,10 @@ def format Branch(code, *opt_flags) {{
|
||||||
}};
|
}};
|
||||||
|
|
||||||
// Primary format for branch instructions:
|
// Primary format for branch instructions:
|
||||||
def format Branch19(code, *opt_flags) {{
|
def format BranchN(bits, code, *opt_flags) {{
|
||||||
code = re.sub(r'handle_annul', handle_annul, code)
|
code = re.sub(r'handle_annul', handle_annul, code)
|
||||||
codeBlk = CodeBlock(code)
|
codeBlk = CodeBlock(code)
|
||||||
iop = InstObjParams(name, Name, 'Branch19', codeBlk, opt_flags)
|
iop = InstObjParams(name, Name, "BranchNBits<%d>" % bits, codeBlk, opt_flags)
|
||||||
header_output = BasicDeclare.subst(iop)
|
|
||||||
decoder_output = BasicConstructor.subst(iop)
|
|
||||||
exec_output = BranchExecute.subst(iop)
|
|
||||||
decode_block = BasicDecode.subst(iop)
|
|
||||||
}};
|
|
||||||
|
|
||||||
// Primary format for branch instructions:
|
|
||||||
def format Branch22(code, *opt_flags) {{
|
|
||||||
code = re.sub(r'handle_annul', handle_annul, code)
|
|
||||||
codeBlk = CodeBlock(code)
|
|
||||||
iop = InstObjParams(name, Name, 'Branch22', codeBlk, opt_flags)
|
|
||||||
header_output = BasicDeclare.subst(iop)
|
|
||||||
decoder_output = BasicConstructor.subst(iop)
|
|
||||||
exec_output = BranchExecute.subst(iop)
|
|
||||||
decode_block = BasicDecode.subst(iop)
|
|
||||||
}};
|
|
||||||
|
|
||||||
// Primary format for branch instructions:
|
|
||||||
def format Branch30(code, *opt_flags) {{
|
|
||||||
code = re.sub(r'handle_annul', handle_annul, code)
|
|
||||||
codeBlk = CodeBlock(code)
|
|
||||||
iop = InstObjParams(name, Name, 'Branch30', codeBlk, opt_flags)
|
|
||||||
header_output = BasicDeclare.subst(iop)
|
header_output = BasicDeclare.subst(iop)
|
||||||
decoder_output = BasicConstructor.subst(iop)
|
decoder_output = BasicConstructor.subst(iop)
|
||||||
exec_output = BranchExecute.subst(iop)
|
exec_output = BranchExecute.subst(iop)
|
||||||
|
|
|
@ -132,7 +132,7 @@ output header {{
|
||||||
OpClass __opClass) :
|
OpClass __opClass) :
|
||||||
IntOpImm(mnem, _machInst, __opClass)
|
IntOpImm(mnem, _machInst, __opClass)
|
||||||
{
|
{
|
||||||
imm = (IMM22 << 10) & 0xFFFFFC00;
|
imm = (IMM22 & 0x3FFFFF) << 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string generateDisassembly(Addr pc,
|
std::string generateDisassembly(Addr pc,
|
||||||
|
@ -157,12 +157,9 @@ output decoder {{
|
||||||
if(!strcmp(mnemonic, "or") && _srcRegIdx[0] == 0)
|
if(!strcmp(mnemonic, "or") && _srcRegIdx[0] == 0)
|
||||||
{
|
{
|
||||||
printMnemonic(os, "mov");
|
printMnemonic(os, "mov");
|
||||||
if(_numSrcRegs > 0)
|
printSrcReg(os, 1);
|
||||||
printReg(os, _srcRegIdx[1]);
|
|
||||||
ccprintf(os, ", ");
|
ccprintf(os, ", ");
|
||||||
if(_numDestRegs > 0)
|
printDestReg(os, 0);
|
||||||
printReg(os, _destRegIdx[0]);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -173,32 +170,24 @@ output decoder {{
|
||||||
{
|
{
|
||||||
if(!strcmp(mnemonic, "or"))
|
if(!strcmp(mnemonic, "or"))
|
||||||
{
|
{
|
||||||
if(_srcRegIdx[0] == 0)
|
if(_numSrcRegs > 0 && _srcRegIdx[0] == 0)
|
||||||
{
|
{
|
||||||
if(imm == 0)
|
if(imm == 0)
|
||||||
{
|
|
||||||
printMnemonic(os, "clr");
|
printMnemonic(os, "clr");
|
||||||
if(_numDestRegs > 0)
|
|
||||||
printReg(os, _destRegIdx[0]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
printMnemonic(os, "mov");
|
printMnemonic(os, "mov");
|
||||||
ccprintf(os, ", 0x%x, ", imm);
|
ccprintf(os, " 0x%x, ", imm);
|
||||||
if(_numDestRegs > 0)
|
|
||||||
printReg(os, _destRegIdx[0]);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
printDestReg(os, 0);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
else if(imm == 0)
|
else if(imm == 0)
|
||||||
{
|
{
|
||||||
printMnemonic(os, "mov");
|
printMnemonic(os, "mov");
|
||||||
if(_numSrcRegs > 0)
|
printSrcReg(os, 0);
|
||||||
printReg(os, _srcRegIdx[0]);
|
|
||||||
ccprintf(os, ", ");
|
ccprintf(os, ", ");
|
||||||
if(_numDestRegs > 0)
|
printDestReg(os, 0);
|
||||||
printReg(os, _destRegIdx[0]);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -210,25 +199,13 @@ output decoder {{
|
||||||
{
|
{
|
||||||
std::stringstream response;
|
std::stringstream response;
|
||||||
|
|
||||||
if(!printPseudoOps(response, pc, symtab))
|
if(printPseudoOps(response, pc, symtab))
|
||||||
{
|
return response.str();
|
||||||
printMnemonic(response, mnemonic);
|
printMnemonic(response, mnemonic);
|
||||||
if (_numSrcRegs > 0)
|
printRegArray(response, _srcRegIdx, _numSrcRegs);
|
||||||
{
|
if(_numDestRegs && _numSrcRegs)
|
||||||
printReg(response, _srcRegIdx[0]);
|
|
||||||
for(int x = 1; x < _numSrcRegs; x++)
|
|
||||||
{
|
|
||||||
response << ", ";
|
response << ", ";
|
||||||
printReg(response, _srcRegIdx[x]);
|
printDestReg(response, 0);
|
||||||
}
|
|
||||||
}
|
|
||||||
if (_numDestRegs > 0)
|
|
||||||
{
|
|
||||||
if(_numSrcRegs > 0)
|
|
||||||
response << ", ";
|
|
||||||
printReg(response, _destRegIdx[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return response.str();
|
return response.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -237,27 +214,16 @@ output decoder {{
|
||||||
{
|
{
|
||||||
std::stringstream response;
|
std::stringstream response;
|
||||||
|
|
||||||
if(!printPseudoOps(response, pc, symtab))
|
if(printPseudoOps(response, pc, symtab))
|
||||||
{
|
return response.str();
|
||||||
printMnemonic(response, mnemonic);
|
printMnemonic(response, mnemonic);
|
||||||
if (_numSrcRegs > 0)
|
printRegArray(response, _srcRegIdx, _numSrcRegs);
|
||||||
{
|
|
||||||
printReg(response, _srcRegIdx[0]);
|
|
||||||
for(int x = 1; x < _numSrcRegs - 1; x++)
|
|
||||||
{
|
|
||||||
response << ", ";
|
|
||||||
printReg(response, _srcRegIdx[x]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(_numSrcRegs > 0)
|
if(_numSrcRegs > 0)
|
||||||
response << ", ";
|
response << ", ";
|
||||||
ccprintf(response, "0x%x", imm);
|
ccprintf(response, "0x%x", imm);
|
||||||
if(_numDestRegs > 0)
|
if(_numDestRegs > 0)
|
||||||
{
|
|
||||||
response << ", ";
|
response << ", ";
|
||||||
printReg(response, _destRegIdx[0]);
|
printDestReg(response, 0);
|
||||||
}
|
|
||||||
}
|
|
||||||
return response.str();
|
return response.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,10 +233,8 @@ output decoder {{
|
||||||
std::stringstream response;
|
std::stringstream response;
|
||||||
|
|
||||||
printMnemonic(response, mnemonic);
|
printMnemonic(response, mnemonic);
|
||||||
if(_numSrcRegs > 0)
|
|
||||||
response << ", ";
|
|
||||||
ccprintf(response, "%%hi(0x%x), ", imm);
|
ccprintf(response, "%%hi(0x%x), ", imm);
|
||||||
printReg(response, _destRegIdx[0]);
|
printDestReg(response, 0);
|
||||||
return response.str();
|
return response.str();
|
||||||
}
|
}
|
||||||
}};
|
}};
|
||||||
|
@ -316,38 +280,29 @@ let {{
|
||||||
return (header_output, decoder_output, exec_output, decode_block)
|
return (header_output, decoder_output, exec_output, decode_block)
|
||||||
|
|
||||||
calcCcCode = '''
|
calcCcCode = '''
|
||||||
uint8_t tmp_ccriccc;
|
uint16_t _ic, _iv, _iz, _in, _xc, _xv, _xz, _xn;
|
||||||
uint8_t tmp_ccriccv;
|
|
||||||
uint8_t tmp_ccriccz;
|
|
||||||
uint8_t tmp_ccriccn;
|
|
||||||
uint8_t tmp_ccrxccc;
|
|
||||||
uint8_t tmp_ccrxccv;
|
|
||||||
uint8_t tmp_ccrxccz;
|
|
||||||
uint8_t tmp_ccrxccn;
|
|
||||||
|
|
||||||
tmp_ccriccn = (Rd >> 31) & 1;
|
_in = (Rd >> 31) & 1;
|
||||||
tmp_ccriccz = ((Rd & 0xFFFFFFFF) == 0);
|
_iz = ((Rd & 0xFFFFFFFF) == 0);
|
||||||
tmp_ccrxccn = (Rd >> 63) & 1;
|
_xn = (Rd >> 63) & 1;
|
||||||
tmp_ccrxccz = (Rd == 0);
|
_xz = (Rd == 0);
|
||||||
tmp_ccriccv = %(ivValue)s & 1;
|
_iv = %(ivValue)s & 1;
|
||||||
tmp_ccriccc = %(icValue)s & 1;
|
_ic = %(icValue)s & 1;
|
||||||
tmp_ccrxccv = %(xvValue)s & 1;
|
_xv = %(xvValue)s & 1;
|
||||||
tmp_ccrxccc = %(xcValue)s & 1;
|
_xc = %(xcValue)s & 1;
|
||||||
|
|
||||||
Ccr = tmp_ccriccc | tmp_ccriccv << 1 |
|
Ccr = _ic << 0 | _iv << 1 | _iz << 2 | _in << 3 |
|
||||||
tmp_ccriccz << 2 | tmp_ccriccn << 3|
|
_xc << 4 | _xv << 5 | _xz << 6 | _xn << 7;
|
||||||
tmp_ccrxccc << 4 | tmp_ccrxccv << 5|
|
|
||||||
tmp_ccrxccz << 6| tmp_ccrxccn << 7;
|
|
||||||
|
|
||||||
|
|
||||||
DPRINTF(Sparc, "in = %%d\\n", (uint16_t)tmp_ccriccn);
|
DPRINTF(Sparc, "in = %%d\\n", _in);
|
||||||
DPRINTF(Sparc, "iz = %%d\\n", (uint16_t)tmp_ccriccz);
|
DPRINTF(Sparc, "iz = %%d\\n", _iz);
|
||||||
DPRINTF(Sparc, "xn = %%d\\n", (uint16_t)tmp_ccrxccn);
|
DPRINTF(Sparc, "xn = %%d\\n", _xn);
|
||||||
DPRINTF(Sparc, "xz = %%d\\n", (uint16_t)tmp_ccrxccz);
|
DPRINTF(Sparc, "xz = %%d\\n", _xz);
|
||||||
DPRINTF(Sparc, "iv = %%d\\n", (uint16_t)tmp_ccriccv);
|
DPRINTF(Sparc, "iv = %%d\\n", _iv);
|
||||||
DPRINTF(Sparc, "ic = %%d\\n", (uint16_t)tmp_ccriccc);
|
DPRINTF(Sparc, "ic = %%d\\n", _ic);
|
||||||
DPRINTF(Sparc, "xv = %%d\\n", (uint16_t)tmp_ccrxccv);
|
DPRINTF(Sparc, "xv = %%d\\n", _xv);
|
||||||
DPRINTF(Sparc, "xc = %%d\\n", (uint16_t)tmp_ccrxccc);
|
DPRINTF(Sparc, "xc = %%d\\n", _xc);
|
||||||
'''
|
'''
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,11 @@ output decoder {{
|
||||||
std::string Priv::generateDisassembly(Addr pc,
|
std::string Priv::generateDisassembly(Addr pc,
|
||||||
const SymbolTable *symtab) const
|
const SymbolTable *symtab) const
|
||||||
{
|
{
|
||||||
return "Privileged Instruction";
|
std::stringstream response;
|
||||||
|
|
||||||
|
printMnemonic(response, mnemonic);
|
||||||
|
|
||||||
|
return response.str();
|
||||||
}
|
}
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
output header {{
|
output header {{
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <iomanip>
|
|
||||||
|
|
||||||
#include "cpu/static_inst.hh"
|
#include "cpu/static_inst.hh"
|
||||||
#include "arch/sparc/faults.hh"
|
#include "arch/sparc/faults.hh"
|
||||||
|
@ -50,7 +49,6 @@ output decoder {{
|
||||||
#include "base/loader/symtab.hh"
|
#include "base/loader/symtab.hh"
|
||||||
#include "cpu/thread_context.hh" // for Jump::branchTarget()
|
#include "cpu/thread_context.hh" // for Jump::branchTarget()
|
||||||
|
|
||||||
#include <math.h>
|
|
||||||
#if defined(linux)
|
#if defined(linux)
|
||||||
#include <fenv.h>
|
#include <fenv.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -59,14 +57,10 @@ using namespace SparcISA;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
output exec {{
|
output exec {{
|
||||||
#include <math.h>
|
|
||||||
#if defined(linux)
|
#if defined(linux)
|
||||||
#include <fenv.h>
|
#include <fenv.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FULL_SYSTEM
|
|
||||||
//#include "sim/pseudo_inst.hh"
|
|
||||||
#endif
|
|
||||||
#include "cpu/base.hh"
|
#include "cpu/base.hh"
|
||||||
#include "cpu/exetrace.hh"
|
#include "cpu/exetrace.hh"
|
||||||
#include "sim/sim_exit.hh"
|
#include "sim/sim_exit.hh"
|
||||||
|
|
Loading…
Reference in a new issue