add Control Bitfield class
authorKorey Sewell <ksewell@umich.edu>
Sat, 23 Jun 2007 00:09:46 +0000 (20:09 -0400)
committerKorey Sewell <ksewell@umich.edu>
Sat, 23 Jun 2007 00:09:46 +0000 (20:09 -0400)
--HG--
extra : convert_revision : 31e7243c8820cb9f6744c53c417460dee9adaf44

src/arch/isa_parser.py

index 7edb9f3d79fc8a67118705530aa571a95af724ce..95c57af2fc3dd841f119153ba701539d1b13bef2 100755 (executable)
@@ -25,6 +25,7 @@
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #
 # Authors: Steve Reinhardt
+#          Gabe Black
 #          Korey Sewell
 
 import os
@@ -1410,6 +1411,25 @@ class ControlRegOperand(Operand):
             error(0, 'Attempt to write control register as FP')
         wb = 'xc->setMiscRegOperand(this, %s, %s);\n' % \
              (self.dest_reg_idx, self.base_name)
+
+class ControlBitfieldOperand(ControlRegOperand):
+    def makeRead(self):
+        bit_select = 0
+        if (self.ctype == 'float' or self.ctype == 'double'):
+            error(0, 'Attempt to read control register as FP')
+        base = 'xc->readMiscReg(%s)' % self.reg_spec
+        name = self.base_name
+        return '%s = bits(%s, %s_HI, %s_LO);' % \
+               (name, base, name, name)
+
+    def makeWrite(self):
+        if (self.ctype == 'float' or self.ctype == 'double'):
+            error(0, 'Attempt to write control register as FP')
+        base = 'xc->readMiscReg(%s)' % self.reg_spec
+        name = self.base_name
+        wb_val = 'insertBits(%s, %s_HI, %s_LO, %s)' % \
+                    (base, name, name, self.base_name)
+        wb = 'xc->setMiscRegOperand(this, %s, %s );\n' % (self.dest_reg_idx, wb_val)
         wb += 'if (traceData) { traceData->setData(%s); }' % \
               self.base_name
         return wb