str64.isa (12386:2bf5fb25a5f1) str64.isa (12527:264a2d7e5c1d)
1// -*- mode:c++ -*-
2
3// Copyright (c) 2011-2013,2017 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

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

207 class StoreDouble64(StoreInst64):
208 def emit(self):
209 self.buildEACode()
210
211 # Code that actually handles the access
212 if self.flavor == "fp":
213 accCode = '''
214 uint64_t data = AA64FpDest2P0_uw;
1// -*- mode:c++ -*-
2
3// Copyright (c) 2011-2013,2017 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

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

207 class StoreDouble64(StoreInst64):
208 def emit(self):
209 self.buildEACode()
210
211 # Code that actually handles the access
212 if self.flavor == "fp":
213 accCode = '''
214 uint64_t data = AA64FpDest2P0_uw;
215 data = (data << 32) | AA64FpDestP0_uw;
215 data = isBigEndian64(xc->tcBase())
216 ? ((uint64_t(AA64FpDestP0_uw) << 32) | data)
217 : ((data << 32) | AA64FpDestP0_uw);
216 Mem_ud = cSwap(data, isBigEndian64(xc->tcBase()));
217 '''
218 else:
219 if self.size == 4:
220 accCode = '''
221 uint64_t data = XDest2_uw;
218 Mem_ud = cSwap(data, isBigEndian64(xc->tcBase()));
219 '''
220 else:
221 if self.size == 4:
222 accCode = '''
223 uint64_t data = XDest2_uw;
222 data = (data << 32) | XDest_uw;
224 data = isBigEndian64(xc->tcBase())
225 ? ((uint64_t(XDest_uw) << 32) | data)
226 : ((data << 32) | XDest_uw);
223 Mem_ud = cSwap(data, isBigEndian64(xc->tcBase()));
224 '''
225 elif self.size == 8:
226 accCode = '''
227 // This temporary needs to be here so that the parser
228 // will correctly identify this instruction as a store.
229 std::array<uint64_t, 2> temp;
227 Mem_ud = cSwap(data, isBigEndian64(xc->tcBase()));
228 '''
229 elif self.size == 8:
230 accCode = '''
231 // This temporary needs to be here so that the parser
232 // will correctly identify this instruction as a store.
233 std::array<uint64_t, 2> temp;
230 temp[0] = XDest_ud;
231 temp[1] = XDest2_ud;
234 temp[0] = cSwap(XDest_ud,isBigEndian64(xc->tcBase()));
235 temp[1] = cSwap(XDest2_ud,isBigEndian64(xc->tcBase()));
232 Mem_tud = temp;
233 '''
234 self.codeBlobs["memacc_code"] = accCode
235
236 # Push it out to the output files
237 wbDecl = None
238 if self.writeback and not self.micro:
239 wbDecl = self.wbDecl

--- 135 unchanged lines hidden ---
236 Mem_tud = temp;
237 '''
238 self.codeBlobs["memacc_code"] = accCode
239
240 # Push it out to the output files
241 wbDecl = None
242 if self.writeback and not self.micro:
243 wbDecl = self.wbDecl

--- 135 unchanged lines hidden ---