Actually we do need a separate class for Integer Ops with Immediates!!!
authorKorey Sewell <ksewell@umich.edu>
Wed, 8 Feb 2006 00:28:19 +0000 (19:28 -0500)
committerKorey Sewell <ksewell@umich.edu>
Wed, 8 Feb 2006 00:28:19 +0000 (19:28 -0500)
The extra class is needed because of the necessisty of an immediate member variable.

Also, added some 'very modest' python code to choose between the IntOp and
the IntImmOp based on the instruction name ...

--HG--
extra : convert_revision : f109c12418202a99b40e270360134e8335739836

arch/mips/isa/formats/int.format

index edfdddb18d4cfb36ce31d32550cfee3cb67f6f2a..5b8df54e9dec42299982550c15c2311d3c821bcd 100644 (file)
@@ -12,7 +12,22 @@ output header {{
                 protected:
 
                 /// Constructor
-                IntegerOp(const char *mnem, MachInst _machInst, OpClass __opClass) : MipsStaticInst(mnem, _machInst, __opClass)
+                IntegerOp(const char *mnem, MachInst _machInst, OpClass __opClass) :
+                                MipsStaticInst(mnem, _machInst, __opClass)
+                {
+                }
+
+                std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const;
+        };
+
+        class IntImmOp : public MipsStaticInst
+        {
+                protected:
+                uint16_t imm;
+
+                /// Constructor
+                IntegerOp(const char *mnem, MachInst _machInst, OpClass __opClass) :
+                                MipsStaticInst(mnem, _machInst, __opClass),imm(INTIMM)
                 {
                 }
 
@@ -33,39 +48,23 @@ output decoder {{
         }
 }};
 
-def template IntExecute {{
-        Fault %(class_name)s::execute(%(CPU_exec_context)s *xc, Trace::InstRecord *traceData) const
-        {
-                //Attempt to execute the instruction
-                try
-                {
-                        %(op_decl)s;
-                        %(op_rd)s;
-                        %(code)s;
-                }
-                //If we have an exception for some reason,
-                //deal with it
-                catch(MipsException except)
-                {
-                        //Deal with exception
-                        return No_Fault;
-                }
-
-                //Write the resulting state to the execution context
-                %(op_wb)s;
-
-                return No_Fault;
-        }
-}};
-
 // Primary format for integer operate instructions:
 def format IntOp(code, *opt_flags) {{
         orig_code = code
         cblk = CodeBlock(code)
-        iop = InstObjParams(name, Name, 'MipsStaticInst', cblk, opt_flags)
+
+        //Figure out if we are creating a IntImmOp or a IntOp
+        strlen = len(name)
+        if ( name[strlen-1] = 'i' or ( name[strlen-2:] = 'iu'))
+                iop = InstObjParams(name, Name, 'IntOp', cblk, opt_flags)
+        else:
+                iop = InstObjParams(name, Name, 'IntImmOp', cblk, opt_flags)
+
         header_output = BasicDeclare.subst(iop)
         decoder_output = BasicConstructor.subst(iop)
-        decode_block = BasicDecodeWithMnemonic.subst(iop)
-        exec_output = IntegerExecute.subst(iop)
+        decode_block = OperateNopCheckDecode.subst(iop)
+        exec_output = BasicExecute.subst(iop)
 }};
 
+
+