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}}; |