str.isa (13588:fb25d9448acc) str.isa (13589:13522f2a5126)
1// -*- mode:c++ -*-
2
1// -*- mode:c++ -*-
2
3// Copyright (c) 2010-2011,2017 ARM Limited
3// Copyright (c) 2010-2011,2017,2019 ARM Limited
4// All rights reserved
5//
6// The license below extends only to copyright in the software and shall
7// not be construed as granting a license to any other intellectual
8// property including but not limited to intellectual property relating
9// to a hardware implementation of the functionality of the software
10// licensed hereunder. You may use the software subject to the license
11// terms below provided that you ensure that this notice is replicated

--- 166 unchanged lines hidden (view full) ---

178 self.Name = self.nameFunc(self.post, self.add, self.writeback,
179 self.size, self.sign, self.user)
180
181 # Add memory request flags where necessary
182 self.memFlags.append("%d" % int(math.log(self.size, 2)))
183 if self.user:
184 self.memFlags.append("ArmISA::TLB::UserMode")
185
4// All rights reserved
5//
6// The license below extends only to copyright in the software and shall
7// not be construed as granting a license to any other intellectual
8// property including but not limited to intellectual property relating
9// to a hardware implementation of the functionality of the software
10// licensed hereunder. You may use the software subject to the license
11// terms below provided that you ensure that this notice is replicated

--- 166 unchanged lines hidden (view full) ---

178 self.Name = self.nameFunc(self.post, self.add, self.writeback,
179 self.size, self.sign, self.user)
180
181 # Add memory request flags where necessary
182 self.memFlags.append("%d" % int(math.log(self.size, 2)))
183 if self.user:
184 self.memFlags.append("ArmISA::TLB::UserMode")
185
186 if self.flavor == "exclusive":
186 if self.flavor in ("exclusive", "relex"):
187 self.instFlags.append("IsStoreConditional")
188 self.memFlags.append("Request::LLSC")
189 elif self.flavor != "fp":
190 self.memFlags.append("ArmISA::TLB::AllowUnaligned")
191
187 self.instFlags.append("IsStoreConditional")
188 self.memFlags.append("Request::LLSC")
189 elif self.flavor != "fp":
190 self.memFlags.append("ArmISA::TLB::AllowUnaligned")
191
192 if self.flavor in ("release", "relex"):
193 self.instFlags.extend(["IsMemBarrier",
194 "IsWriteBarrier",
195 "IsReadBarrier"])
196
192 # Disambiguate the class name for different flavors of stores
193 if self.flavor != "normal":
194 self.Name = "%s_%s" % (self.name.upper(), self.Name)
195
196 def emit(self):
197 # Address computation
198 eaCode = "EA = Base"
199 if not self.post:

--- 53 unchanged lines hidden (view full) ---

253 class StoreDouble(StoreInst):
254 def __init__(self, *args, **kargs):
255 super(StoreDouble, self).__init__(*args, **kargs)
256
257 # Build the default class name
258 self.Name = self.nameFunc(self.post, self.add, self.writeback)
259
260 # Add memory request flags where necessary
197 # Disambiguate the class name for different flavors of stores
198 if self.flavor != "normal":
199 self.Name = "%s_%s" % (self.name.upper(), self.Name)
200
201 def emit(self):
202 # Address computation
203 eaCode = "EA = Base"
204 if not self.post:

--- 53 unchanged lines hidden (view full) ---

258 class StoreDouble(StoreInst):
259 def __init__(self, *args, **kargs):
260 super(StoreDouble, self).__init__(*args, **kargs)
261
262 # Build the default class name
263 self.Name = self.nameFunc(self.post, self.add, self.writeback)
264
265 # Add memory request flags where necessary
261 if self.flavor == "exclusive":
266 if self.flavor in ("exclusive", "relex"):
262 self.instFlags.append("IsStoreConditional")
263 self.memFlags.append("Request::LLSC")
264 self.memFlags.append("ArmISA::TLB::AlignDoubleWord")
265 else:
266 self.memFlags.append("ArmISA::TLB::AlignWord")
267
267 self.instFlags.append("IsStoreConditional")
268 self.memFlags.append("Request::LLSC")
269 self.memFlags.append("ArmISA::TLB::AlignDoubleWord")
270 else:
271 self.memFlags.append("ArmISA::TLB::AlignWord")
272
273 if self.flavor in ("release", "relex"):
274 self.instFlags.extend(["IsMemBarrier",
275 "IsWriteBarrier",
276 "IsReadBarrier"])
277
268 # Disambiguate the class name for different flavors of stores
269 if self.flavor != "normal":
270 self.Name = "%s_%s" % (self.name.upper(), self.Name)
271
272 def emit(self):
273 # Address computation code
274 eaCode = "EA = Base"
275 if not self.post:

--- 108 unchanged lines hidden (view full) ---

384 flavor="exclusive").emit()
385 StoreImmEx("strexh", False, True, False, size=2,
386 flavor="exclusive").emit()
387 StoreImmEx("strexb", False, True, False, size=1,
388 flavor="exclusive").emit()
389 StoreDoubleImmEx("strexd", False, True, False,
390 flavor="exclusive").emit()
391
278 # Disambiguate the class name for different flavors of stores
279 if self.flavor != "normal":
280 self.Name = "%s_%s" % (self.name.upper(), self.Name)
281
282 def emit(self):
283 # Address computation code
284 eaCode = "EA = Base"
285 if not self.post:

--- 108 unchanged lines hidden (view full) ---

394 flavor="exclusive").emit()
395 StoreImmEx("strexh", False, True, False, size=2,
396 flavor="exclusive").emit()
397 StoreImmEx("strexb", False, True, False, size=1,
398 flavor="exclusive").emit()
399 StoreDoubleImmEx("strexd", False, True, False,
400 flavor="exclusive").emit()
401
402 StoreImm("stl", False, True, False, size=4, flavor="release").emit()
403 StoreImm("stlh", False, True, False, size=2, flavor="release").emit()
404 StoreImm("stlb", False, True, False, size=1, flavor="release").emit()
405 StoreImmEx("stlex", False, True, False, size=4, flavor="relex").emit()
406 StoreImmEx("stlexh", False, True, False, size=2, flavor="relex").emit()
407 StoreImmEx("stlexb", False, True, False, size=1, flavor="relex").emit()
408 StoreDoubleImmEx("stlexd", False, True, False, flavor="relex").emit()
409
392 StoreImm("vstr", False, True, False, size=4, flavor="fp").emit()
393 StoreImm("vstr", False, False, False, size=4, flavor="fp").emit()
394 StoreDoubleImm("vstr", False, True, False, flavor="fp").emit()
395 StoreDoubleImm("vstr", False, False, False, flavor="fp").emit()
396}};
410 StoreImm("vstr", False, True, False, size=4, flavor="fp").emit()
411 StoreImm("vstr", False, False, False, size=4, flavor="fp").emit()
412 StoreDoubleImm("vstr", False, True, False, flavor="fp").emit()
413 StoreDoubleImm("vstr", False, False, False, flavor="fp").emit()
414}};