/*
- * Copyright (c) 2010-2013 ARM Limited
+ * Copyright (c) 2010-2014 ARM Limited
* All rights reserved
*
* The license below extends only to copyright in the software and shall
}
for (int i = 0; i < numMarshalMicroops; ++i) {
- microOps[uopIdx++] = new MicroDeintNeon64(
- machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
- numStructElems, numRegs, i /* step */);
+ switch(numRegs) {
+ case 1: microOps[uopIdx++] = new MicroDeintNeon64_1Reg(
+ machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
+ numStructElems, 1, i /* step */);
+ break;
+ case 2: microOps[uopIdx++] = new MicroDeintNeon64_2Reg(
+ machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
+ numStructElems, 2, i /* step */);
+ break;
+ case 3: microOps[uopIdx++] = new MicroDeintNeon64_3Reg(
+ machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
+ numStructElems, 3, i /* step */);
+ break;
+ case 4: microOps[uopIdx++] = new MicroDeintNeon64_4Reg(
+ machInst, vd + (RegIndex) (2 * i), vx, eSize, dataSize,
+ numStructElems, 4, i /* step */);
+ break;
+ default: panic("Invalid number of registers");
+ }
+
}
assert(uopIdx == numMicroops);
unsigned uopIdx = 0;
for(int i = 0; i < numMarshalMicroops; ++i) {
- microOps[uopIdx++] = new MicroIntNeon64(
- machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
- numStructElems, numRegs, i /* step */);
+ switch (numRegs) {
+ case 1: microOps[uopIdx++] = new MicroIntNeon64_1Reg(
+ machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
+ numStructElems, 1, i /* step */);
+ break;
+ case 2: microOps[uopIdx++] = new MicroIntNeon64_2Reg(
+ machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
+ numStructElems, 2, i /* step */);
+ break;
+ case 3: microOps[uopIdx++] = new MicroIntNeon64_3Reg(
+ machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
+ numStructElems, 3, i /* step */);
+ break;
+ case 4: microOps[uopIdx++] = new MicroIntNeon64_4Reg(
+ machInst, vx + (RegIndex) (2 * i), vd, eSize, dataSize,
+ numStructElems, 4, i /* step */);
+ break;
+ default: panic("Invalid number of registers");
+ }
}
uint32_t memaccessFlags = TLB::MustBeOne | (TLB::ArmFlags) eSize |
// -*- mode: c++ -*-
-// Copyright (c) 2012-2013 ARM Limited
+// Copyright (c) 2012-2014 ARM Limited
// All rights reserved
//
// The license below extends only to copyright in the software and shall
header_output += MicroNeonMemDeclare64.subst(loadIop) + \
MicroNeonMemDeclare64.subst(storeIop)
- def mkMarshalMicroOp(name, Name):
+ def mkMarshalMicroOp(name, Name, numRegs=4):
global header_output, decoder_output, exec_output
getInputCodeOp1L = ''
- for v in range(4):
+ for v in range(numRegs):
for p in range(4):
getInputCodeOp1L += '''
writeVecElem(&input[%(v)d], (XReg) AA64FpOp1P%(p)dV%(v)d_uw,
''' % { 'v' : v, 'p' : p }
getInputCodeOp1S = ''
- for v in range(4):
+ for v in range(numRegs):
for p in range(4):
getInputCodeOp1S += '''
writeVecElem(&input[%(v)d], (XReg) AA64FpOp1P%(p)dV%(v)dS_uw,
'''
iop = InstObjParams(name, Name, 'MicroNeonMixOp64',
- { 'code' : eCode }, ['IsMicroop'])
+ { 'code' : eCode, 'op_class' : 'No_OpClass' },
+ ['IsMicroop'])
header_output += MicroNeonMixDeclare64.subst(iop)
exec_output += MicroNeonMixExecute64.subst(iop)
''' % { 'v': v, 'p': p}
iop = InstObjParams(name, Name, 'MicroNeonMixOp64',
- { 'code' : eCode }, ['IsMicroop'])
+ { 'code' : eCode, 'op_class' : 'No_OpClass' },
+ ['IsMicroop'])
header_output += MicroNeonMixDeclare64.subst(iop)
exec_output += MicroNeonMixExecute64.subst(iop)
# Generate instructions
mkMemAccMicroOp('mem_neon_uop')
- mkMarshalMicroOp('deint_neon_uop', 'MicroDeintNeon64')
- mkMarshalMicroOp('int_neon_uop', 'MicroIntNeon64')
+ mkMarshalMicroOp('deint_neon_uop', 'MicroDeintNeon64_1Reg', numRegs=1)
+ mkMarshalMicroOp('deint_neon_uop', 'MicroDeintNeon64_2Reg', numRegs=2)
+ mkMarshalMicroOp('deint_neon_uop', 'MicroDeintNeon64_3Reg', numRegs=3)
+ mkMarshalMicroOp('deint_neon_uop', 'MicroDeintNeon64_4Reg', numRegs=4)
+ mkMarshalMicroOp('int_neon_uop', 'MicroIntNeon64_1Reg', numRegs=1)
+ mkMarshalMicroOp('int_neon_uop', 'MicroIntNeon64_2Reg', numRegs=2)
+ mkMarshalMicroOp('int_neon_uop', 'MicroIntNeon64_3Reg', numRegs=3)
+ mkMarshalMicroOp('int_neon_uop', 'MicroIntNeon64_4Reg', numRegs=4)
mkMarshalMicroOp('unpack_neon_uop', 'MicroUnpackNeon64')
mkMarshalMicroOp('pack_neon_uop', 'MicroPackNeon64')