diff options
Diffstat (limited to 'src/arch/arm/insts')
-rw-r--r-- | src/arch/arm/insts/pred_inst.cc | 5 | ||||
-rw-r--r-- | src/arch/arm/insts/pred_inst.hh | 46 |
2 files changed, 5 insertions, 46 deletions
diff --git a/src/arch/arm/insts/pred_inst.cc b/src/arch/arm/insts/pred_inst.cc index 94386e400..049c42f01 100644 --- a/src/arch/arm/insts/pred_inst.cc +++ b/src/arch/arm/insts/pred_inst.cc @@ -62,12 +62,9 @@ PredIntOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const } std::string -PredImmOpBase::generateDisassembly(Addr pc, const SymbolTable *symtab) const +PredImmOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const { 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, (IntRegIndex)(uint32_t)machInst.rd, (IntRegIndex)(uint32_t)machInst.rn, diff --git a/src/arch/arm/insts/pred_inst.hh b/src/arch/arm/insts/pred_inst.hh index 39d479d4f..8f92a2f26 100644 --- a/src/arch/arm/insts/pred_inst.hh +++ b/src/arch/arm/insts/pred_inst.hh @@ -98,65 +98,27 @@ class PredOp : public ArmStaticInst /** * Base class for predicated immediate operations. */ -class PredImmOpBase : public PredOp +class PredImmOp : public PredOp { protected: uint32_t imm; uint32_t rotated_imm; 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; /// Constructor 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) { rotated_imm = rotate_imm(imm, rotate); if (rotate != 0) rotated_carry = bits(rotated_imm, 31); } -}; - -/** - * 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); - } + std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; }; /** |