Simplify code. No functionality change.
[oota-llvm.git] / lib / Target / X86 / X86ShuffleDecode.h
index 4d24c839f548a66673b263759a220e91718ac7aa..df040520bc8f53d33d83a90dc29563e0a85b66cd 100644 (file)
@@ -26,8 +26,8 @@ enum {
   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);
@@ -50,14 +50,24 @@ static void DecodeINSERTPSMask(unsigned Imm,
   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,