ARM: Get rid of obsoleted predicated inst formats, etc.
This commit is contained in:
parent
7939b48265
commit
36ca0658a4
3 changed files with 5 additions and 104 deletions
|
@ -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,
|
||||||
|
|
|
@ -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);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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)
|
|
||||||
}};
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue