execBase = 'Store'
def __init__(self, mnem, post, add, writeback, size=4,
- sign=False, user=False, flavor="normal",
- instFlags = []):
+ sign=False, user=False, flavor="normal"):
super(StoreInst, self).__init__()
self.name = mnem
self.sign = sign
self.user = user
self.flavor = flavor
- self.instFlags = instFlags
+ self.instFlags = []
if self.add:
self.op = " +"
else:
self.memFlags.append("ArmISA::TLB::UserMode")
if self.flavor == "exclusive":
+ self.instFlags.append("IsStoreConditional")
self.memFlags.append("Request::LLSC")
elif self.flavor != "fp":
self.memFlags.append("ArmISA::TLB::AllowUnaligned")
# Add memory request flags where necessary
if self.flavor == "exclusive":
+ self.instFlags.append("IsStoreConditional")
self.memFlags.append("Request::LLSC")
self.memFlags.append("ArmISA::TLB::AlignDoubleWord")
else:
buildDoubleStores("strd")
- StoreImmEx("strex", False, True, False, size=4, flavor="exclusive",
- instFlags = ['IsStoreConditional']).emit()
- StoreImmEx("strexh", False, True, False, size=2, flavor="exclusive",
- instFlags = ['IsStoreConditional']).emit()
- StoreImmEx("strexb", False, True, False, size=1, flavor="exclusive",
- instFlags = ['IsStoreConditional']).emit()
- StoreDoubleImmEx("strexd", False, True, False, flavor="exclusive",
- instFlags = ['IsStoreConditional']).emit()
+ StoreImmEx("strex", False, True, False, size=4,
+ flavor="exclusive").emit()
+ StoreImmEx("strexh", False, True, False, size=2,
+ flavor="exclusive").emit()
+ StoreImmEx("strexb", False, True, False, size=1,
+ flavor="exclusive").emit()
+ StoreDoubleImmEx("strexd", False, True, False,
+ flavor="exclusive").emit()
StoreImm("vstr", False, True, False, size=4, flavor="fp").emit()
StoreImm("vstr", False, False, False, size=4, flavor="fp").emit()