Gabe Black has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/49721 )

Change subject: arch: Consolidate all the make_constructor methods in the ISA parser.
......................................................................

arch: Consolidate all the make_constructor methods in the ISA parser.

These methods were all identical, except that IntRegOperand and
CCRegOperand classes had logic to handle operand predication. Since the
other operand types won't have predicates set, we can use the superset
version, and the other types will reduce to what they used to in
practice.

Change-Id: I51eeedcacb7cfc6e2c136742701ee9bf80ec4e15
---
M src/arch/isa_parser/operand_types.py
1 file changed, 3 insertions(+), 75 deletions(-)



diff --git a/src/arch/isa_parser/operand_types.py b/src/arch/isa_parser/operand_types.py
index 4b269d4..f67f27d 100755
--- a/src/arch/isa_parser/operand_types.py
+++ b/src/arch/isa_parser/operand_types.py
@@ -153,9 +153,6 @@
     def isReg(self):
         return 1

-class IntRegOperand(RegOperand):
-    reg_class = 'IntRegClass'
-
     def makeConstructor(self, predRead, predWrite):
         c_src = ''
         c_dest = ''
@@ -175,6 +172,9 @@

         return c_src + c_dest

+class IntRegOperand(RegOperand):
+    reg_class = 'IntRegClass'
+
     def makeRead(self, predRead):
         if (self.ctype == 'float' or self.ctype == 'double'):
             error('Attempt to read integer register as FP')
@@ -222,19 +222,6 @@
 class FloatRegOperand(RegOperand):
     reg_class = 'FloatRegClass'

-    def makeConstructor(self, predRead, predWrite):
-        c_src = ''
-        c_dest = ''
-
-        if self.is_src:
- c_src = self.src_reg_constructor % (self.reg_class, self.reg_spec)
-
-        if self.is_dest:
- c_dest = self.dst_reg_constructor % (self.reg_class, self.reg_spec)
-            c_dest += f'\n\t_numTypedDestRegs[{self.reg_class}]++;'
-
-        return c_src + c_dest
-
     def makeRead(self, predRead):
         if self.read_code != None:
             return self.buildReadCode(predRead, 'getRegOperand')
@@ -304,19 +291,6 @@
         else:
             return ''

-    def makeConstructor(self, predRead, predWrite):
-        c_src = ''
-        c_dest = ''
-
-        if self.is_src:
- c_src = self.src_reg_constructor % (self.reg_class, self.reg_spec)
-
-        if self.is_dest:
- c_dest = self.dst_reg_constructor % (self.reg_class, self.reg_spec)
-            c_dest += f'\n\t_numTypedDestRegs[{self.reg_class}]++;'
-
-        return c_src + c_dest
-
     # Read destination register to write
     def makeReadWElem(self, elem_op):
         (elem_name, elem_ext) = elem_op
@@ -426,20 +400,6 @@
         else:
             return ''

-    def makeConstructor(self, predRead, predWrite):
-        c_src = ''
-        c_dest = ''
-
-        if self.is_src:
-            c_src = ('\n\tsetSrcRegIdx(_numSrcRegs++, RegId(%s, %s));' %
-                    (self.reg_class, self.reg_spec))
-
-        if self.is_dest:
-            c_dest = ('\n\tsetDestRegIdx(_numDestRegs++, RegId(%s, %s));' %
-                    (self.reg_class, self.reg_spec))
-            c_dest += f'\n\t_numTypedDestRegs[{self.reg_class}]++;'
-        return c_src + c_dest
-
     def makeRead(self, predRead):
         c_read = \
f'xc->getRegOperand(this, {self.src_reg_idx}, &{self.base_name})'
@@ -456,19 +416,6 @@
     def makeDecl(self):
         return ''

-    def makeConstructor(self, predRead, predWrite):
-        c_src = ''
-        c_dest = ''
-
-        if self.is_src:
- c_src = self.src_reg_constructor % (self.reg_class, self.reg_spec)
-
-        if self.is_dest:
- c_dest = self.dst_reg_constructor % (self.reg_class, self.reg_spec)
-            c_dest += f'\n\t_numTypedDestRegs[{self.reg_class}]++;'
-
-        return c_src + c_dest
-
     def makeRead(self, predRead):
         func = 'getRegOperand'
         if self.read_code != None:
@@ -527,25 +474,6 @@
 class CCRegOperand(RegOperand):
     reg_class = 'CCRegClass'

-    def makeConstructor(self, predRead, predWrite):
-        c_src = ''
-        c_dest = ''
-
-        if self.is_src:
- c_src = self.src_reg_constructor % (self.reg_class, self.reg_spec)
-            if self.hasReadPred():
-                c_src = '\n\tif (%s) {%s\n\t}' % \
-                        (self.read_predicate, c_src)
-
-        if self.is_dest:
- c_dest = self.dst_reg_constructor % (self.reg_class, self.reg_spec)
-            c_dest += f'\n\t_numTypedDestRegs[{self.reg_class}]++;'
-            if self.hasWritePred():
-                c_dest = '\n\tif (%s) {%s\n\t}' % \
-                         (self.write_predicate, c_dest)
-
-        return c_src + c_dest
-
     def makeRead(self, predRead):
         if (self.ctype == 'float' or self.ctype == 'double'):
             error('Attempt to read condition-code register as FP')

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/49721
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I51eeedcacb7cfc6e2c136742701ee9bf80ec4e15
Gerrit-Change-Number: 49721
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <gabe.bl...@gmail.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s

Reply via email to