44 #ifndef __ARCH_ARM_INSTS_NEON64_MEM_HH__
45 #define __ARCH_ARM_INSTS_NEON64_MEM_HH__
69 int eBits = 8 << eSize;
70 int lsbPos = index * eBits;
72 int shiftAmt = lsbPos % 64;
78 maskBits = maskBits << eBits;
82 XReg sMask = maskBits;
83 maskBits = sMask << shiftAmt;
86 dest->
lo = (dest->
lo & (~maskBits)) | ((src & sMask) << shiftAmt);
88 dest->
hi = (dest->
hi & (~maskBits)) | ((src & sMask) << shiftAmt);
105 int eBits = 8 << eSize;
106 int lsbPos = index * eBits;
107 assert(lsbPos < 128);
108 int shiftAmt = lsbPos % 64;
114 maskBits = maskBits << eBits;
116 maskBits = ~maskBits;
119 data = (src.
lo >> shiftAmt) & maskBits;
121 data = (src.
hi >> shiftAmt) & maskBits;
128 #endif // __ARCH_ARM_INSTS_NEON64_MEM_HH__
128-bit NEON vector register.
void writeVecElem(VReg *dest, XReg src, int index, int eSize)
Write a single NEON vector element leaving the others untouched.
XReg readVecElem(VReg src, int index, int eSize)
Read a single NEON vector element.