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

Change subject: arch-x86: Turn predicate-false CC regs into InvalidRegClass.
......................................................................

arch-x86: Turn predicate-false CC regs into InvalidRegClass.

This makes the (somewhat faulty) predicated register mechanism
unnecessary.

Change-Id: Id053760defd6ac9aaec95c165df5403e7fcb354f
---
M src/arch/x86/isa/operands.isa
1 file changed, 17 insertions(+), 5 deletions(-)



diff --git a/src/arch/x86/isa/operands.isa b/src/arch/x86/isa/operands.isa
index 96abebc..a30bdef 100644
--- a/src/arch/x86/isa/operands.isa
+++ b/src/arch/x86/isa/operands.isa
@@ -92,6 +92,18 @@
         def __init__(self, idx, id):
             super(CCReg, self).__init__('uqw', idx, None, id)

+    class CCRegPred(CCRegOp):
+        @overrideInOperand
+        def srcRegId(self):
+            return f'({self.readPredicate}) ? {self.regId()} : RegId()'
+        @overrideInOperand
+        def destRegId(self):
+            return f'({self.writePredicate}) ? {self.regId()} : RegId()'
+        def __init__(self, idx, id, *, read_predicate, write_predicate):
+            super(CCRegPred, self).__init__('uqw', idx, None, id)
+            self.attrs['readPredicate'] = read_predicate
+            self.attrs['writePredicate'] = write_predicate
+
     class ControlReg(ControlRegOp):
         def __init__(self, idx, id, ctype='uqw'):
             super(ControlReg, self).__init__(ctype, idx,
@@ -186,21 +198,21 @@
         # would be retained, the write predicate checks if any of the bits
         # are being written.

-        'PredccFlagBits': CCRegOp('uqw', 'X86ISA::CCREG_ZAPS', sort_pri=60,
+        'PredccFlagBits': CCRegPred('X86ISA::CCREG_ZAPS', 60,
                 read_predicate='(ext & X86ISA::ccFlagMask) != '
                 'X86ISA::ccFlagMask && (ext & X86ISA::ccFlagMask) != 0',
                 write_predicate='(ext & X86ISA::ccFlagMask) != 0'),
-        'PredcfofBits':  CCRegOp('uqw', 'X86ISA::CCREG_CFOF', sort_pri=61,
+        'PredcfofBits':  CCRegPred('X86ISA::CCREG_CFOF', 61,
                 read_predicate='(ext & X86ISA::cfofMask) '
                 '!= X86ISA::cfofMask && (ext & X86ISA::cfofMask) != 0',
                 write_predicate='(ext & X86ISA::cfofMask) != 0'),
-        'PreddfBit':     CCRegOp('uqw', 'X86ISA::CCREG_DF', sort_pri=62,
+        'PreddfBit':     CCRegPred('X86ISA::CCREG_DF', 62,
                 read_predicate='false',
                 write_predicate='(ext & X86ISA::DFBit) != 0'),
-        'PredecfBit':    CCRegOp('uqw', 'X86ISA::CCREG_ECF', sort_pri=63,
+        'PredecfBit':    CCRegPred('X86ISA::CCREG_ECF', 63,
                 read_predicate='false',
                 write_predicate='(ext & X86ISA::ECFBit) != 0'),
-        'PredezfBit':    CCRegOp('uqw', 'X86ISA::CCREG_EZF', sort_pri=64,
+        'PredezfBit':    CCRegPred('X86ISA::CCREG_EZF', 64,
                 read_predicate='false',
                 write_predicate='(ext & X86ISA::EZFBit) != 0'),


--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/49748
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: Id053760defd6ac9aaec95c165df5403e7fcb354f
Gerrit-Change-Number: 49748
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