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 --- 102 unchanged lines hidden (view full) --- 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 |
119 def buildSrsStore(mnem, post, add, writeback): 120 name = mnem 121 Name = "SRS_" + storeImmClassName(post, add, writeback, 8) 122 123 offset = 0 124 if post != add: 125 offset += 4 126 if not add: 127 offset -= 8 128 129 eaCode = "EA = SpMode + %d;" % offset 130 131 wbDiff = -8 132 if add: 133 wbDiff = 8 134 accCode = ''' 135 CPSR cpsr = Cpsr; 136 Mem.ud = (uint64_t)cSwap(LR.uw, cpsr.e) | 137 ((uint64_t)cSwap(Spsr.uw, cpsr.e) << 32); 138 ''' 139 if writeback: 140 accCode += "SpMode = SpMode + %s;\n" % wbDiff 141 142 global header_output, decoder_output, exec_output 143 144 (newHeader, 145 newDecoder, 146 newExec) = SrsBase(name, Name, eaCode, accCode, 147 ["ArmISA::TLB::AlignWord", "ArmISA::TLB::MustBeOne"], []) 148 149 header_output += newHeader 150 decoder_output += newDecoder 151 exec_output += newExec 152 |
153 def buildRegStore(mnem, post, add, writeback, \ 154 size=4, sign=False, user=False, strex=False): 155 name = mnem 156 Name = storeRegClassName(post, add, writeback, 157 size, sign, user) 158 159 if add: 160 op = " +" --- 109 unchanged lines hidden (view full) --- 270 buildDoubleRegStore(mnem, False, True, True) 271 buildDoubleImmStore(mnem, False, False, True) 272 buildDoubleRegStore(mnem, False, False, True) 273 buildDoubleImmStore(mnem, False, True, False) 274 buildDoubleRegStore(mnem, False, True, False) 275 buildDoubleImmStore(mnem, False, False, False) 276 buildDoubleRegStore(mnem, False, False, False) 277 |
278 def buildSrsStores(mnem): 279 buildSrsStore(mnem, True, True, True) 280 buildSrsStore(mnem, True, True, False) 281 buildSrsStore(mnem, True, False, True) 282 buildSrsStore(mnem, True, False, False) 283 buildSrsStore(mnem, False, True, True) 284 buildSrsStore(mnem, False, True, False) 285 buildSrsStore(mnem, False, False, True) 286 buildSrsStore(mnem, False, False, False) 287 |
288 buildStores("str") 289 buildStores("strt", user=True) 290 buildStores("strb", size=1) 291 buildStores("strbt", size=1, user=True) 292 buildStores("strh", size=2) 293 buildStores("strht", size=2, user=True) 294 |
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) 303}}; |