ISAs: Get rid of the IControl operand type.
authorGabe Black <gblack@eecs.umich.edu>
Fri, 10 Jul 2009 08:21:04 +0000 (01:21 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Fri, 10 Jul 2009 08:21:04 +0000 (01:21 -0700)
A separate operand type is not necessary to use two bitfields to generate the
index.

src/arch/isa_parser.py
src/arch/mips/isa/operands.isa

index 4c4a26bcfefa2027d3eb232796fae4639c063ea6..6f002c05ba196c950945d77d42d560eb4fee85b6 100755 (executable)
@@ -1267,9 +1267,6 @@ class Operand(object):
     def isControlReg(self):
         return 0
 
-    def isIControlReg(self):
-        return 0
-
     def getFlags(self):
         # note the empty slice '[:]' gives us a copy of self.flags[0]
         # instead of a reference to it
@@ -1434,47 +1431,6 @@ class ControlRegOperand(Operand):
               self.base_name
         return wb
 
-class IControlRegOperand(Operand):
-    def isReg(self):
-        return 1
-
-    def isIControlReg(self):
-        return 1
-
-    def makeConstructor(self):
-        c = ''
-        if self.is_src:
-            c += '\n\t_srcRegIdx[%d] = %s + Ctrl_Base_DepTag;' % \
-                 (self.src_reg_idx, self.reg_spec)
-        if self.is_dest:
-            c += '\n\t_destRegIdx[%d] = %s + Ctrl_Base_DepTag;' % \
-                 (self.dest_reg_idx, self.reg_spec)
-        return c
-
-    def makeRead(self):
-        bit_select = 0
-        if (self.ctype == 'float' or self.ctype == 'double'):
-            error(0, 'Attempt to read control register as FP')
-        if self.read_code != None:
-            return self.buildReadCode('readMiscReg')
-        base = 'xc->readMiscReg(%s)' % self.reg_spec
-        if self.size == self.dflt_size:
-            return '%s = %s;\n' % (self.base_name, base)
-        else:
-            return '%s = bits(%s, %d, 0);\n' % \
-                   (self.base_name, base, self.size-1)
-
-    def makeWrite(self):
-        if (self.ctype == 'float' or self.ctype == 'double'):
-            error(0, 'Attempt to write control register as FP')
-        if self.write_code != None:
-            return self.buildWriteCode('setMiscReg')
-        wb = 'xc->setMiscReg(%s, %s);\n' % \
-             (self.reg_spec, self.base_name)
-        wb += 'if (traceData) { traceData->setData(%s); }' % \
-              self.base_name
-        return wb
-
 class ControlBitfieldOperand(ControlRegOperand):
     def makeRead(self):
         bit_select = 0
index 609708a13327997720be55d0742e50c899c946fd..c2733be9dd1d0b017e296f76b9b1bffcdeaf58c5 100644 (file)
@@ -113,10 +113,7 @@ def operands {{
     'Index':('ControlReg','uw','MipsISA::Index',None,1),
 
 
-    #Special cases for when a Control Register Access is dependent on
-    #a combination of bitfield indices (handles MTCO & MFCO)
-    # Fixed to allow CP0 Register Offset
-    'CP0_RD_SEL': ('IControlReg', 'uw', '(RD << 3 | SEL) + Ctrl_Base_DepTag', None, 1),
+    'CP0_RD_SEL': ('ControlReg', 'uw', '(RD << 3 | SEL)', None, 1),
 
     #MT Control Regs
     'MVPConf0': ('ControlReg', 'uw', 'MipsISA::MVPConf0', None, 1),