SM_SentinelZero = ~0U
};
-static void DecodeINSERTPSMask(unsigned Imm,
- SmallVectorImpl<unsigned> &ShuffleMask) {
+static inline
+void DecodeINSERTPSMask(unsigned Imm, SmallVectorImpl<unsigned> &ShuffleMask) {
// Defaults the copying the dest value.
ShuffleMask.push_back(0);
ShuffleMask.push_back(1);
if (ZMask & 8) ShuffleMask[3] = SM_SentinelZero;
}
-static void DecodeMOVHLPSMask(SmallVectorImpl<unsigned> &ShuffleMask) {
- ShuffleMask.push_back(3);
- ShuffleMask.push_back(1);
+// <3,1> or <6,7,2,3>
+static void DecodeMOVHLPSMask(unsigned NElts,
+ SmallVectorImpl<unsigned> &ShuffleMask) {
+ for (unsigned i = NElts/2; i != NElts; ++i)
+ ShuffleMask.push_back(NElts+i);
+
+ for (unsigned i = NElts/2; i != NElts; ++i)
+ ShuffleMask.push_back(i);
}
-static void DecodeMOVLHPSMask(SmallVectorImpl<unsigned> &ShuffleMask) {
- ShuffleMask.push_back(0);
- ShuffleMask.push_back(2);
+// <0,2> or <0,1,4,5>
+static void DecodeMOVLHPSMask(unsigned NElts,
+ SmallVectorImpl<unsigned> &ShuffleMask) {
+ for (unsigned i = 0; i != NElts/2; ++i)
+ ShuffleMask.push_back(i);
+
+ for (unsigned i = 0; i != NElts/2; ++i)
+ ShuffleMask.push_back(NElts+i);
}
static void DecodePSHUFMask(unsigned NElts, unsigned Imm,