diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2010-09-02 21:51:11 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2010-09-02 21:51:11 +0000 |
commit | 814a69c330371d5fcad28715b939609c557e3fdb (patch) | |
tree | 36843c32f6260dfd10535fc6602fb531ea71bfe4 /llvm/lib/Target/X86/AsmPrinter/X86InstComments.cpp | |
parent | 6429f5cf2920a7d95c5ebf1405d675e3a43420b6 (diff) | |
download | bcm5719-llvm-814a69c330371d5fcad28715b939609c557e3fdb.tar.gz bcm5719-llvm-814a69c330371d5fcad28715b939609c557e3fdb.zip |
Move decoding of insertps back to avoid unused warnings in x86 isel lowering, and fix movlhps/movhlps to decode 4 elements shuffles
llvm-svn: 112869
Diffstat (limited to 'llvm/lib/Target/X86/AsmPrinter/X86InstComments.cpp')
-rw-r--r-- | llvm/lib/Target/X86/AsmPrinter/X86InstComments.cpp | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/AsmPrinter/X86InstComments.cpp b/llvm/lib/Target/X86/AsmPrinter/X86InstComments.cpp index fa1e50b1533..61f50652111 100644 --- a/llvm/lib/Target/X86/AsmPrinter/X86InstComments.cpp +++ b/llvm/lib/Target/X86/AsmPrinter/X86InstComments.cpp @@ -20,6 +20,34 @@ using namespace llvm; //===----------------------------------------------------------------------===// +// Vector Mask Decoding for non-shuffles +//===----------------------------------------------------------------------===// + +static 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; +} + +//===----------------------------------------------------------------------===// // Top Level Entrypoint //===----------------------------------------------------------------------===// @@ -42,13 +70,13 @@ void llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, case X86::MOVLHPSrr: Src2Name = getRegName(MI->getOperand(2).getReg()); Src1Name = getRegName(MI->getOperand(0).getReg()); - DecodeMOVLHPSMask(ShuffleMask); + DecodeMOVLHPSMask(2, ShuffleMask); break; case X86::MOVHLPSrr: Src2Name = getRegName(MI->getOperand(2).getReg()); Src1Name = getRegName(MI->getOperand(0).getReg()); - DecodeMOVHLPSMask(ShuffleMask); + DecodeMOVHLPSMask(2, ShuffleMask); break; case X86::PSHUFDri: |