neon64_mem.isa (10474:799c8ee4ecba) neon64_mem.isa (10537:47fe87b0cf97)
1// -*- mode: c++ -*-
2
3// Copyright (c) 2012-2014 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

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

180 getInputCodeOp1S += '''
181 writeVecElem(&input[%(v)d], (XReg) AA64FpOp1P%(p)dV%(v)dS_uw,
182 %(p)d, 0x2);
183 ''' % { 'v' : v, 'p' : p }
184
185 if name == 'deint_neon_uop':
186
187 eCode = '''
1// -*- mode: c++ -*-
2
3// Copyright (c) 2012-2014 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

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

180 getInputCodeOp1S += '''
181 writeVecElem(&input[%(v)d], (XReg) AA64FpOp1P%(p)dV%(v)dS_uw,
182 %(p)d, 0x2);
183 ''' % { 'v' : v, 'p' : p }
184
185 if name == 'deint_neon_uop':
186
187 eCode = '''
188 VReg input[4]; // input data from scratch area
188 // input data from scratch area
189 VReg input[4] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} };
189 VReg output[2]; // output data to arch. SIMD regs
190 VReg temp;
191 temp.lo = 0;
192 temp.hi = 0;
193 '''
194 for p in range(4):
195 eCode += '''
196 writeVecElem(&temp, (XReg) AA64FpDestP%(p)dV1L_uw, %(p)d, 0x2);

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

265 { 'code' : eCode, 'op_class' : 'No_OpClass' },
266 ['IsMicroop'])
267 header_output += MicroNeonMixDeclare64.subst(iop)
268 exec_output += MicroNeonMixExecute64.subst(iop)
269
270 elif name == 'int_neon_uop':
271
272 eCode = '''
190 VReg output[2]; // output data to arch. SIMD regs
191 VReg temp;
192 temp.lo = 0;
193 temp.hi = 0;
194 '''
195 for p in range(4):
196 eCode += '''
197 writeVecElem(&temp, (XReg) AA64FpDestP%(p)dV1L_uw, %(p)d, 0x2);

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

266 { 'code' : eCode, 'op_class' : 'No_OpClass' },
267 ['IsMicroop'])
268 header_output += MicroNeonMixDeclare64.subst(iop)
269 exec_output += MicroNeonMixExecute64.subst(iop)
270
271 elif name == 'int_neon_uop':
272
273 eCode = '''
273 VReg input[4]; // input data from arch. SIMD regs
274 // input data from arch. SIMD regs
275 VReg input[4] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} };
274 VReg output[2]; // output data to scratch area
275 '''
276
277 eCode += getInputCodeOp1S
278
279 # Note that numRegs is not always the same as numStructElems; in
280 # particular, for LD1/ST1, numStructElems is 1 but numRegs can be
281 # 1, 2, 3 or 4

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

327 { 'code' : eCode, 'op_class' : 'No_OpClass' },
328 ['IsMicroop'])
329 header_output += MicroNeonMixDeclare64.subst(iop)
330 exec_output += MicroNeonMixExecute64.subst(iop)
331
332 elif name == 'unpack_neon_uop':
333
334 eCode = '''
276 VReg output[2]; // output data to scratch area
277 '''
278
279 eCode += getInputCodeOp1S
280
281 # Note that numRegs is not always the same as numStructElems; in
282 # particular, for LD1/ST1, numStructElems is 1 but numRegs can be
283 # 1, 2, 3 or 4

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

329 { 'code' : eCode, 'op_class' : 'No_OpClass' },
330 ['IsMicroop'])
331 header_output += MicroNeonMixDeclare64.subst(iop)
332 exec_output += MicroNeonMixExecute64.subst(iop)
333
334 elif name == 'unpack_neon_uop':
335
336 eCode = '''
335 VReg input[4]; //input data from scratch area
337 //input data from scratch area
338 VReg input[4] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} };
336 VReg output[2]; //output data to arch. SIMD regs
337 '''
338
339 eCode += getInputCodeOp1L
340
341 # Fill output regs with register data initially. Note that
342 # elements in output register outside indexed lanes are left
343 # untouched

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

393 iop = InstObjParams(name, Name, 'MicroNeonMixLaneOp64',
394 { 'code' : eCode }, ['IsMicroop'])
395 header_output += MicroNeonMixLaneDeclare64.subst(iop)
396 exec_output += MicroNeonMixExecute64.subst(iop)
397
398 elif name == 'pack_neon_uop':
399
400 eCode = '''
339 VReg output[2]; //output data to arch. SIMD regs
340 '''
341
342 eCode += getInputCodeOp1L
343
344 # Fill output regs with register data initially. Note that
345 # elements in output register outside indexed lanes are left
346 # untouched

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

396 iop = InstObjParams(name, Name, 'MicroNeonMixLaneOp64',
397 { 'code' : eCode }, ['IsMicroop'])
398 header_output += MicroNeonMixLaneDeclare64.subst(iop)
399 exec_output += MicroNeonMixExecute64.subst(iop)
400
401 elif name == 'pack_neon_uop':
402
403 eCode = '''
401 VReg input[4]; // input data from arch. SIMD regs
404 // input data from arch. SIMD regs
405 VReg input[4] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} };
402 VReg output[2]; // output data to scratch area
403 '''
404
405 eCode += getInputCodeOp1S
406
407 eCode += '''
408 int eSizeBytes = 1 << eSize;
409 int numOutputElems = 128 / (8 << eSize);

--- 70 unchanged lines hidden ---
406 VReg output[2]; // output data to scratch area
407 '''
408
409 eCode += getInputCodeOp1S
410
411 eCode += '''
412 int eSizeBytes = 1 << eSize;
413 int numOutputElems = 128 / (8 << eSize);

--- 70 unchanged lines hidden ---