str.isa (7313:b0262368daa0) | str.isa (7345:4e7dc0c3f148) |
---|---|
1// -*- mode:c++ -*- 2 3// Copyright (c) 2010 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 --- 64 unchanged lines hidden (view full) --- 73 memFlags, instFlags, double, strex, 74 base, execTemplateBase = execTemplateBase) 75 76 header_output += newHeader 77 decoder_output += newDecoder 78 exec_output += newExec 79 80 def buildImmStore(mnem, post, add, writeback, \ | 1// -*- mode:c++ -*- 2 3// Copyright (c) 2010 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 --- 64 unchanged lines hidden (view full) --- 73 memFlags, instFlags, double, strex, 74 base, execTemplateBase = execTemplateBase) 75 76 header_output += newHeader 77 decoder_output += newDecoder 78 exec_output += newExec 79 80 def buildImmStore(mnem, post, add, writeback, \ |
81 size=4, sign=False, user=False, strex=False): | 81 size=4, sign=False, user=False, \ 82 strex=False, vstr=False): |
82 name = mnem 83 Name = storeImmClassName(post, add, writeback, \ 84 size, sign, user) 85 86 if add: 87 op = " +" 88 else: 89 op = " -" 90 91 offset = op + " imm" 92 eaCode = "EA = Base" 93 if not post: 94 eaCode += offset 95 eaCode += ";" 96 | 83 name = mnem 84 Name = storeImmClassName(post, add, writeback, \ 85 size, sign, user) 86 87 if add: 88 op = " +" 89 else: 90 op = " -" 91 92 offset = op + " imm" 93 eaCode = "EA = Base" 94 if not post: 95 eaCode += offset 96 eaCode += ";" 97 |
97 accCode = "Mem%(suffix)s = cSwap(Dest%(suffix)s, ((CPSR)Cpsr).e);" % \ 98 { "suffix" : buildMemSuffix(sign, size) } | 98 if vstr: 99 accCode = ''' 100 Mem%(suffix)s = cSwap(FpDest.uw, ((CPSR)Cpsr).e); 101 ''' % { "suffix" : buildMemSuffix(sign, size) } 102 else: 103 accCode = ''' 104 Mem%(suffix)s = cSwap(Dest%(suffix)s, ((CPSR)Cpsr).e); 105 ''' % { "suffix" : buildMemSuffix(sign, size) } |
99 if writeback: 100 accCode += "Base = Base %s;\n" % offset 101 102 memFlags = ["ArmISA::TLB::MustBeOne", "%d" % (size - 1)] 103 if strex: 104 memFlags.append("Request::LLSC") 105 Name = "%s_%s" % (mnem.upper(), Name) 106 base = buildMemBase("MemoryExImm", post, writeback) 107 postAccCode = "Result = !writeResult;" 108 execTemplateBase = 'StoreEx' 109 else: | 106 if writeback: 107 accCode += "Base = Base %s;\n" % offset 108 109 memFlags = ["ArmISA::TLB::MustBeOne", "%d" % (size - 1)] 110 if strex: 111 memFlags.append("Request::LLSC") 112 Name = "%s_%s" % (mnem.upper(), Name) 113 base = buildMemBase("MemoryExImm", post, writeback) 114 postAccCode = "Result = !writeResult;" 115 execTemplateBase = 'StoreEx' 116 else: |
110 memFlags.append("ArmISA::TLB::AllowUnaligned") | 117 if vstr: 118 Name = "%s_%s" % (mnem.upper(), Name) 119 else: 120 memFlags.append("ArmISA::TLB::AllowUnaligned") |
111 base = buildMemBase("MemoryImm", post, writeback) 112 postAccCode = "" 113 execTemplateBase = 'Store' 114 115 emitStore(name, Name, True, eaCode, accCode, postAccCode, \ 116 memFlags, [], base, strex=strex, 117 execTemplateBase = execTemplateBase) 118 --- 55 unchanged lines hidden (view full) --- 174 accCode += "Base = Base %s;\n" % offset 175 base = buildMemBase("MemoryReg", post, writeback) 176 177 emitStore(name, Name, False, eaCode, accCode, "",\ 178 ["ArmISA::TLB::MustBeOne", \ 179 "ArmISA::TLB::AllowUnaligned", \ 180 "%d" % (size - 1)], [], base) 181 | 121 base = buildMemBase("MemoryImm", post, writeback) 122 postAccCode = "" 123 execTemplateBase = 'Store' 124 125 emitStore(name, Name, True, eaCode, accCode, postAccCode, \ 126 memFlags, [], base, strex=strex, 127 execTemplateBase = execTemplateBase) 128 --- 55 unchanged lines hidden (view full) --- 184 accCode += "Base = Base %s;\n" % offset 185 base = buildMemBase("MemoryReg", post, writeback) 186 187 emitStore(name, Name, False, eaCode, accCode, "",\ 188 ["ArmISA::TLB::MustBeOne", \ 189 "ArmISA::TLB::AllowUnaligned", \ 190 "%d" % (size - 1)], [], base) 191 |
182 def buildDoubleImmStore(mnem, post, add, writeback, strex=False): | 192 def buildDoubleImmStore(mnem, post, add, writeback, \ 193 strex=False, vstr=False): |
183 name = mnem 184 Name = storeDoubleImmClassName(post, add, writeback) 185 186 if add: 187 op = " +" 188 else: 189 op = " -" 190 191 offset = op + " imm" 192 eaCode = "EA = Base" 193 if not post: 194 eaCode += offset 195 eaCode += ";" 196 | 194 name = mnem 195 Name = storeDoubleImmClassName(post, add, writeback) 196 197 if add: 198 op = " +" 199 else: 200 op = " -" 201 202 offset = op + " imm" 203 eaCode = "EA = Base" 204 if not post: 205 eaCode += offset 206 eaCode += ";" 207 |
197 accCode = ''' 198 CPSR cpsr = Cpsr; 199 Mem.ud = (uint64_t)cSwap(Dest.uw, cpsr.e) | 200 ((uint64_t)cSwap(Dest2.uw, cpsr.e) << 32); 201 ''' | 208 if vstr: 209 accCode = ''' 210 uint64_t swappedMem = (uint64_t)FpDest.uw | 211 ((uint64_t)FpDest2.uw << 32); 212 Mem.ud = cSwap(swappedMem, ((CPSR)Cpsr).e); 213 ''' 214 else: 215 accCode = ''' 216 CPSR cpsr = Cpsr; 217 Mem.ud = (uint64_t)cSwap(Dest.uw, cpsr.e) | 218 ((uint64_t)cSwap(Dest2.uw, cpsr.e) << 32); 219 ''' |
202 if writeback: 203 accCode += "Base = Base %s;\n" % offset 204 205 memFlags = ["ArmISA::TLB::MustBeOne", 206 "ArmISA::TLB::AlignWord"] 207 if strex: 208 memFlags.append("Request::LLSC") | 220 if writeback: 221 accCode += "Base = Base %s;\n" % offset 222 223 memFlags = ["ArmISA::TLB::MustBeOne", 224 "ArmISA::TLB::AlignWord"] 225 if strex: 226 memFlags.append("Request::LLSC") |
209 Name = "%s_%s" % (mnem.upper(), Name) | |
210 base = buildMemBase("MemoryExDImm", post, writeback) 211 postAccCode = "Result = !writeResult;" 212 else: 213 base = buildMemBase("MemoryDImm", post, writeback) 214 postAccCode = "" | 227 base = buildMemBase("MemoryExDImm", post, writeback) 228 postAccCode = "Result = !writeResult;" 229 else: 230 base = buildMemBase("MemoryDImm", post, writeback) 231 postAccCode = "" |
232 if vstr or strex: 233 Name = "%s_%s" % (mnem.upper(), Name) |
|
215 216 emitStore(name, Name, True, eaCode, accCode, postAccCode, \ 217 memFlags, [], base, double=True, strex=strex) 218 219 def buildDoubleRegStore(mnem, post, add, writeback): 220 name = mnem 221 Name = storeDoubleRegClassName(post, add, writeback) 222 --- 72 unchanged lines hidden (view full) --- 295 buildSrsStores("srs") 296 297 buildDoubleStores("strd") 298 299 buildImmStore("strex", False, True, False, size=4, strex=True) 300 buildImmStore("strexh", False, True, False, size=2, strex=True) 301 buildImmStore("strexb", False, True, False, size=1, strex=True) 302 buildDoubleImmStore("strexd", False, True, False, strex=True) | 234 235 emitStore(name, Name, True, eaCode, accCode, postAccCode, \ 236 memFlags, [], base, double=True, strex=strex) 237 238 def buildDoubleRegStore(mnem, post, add, writeback): 239 name = mnem 240 Name = storeDoubleRegClassName(post, add, writeback) 241 --- 72 unchanged lines hidden (view full) --- 314 buildSrsStores("srs") 315 316 buildDoubleStores("strd") 317 318 buildImmStore("strex", False, True, False, size=4, strex=True) 319 buildImmStore("strexh", False, True, False, size=2, strex=True) 320 buildImmStore("strexb", False, True, False, size=1, strex=True) 321 buildDoubleImmStore("strexd", False, True, False, strex=True) |
322 323 buildImmStore("vstr", False, True, False, size=4, vstr=True) 324 buildImmStore("vstr", False, False, False, size=4, vstr=True) 325 buildDoubleImmStore("vstr", False, True, False, vstr=True) 326 buildDoubleImmStore("vstr", False, False, False, vstr=True) |
|
303}}; | 327}}; |