summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-08-23 09:44:19 -0700
committerGabe Black <gblack@eecs.umich.edu>2010-08-23 09:44:19 -0700
commit69fc2af00600ced942d81dba082d9780e5325c9e (patch)
tree7c06e5560c737dec0fadb1df9638b0d33280d73b /src/arch
parent5a1dbe4d99e9aad0f5c9002707a323ef8d6dfb8a (diff)
downloadgem5-69fc2af00600ced942d81dba082d9780e5325c9e.tar.xz
X86: Add a .serializing directive that makes a macroop serializing.
This directive really just tells the macroop to set IsSerializing and IsSerializeAfter on its final microop.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/x86/isa/macroop.isa9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/arch/x86/isa/macroop.isa b/src/arch/x86/isa/macroop.isa
index d6571c7e6..f05015834 100644
--- a/src/arch/x86/isa/macroop.isa
+++ b/src/arch/x86/isa/macroop.isa
@@ -139,12 +139,15 @@ let {{
self.adjust_imm += val
def adjustDisp(self, val):
self.adjust_disp += val
+ def serializing(self):
+ self.serializing = True
def __init__(self, name):
super(X86Macroop, self).__init__(name)
self.directives = {
"adjust_env" : self.setAdjustEnv,
"adjust_imm" : self.adjustImm,
- "adjust_disp" : self.adjustDisp
+ "adjust_disp" : self.adjustDisp,
+ "serializing" : self.serializing
}
self.declared = False
self.adjust_env = ""
@@ -159,6 +162,7 @@ let {{
//This is to pacify gcc in case the displacement isn't used.
adjustedDisp = adjustedDisp;
'''
+ self.serializing = False
def getAllocator(self, env):
return "new X86Macroop::%s(machInst, %s)" % \
(self.name, env.getAllocator())
@@ -188,6 +192,9 @@ let {{
flags = ["IsMicroop"]
if micropc == numMicroops - 1:
flags.append("IsLastMicroop")
+ if self.serializing:
+ flags.append("IsSerializing")
+ flags.append("IsSerializeAfter")
else:
flags.append("IsDelayedCommit")
if micropc == 0: