1f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===-- AMDGPUInstPrinter.cpp - AMDGPU MC Inst -> ASM ---------------------===// 2f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 3f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// The LLVM Compiler Infrastructure 4f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 5f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// This file is distributed under the University of Illinois Open Source 6f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// License. See LICENSE.TXT for details. 7f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// 8f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard// \file 9f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard//===----------------------------------------------------------------------===// 10f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 11f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUInstPrinter.h" 12f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "MCTargetDesc/AMDGPUMCTargetDesc.h" 1353f22df199542f6fc4e0edc5b7cecbeacea11adaChristian Konig#include "llvm/MC/MCExpr.h" 145c35290fa35ae234fed02496404cb0fc37e1c8a5Benjamin Kramer#include "llvm/MC/MCInst.h" 15f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 16f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardusing namespace llvm; 17f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 18f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printInst(const MCInst *MI, raw_ostream &OS, 19f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard StringRef Annot) { 2092f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune OS.flush(); 21f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard printInstruction(MI, OS); 22f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 23f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard printAnnotation(OS, Annot); 24f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 25f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 26f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printOperand(const MCInst *MI, unsigned OpNo, 27f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 28f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 29f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard const MCOperand &Op = MI->getOperand(OpNo); 30f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard if (Op.isReg()) { 31f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard switch (Op.getReg()) { 32f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard // This is the default predicate state, so we don't need to print it. 33f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard case AMDGPU::PRED_SEL_OFF: break; 34f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard default: O << getRegisterName(Op.getReg()); break; 35f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } 36f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } else if (Op.isImm()) { 37f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard O << Op.getImm(); 38f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } else if (Op.isFPImm()) { 39f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard O << Op.getFPImm(); 4053f22df199542f6fc4e0edc5b7cecbeacea11adaChristian Konig } else if (Op.isExpr()) { 4153f22df199542f6fc4e0edc5b7cecbeacea11adaChristian Konig const MCExpr *Exp = Op.getExpr(); 4253f22df199542f6fc4e0edc5b7cecbeacea11adaChristian Konig Exp->print(O); 43f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } else { 44f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard assert(!"unknown operand type in printOperand"); 45f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } 46f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 47f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 4801115b1f5032b848659669b161af1bdd9e646208Michel Danzervoid AMDGPUInstPrinter::printInterpSlot(const MCInst *MI, unsigned OpNum, 4901115b1f5032b848659669b161af1bdd9e646208Michel Danzer raw_ostream &O) { 5001115b1f5032b848659669b161af1bdd9e646208Michel Danzer unsigned Imm = MI->getOperand(OpNum).getImm(); 5101115b1f5032b848659669b161af1bdd9e646208Michel Danzer 5201115b1f5032b848659669b161af1bdd9e646208Michel Danzer if (Imm == 2) { 5301115b1f5032b848659669b161af1bdd9e646208Michel Danzer O << "P0"; 5401115b1f5032b848659669b161af1bdd9e646208Michel Danzer } else if (Imm == 1) { 5501115b1f5032b848659669b161af1bdd9e646208Michel Danzer O << "P20"; 5601115b1f5032b848659669b161af1bdd9e646208Michel Danzer } else if (Imm == 0) { 5701115b1f5032b848659669b161af1bdd9e646208Michel Danzer O << "P10"; 5801115b1f5032b848659669b161af1bdd9e646208Michel Danzer } else { 5901115b1f5032b848659669b161af1bdd9e646208Michel Danzer assert(!"Invalid interpolation parameter slot"); 6001115b1f5032b848659669b161af1bdd9e646208Michel Danzer } 6101115b1f5032b848659669b161af1bdd9e646208Michel Danzer} 6201115b1f5032b848659669b161af1bdd9e646208Michel Danzer 63f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printMemOperand(const MCInst *MI, unsigned OpNo, 64f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 65f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard printOperand(MI, OpNo, O); 66f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard O << ", "; 67f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard printOperand(MI, OpNo + 1, O); 68f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 69f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 70f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printIfSet(const MCInst *MI, unsigned OpNo, 7192f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune raw_ostream &O, StringRef Asm, 7292f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune StringRef Default) { 73f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard const MCOperand &Op = MI->getOperand(OpNo); 74f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard assert(Op.isImm()); 75f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard if (Op.getImm() == 1) { 76f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard O << Asm; 7792f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune } else { 7892f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune O << Default; 79f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } 80f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 81f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 82f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printAbs(const MCInst *MI, unsigned OpNo, 83f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 84f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard printIfSet(MI, OpNo, O, "|"); 85f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 86f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 87f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printClamp(const MCInst *MI, unsigned OpNo, 88f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 89f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard printIfSet(MI, OpNo, O, "_SAT"); 90f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 91f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 92f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printLiteral(const MCInst *MI, unsigned OpNo, 93f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 94f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard union Literal { 95f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard float f; 96f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard int32_t i; 97f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } L; 98f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 99f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard L.i = MI->getOperand(OpNo).getImm(); 100f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard O << L.i << "(" << L.f << ")"; 101f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 102f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 103f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printLast(const MCInst *MI, unsigned OpNo, 104f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 1059a9e936650bb82244f38dbddf6c4e427c2ae49f9Vincent Lejeune printIfSet(MI, OpNo, O.indent(25 - O.GetNumBytesInBuffer()), "*", " "); 106f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 107f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 108f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printNeg(const MCInst *MI, unsigned OpNo, 109f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 110f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard printIfSet(MI, OpNo, O, "-"); 111f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 112f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 113f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printOMOD(const MCInst *MI, unsigned OpNo, 114f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 115f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard switch (MI->getOperand(OpNo).getImm()) { 116f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard default: break; 117f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard case 1: 118f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard O << " * 2.0"; 119f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard break; 120f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard case 2: 121f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard O << " * 4.0"; 122f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard break; 123f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard case 3: 124f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard O << " / 2.0"; 125f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard break; 126f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } 127f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 128f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 129f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printRel(const MCInst *MI, unsigned OpNo, 130f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 131c0b0c677a1138f0a5ce1435fc1e70cef38fd95c8Tom Stellard printIfSet(MI, OpNo, O, "+"); 132f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 133f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 134f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printUpdateExecMask(const MCInst *MI, unsigned OpNo, 135f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 136f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard printIfSet(MI, OpNo, O, "ExecMask,"); 137f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 138f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 139f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printUpdatePred(const MCInst *MI, unsigned OpNo, 140f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 141f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard printIfSet(MI, OpNo, O, "Pred,"); 142f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 143f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 144f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellardvoid AMDGPUInstPrinter::printWrite(const MCInst *MI, unsigned OpNo, 145f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard raw_ostream &O) { 146f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard const MCOperand &Op = MI->getOperand(OpNo); 147f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard if (Op.getImm() == 0) { 148f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard O << " (MASKED)"; 149f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard } 150f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard} 151f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard 1529f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellardvoid AMDGPUInstPrinter::printSel(const MCInst *MI, unsigned OpNo, 1539f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard raw_ostream &O) { 1549f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard const char * chans = "XYZW"; 1559f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard int sel = MI->getOperand(OpNo).getImm(); 1569f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard 1579f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard int chan = sel & 3; 1589f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard sel >>= 2; 1599f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard 1609f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard if (sel >= 512) { 1619f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard sel -= 512; 1629f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard int cb = sel >> 12; 1639f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard sel &= 4095; 1649f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard O << cb << "[" << sel << "]"; 1659f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard } else if (sel >= 448) { 1669f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard sel -= 448; 1679f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard O << sel; 1689f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard } else if (sel >= 0){ 1699f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard O << sel; 1709f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard } 1719f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard 1729f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard if (sel >= 0) 1739f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard O << "." << chans[chan]; 1749f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard} 1759f7818d9bdfce2e9c7a2cbe31490a135aa6d1211Tom Stellard 17692f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeunevoid AMDGPUInstPrinter::printBankSwizzle(const MCInst *MI, unsigned OpNo, 17792f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune raw_ostream &O) { 17892f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune int BankSwizzle = MI->getOperand(OpNo).getImm(); 17992f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune switch (BankSwizzle) { 18092f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune case 1: 1817d1a0d4e3ebf058a8b1d0dea9b6119444ed041c8Vincent Lejeune O << "BS:VEC_021/SCL_122"; 18292f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune break; 18392f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune case 2: 1847d1a0d4e3ebf058a8b1d0dea9b6119444ed041c8Vincent Lejeune O << "BS:VEC_120/SCL_212"; 18592f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune break; 18692f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune case 3: 1877d1a0d4e3ebf058a8b1d0dea9b6119444ed041c8Vincent Lejeune O << "BS:VEC_102/SCL_221"; 18892f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune break; 18992f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune case 4: 19092f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune O << "BS:VEC_201"; 19192f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune break; 19292f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune case 5: 19392f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune O << "BS:VEC_210"; 19492f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune break; 19592f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune default: 19692f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune break; 19792f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune } 19892f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune return; 19992f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune} 20092f24d403f16ab2ee4598e32c926acc9c2344140Vincent Lejeune 201d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeunevoid AMDGPUInstPrinter::printRSel(const MCInst *MI, unsigned OpNo, 202d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune raw_ostream &O) { 203d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune unsigned Sel = MI->getOperand(OpNo).getImm(); 204d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune switch (Sel) { 205d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune case 0: 206d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune O << "X"; 207d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 208d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune case 1: 209d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune O << "Y"; 210d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 211d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune case 2: 212d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune O << "Z"; 213d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 214d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune case 3: 215d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune O << "W"; 216d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 217d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune case 4: 218d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune O << "0"; 219d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 220d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune case 5: 221d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune O << "1"; 222d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 223d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune case 7: 224d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune O << "_"; 225d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 226d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune default: 227d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 228d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune } 229d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune} 230d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune 231d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeunevoid AMDGPUInstPrinter::printCT(const MCInst *MI, unsigned OpNo, 232d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune raw_ostream &O) { 233d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune unsigned CT = MI->getOperand(OpNo).getImm(); 234d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune switch (CT) { 235d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune case 0: 236d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune O << "U"; 237d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 238d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune case 1: 239d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune O << "N"; 240d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 241d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune default: 242d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune break; 243d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune } 244d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune} 245d3293b49f9c7af741d2edd3062499fb50db0e89bVincent Lejeune 2469e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeunevoid AMDGPUInstPrinter::printKCache(const MCInst *MI, unsigned OpNo, 2479e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune raw_ostream &O) { 2489e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune int KCacheMode = MI->getOperand(OpNo).getImm(); 2499e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune if (KCacheMode > 0) { 2509e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune int KCacheBank = MI->getOperand(OpNo - 2).getImm(); 2519e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune O << "CB" << KCacheBank <<":"; 2529e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune int KCacheAddr = MI->getOperand(OpNo + 2).getImm(); 2539e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune int LineSize = (KCacheMode == 1)?16:32; 2549e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune O << KCacheAddr * 16 << "-" << KCacheAddr * 16 + LineSize; 2559e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune } 2569e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune} 2579e1808733eeea4f248eeef35ba06ee3f7aa5707dVincent Lejeune 258f98f2ce29e6e2996fa58f38979143eceaa818335Tom Stellard#include "AMDGPUGenAsmWriter.inc" 259