81c81,82
< size=4, sign=False, user=False, strex=False):
---
> size=4, sign=False, user=False, \
> strex=False, vstr=False):
97,98c98,105
< accCode = "Mem%(suffix)s = cSwap(Dest%(suffix)s, ((CPSR)Cpsr).e);" % \
< { "suffix" : buildMemSuffix(sign, size) }
---
> if vstr:
> accCode = '''
> Mem%(suffix)s = cSwap(FpDest.uw, ((CPSR)Cpsr).e);
> ''' % { "suffix" : buildMemSuffix(sign, size) }
> else:
> accCode = '''
> Mem%(suffix)s = cSwap(Dest%(suffix)s, ((CPSR)Cpsr).e);
> ''' % { "suffix" : buildMemSuffix(sign, size) }
110c117,120
< memFlags.append("ArmISA::TLB::AllowUnaligned")
---
> if vstr:
> Name = "%s_%s" % (mnem.upper(), Name)
> else:
> memFlags.append("ArmISA::TLB::AllowUnaligned")
182c192,193
< def buildDoubleImmStore(mnem, post, add, writeback, strex=False):
---
> def buildDoubleImmStore(mnem, post, add, writeback, \
> strex=False, vstr=False):
197,201c208,219
< accCode = '''
< CPSR cpsr = Cpsr;
< Mem.ud = (uint64_t)cSwap(Dest.uw, cpsr.e) |
< ((uint64_t)cSwap(Dest2.uw, cpsr.e) << 32);
< '''
---
> if vstr:
> accCode = '''
> uint64_t swappedMem = (uint64_t)FpDest.uw |
> ((uint64_t)FpDest2.uw << 32);
> Mem.ud = cSwap(swappedMem, ((CPSR)Cpsr).e);
> '''
> else:
> accCode = '''
> CPSR cpsr = Cpsr;
> Mem.ud = (uint64_t)cSwap(Dest.uw, cpsr.e) |
> ((uint64_t)cSwap(Dest2.uw, cpsr.e) << 32);
> '''
209d226
< Name = "%s_%s" % (mnem.upper(), Name)
214a232,233
> if vstr or strex:
> Name = "%s_%s" % (mnem.upper(), Name)
302a322,326
>
> buildImmStore("vstr", False, True, False, size=4, vstr=True)
> buildImmStore("vstr", False, False, False, size=4, vstr=True)
> buildDoubleImmStore("vstr", False, True, False, vstr=True)
> buildDoubleImmStore("vstr", False, False, False, vstr=True)