7,8d6
<
< //Outputs to decoder.hh
27a26,53
>
> class HiLoOp: public IntOp
> {
> protected:
>
> /// Constructor
> HiLoOp(const char *mnem, MachInst _machInst, OpClass __opClass) :
> IntOp(mnem, _machInst, __opClass)
> {
> }
>
> std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
> };
>
> class HiLoMiscOp: public HiLoOp
> {
> protected:
>
> /// Constructor
> HiLoMiscOp(const char *mnem, MachInst _machInst, OpClass __opClass) :
> HiLoOp(mnem, _machInst, __opClass)
> {
> }
>
> std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
> };
>
>
54a81,107
> // HiLo<Misc> instruction class execute method template.
> // Mainly to get instruction trace data to print out
> // correctly
> def template HiLoExecute {{
> Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
> {
> Fault fault = NoFault;
>
> %(fp_enable_check)s;
> %(op_decl)s;
> %(op_rd)s;
> %(code)s;
>
> if(fault == NoFault)
> {
> %(op_wb)s;
> //If there are 2 Destination Registers then
> //concatenate the values for the traceData
> if(traceData && _numDestRegs == 2) {
> uint64_t hilo_final_val = (uint64_t)HI << 32 | LO;
> traceData->setData(hilo_final_val);
> }
> }
> return fault;
> }
> }};
>
67c120
< ss << ",";
---
> ss << ", ";
78c131
< ss << ",";
---
> ss << ", ";
84a138,171
> std::string HiLoOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
> {
> std::stringstream ss;
>
> ccprintf(ss, "%-10s ", mnemonic);
>
> //Destination Registers are implicit for HI/LO ops
> if (_numSrcRegs > 0) {
> printReg(ss, _srcRegIdx[0]);
> }
>
> if (_numSrcRegs > 1) {
> ss << ", ";
> printReg(ss, _srcRegIdx[1]);
> }
>
> return ss.str();
> }
>
> std::string HiLoMiscOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const
> {
> std::stringstream ss;
>
> ccprintf(ss, "%-10s ", mnemonic);
>
> if (_numDestRegs > 0 && _destRegIdx[0] < 32) {
> printReg(ss, _destRegIdx[0]);
> } else if (_numSrcRegs > 0 && _srcRegIdx[0] < 32) {
> printReg(ss, _srcRegIdx[0]);
> }
>
> return ss.str();
> }
>
95c182
< ss << ",";
---
> ss << ", ";
99c186
< ss << ",";
---
> ss << ", ";
103c190
< ccprintf(ss, "%08p ", sextImm);
---
> ccprintf(ss, "0x%x ", sextImm);
112d198
< //Used by decoder.isa
114,115c200,205
< orig_code = code
< cblk = CodeBlock(code)
---
> iop = InstObjParams(name, Name, 'IntOp', CodeBlock(code), opt_flags)
> header_output = BasicDeclare.subst(iop)
> decoder_output = BasicConstructor.subst(iop)
> decode_block = OperateNopCheckDecode.subst(iop)
> exec_output = BasicExecute.subst(iop)
> }};
117,122c207,213
< # Figure out if we are creating a IntImmOp or a IntOp
< # by looking at the instruction name
< iop = InstObjParams(name, Name, 'IntOp', cblk, opt_flags)
< strlen = len(name)
< if name[strlen-1] == 'i' or name[strlen-2:] == 'iu':
< iop = InstObjParams(name, Name, 'IntImmOp', cblk, opt_flags)
---
> def format IntImmOp(code, *opt_flags) {{
> iop = InstObjParams(name, Name, 'IntImmOp', CodeBlock(code), opt_flags)
> header_output = BasicDeclare.subst(iop)
> decoder_output = BasicConstructor.subst(iop)
> decode_block = OperateNopCheckDecode.subst(iop)
> exec_output = BasicExecute.subst(iop)
> }};
124,127c215,228
< header_output = BasicDeclare.subst(iop)
< decoder_output = BasicConstructor.subst(iop)
< decode_block = OperateNopCheckDecode.subst(iop)
< exec_output = BasicExecute.subst(iop)
---
> def format HiLoOp(code, *opt_flags) {{
> if '.sd' in code:
> code = 'int64_t ' + code
> elif '.ud' in code:
> code = 'uint64_t ' + code
>
> code += 'HI = val<63:32>;\n'
> code += 'LO = val<31:0>;\n'
>
> iop = InstObjParams(name, Name, 'HiLoOp', CodeBlock(code), opt_flags)
> header_output = BasicDeclare.subst(iop)
> decoder_output = BasicConstructor.subst(iop)
> decode_block = OperateNopCheckDecode.subst(iop)
> exec_output = HiLoExecute.subst(iop)
129a231,237
> def format HiLoMiscOp(code, *opt_flags) {{
> iop = InstObjParams(name, Name, 'HiLoMiscOp', CodeBlock(code), opt_flags)
> header_output = BasicDeclare.subst(iop)
> decoder_output = BasicConstructor.subst(iop)
> decode_block = OperateNopCheckDecode.subst(iop)
> exec_output = HiLoExecute.subst(iop)
> }};
131a240,242
>
>
>