X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FX86%2FX86ShuffleDecode.h;h=df040520bc8f53d33d83a90dc29563e0a85b66cd;hb=983839609ffa589cda60efaea847eecede77b524;hp=4d24c839f548a66673b263759a220e91718ac7aa;hpb=6b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3;p=oota-llvm.git diff --git a/lib/Target/X86/X86ShuffleDecode.h b/lib/Target/X86/X86ShuffleDecode.h index 4d24c839f54..df040520bc8 100644 --- a/lib/Target/X86/X86ShuffleDecode.h +++ b/lib/Target/X86/X86ShuffleDecode.h @@ -26,8 +26,8 @@ enum { SM_SentinelZero = ~0U }; -static void DecodeINSERTPSMask(unsigned Imm, - SmallVectorImpl &ShuffleMask) { +static inline +void DecodeINSERTPSMask(unsigned Imm, SmallVectorImpl &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 &ShuffleMask) { - ShuffleMask.push_back(3); - ShuffleMask.push_back(1); +// <3,1> or <6,7,2,3> +static void DecodeMOVHLPSMask(unsigned NElts, + SmallVectorImpl &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 &ShuffleMask) { - ShuffleMask.push_back(0); - ShuffleMask.push_back(2); +// <0,2> or <0,1,4,5> +static void DecodeMOVLHPSMask(unsigned NElts, + SmallVectorImpl &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,