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