aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/X86/X86ShuffleDecode.h
diff options
context:
space:
mode:
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-09-02 22:43:39 +0000
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>2010-09-02 22:43:39 +0000
commited5c711a6e1b3d03952c670c5c0c1c3ed6c63ad4 (patch)
tree0f1719aa428916e795e6c792fff87f0d9ebd3aa8 /lib/Target/X86/X86ShuffleDecode.h
parent7e5c1a9790109ceb76576153c43a574c28fe0749 (diff)
downloadexternal_llvm-ed5c711a6e1b3d03952c670c5c0c1c3ed6c63ad4.zip
external_llvm-ed5c711a6e1b3d03952c670c5c0c1c3ed6c63ad4.tar.gz
external_llvm-ed5c711a6e1b3d03952c670c5c0c1c3ed6c63ad4.tar.bz2
Move insertps mask decoding to header file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112896 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/X86ShuffleDecode.h')
-rw-r--r--lib/Target/X86/X86ShuffleDecode.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/Target/X86/X86ShuffleDecode.h b/lib/Target/X86/X86ShuffleDecode.h
index 818f7ca..df04052 100644
--- a/lib/Target/X86/X86ShuffleDecode.h
+++ b/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) {