1ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===-- X86InstComments.cpp - Generate verbose-asm comments for instrs ----===// 2ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 3ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// The LLVM Compiler Infrastructure 4ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 5ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// This file is distributed under the University of Illinois Open Source 6ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// License. See LICENSE.TXT for details. 7ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 8ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===// 9ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 10ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// This defines functionality used to emit comments about X86 instructions to 11ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// an output stream for -fverbose-asm. 12ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// 13ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===// 14ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 15ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "X86InstComments.h" 16ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "MCTargetDesc/X86MCTargetDesc.h" 17ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "Utils/X86ShuffleDecode.h" 18ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/MC/MCInst.h" 19ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/CodeGen/MachineValueType.h" 20ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines#include "llvm/Support/raw_ostream.h" 21ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 22ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesusing namespace llvm; 23ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 24ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// \brief Extracts the src/dst types for a given zero extension instruction. 25ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// \note While the number of elements in DstVT type correct, the 26ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// number in the SrcVT type is expanded to fill the src xmm register and the 27ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// upper elements may not be included in the dst xmm/ymm register. 28ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesstatic void getZeroExtensionTypes(const MCInst *MI, MVT &SrcVT, MVT &DstVT) { 29ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines switch (MI->getOpcode()) { 30ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines default: 31ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines llvm_unreachable("Unknown zero extension instruction"); 32ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // i8 zero extension 33ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBWrm: 34ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBWrr: 35ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBWrm: 36ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBWrr: 37ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v16i8; 38ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v8i16; 39ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 40ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBWYrm: 41ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBWYrr: 42ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v16i8; 43ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v16i16; 44ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 45ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBDrm: 46ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBDrr: 47ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBDrm: 48ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBDrr: 49ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v16i8; 50ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v4i32; 51ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 52ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBDYrm: 53ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBDYrr: 54ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v16i8; 55ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v8i32; 56ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 57ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBQrm: 58ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBQrr: 59ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBQrm: 60ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBQrr: 61ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v16i8; 62ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v2i64; 63ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 64ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBQYrm: 65ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBQYrr: 66ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v16i8; 67ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v4i64; 68ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 69ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // i16 zero extension 70ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXWDrm: 71ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXWDrr: 72ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWDrm: 73ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWDrr: 74ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v8i16; 75ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v4i32; 76ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 77ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWDYrm: 78ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWDYrr: 79ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v8i16; 80ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v8i32; 81ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 82ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXWQrm: 83ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXWQrr: 84ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWQrm: 85ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWQrr: 86ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v8i16; 87ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v2i64; 88ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 89ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWQYrm: 90ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWQYrr: 91ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v8i16; 92ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v4i64; 93ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 94ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // i32 zero extension 95ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXDQrm: 96ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXDQrr: 97ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXDQrm: 98ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXDQrr: 99ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v4i32; 100ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v2i64; 101ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 102ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXDQYrm: 103ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXDQYrr: 104ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SrcVT = MVT::v4i32; 105ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DstVT = MVT::v4i64; 106ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 107ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 108ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 109ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 110ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===// 111ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines// Top Level Entrypoint 112ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines//===----------------------------------------------------------------------===// 113ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 114ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// EmitAnyX86InstComments - This function decodes x86 instructions and prints 115ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// newline terminated strings to the specified string if desired. This 116ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines/// information is shown in disassembly dumps when verbose assembly is enabled. 117ebe69fe11e48d322045d5949c83283927a0d790bStephen Hinesbool llvm::EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, 118ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const char *(*getRegName)(unsigned)) { 119ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // If this is a shuffle operation, the switch should fill in this state. 120ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines SmallVector<int, 8> ShuffleMask; 121ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const char *DestName = nullptr, *Src1Name = nullptr, *Src2Name = nullptr; 122ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 123ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines switch (MI->getOpcode()) { 124ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines default: 125ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Not an instruction for which we can decode comments. 126ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return false; 127ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 128ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::BLENDPDrri: 129ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VBLENDPDrri: 130ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 131ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 132ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::BLENDPDrmi: 133ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VBLENDPDrmi: 134ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 135ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeBLENDMask(MVT::v2f64, 136ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 137ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 138ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 139ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 140ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 141ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VBLENDPDYrri: 142ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 143ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 144ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VBLENDPDYrmi: 145ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 146ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeBLENDMask(MVT::v4f64, 147ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 148ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 149ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 150ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 151ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 152ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 153ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::BLENDPSrri: 154ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VBLENDPSrri: 155ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 156ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 157ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::BLENDPSrmi: 158ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VBLENDPSrmi: 159ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 160ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeBLENDMask(MVT::v4f32, 161ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 162ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 163ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 164ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 165ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 166ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VBLENDPSYrri: 167ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 168ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 169ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VBLENDPSYrmi: 170ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 171ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeBLENDMask(MVT::v8f32, 172ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 173ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 174ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 175ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 176ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 177ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 178ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PBLENDWrri: 179ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPBLENDWrri: 180ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 181ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 182ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PBLENDWrmi: 183ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPBLENDWrmi: 184ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 185ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeBLENDMask(MVT::v8i16, 186ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 187ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 188ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 189ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 190ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 191ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPBLENDWYrri: 192ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 193ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 194ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPBLENDWYrmi: 195ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 196ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeBLENDMask(MVT::v16i16, 197ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 198ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 199ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 200ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 201ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 202ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 203ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPBLENDDrri: 204ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 205ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 206ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPBLENDDrmi: 207ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 208ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeBLENDMask(MVT::v4i32, 209ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 210ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 211ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 212ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 213ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 214ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 215ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPBLENDDYrri: 216ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 217ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 218ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPBLENDDYrmi: 219ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 220ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeBLENDMask(MVT::v8i32, 221ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 222ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 223ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 224ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 225ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 226ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 227ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::INSERTPSrr: 228ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VINSERTPSrr: 229ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 230ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 231ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::INSERTPSrm: 232ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VINSERTPSrm: 233ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 234ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 235ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 236ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeINSERTPSMask(MI->getOperand(MI->getNumOperands()-1).getImm(), 237ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 238ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 239ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 240ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVLHPSrr: 241ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVLHPSrr: 242ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 243ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 244ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 245ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeMOVLHPSMask(2, ShuffleMask); 246ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 247ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 248ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVHLPSrr: 249ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVHLPSrr: 250ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 251ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 252ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 253ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeMOVHLPSMask(2, ShuffleMask); 254ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 255ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 256ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVSLDUPrr: 257ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSLDUPrr: 258ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 259ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 260ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVSLDUPrm: 261ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSLDUPrm: 262ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 263ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeMOVSLDUPMask(MVT::v4f32, ShuffleMask); 264ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 265ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 266ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSHDUPYrr: 267ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 268ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 269ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSHDUPYrm: 270ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 271ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeMOVSHDUPMask(MVT::v8f32, ShuffleMask); 272ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 273ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 274ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSLDUPYrr: 275ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 276ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 277ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSLDUPYrm: 278ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 279ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeMOVSLDUPMask(MVT::v8f32, ShuffleMask); 280ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 281ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 282ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVSHDUPrr: 283ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSHDUPrr: 284ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 285ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 286ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVSHDUPrm: 287ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSHDUPrm: 288ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 289ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeMOVSHDUPMask(MVT::v4f32, ShuffleMask); 290ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 291ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 292ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVDDUPYrr: 293ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 294ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 295ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVDDUPYrm: 296ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 297ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeMOVDDUPMask(MVT::v4f64, ShuffleMask); 298ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 299ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 300ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVDDUPrr: 301ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVDDUPrr: 302ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 303ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 304ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVDDUPrm: 305ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVDDUPrm: 306ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 307ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeMOVDDUPMask(MVT::v2f64, ShuffleMask); 308ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 309ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 310ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PSLLDQri: 311ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSLLDQri: 312ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 313ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 314ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 315ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSLLDQMask(MVT::v16i8, 316ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 317ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 318ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 319ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 320ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSLLDQYri: 321ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 322ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 323ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 324ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSLLDQMask(MVT::v32i8, 325ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 326ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 327ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 328ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 329ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PSRLDQri: 330ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSRLDQri: 331ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 332ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 333ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 334ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSRLDQMask(MVT::v16i8, 335ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 336ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 337ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 338ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 339ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSRLDQYri: 340ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 341ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 342ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 343ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSRLDQMask(MVT::v32i8, 344ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 345ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 346ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 347ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 348ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PALIGNR128rr: 349ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPALIGNR128rr: 350ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(2).getReg()); 351ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 352ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PALIGNR128rm: 353ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPALIGNR128rm: 354ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(1).getReg()); 355ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 356ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 357ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePALIGNRMask(MVT::v16i8, 358ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 359ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 360ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 361ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPALIGNR256rr: 362ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(2).getReg()); 363ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 364ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPALIGNR256rm: 365ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(1).getReg()); 366ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 367ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 368ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePALIGNRMask(MVT::v32i8, 369ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 370ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 371ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 372ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 373ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PSHUFDri: 374ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFDri: 375ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 376ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 377ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PSHUFDmi: 378ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFDmi: 379ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 380ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 381ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFMask(MVT::v4i32, 382ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 383ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 384ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 385ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFDYri: 386ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 387ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 388ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFDYmi: 389ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 390ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 391ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFMask(MVT::v8i32, 392ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 393ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 394ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 395ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 396ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 397ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PSHUFHWri: 398ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFHWri: 399ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 400ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 401ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PSHUFHWmi: 402ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFHWmi: 403ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 404ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 405ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFHWMask(MVT::v8i16, 406ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 407ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 408ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 409ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFHWYri: 410ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 411ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 412ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFHWYmi: 413ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 414ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 415ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFHWMask(MVT::v16i16, 416ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 417ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 418ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 419ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PSHUFLWri: 420ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFLWri: 421ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 422ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 423ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PSHUFLWmi: 424ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFLWmi: 425ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 426ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 427ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFLWMask(MVT::v8i16, 428ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 429ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 430ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 431ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFLWYri: 432ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 433ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 434ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPSHUFLWYmi: 435ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 436ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 437ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFLWMask(MVT::v16i16, 438ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 439ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 440ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 441ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 442ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKHBWrr: 443ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHBWrr: 444ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 445ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 446ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKHBWrm: 447ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHBWrm: 448ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 449ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 450ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v16i8, ShuffleMask); 451ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 452ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHBWYrr: 453ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 454ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 455ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHBWYrm: 456ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 457ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 458ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v32i8, ShuffleMask); 459ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 460ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKHWDrr: 461ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHWDrr: 462ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 463ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 464ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKHWDrm: 465ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHWDrm: 466ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 467ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 468ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v8i16, ShuffleMask); 469ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 470ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHWDYrr: 471ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 472ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 473ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHWDYrm: 474ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 475ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 476ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v16i16, ShuffleMask); 477ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 478ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKHDQrr: 479ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHDQrr: 480ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 481ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 482ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKHDQrm: 483ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHDQrm: 484ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 485ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 486ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v4i32, ShuffleMask); 487ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 488ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHDQYrr: 489ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 490ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 491ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHDQYrm: 492ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 493ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 494ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v8i32, ShuffleMask); 495ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 496ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHDQZrr: 497ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 498ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 499ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHDQZrm: 500ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 501ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 502ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v16i32, ShuffleMask); 503ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 504ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKHQDQrr: 505ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHQDQrr: 506ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 507ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 508ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKHQDQrm: 509ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHQDQrm: 510ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 511ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 512ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v2i64, ShuffleMask); 513ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 514ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHQDQYrr: 515ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 516ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 517ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHQDQYrm: 518ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 519ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 520ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v4i64, ShuffleMask); 521ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 522ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHQDQZrr: 523ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 524ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 525ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKHQDQZrm: 526ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 527ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 528ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v8i64, ShuffleMask); 529ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 530ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 531ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKLBWrr: 532ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLBWrr: 533ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 534ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 535ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKLBWrm: 536ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLBWrm: 537ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 538ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 539ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v16i8, ShuffleMask); 540ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 541ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLBWYrr: 542ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 543ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 544ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLBWYrm: 545ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 546ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 547ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v32i8, ShuffleMask); 548ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 549ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKLWDrr: 550ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLWDrr: 551ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 552ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 553ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKLWDrm: 554ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLWDrm: 555ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 556ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 557ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v8i16, ShuffleMask); 558ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 559ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLWDYrr: 560ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 561ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 562ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLWDYrm: 563ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 564ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 565ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v16i16, ShuffleMask); 566ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 567ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKLDQrr: 568ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLDQrr: 569ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 570ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 571ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKLDQrm: 572ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLDQrm: 573ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 574ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 575ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v4i32, ShuffleMask); 576ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 577ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLDQYrr: 578ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 579ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 580ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLDQYrm: 581ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 582ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 583ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v8i32, ShuffleMask); 584ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 585ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLDQZrr: 586ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 587ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 588ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLDQZrm: 589ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 590ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 591ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v16i32, ShuffleMask); 592ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 593ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKLQDQrr: 594ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLQDQrr: 595ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 596ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 597ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PUNPCKLQDQrm: 598ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLQDQrm: 599ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 600ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 601ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v2i64, ShuffleMask); 602ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 603ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLQDQYrr: 604ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 605ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 606ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLQDQYrm: 607ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 608ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 609ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v4i64, ShuffleMask); 610ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 611ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLQDQZrr: 612ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 613ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 614ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPUNPCKLQDQZrm: 615ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 616ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 617ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v8i64, ShuffleMask); 618ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 619ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 620ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::SHUFPDrri: 621ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VSHUFPDrri: 622ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 623ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 624ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::SHUFPDrmi: 625ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VSHUFPDrmi: 626ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 627ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeSHUFPMask(MVT::v2f64, 628ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 629ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 630ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 631ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 632ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 633ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VSHUFPDYrri: 634ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 635ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 636ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VSHUFPDYrmi: 637ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 638ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeSHUFPMask(MVT::v4f64, 639ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 640ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 641ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 642ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 643ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 644ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 645ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::SHUFPSrri: 646ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VSHUFPSrri: 647ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 648ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 649ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::SHUFPSrmi: 650ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VSHUFPSrmi: 651ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 652ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeSHUFPMask(MVT::v4f32, 653ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 654ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 655ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 656ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 657ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 658ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VSHUFPSYrri: 659ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 660ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 661ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VSHUFPSYrmi: 662ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 663ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeSHUFPMask(MVT::v8f32, 664ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 665ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 666ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 667ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 668ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 669ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 670ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::UNPCKLPDrr: 671ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPDrr: 672ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 673ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 674ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::UNPCKLPDrm: 675ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPDrm: 676ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v2f64, ShuffleMask); 677ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 678ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 679ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 680ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPDYrr: 681ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 682ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 683ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPDYrm: 684ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v4f64, ShuffleMask); 685ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 686ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 687ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 688ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPDZrr: 689ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 690ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 691ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPDZrm: 692ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v8f64, ShuffleMask); 693ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 694ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 695ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 696ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::UNPCKLPSrr: 697ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPSrr: 698ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 699ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 700ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::UNPCKLPSrm: 701ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPSrm: 702ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v4f32, ShuffleMask); 703ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 704ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 705ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 706ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPSYrr: 707ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 708ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 709ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPSYrm: 710ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v8f32, ShuffleMask); 711ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 712ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 713ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 714ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPSZrr: 715ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 716ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 717ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKLPSZrm: 718ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKLMask(MVT::v16f32, ShuffleMask); 719ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 720ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 721ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 722ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::UNPCKHPDrr: 723ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPDrr: 724ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 725ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 726ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::UNPCKHPDrm: 727ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPDrm: 728ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v2f64, ShuffleMask); 729ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 730ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 731ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 732ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPDYrr: 733ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 734ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 735ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPDYrm: 736ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v4f64, ShuffleMask); 737ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 738ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 739ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 740ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPDZrr: 741ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 742ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 743ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPDZrm: 744ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v8f64, ShuffleMask); 745ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 746ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 747ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 748ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::UNPCKHPSrr: 749ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPSrr: 750ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 751ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 752ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::UNPCKHPSrm: 753ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPSrm: 754ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v4f32, ShuffleMask); 755ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 756ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 757ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 758ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPSYrr: 759ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 760ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 761ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPSYrm: 762ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v8f32, ShuffleMask); 763ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 764ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 765ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 766ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPSZrr: 767ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 768ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 769ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VUNPCKHPSZrm: 770ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeUNPCKHMask(MVT::v16f32, ShuffleMask); 771ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 772ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 773ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 774ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMILPSri: 775ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 776ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 777ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMILPSmi: 778ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 779ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFMask(MVT::v4f32, 780ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 781ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 782ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 783ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 784ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMILPSYri: 785ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 786ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 787ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMILPSYmi: 788ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 789ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFMask(MVT::v8f32, 790ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 791ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 792ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 793ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 794ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMILPDri: 795ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 796ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 797ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMILPDmi: 798ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 799ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFMask(MVT::v2f64, 800ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 801ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 802ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 803ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 804ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMILPDYri: 805ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 806ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 807ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMILPDYmi: 808ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 809ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodePSHUFMask(MVT::v4f64, 810ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 811ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 812ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 813ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 814ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERM2F128rr: 815ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERM2I128rr: 816ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 817ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 818ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERM2F128rm: 819ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERM2I128rm: 820ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // For instruction comments purpose, assume the 256-bit vector is v4i64. 821ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 822ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeVPERM2X128Mask(MVT::v4i64, 823ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MI->getOperand(MI->getNumOperands()-1).getImm(), 824ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 825ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 826ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 827ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 828ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMQYri: 829ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMPDYri: 830ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 831ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 832ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMQYmi: 833ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPERMPDYmi: 834ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if(MI->getOperand(MI->getNumOperands()-1).isImm()) 835ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeVPERMMask(MI->getOperand(MI->getNumOperands()-1).getImm(), 836ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask); 837ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 838ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 839ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 840ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVSDrr: 841ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSDrr: 842ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 843ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 844ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 845ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVSDrm: 846ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSDrm: 847ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeScalarMoveMask(MVT::v2f64, nullptr == Src2Name, ShuffleMask); 848ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 849ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 850ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVSSrr: 851ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSSrr: 852ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src2Name = getRegName(MI->getOperand(2).getReg()); 853ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 854ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 855ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVSSrm: 856ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVSSrm: 857ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeScalarMoveMask(MVT::v4f32, nullptr == Src2Name, ShuffleMask); 858ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 859ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 860ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 861ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVPQI2QIrr: 862ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVZPQILo2PQIrr: 863ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVPQI2QIrr: 864ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVZPQILo2PQIrr: 865ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 866ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 867ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVQI2PQIrm: 868ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVZQI2PQIrm: 869ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVZPQILo2PQIrm: 870ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVQI2PQIrm: 871ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVZQI2PQIrm: 872ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVZPQILo2PQIrm: 873ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeZeroMoveLowMask(MVT::v2i64, ShuffleMask); 874ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 875ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 876ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::MOVDI2PDIrm: 877ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VMOVDI2PDIrm: 878ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeZeroMoveLowMask(MVT::v4i32, ShuffleMask); 879ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 880ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines break; 881ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 882ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBWrr: 883ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBDrr: 884ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBQrr: 885ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXWDrr: 886ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXWQrr: 887ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXDQrr: 888ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBWrr: 889ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBDrr: 890ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBQrr: 891ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWDrr: 892ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWQrr: 893ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXDQrr: 894ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBWYrr: 895ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBDYrr: 896ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBQYrr: 897ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWDYrr: 898ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWQYrr: 899ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXDQYrr: 900ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines Src1Name = getRegName(MI->getOperand(1).getReg()); 901ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // FALL THROUGH. 902ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBWrm: 903ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBDrm: 904ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXBQrm: 905ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXWDrm: 906ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXWQrm: 907ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::PMOVZXDQrm: 908ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBWrm: 909ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBDrm: 910ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBQrm: 911ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWDrm: 912ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWQrm: 913ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXDQrm: 914ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBWYrm: 915ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBDYrm: 916ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXBQYrm: 917ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWDYrm: 918ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXWQYrm: 919ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines case X86::VPMOVZXDQYrm: { 920ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines MVT SrcVT, DstVT; 921ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines getZeroExtensionTypes(MI, SrcVT, DstVT); 922ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DecodeZeroExtendMask(SrcVT, DstVT, ShuffleMask); 923ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines DestName = getRegName(MI->getOperand(0).getReg()); 924ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } break; 925ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 926ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 927ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // The only comments we decode are shuffles, so give up if we were unable to 928ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // decode a shuffle mask. 929ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (ShuffleMask.empty()) 930ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return false; 931ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 932ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (!DestName) DestName = Src1Name; 933ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines OS << (DestName ? DestName : "mem") << " = "; 934ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 935ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // If the two sources are the same, canonicalize the input elements to be 936ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // from the first src so that we get larger element spans. 937ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (Src1Name == Src2Name) { 938ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) { 939ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if ((int)ShuffleMask[i] >= 0 && // Not sentinel. 940ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask[i] >= (int)e) // From second mask. 941ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ShuffleMask[i] -= e; 942ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 943ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 944ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 945ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // The shuffle mask specifies which elements of the src1/src2 fill in the 946ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // destination, with a few sentinel values. Loop through and print them 947ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // out. 948ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines for (unsigned i = 0, e = ShuffleMask.size(); i != e; ++i) { 949ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (i != 0) 950ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines OS << ','; 951ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (ShuffleMask[i] == SM_SentinelZero) { 952ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines OS << "zero"; 953ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines continue; 954ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 955ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 956ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // Otherwise, it must come from src1 or src2. Print the span of elements 957ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // that comes from this src. 958ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool isSrc1 = ShuffleMask[i] < (int)ShuffleMask.size(); 959ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines const char *SrcName = isSrc1 ? Src1Name : Src2Name; 960ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines OS << (SrcName ? SrcName : "mem") << '['; 961ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines bool IsFirst = true; 962ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines while (i != e && (int)ShuffleMask[i] != SM_SentinelZero && 963ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines (ShuffleMask[i] < (int)ShuffleMask.size()) == isSrc1) { 964ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (!IsFirst) 965ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines OS << ','; 966ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines else 967ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines IsFirst = false; 968ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines if (ShuffleMask[i] == SM_SentinelUndef) 969ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines OS << "u"; 970ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines else 971ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines OS << ShuffleMask[i] % ShuffleMask.size(); 972ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines ++i; 973ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 974ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines OS << ']'; 975ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines --i; // For loop increments element #. 976ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines } 977ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines //MI->print(OS, 0); 978ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines OS << "\n"; 979ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines 980ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines // We successfully added a comment to this instruction. 981ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines return true; 982ebe69fe11e48d322045d5949c83283927a0d790bStephen Hines} 983