diff options
Diffstat (limited to 'src/arch/arm/isa/insts/str.isa')
-rw-r--r-- | src/arch/arm/isa/insts/str.isa | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/src/arch/arm/isa/insts/str.isa b/src/arch/arm/isa/insts/str.isa index ea412aa8d..6b2e8cc77 100644 --- a/src/arch/arm/isa/insts/str.isa +++ b/src/arch/arm/isa/insts/str.isa @@ -1,6 +1,6 @@ // -*- mode:c++ -*- -// Copyright (c) 2010-2011,2017 ARM Limited +// Copyright (c) 2010-2011,2017,2019 ARM Limited // All rights reserved // // The license below extends only to copyright in the software and shall @@ -183,12 +183,17 @@ let {{ if self.user: self.memFlags.append("ArmISA::TLB::UserMode") - if self.flavor == "exclusive": + if self.flavor in ("exclusive", "relex"): self.instFlags.append("IsStoreConditional") self.memFlags.append("Request::LLSC") elif self.flavor != "fp": self.memFlags.append("ArmISA::TLB::AllowUnaligned") + if self.flavor in ("release", "relex"): + self.instFlags.extend(["IsMemBarrier", + "IsWriteBarrier", + "IsReadBarrier"]) + # Disambiguate the class name for different flavors of stores if self.flavor != "normal": self.Name = "%s_%s" % (self.name.upper(), self.Name) @@ -258,13 +263,18 @@ let {{ self.Name = self.nameFunc(self.post, self.add, self.writeback) # Add memory request flags where necessary - if self.flavor == "exclusive": + if self.flavor in ("exclusive", "relex"): self.instFlags.append("IsStoreConditional") self.memFlags.append("Request::LLSC") self.memFlags.append("ArmISA::TLB::AlignDoubleWord") else: self.memFlags.append("ArmISA::TLB::AlignWord") + if self.flavor in ("release", "relex"): + self.instFlags.extend(["IsMemBarrier", + "IsWriteBarrier", + "IsReadBarrier"]) + # Disambiguate the class name for different flavors of stores if self.flavor != "normal": self.Name = "%s_%s" % (self.name.upper(), self.Name) @@ -389,6 +399,14 @@ let {{ StoreDoubleImmEx("strexd", False, True, False, flavor="exclusive").emit() + StoreImm("stl", False, True, False, size=4, flavor="release").emit() + StoreImm("stlh", False, True, False, size=2, flavor="release").emit() + StoreImm("stlb", False, True, False, size=1, flavor="release").emit() + StoreImmEx("stlex", False, True, False, size=4, flavor="relex").emit() + StoreImmEx("stlexh", False, True, False, size=2, flavor="relex").emit() + StoreImmEx("stlexb", False, True, False, size=1, flavor="relex").emit() + StoreDoubleImmEx("stlexd", False, True, False, flavor="relex").emit() + StoreImm("vstr", False, True, False, size=4, flavor="fp").emit() StoreImm("vstr", False, False, False, size=4, flavor="fp").emit() StoreDoubleImm("vstr", False, True, False, flavor="fp").emit() |