fp.isa revision 2632:1bb2f91485ea
112340Szulian@eit.uni-kl.de// -*- mode:c++ -*- 212340Szulian@eit.uni-kl.de 312340Szulian@eit.uni-kl.de//////////////////////////////////////////////////////////////////// 412340Szulian@eit.uni-kl.de// 512340Szulian@eit.uni-kl.de// Floating Point operate instructions 612340Szulian@eit.uni-kl.de// 712340Szulian@eit.uni-kl.de 812340Szulian@eit.uni-kl.deoutput header {{ 912340Szulian@eit.uni-kl.de /** 1012340Szulian@eit.uni-kl.de * Base class for FP operations. 1112340Szulian@eit.uni-kl.de */ 1212340Szulian@eit.uni-kl.de class FPOp : public MipsStaticInst 1312340Szulian@eit.uni-kl.de { 1412340Szulian@eit.uni-kl.de protected: 1512340Szulian@eit.uni-kl.de 1612340Szulian@eit.uni-kl.de /// Constructor 1712340Szulian@eit.uni-kl.de FPOp(const char *mnem, MachInst _machInst, OpClass __opClass) : MipsStaticInst(mnem, _machInst, __opClass) 1812340Szulian@eit.uni-kl.de { 1912340Szulian@eit.uni-kl.de } 2012340Szulian@eit.uni-kl.de 2112340Szulian@eit.uni-kl.de std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; 2212340Szulian@eit.uni-kl.de }; 2312340Szulian@eit.uni-kl.de}}; 2412340Szulian@eit.uni-kl.de 2512340Szulian@eit.uni-kl.deoutput decoder {{ 2612340Szulian@eit.uni-kl.de std::string FPOp::generateDisassembly(Addr pc, const SymbolTable *symtab) const 2712340Szulian@eit.uni-kl.de { 2812340Szulian@eit.uni-kl.de return "Disassembly of integer instruction\n"; 2912340Szulian@eit.uni-kl.de } 3012340Szulian@eit.uni-kl.de}}; 3112340Szulian@eit.uni-kl.de 3212340Szulian@eit.uni-kl.de 3312340Szulian@eit.uni-kl.de// Primary format for float operate instructions: 3412340Szulian@eit.uni-kl.dedef format FloatOp(code, *flags) {{ 3512340Szulian@eit.uni-kl.de iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags) 3612340Szulian@eit.uni-kl.de header_output = BasicDeclare.subst(iop) 3712340Szulian@eit.uni-kl.de decoder_output = BasicConstructor.subst(iop) 3812340Szulian@eit.uni-kl.de decode_block = BasicDecode.subst(iop) 3912340Szulian@eit.uni-kl.de exec_output = BasicExecute.subst(iop) 4012340Szulian@eit.uni-kl.de}}; 4112340Szulian@eit.uni-kl.de 4212340Szulian@eit.uni-kl.dedef format FloatCompareOp(code, *flags) {{ 4312340Szulian@eit.uni-kl.de code = 'bool cond;\n' + code 4412340Szulian@eit.uni-kl.de code += 'FCSR = makeCCVector(FCSR, CC,cond);\n' 4512340Szulian@eit.uni-kl.de iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags) 4612340Szulian@eit.uni-kl.de header_output = BasicDeclare.subst(iop) 4712340Szulian@eit.uni-kl.de decoder_output = BasicConstructor.subst(iop) 4812340Szulian@eit.uni-kl.de decode_block = BasicDecode.subst(iop) 4912340Szulian@eit.uni-kl.de exec_output = BasicExecute.subst(iop) 5012340Szulian@eit.uni-kl.de}}; 5112340Szulian@eit.uni-kl.de 5212340Szulian@eit.uni-kl.dedef format FloatCompareWithXcptOp(code, *flags) {{ 5312340Szulian@eit.uni-kl.de code = 'bool cond;\n' + code 5412340Szulian@eit.uni-kl.de code += 'FCSR = makeCCVector(FCSR, CC,cond);\n' 5512340Szulian@eit.uni-kl.de iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags) 5612340Szulian@eit.uni-kl.de header_output = BasicDeclare.subst(iop) 5712340Szulian@eit.uni-kl.de decoder_output = BasicConstructor.subst(iop) 5812340Szulian@eit.uni-kl.de decode_block = BasicDecode.subst(iop) 5912340Szulian@eit.uni-kl.de exec_output = BasicExecute.subst(iop) 6012340Szulian@eit.uni-kl.de}}; 6112340Szulian@eit.uni-kl.de 6212340Szulian@eit.uni-kl.dedef format FloatConvertOp(code, *flags) {{ 6312340Szulian@eit.uni-kl.de iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags) 6412340Szulian@eit.uni-kl.de header_output = BasicDeclare.subst(iop) 6512340Szulian@eit.uni-kl.de decoder_output = BasicConstructor.subst(iop) 6612340Szulian@eit.uni-kl.de decode_block = BasicDecode.subst(iop) 6712340Szulian@eit.uni-kl.de exec_output = BasicExecute.subst(iop) 6812340Szulian@eit.uni-kl.de}}; 6912340Szulian@eit.uni-kl.de 7012340Szulian@eit.uni-kl.de// Primary format for float64 operate instructions: 7112340Szulian@eit.uni-kl.dedef format Float64Op(code, *flags) {{ 7212340Szulian@eit.uni-kl.de iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags) 7312340Szulian@eit.uni-kl.de header_output = BasicDeclare.subst(iop) 7412340Szulian@eit.uni-kl.de decoder_output = BasicConstructor.subst(iop) 7512340Szulian@eit.uni-kl.de decode_block = BasicDecode.subst(iop) 7612340Szulian@eit.uni-kl.de exec_output = BasicExecute.subst(iop) 7712340Szulian@eit.uni-kl.de}}; 7812340Szulian@eit.uni-kl.de 7912340Szulian@eit.uni-kl.dedef format Float64ConvertOp(code, *flags) {{ 8012340Szulian@eit.uni-kl.de code = 'bool cond;\n' + code 8112340Szulian@eit.uni-kl.de code += 'FCSR = makeCCVector(FCSR, CC,cond);\n' 8212340Szulian@eit.uni-kl.de iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags) 8312340Szulian@eit.uni-kl.de header_output = BasicDeclare.subst(iop) 84 decoder_output = BasicConstructor.subst(iop) 85 decode_block = BasicDecode.subst(iop) 86 exec_output = BasicExecute.subst(iop) 87}}; 88 89def format FloatPSCompareOp(code, *flags) {{ 90 code = 'bool cond1;\nbool cond2;\n' + code 91 code += 'FCSR = makeCCVector(FCSR, CC+1, cond1);\n' 92 code += 'FCSR = makeCCVector(FCSR, CC, cond2);\n' 93 iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags) 94 header_output = BasicDeclare.subst(iop) 95 decoder_output = BasicConstructor.subst(iop) 96 decode_block = BasicDecode.subst(iop) 97 exec_output = BasicExecute.subst(iop) 98}}; 99 100def format FloatPSCompareWithXcptOp(code, *flags) {{ 101 code = 'bool cond1;\nbool cond2;\n' + code 102 code += 'FCSR = makeCCVector(FCSR, CC+1, cond1);\n' 103 code += 'FCSR = makeCCVector(FCSR, CC, cond2);\n' 104 iop = InstObjParams(name, Name, 'MipsStaticInst', CodeBlock(code), flags) 105 header_output = BasicDeclare.subst(iop) 106 decoder_output = BasicConstructor.subst(iop) 107 decode_block = BasicDecode.subst(iop) 108 exec_output = BasicExecute.subst(iop) 109}}; 110