ARM: Get rid of obsoleted predicated inst formats, etc.

This commit is contained in:
Gabe Black 2010-06-02 12:58:02 -05:00
parent 7939b48265
commit 36ca0658a4
3 changed files with 5 additions and 104 deletions

View file

@ -62,12 +62,9 @@ PredIntOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
} }
std::string std::string
PredImmOpBase::generateDisassembly(Addr pc, const SymbolTable *symtab) const PredImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
{ {
std::stringstream ss; std::stringstream ss;
unsigned rotate = machInst.rotate * 2;
uint32_t imm = machInst.imm;
imm = (imm << (32 - rotate)) | (imm >> rotate);
printDataInst(ss, true, machInst.opcode4 == 0, machInst.sField, printDataInst(ss, true, machInst.opcode4 == 0, machInst.sField,
(IntRegIndex)(uint32_t)machInst.rd, (IntRegIndex)(uint32_t)machInst.rd,
(IntRegIndex)(uint32_t)machInst.rn, (IntRegIndex)(uint32_t)machInst.rn,

View file

@ -98,65 +98,27 @@ class PredOp : public ArmStaticInst
/** /**
* Base class for predicated immediate operations. * Base class for predicated immediate operations.
*/ */
class PredImmOpBase : public PredOp class PredImmOp : public PredOp
{ {
protected: protected:
uint32_t imm; uint32_t imm;
uint32_t rotated_imm; uint32_t rotated_imm;
uint32_t rotated_carry; uint32_t rotated_carry;
/// Constructor
PredImmOpBase(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
PredOp(mnem, _machInst, __opClass),
imm(machInst.imm), rotated_imm(0), rotated_carry(0)
{
}
std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
};
/**
* Base class for regular predicated immediate operations.
*/
class PredImmOp : public PredImmOpBase
{
protected:
uint32_t rotate; uint32_t rotate;
/// Constructor /// Constructor
PredImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass) : PredImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
PredImmOpBase(mnem, _machInst, __opClass), PredOp(mnem, _machInst, __opClass),
imm(machInst.imm), rotated_imm(0), rotated_carry(0),
rotate(machInst.rotate << 1) rotate(machInst.rotate << 1)
{ {
rotated_imm = rotate_imm(imm, rotate); rotated_imm = rotate_imm(imm, rotate);
if (rotate != 0) if (rotate != 0)
rotated_carry = bits(rotated_imm, 31); rotated_carry = bits(rotated_imm, 31);
} }
};
/** std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
* Base class for modified predicated immediate operations.
*/
class PredModImmOp : public PredImmOpBase
{
protected:
uint8_t ctrlImm;
uint8_t dataImm;
/// Constructor
PredModImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass) :
PredImmOpBase(mnem, _machInst, __opClass),
ctrlImm(bits(machInst.instBits, 26) << 3 |
bits(machInst.instBits, 14, 12)),
dataImm(bits(machInst.instBits, 7, 0))
{
rotated_imm = modified_imm(ctrlImm, dataImm);
rotated_carry = bits(rotated_imm, 31);
}
}; };
/** /**

View file

@ -186,23 +186,6 @@ def format DataImmOp(code, flagtype = logic) {{
decode_block = DataImmDecode.subst(iop) decode_block = DataImmDecode.subst(iop)
}}; }};
def format DataModImmOp(code, flagtype = modImm) {{
code += "resTemp = resTemp;"
iop = InstObjParams(name, Name + "ModImm", 'PredModImmOp',
{"code": code,
"predicate_test": predicateTest})
ccIop = InstObjParams(name, Name + "ModImmCc", 'PredModImmOp',
{"code": code + getImmCcCode(flagtype),
"predicate_test": predicateTest})
header_output = BasicDeclare.subst(iop) + \
BasicDeclare.subst(ccIop)
decoder_output = BasicConstructor.subst(iop) + \
BasicConstructor.subst(ccIop)
exec_output = PredOpExecute.subst(iop) + \
PredOpExecute.subst(ccIop)
decode_block = DataImmDecode.subst(iop)
}};
def format PredOp(code, *opt_flags) {{ def format PredOp(code, *opt_flags) {{
iop = InstObjParams(name, Name, 'PredOp', iop = InstObjParams(name, Name, 'PredOp',
{"code": code, {"code": code,
@ -225,44 +208,3 @@ def format PredImmOp(code, *opt_flags) {{
exec_output = PredOpExecute.subst(iop) exec_output = PredOpExecute.subst(iop)
}}; }};
def format PredImmOpCc(code, icValue, ivValue, *opt_flags) {{
ccCode = calcCcCode % vars()
code += ccCode;
iop = InstObjParams(name, Name, 'PredImmOp',
{"code": code,
"cc_code": ccCode,
"predicate_test": predicateTest},
opt_flags)
header_output = BasicDeclare.subst(iop)
decoder_output = BasicConstructor.subst(iop)
decode_block = BasicDecode.subst(iop)
exec_output = PredOpExecute.subst(iop)
}};
def format PredIntOp(code, *opt_flags) {{
new_code = ArmGenericCodeSubs(code)
iop = InstObjParams(name, Name, 'PredIntOp',
{"code": new_code,
"predicate_test": predicateTest},
opt_flags)
header_output = BasicDeclare.subst(iop)
decoder_output = BasicConstructor.subst(iop)
decode_block = BasicDecode.subst(iop)
exec_output = PredOpExecute.subst(iop)
}};
def format PredIntOpCc(code, icValue, ivValue, *opt_flags) {{
ccCode = calcCcCode % vars()
code += ccCode;
new_code = ArmGenericCodeSubs(code)
iop = InstObjParams(name, Name, 'PredIntOp',
{"code": new_code,
"cc_code": ccCode,
"predicate_test": predicateTest},
opt_flags)
header_output = BasicDeclare.subst(iop)
decoder_output = BasicConstructor.subst(iop)
decode_block = BasicDecode.subst(iop)
exec_output = PredOpExecute.subst(iop)
}};