diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2010-09-02 22:43:39 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2010-09-02 22:43:39 +0000 |
commit | 02a05a6a89fb8e7220add5e7ad785d9c4031c3a9 (patch) | |
tree | 6dd6710791ede0338e2fa626619100d8e992c443 /llvm/lib/Target/X86/X86ShuffleDecode.h | |
parent | 0744bfa2a8552850d6bd4ca557be157051eee9bb (diff) | |
download | bcm5719-llvm-02a05a6a89fb8e7220add5e7ad785d9c4031c3a9.tar.gz bcm5719-llvm-02a05a6a89fb8e7220add5e7ad785d9c4031c3a9.zip |
Move insertps mask decoding to header file
llvm-svn: 112896
Diffstat (limited to 'llvm/lib/Target/X86/X86ShuffleDecode.h')
-rw-r--r-- | llvm/lib/Target/X86/X86ShuffleDecode.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ShuffleDecode.h b/llvm/lib/Target/X86/X86ShuffleDecode.h index 818f7ca74b6..df040520bc8 100644 --- a/llvm/lib/Target/X86/X86ShuffleDecode.h +++ b/llvm/lib/Target/X86/X86ShuffleDecode.h @@ -26,6 +26,30 @@ enum { SM_SentinelZero = ~0U }; +static inline +void DecodeINSERTPSMask(unsigned Imm, SmallVectorImpl<unsigned> &ShuffleMask) { + // Defaults the copying the dest value. + ShuffleMask.push_back(0); + ShuffleMask.push_back(1); + ShuffleMask.push_back(2); + ShuffleMask.push_back(3); + + // Decode the immediate. + unsigned ZMask = Imm & 15; + unsigned CountD = (Imm >> 4) & 3; + unsigned CountS = (Imm >> 6) & 3; + + // CountS selects which input element to use. + unsigned InVal = 4+CountS; + // CountD specifies which element of destination to update. + ShuffleMask[CountD] = InVal; + // ZMask zaps values, potentially overriding the CountD elt. + if (ZMask & 1) ShuffleMask[0] = SM_SentinelZero; + if (ZMask & 2) ShuffleMask[1] = SM_SentinelZero; + if (ZMask & 4) ShuffleMask[2] = SM_SentinelZero; + if (ZMask & 8) ShuffleMask[3] = SM_SentinelZero; +} + // <3,1> or <6,7,2,3> static void DecodeMOVHLPSMask(unsigned NElts, SmallVectorImpl<unsigned> &ShuffleMask) { |