16aa928d57a73a557d838f62af84e929bed0f276eChris Lattner//===-- X86InstComments.cpp - Generate verbose-asm comments for instrs ----===// 26aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// 36aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// The LLVM Compiler Infrastructure 46aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// 56aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// This file is distributed under the University of Illinois Open Source 66aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// License. See LICENSE.TXT for details. 76aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// 86aa928d57a73a557d838f62af84e929bed0f276eChris Lattner//===----------------------------------------------------------------------===// 96aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// 106aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// This defines functionality used to emit comments about X86 instructions to 116aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// an output stream for -fverbose-asm. 126aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// 136aa928d57a73a557d838f62af84e929bed0f276eChris Lattner//===----------------------------------------------------------------------===// 146aa928d57a73a557d838f62af84e929bed0f276eChris Lattner 156aa928d57a73a557d838f62af84e929bed0f276eChris Lattner#include "X86InstComments.h" 16ed5e3552147830159a1d48d067dfbb49ac9cccfdEvan Cheng#include "MCTargetDesc/X86MCTargetDesc.h" 1794b9550a32d189704a8eae55505edf62662c0534Evan Cheng#include "Utils/X86ShuffleDecode.h" 186aa928d57a73a557d838f62af84e929bed0f276eChris Lattner#include "llvm/MC/MCInst.h" 1936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines#include "llvm/CodeGen/MachineValueType.h" 206aa928d57a73a557d838f62af84e929bed0f276eChris Lattner#include "llvm/Support/raw_ostream.h" 2136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines 226aa928d57a73a557d838f62af84e929bed0f276eChris Lattnerusing namespace llvm; 236aa928d57a73a557d838f62af84e929bed0f276eChris Lattner 246aa928d57a73a557d838f62af84e929bed0f276eChris Lattner//===----------------------------------------------------------------------===// 256aa928d57a73a557d838f62af84e929bed0f276eChris Lattner// Top Level Entrypoint 266aa928d57a73a557d838f62af84e929bed0f276eChris Lattner//===----------------------------------------------------------------------===// 276aa928d57a73a557d838f62af84e929bed0f276eChris Lattner 286aa928d57a73a557d838f62af84e929bed0f276eChris Lattner/// EmitAnyX86InstComments - This function decodes x86 instructions and prints 296aa928d57a73a557d838f62af84e929bed0f276eChris Lattner/// newline terminated strings to the specified string if desired. This 306aa928d57a73a557d838f62af84e929bed0f276eChris Lattner/// information is shown in disassembly dumps when verbose assembly is enabled. 316aa928d57a73a557d838f62af84e929bed0f276eChris Lattnervoid llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, 326aa928d57a73a557d838f62af84e929bed0f276eChris Lattner const char *(*getRegName)(unsigned)) { 336aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // If this is a shuffle operation, the switch should fill in this state. 34a1ffc681ed7372bd371c44a6e186291b6416fe47Craig Topper SmallVector<int, 8> ShuffleMask; 35dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr; 366b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 376aa928d57a73a557d838f62af84e929bed0f276eChris Lattner switch (MI->getOpcode()) { 386aa928d57a73a557d838f62af84e929bed0f276eChris Lattner case X86::INSERTPSrr: 39796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VINSERTPSrr: 40796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 416aa928d57a73a557d838f62af84e929bed0f276eChris Lattner Src1Name = getRegName(MI->getOperand(1).getReg()); 426aa928d57a73a557d838f62af84e929bed0f276eChris Lattner Src2Name = getRegName(MI->getOperand(2).getReg()); 4336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(3).isImm()) 4436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodeINSERTPSMask(MI->getOperand(3).getImm(), ShuffleMask); 456aa928d57a73a557d838f62af84e929bed0f276eChris Lattner break; 466b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 474644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::MOVLHPSrr: 48796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VMOVLHPSrr: 49796c193768547459cd6cbd667c8a43fedd601022Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 50796c193768547459cd6cbd667c8a43fedd601022Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 51796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 52796c193768547459cd6cbd667c8a43fedd601022Craig Topper DecodeMOVLHPSMask(2, ShuffleMask); 53796c193768547459cd6cbd667c8a43fedd601022Craig Topper break; 546b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 554644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::MOVHLPSrr: 56796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VMOVHLPSrr: 57796c193768547459cd6cbd667c8a43fedd601022Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 58796c193768547459cd6cbd667c8a43fedd601022Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 59796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 60796c193768547459cd6cbd667c8a43fedd601022Craig Topper DecodeMOVHLPSMask(2, ShuffleMask); 61796c193768547459cd6cbd667c8a43fedd601022Craig Topper break; 626b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 63200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer case X86::PALIGNR128rr: 64200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer case X86::VPALIGNR128rr: 65200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer Src1Name = getRegName(MI->getOperand(2).getReg()); 66200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer // FALL THROUGH. 67200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer case X86::PALIGNR128rm: 68200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer case X86::VPALIGNR128rm: 69200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer Src2Name = getRegName(MI->getOperand(1).getReg()); 70200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer DestName = getRegName(MI->getOperand(0).getReg()); 7136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 7236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePALIGNRMask(MVT::v16i8, 7336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 7436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 75200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer break; 76200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer case X86::VPALIGNR256rr: 77200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer Src1Name = getRegName(MI->getOperand(2).getReg()); 78200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer // FALL THROUGH. 79200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer case X86::VPALIGNR256rm: 80200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer Src2Name = getRegName(MI->getOperand(1).getReg()); 81200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer DestName = getRegName(MI->getOperand(0).getReg()); 8236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 8336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePALIGNRMask(MVT::v32i8, 8436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 8536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 8653597b2c5cd0ace8683fd7aab33f8d40c085a49dCraig Topper break; 87200b306f2006533a0e7a0ca75cb3103620e7aa84Benjamin Kramer 886aa928d57a73a557d838f62af84e929bed0f276eChris Lattner case X86::PSHUFDri: 89796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VPSHUFDri: 906aa928d57a73a557d838f62af84e929bed0f276eChris Lattner Src1Name = getRegName(MI->getOperand(1).getReg()); 916aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // FALL THROUGH. 926aa928d57a73a557d838f62af84e929bed0f276eChris Lattner case X86::PSHUFDmi: 93796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VPSHUFDmi: 946aa928d57a73a557d838f62af84e929bed0f276eChris Lattner DestName = getRegName(MI->getOperand(0).getReg()); 9536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 9636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFMask(MVT::v4i32, 9736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 9836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 99d156dc11f9acd83e3369c069d5006a0203be13d6Craig Topper break; 100d156dc11f9acd83e3369c069d5006a0203be13d6Craig Topper case X86::VPSHUFDYri: 101d156dc11f9acd83e3369c069d5006a0203be13d6Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 102d156dc11f9acd83e3369c069d5006a0203be13d6Craig Topper // FALL THROUGH. 103d156dc11f9acd83e3369c069d5006a0203be13d6Craig Topper case X86::VPSHUFDYmi: 104d156dc11f9acd83e3369c069d5006a0203be13d6Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 10536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 10636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFMask(MVT::v8i32, 10736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 10836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 1096aa928d57a73a557d838f62af84e929bed0f276eChris Lattner break; 1106b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 111d156dc11f9acd83e3369c069d5006a0203be13d6Craig Topper 1124644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PSHUFHWri: 113796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VPSHUFHWri: 1144644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner Src1Name = getRegName(MI->getOperand(1).getReg()); 1154644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner // FALL THROUGH. 1164644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PSHUFHWmi: 117796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VPSHUFHWmi: 1184644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner DestName = getRegName(MI->getOperand(0).getReg()); 11936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 12036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFHWMask(MVT::v8i16, 12136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 12236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 123a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper break; 124a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper case X86::VPSHUFHWYri: 125a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 126a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper // FALL THROUGH. 127a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper case X86::VPSHUFHWYmi: 128a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper DestName = getRegName(MI->getOperand(0).getReg()); 12936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 13036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFHWMask(MVT::v16i16, 13136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 13236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 1334644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 1344644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PSHUFLWri: 135796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VPSHUFLWri: 1364644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner Src1Name = getRegName(MI->getOperand(1).getReg()); 1374644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner // FALL THROUGH. 1384644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PSHUFLWmi: 139796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VPSHUFLWmi: 1404644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner DestName = getRegName(MI->getOperand(0).getReg()); 14136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 14236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFLWMask(MVT::v8i16, 14336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 14436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 145a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper break; 146a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper case X86::VPSHUFLWYri: 147a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 148a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper // FALL THROUGH. 149a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper case X86::VPSHUFLWYmi: 150a9a568a79dbaf7315db863b4808d31ad9f5f91dcCraig Topper DestName = getRegName(MI->getOperand(0).getReg()); 15136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 15236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFLWMask(MVT::v16i16, 15336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 15436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 1554644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 1566b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 1574644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PUNPCKHBWrr: 1583d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHBWrr: 1593d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 1603d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 161e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::PUNPCKHBWrm: 1623d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHBWrm: 1633d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 1643d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 1653d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v16i8, ShuffleMask); 1663d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper break; 1673d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHBWYrr: 1683d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 1693d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 1703d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHBWYrm: 1713d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 1723d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 1733d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v32i8, ShuffleMask); 1744644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 1754644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PUNPCKHWDrr: 1763d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHWDrr: 1773d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 1783d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 179e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::PUNPCKHWDrm: 1803d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHWDrm: 1813d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 1823d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 1833d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v8i16, ShuffleMask); 1843d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper break; 1853d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHWDYrr: 1863d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 1873d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 1883d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHWDYrm: 1893d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 1903d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 1913d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v16i16, ShuffleMask); 1924644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 1934644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PUNPCKHDQrr: 1943d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHDQrr: 1953d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 1963d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 197e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::PUNPCKHDQrm: 1983d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHDQrm: 1993d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2003d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2013d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v4i32, ShuffleMask); 2023d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper break; 2033d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHDQYrr: 2043d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2053d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 2063d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHDQYrm: 2073d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2083d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2093d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v8i32, ShuffleMask); 2104644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 2114644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PUNPCKHQDQrr: 2123d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHQDQrr: 2133d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2143d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 215e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::PUNPCKHQDQrm: 2163d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHQDQrm: 2173d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2183d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2193d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v2i64, ShuffleMask); 2203d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper break; 2213d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHQDQYrr: 2223d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2233d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 2243d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKHQDQYrm: 2253d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2263d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2273d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v4i64, ShuffleMask); 2284644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 2296b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 2304644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PUNPCKLBWrr: 2313d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLBWrr: 2323d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2333d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 234e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::PUNPCKLBWrm: 2353d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLBWrm: 2363d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2373d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2383d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v16i8, ShuffleMask); 2393d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper break; 2403d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLBWYrr: 2413d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2423d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 2433d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLBWYrm: 2443d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2453d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2463d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v32i8, ShuffleMask); 2474644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 2484644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PUNPCKLWDrr: 2493d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLWDrr: 2503d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2513d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 252e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::PUNPCKLWDrm: 2533d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLWDrm: 2543d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2553d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2563d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v8i16, ShuffleMask); 2573d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper break; 2583d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLWDYrr: 2593d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2603d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 2613d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLWDYrm: 2623d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2633d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2643d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v16i16, ShuffleMask); 2654644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 2664644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PUNPCKLDQrr: 2673d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLDQrr: 2683d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2693d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 270e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::PUNPCKLDQrm: 2713d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLDQrm: 2723d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2733d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2743d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v4i32, ShuffleMask); 2753d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper break; 2763d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLDQYrr: 2773d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2783d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 2793d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLDQYrm: 2803d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2813d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2823d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v8i32, ShuffleMask); 2834644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 2844644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::PUNPCKLQDQrr: 2853d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLQDQrr: 2863d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2873d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 288e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::PUNPCKLQDQrm: 2893d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLQDQrm: 2903d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2913d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 2923d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v2i64, ShuffleMask); 2933d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper break; 2943d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLQDQYrr: 2953d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 2963d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper // FALL THROUGH. 2973d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper case X86::VPUNPCKLQDQYrm: 2983d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 2993d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 3003d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v4i64, ShuffleMask); 3014644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner break; 3026b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 3036aa928d57a73a557d838f62af84e929bed0f276eChris Lattner case X86::SHUFPDrri: 304796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VSHUFPDrri: 305796c193768547459cd6cbd667c8a43fedd601022Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 306796c193768547459cd6cbd667c8a43fedd601022Craig Topper // FALL THROUGH. 307e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::SHUFPDrmi: 308796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VSHUFPDrmi: 30936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 31036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodeSHUFPMask(MVT::v2f64, 31136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 31236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 31336e36ace77cf84d7c8326957925550624b3fc89cCraig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 31436e36ace77cf84d7c8326957925550624b3fc89cCraig Topper DestName = getRegName(MI->getOperand(0).getReg()); 31536e36ace77cf84d7c8326957925550624b3fc89cCraig Topper break; 31636e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VSHUFPDYrri: 31736e36ace77cf84d7c8326957925550624b3fc89cCraig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 31836e36ace77cf84d7c8326957925550624b3fc89cCraig Topper // FALL THROUGH. 31936e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VSHUFPDYrmi: 32036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 32136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodeSHUFPMask(MVT::v4f64, 32236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 32336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 324796c193768547459cd6cbd667c8a43fedd601022Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 325796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 326796c193768547459cd6cbd667c8a43fedd601022Craig Topper break; 3276b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 3286aa928d57a73a557d838f62af84e929bed0f276eChris Lattner case X86::SHUFPSrri: 329796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VSHUFPSrri: 330796c193768547459cd6cbd667c8a43fedd601022Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 331796c193768547459cd6cbd667c8a43fedd601022Craig Topper // FALL THROUGH. 332e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::SHUFPSrmi: 333796c193768547459cd6cbd667c8a43fedd601022Craig Topper case X86::VSHUFPSrmi: 33436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 33536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodeSHUFPMask(MVT::v4f32, 33636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 33736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 33836e36ace77cf84d7c8326957925550624b3fc89cCraig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 33936e36ace77cf84d7c8326957925550624b3fc89cCraig Topper DestName = getRegName(MI->getOperand(0).getReg()); 34036e36ace77cf84d7c8326957925550624b3fc89cCraig Topper break; 34136e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VSHUFPSYrri: 34236e36ace77cf84d7c8326957925550624b3fc89cCraig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 34336e36ace77cf84d7c8326957925550624b3fc89cCraig Topper // FALL THROUGH. 34436e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VSHUFPSYrmi: 34536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 34636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodeSHUFPMask(MVT::v8f32, 34736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 34836b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 349796c193768547459cd6cbd667c8a43fedd601022Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 350796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 351796c193768547459cd6cbd667c8a43fedd601022Craig Topper break; 3526b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 3534644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::UNPCKLPDrr: 354c4db4e5105ccd82df19f141957511f735a9be2d0David Greene case X86::VUNPCKLPDrr: 355c4db4e5105ccd82df19f141957511f735a9be2d0David Greene Src2Name = getRegName(MI->getOperand(2).getReg()); 356c4db4e5105ccd82df19f141957511f735a9be2d0David Greene // FALL THROUGH. 357e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::UNPCKLPDrm: 358c4db4e5105ccd82df19f141957511f735a9be2d0David Greene case X86::VUNPCKLPDrm: 3593d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v2f64, ShuffleMask); 360c4db4e5105ccd82df19f141957511f735a9be2d0David Greene Src1Name = getRegName(MI->getOperand(1).getReg()); 361796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 362c4db4e5105ccd82df19f141957511f735a9be2d0David Greene break; 363c4db4e5105ccd82df19f141957511f735a9be2d0David Greene case X86::VUNPCKLPDYrr: 364c4db4e5105ccd82df19f141957511f735a9be2d0David Greene Src2Name = getRegName(MI->getOperand(2).getReg()); 365c4db4e5105ccd82df19f141957511f735a9be2d0David Greene // FALL THROUGH. 366c4db4e5105ccd82df19f141957511f735a9be2d0David Greene case X86::VUNPCKLPDYrm: 3673d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v4f64, ShuffleMask); 368c4db4e5105ccd82df19f141957511f735a9be2d0David Greene Src1Name = getRegName(MI->getOperand(1).getReg()); 369796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 370c4db4e5105ccd82df19f141957511f735a9be2d0David Greene break; 3716aa928d57a73a557d838f62af84e929bed0f276eChris Lattner case X86::UNPCKLPSrr: 372c4db4e5105ccd82df19f141957511f735a9be2d0David Greene case X86::VUNPCKLPSrr: 373c4db4e5105ccd82df19f141957511f735a9be2d0David Greene Src2Name = getRegName(MI->getOperand(2).getReg()); 374c4db4e5105ccd82df19f141957511f735a9be2d0David Greene // FALL THROUGH. 375e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::UNPCKLPSrm: 376c4db4e5105ccd82df19f141957511f735a9be2d0David Greene case X86::VUNPCKLPSrm: 3773d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v4f32, ShuffleMask); 378c4db4e5105ccd82df19f141957511f735a9be2d0David Greene Src1Name = getRegName(MI->getOperand(1).getReg()); 379796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 380c4db4e5105ccd82df19f141957511f735a9be2d0David Greene break; 381c4db4e5105ccd82df19f141957511f735a9be2d0David Greene case X86::VUNPCKLPSYrr: 382c4db4e5105ccd82df19f141957511f735a9be2d0David Greene Src2Name = getRegName(MI->getOperand(2).getReg()); 383c4db4e5105ccd82df19f141957511f735a9be2d0David Greene // FALL THROUGH. 384c4db4e5105ccd82df19f141957511f735a9be2d0David Greene case X86::VUNPCKLPSYrm: 3853d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKLMask(MVT::v8f32, ShuffleMask); 386c4db4e5105ccd82df19f141957511f735a9be2d0David Greene Src1Name = getRegName(MI->getOperand(1).getReg()); 387796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 388c4db4e5105ccd82df19f141957511f735a9be2d0David Greene break; 3894644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::UNPCKHPDrr: 390f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper case X86::VUNPCKHPDrr: 391f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 392f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper // FALL THROUGH. 393e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::UNPCKHPDrm: 394f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper case X86::VUNPCKHPDrm: 3953d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v2f64, ShuffleMask); 396f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 397796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 398f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper break; 399f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper case X86::VUNPCKHPDYrr: 400f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 401f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper // FALL THROUGH. 402f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper case X86::VUNPCKHPDYrm: 4033d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v4f64, ShuffleMask); 404f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 405796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 406f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper break; 4074644a936dc2e90d24c22c0cdbbf5038eef7830a9Chris Lattner case X86::UNPCKHPSrr: 408f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper case X86::VUNPCKHPSrr: 409f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 410f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper // FALL THROUGH. 411e6482fabd20a2a5b4f81aff55812782f3b617514Craig Topper case X86::UNPCKHPSrm: 412f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper case X86::VUNPCKHPSrm: 4133d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v4f32, ShuffleMask); 414f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 415796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 416f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper break; 417f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper case X86::VUNPCKHPSYrr: 418f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper Src2Name = getRegName(MI->getOperand(2).getReg()); 419f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper // FALL THROUGH. 420f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper case X86::VUNPCKHPSYrm: 4213d8c2ce3e44bc161118a8922e7aa412ef00f6034Craig Topper DecodeUNPCKHMask(MVT::v8f32, ShuffleMask); 422f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 423796c193768547459cd6cbd667c8a43fedd601022Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 424f7de577a08a705970f0fd8f3c1bb40f7040e4476Craig Topper break; 4252eb4c2bcadfbef9d3c4e2fbb6478ed5dc3d65524Bruno Cardoso Lopes case X86::VPERMILPSri: 42636e36ace77cf84d7c8326957925550624b3fc89cCraig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 42736e36ace77cf84d7c8326957925550624b3fc89cCraig Topper // FALL THROUGH. 42836e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VPERMILPSmi: 42936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 43036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFMask(MVT::v4f32, 43136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 43236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 43336e36ace77cf84d7c8326957925550624b3fc89cCraig Topper DestName = getRegName(MI->getOperand(0).getReg()); 4348036586229e3e2eac29af435ab325b89019a1097Duncan Sands break; 43565b74e1d00eef81b596b4c207fba069aa1eb8214Bruno Cardoso Lopes case X86::VPERMILPSYri: 43636e36ace77cf84d7c8326957925550624b3fc89cCraig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 43736e36ace77cf84d7c8326957925550624b3fc89cCraig Topper // FALL THROUGH. 43836e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VPERMILPSYmi: 43936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 44036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFMask(MVT::v8f32, 44136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 44236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 44336e36ace77cf84d7c8326957925550624b3fc89cCraig Topper DestName = getRegName(MI->getOperand(0).getReg()); 44465b74e1d00eef81b596b4c207fba069aa1eb8214Bruno Cardoso Lopes break; 4452eb4c2bcadfbef9d3c4e2fbb6478ed5dc3d65524Bruno Cardoso Lopes case X86::VPERMILPDri: 44636e36ace77cf84d7c8326957925550624b3fc89cCraig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 44736e36ace77cf84d7c8326957925550624b3fc89cCraig Topper // FALL THROUGH. 44836e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VPERMILPDmi: 44936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 45036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFMask(MVT::v2f64, 45136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 45236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 45336e36ace77cf84d7c8326957925550624b3fc89cCraig Topper DestName = getRegName(MI->getOperand(0).getReg()); 4542eb4c2bcadfbef9d3c4e2fbb6478ed5dc3d65524Bruno Cardoso Lopes break; 45565b74e1d00eef81b596b4c207fba069aa1eb8214Bruno Cardoso Lopes case X86::VPERMILPDYri: 45636e36ace77cf84d7c8326957925550624b3fc89cCraig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 45736e36ace77cf84d7c8326957925550624b3fc89cCraig Topper // FALL THROUGH. 45836e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VPERMILPDYmi: 45936b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 46036b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodePSHUFMask(MVT::v4f64, 46136b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 46236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 46336e36ace77cf84d7c8326957925550624b3fc89cCraig Topper DestName = getRegName(MI->getOperand(0).getReg()); 46465b74e1d00eef81b596b4c207fba069aa1eb8214Bruno Cardoso Lopes break; 46553cae1362dca8aa312c3e36c10b106ea7d349f93Bruno Cardoso Lopes case X86::VPERM2F128rr: 46636e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VPERM2I128rr: 46753cae1362dca8aa312c3e36c10b106ea7d349f93Bruno Cardoso Lopes Src2Name = getRegName(MI->getOperand(2).getReg()); 46836e36ace77cf84d7c8326957925550624b3fc89cCraig Topper // FALL THROUGH. 46936e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VPERM2F128rm: 47036e36ace77cf84d7c8326957925550624b3fc89cCraig Topper case X86::VPERM2I128rm: 471d156dc11f9acd83e3369c069d5006a0203be13d6Craig Topper // For instruction comments purpose, assume the 256-bit vector is v4i64. 47236b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 47336b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodeVPERM2X128Mask(MVT::v4i64, 47436b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 47536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 47636e36ace77cf84d7c8326957925550624b3fc89cCraig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 47736e36ace77cf84d7c8326957925550624b3fc89cCraig Topper DestName = getRegName(MI->getOperand(0).getReg()); 47853cae1362dca8aa312c3e36c10b106ea7d349f93Bruno Cardoso Lopes break; 479156f5bb56e2730013fcddf90e8cad0e5e3ee1928Craig Topper case X86::VPERMQYri: 480156f5bb56e2730013fcddf90e8cad0e5e3ee1928Craig Topper case X86::VPERMPDYri: 481156f5bb56e2730013fcddf90e8cad0e5e3ee1928Craig Topper Src1Name = getRegName(MI->getOperand(1).getReg()); 482156f5bb56e2730013fcddf90e8cad0e5e3ee1928Craig Topper // FALL THROUGH. 483156f5bb56e2730013fcddf90e8cad0e5e3ee1928Craig Topper case X86::VPERMQYmi: 484156f5bb56e2730013fcddf90e8cad0e5e3ee1928Craig Topper case X86::VPERMPDYmi: 48536b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 48636b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines DecodeVPERMMask(MI->getOperand(MI->getNumOperands()-1).getImm(), 48736b56886974eae4f9c5ebc96befd3e7bfe5de338Stephen Hines ShuffleMask); 488156f5bb56e2730013fcddf90e8cad0e5e3ee1928Craig Topper DestName = getRegName(MI->getOperand(0).getReg()); 489156f5bb56e2730013fcddf90e8cad0e5e3ee1928Craig Topper break; 4906aa928d57a73a557d838f62af84e929bed0f276eChris Lattner } 4916aa928d57a73a557d838f62af84e929bed0f276eChris Lattner 4926b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 4936aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // If this was a shuffle operation, print the shuffle mask. 4946aa928d57a73a557d838f62af84e929bed0f276eChris Lattner if (!ShuffleMask.empty()) { 495dce4a407a24b04eebc6a376f8e62b41aaa7b071fStephen Hines if (!DestName) DestName = Src1Name; 4966aa928d57a73a557d838f62af84e929bed0f276eChris Lattner OS << (DestName ? DestName : "mem") << " = "; 4976b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 4986aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // If the two sources are the same, canonicalize the input elements to be 4996aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // from the first src so that we get larger element spans. 5006aa928d57a73a557d838f62af84e929bed0f276eChris Lattner if (Src1Name == Src2Name) { 5016aa928d57a73a557d838f62af84e929bed0f276eChris Lattner for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) { 5026aa928d57a73a557d838f62af84e929bed0f276eChris Lattner if ((int)ShuffleMask[i] >= 0 && // Not sentinel. 503a1ffc681ed7372bd371c44a6e186291b6416fe47Craig Topper ShuffleMask[i] >= (int)e) // From second mask. 5046aa928d57a73a557d838f62af84e929bed0f276eChris Lattner ShuffleMask[i] -= e; 5056aa928d57a73a557d838f62af84e929bed0f276eChris Lattner } 5066aa928d57a73a557d838f62af84e929bed0f276eChris Lattner } 5076b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 5086aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // The shuffle mask specifies which elements of the src1/src2 fill in the 5096aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // destination, with a few sentinel values. Loop through and print them 5106aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // out. 5116aa928d57a73a557d838f62af84e929bed0f276eChris Lattner for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) { 5126aa928d57a73a557d838f62af84e929bed0f276eChris Lattner if (i != 0) 5136aa928d57a73a557d838f62af84e929bed0f276eChris Lattner OS << ','; 51447817f30f28118ba278ab11740fa9f0adcfb462dBenjamin Kramer if (ShuffleMask[i] == SM_SentinelZero) { 5156aa928d57a73a557d838f62af84e929bed0f276eChris Lattner OS << "zero"; 5166aa928d57a73a557d838f62af84e929bed0f276eChris Lattner continue; 5176aa928d57a73a557d838f62af84e929bed0f276eChris Lattner } 5186b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 5196aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // Otherwise, it must come from src1 or src2. Print the span of elements 5206aa928d57a73a557d838f62af84e929bed0f276eChris Lattner // that comes from this src. 521a1ffc681ed7372bd371c44a6e186291b6416fe47Craig Topper bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size(); 5226aa928d57a73a557d838f62af84e929bed0f276eChris Lattner const char *SrcName = isSrc1 ? Src1Name : Src2Name; 5236aa928d57a73a557d838f62af84e929bed0f276eChris Lattner OS << (SrcName ? SrcName : "mem") << '['; 5246aa928d57a73a557d838f62af84e929bed0f276eChris Lattner bool IsFirst = true; 5256aa928d57a73a557d838f62af84e929bed0f276eChris Lattner while (i != e && 5266aa928d57a73a557d838f62af84e929bed0f276eChris Lattner (int)ShuffleMask[i] >= 0 && 527a1ffc681ed7372bd371c44a6e186291b6416fe47Craig Topper (ShuffleMask[i] < (int)ShuffleMask.size()) == isSrc1) { 5286aa928d57a73a557d838f62af84e929bed0f276eChris Lattner if (!IsFirst) 5296aa928d57a73a557d838f62af84e929bed0f276eChris Lattner OS << ','; 5306aa928d57a73a557d838f62af84e929bed0f276eChris Lattner else 5316aa928d57a73a557d838f62af84e929bed0f276eChris Lattner IsFirst = false; 5326aa928d57a73a557d838f62af84e929bed0f276eChris Lattner OS << ShuffleMask[i] % ShuffleMask.size(); 5336aa928d57a73a557d838f62af84e929bed0f276eChris Lattner ++i; 5346aa928d57a73a557d838f62af84e929bed0f276eChris Lattner } 5356aa928d57a73a557d838f62af84e929bed0f276eChris Lattner OS << ']'; 5366aa928d57a73a557d838f62af84e929bed0f276eChris Lattner --i; // For loop increments element #. 5376aa928d57a73a557d838f62af84e929bed0f276eChris Lattner } 5386aa928d57a73a557d838f62af84e929bed0f276eChris Lattner //MI->print(OS, 0); 5396aa928d57a73a557d838f62af84e929bed0f276eChris Lattner OS << "\n"; 5406aa928d57a73a557d838f62af84e929bed0f276eChris Lattner } 5416b1d0a3b366a637c0c96ea5cf7cfd8769469e6f3Bruno Cardoso Lopes 5426aa928d57a73a557d838f62af84e929bed0f276eChris Lattner} 543