[gem5-dev] Change in gem5/gem5[master]: x86: Add a ld/st microop flag for marking an access uncacheable.
Gabe Black has submitted this change and it was merged. ( https://gem5-review.googlesource.com/9881 ) Change subject: x86: Add a ld/st microop flag for marking an access uncacheable. .. x86: Add a ld/st microop flag for marking an access uncacheable. This percolates down to the memory request object which will have its "UNCACHEABLE" flag set. Change-Id: Ie73f4249bfcd57f45a473f220d0988856715a9ce Reviewed-on: https://gem5-review.googlesource.com/9881 Reviewed-by: Anthony GutierrezReviewed-by: Jason Lowe-Power Maintainer: Anthony Gutierrez --- M src/arch/x86/isa/microops/ldstop.isa 1 file changed, 22 insertions(+), 15 deletions(-) Approvals: Jason Lowe-Power: Looks good to me, but someone else must approve Anthony Gutierrez: Looks good to me, approved; Looks good to me, approved diff --git a/src/arch/x86/isa/microops/ldstop.isa b/src/arch/x86/isa/microops/ldstop.isa index 83e24e1..60c6d29 100644 --- a/src/arch/x86/isa/microops/ldstop.isa +++ b/src/arch/x86/isa/microops/ldstop.isa @@ -295,7 +295,7 @@ class LdStOp(X86Microop): def __init__(self, data, segment, addr, disp, dataSize, addressSize, baseFlags, atCPL0, prefetch, nonSpec, -implicitStack): +implicitStack, uncacheable): self.data = data [self.scale, self.index, self.base] = addr self.disp = disp @@ -311,6 +311,8 @@ self.instFlags += " | (1ULL << StaticInst::IsDataPrefetch)" if nonSpec: self.instFlags += " | (1ULL << StaticInst::IsNonSpeculative)" +if uncacheable: +self.instFlags += " | (Request::UNCACHEABLE)" # For implicit stack operations, we should use *not* use the # alternative addressing mode for loads/stores if the prefix is set if not implicitStack: @@ -335,7 +337,7 @@ class BigLdStOp(X86Microop): def __init__(self, data, segment, addr, disp, dataSize, addressSize, baseFlags, atCPL0, prefetch, nonSpec, -implicitStack): +implicitStack, uncacheable): self.data = data [self.scale, self.index, self.base] = addr self.disp = disp @@ -351,6 +353,8 @@ self.instFlags += " | (1ULL << StaticInst::IsDataPrefetch)" if nonSpec: self.instFlags += " | (1ULL << StaticInst::IsNonSpeculative)" +if uncacheable: +self.instFlags += " | (Request::UNCACHEABLE)" # For implicit stack operations, we should use *not* use the # alternative addressing mode for loads/stores if the prefix is set if not implicitStack: @@ -383,10 +387,10 @@ class LdStSplitOp(LdStOp): def __init__(self, data, segment, addr, disp, dataSize, addressSize, baseFlags, atCPL0, prefetch, nonSpec, -implicitStack): +implicitStack, uncacheable): super(LdStSplitOp, self).__init__(0, segment, addr, disp, dataSize, addressSize, baseFlags, atCPL0, prefetch, nonSpec, -implicitStack) +implicitStack, uncacheable) (self.dataLow, self.dataHi) = data def getAllocator(self, microFlags): @@ -466,10 +470,10 @@ dataSize="env.dataSize", addressSize=addressSize, atCPL0=False, prefetch=False, nonSpec=nonSpec, -implicitStack=implicitStack): +implicitStack=implicitStack, uncacheable=False): super(LoadOp, self).__init__(data, segment, addr, disp, dataSize, addressSize, mem_flags, -atCPL0, prefetch, nonSpec, implicitStack) +atCPL0, prefetch, nonSpec, implicitStack, uncacheable) self.className = Name self.mnemonic = name @@ -547,10 +551,10 @@ dataSize="env.dataSize", addressSize="env.addressSize", atCPL0=False, prefetch=False, nonSpec=nonSpec, -implicitStack=False): +implicitStack=False, uncacheable=False): super(LoadOp, self).__init__(data, segment, addr, disp, dataSize, addressSize, mem_flags, -atCPL0, prefetch, nonSpec, implicitStack) +atCPL0, prefetch, nonSpec, implicitStack, uncacheable) self.className = Name self.mnemonic = name @@ -601,10 +605,11 @@ def __init__(self, data, segment, addr, disp = 0, dataSize="env.dataSize", addressSize=addressSize, -
[gem5-dev] Change in gem5/gem5[master]: x86: Add a ld/st microop flag for marking an access uncacheable.
Gabe Black has uploaded this change for review. ( https://gem5-review.googlesource.com/9881 Change subject: x86: Add a ld/st microop flag for marking an access uncacheable. .. x86: Add a ld/st microop flag for marking an access uncacheable. This percolates down to the memory request object which will have its "UNCACHEABLE" flag set. Change-Id: Ie73f4249bfcd57f45a473f220d0988856715a9ce --- M src/arch/x86/isa/microops/ldstop.isa 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/src/arch/x86/isa/microops/ldstop.isa b/src/arch/x86/isa/microops/ldstop.isa index 83e24e1..60c6d29 100644 --- a/src/arch/x86/isa/microops/ldstop.isa +++ b/src/arch/x86/isa/microops/ldstop.isa @@ -295,7 +295,7 @@ class LdStOp(X86Microop): def __init__(self, data, segment, addr, disp, dataSize, addressSize, baseFlags, atCPL0, prefetch, nonSpec, -implicitStack): +implicitStack, uncacheable): self.data = data [self.scale, self.index, self.base] = addr self.disp = disp @@ -311,6 +311,8 @@ self.instFlags += " | (1ULL << StaticInst::IsDataPrefetch)" if nonSpec: self.instFlags += " | (1ULL << StaticInst::IsNonSpeculative)" +if uncacheable: +self.instFlags += " | (Request::UNCACHEABLE)" # For implicit stack operations, we should use *not* use the # alternative addressing mode for loads/stores if the prefix is set if not implicitStack: @@ -335,7 +337,7 @@ class BigLdStOp(X86Microop): def __init__(self, data, segment, addr, disp, dataSize, addressSize, baseFlags, atCPL0, prefetch, nonSpec, -implicitStack): +implicitStack, uncacheable): self.data = data [self.scale, self.index, self.base] = addr self.disp = disp @@ -351,6 +353,8 @@ self.instFlags += " | (1ULL << StaticInst::IsDataPrefetch)" if nonSpec: self.instFlags += " | (1ULL << StaticInst::IsNonSpeculative)" +if uncacheable: +self.instFlags += " | (Request::UNCACHEABLE)" # For implicit stack operations, we should use *not* use the # alternative addressing mode for loads/stores if the prefix is set if not implicitStack: @@ -383,10 +387,10 @@ class LdStSplitOp(LdStOp): def __init__(self, data, segment, addr, disp, dataSize, addressSize, baseFlags, atCPL0, prefetch, nonSpec, -implicitStack): +implicitStack, uncacheable): super(LdStSplitOp, self).__init__(0, segment, addr, disp, dataSize, addressSize, baseFlags, atCPL0, prefetch, nonSpec, -implicitStack) +implicitStack, uncacheable) (self.dataLow, self.dataHi) = data def getAllocator(self, microFlags): @@ -466,10 +470,10 @@ dataSize="env.dataSize", addressSize=addressSize, atCPL0=False, prefetch=False, nonSpec=nonSpec, -implicitStack=implicitStack): +implicitStack=implicitStack, uncacheable=False): super(LoadOp, self).__init__(data, segment, addr, disp, dataSize, addressSize, mem_flags, -atCPL0, prefetch, nonSpec, implicitStack) +atCPL0, prefetch, nonSpec, implicitStack, uncacheable) self.className = Name self.mnemonic = name @@ -547,10 +551,10 @@ dataSize="env.dataSize", addressSize="env.addressSize", atCPL0=False, prefetch=False, nonSpec=nonSpec, -implicitStack=False): +implicitStack=False, uncacheable=False): super(LoadOp, self).__init__(data, segment, addr, disp, dataSize, addressSize, mem_flags, -atCPL0, prefetch, nonSpec, implicitStack) +atCPL0, prefetch, nonSpec, implicitStack, uncacheable) self.className = Name self.mnemonic = name @@ -601,10 +605,11 @@ def __init__(self, data, segment, addr, disp = 0, dataSize="env.dataSize", addressSize=addressSize, -atCPL0=False, nonSpec=False, implicitStack=implicitStack): +atCPL0=False, nonSpec=False, implicitStack=implicitStack, +uncacheable=False): super(StoreOp, self).__init__(data, segment, addr, disp, dataSize, addressSize, mem_flags, atCPL0, False, -nonSpec,