31 int64_t Imm =
MI->getOperand(
Op).getImm();
32 bool Flavor =
MI->getOpcode() == X86::CMPCCXADDmr32 ||
33 MI->getOpcode() == X86::CMPCCXADDmr64;
36 case 0: O <<
"o";
break;
37 case 1: O <<
"no";
break;
38 case 2: O <<
"b";
break;
39 case 3: O << (Flavor ?
"nb" :
"ae");
break;
40 case 4: O << (Flavor ?
"z" :
"e");
break;
41 case 5: O << (Flavor ?
"nz" :
"ne");
break;
42 case 6: O <<
"be";
break;
43 case 7: O << (Flavor ?
"nbe" :
"a");
break;
44 case 8: O <<
"s";
break;
45 case 9: O <<
"ns";
break;
46 case 0xa: O <<
"p";
break;
47 case 0xb: O <<
"np";
break;
48 case 0xc: O <<
"l";
break;
49 case 0xd: O << (Flavor ?
"nl" :
"ge");
break;
50 case 0xe: O <<
"le";
break;
51 case 0xf: O << (Flavor ?
"nle" :
"g");
break;
57 int64_t Imm =
MI->getOperand(
Op).getImm();
60 case 0: O <<
"eq";
break;
61 case 1: O <<
"lt";
break;
62 case 2: O <<
"le";
break;
63 case 3: O <<
"unord";
break;
64 case 4: O <<
"neq";
break;
65 case 5: O <<
"nlt";
break;
66 case 6: O <<
"nle";
break;
67 case 7: O <<
"ord";
break;
68 case 8: O <<
"eq_uq";
break;
69 case 9: O <<
"nge";
break;
70 case 0xa: O <<
"ngt";
break;
71 case 0xb: O <<
"false";
break;
72 case 0xc: O <<
"neq_oq";
break;
73 case 0xd: O <<
"ge";
break;
74 case 0xe: O <<
"gt";
break;
75 case 0xf: O <<
"true";
break;
76 case 0x10: O <<
"eq_os";
break;
77 case 0x11: O <<
"lt_oq";
break;
78 case 0x12: O <<
"le_oq";
break;
79 case 0x13: O <<
"unord_s";
break;
80 case 0x14: O <<
"neq_us";
break;
81 case 0x15: O <<
"nlt_uq";
break;
82 case 0x16: O <<
"nle_uq";
break;
83 case 0x17: O <<
"ord_s";
break;
84 case 0x18: O <<
"eq_us";
break;
85 case 0x19: O <<
"nge_uq";
break;
86 case 0x1a: O <<
"ngt_uq";
break;
87 case 0x1b: O <<
"false_os";
break;
88 case 0x1c: O <<
"neq_os";
break;
89 case 0x1d: O <<
"ge_oq";
break;
90 case 0x1e: O <<
"gt_oq";
break;
91 case 0x1f: O <<
"true_us";
break;
99 int64_t Imm =
MI->getOperand(
MI->getNumOperands() - 1).getImm();
102 case 0:
OS <<
"lt";
break;
103 case 1:
OS <<
"le";
break;
104 case 2:
OS <<
"gt";
break;
105 case 3:
OS <<
"ge";
break;
106 case 4:
OS <<
"eq";
break;
107 case 5:
OS <<
"neq";
break;
108 case 6:
OS <<
"false";
break;
109 case 7:
OS <<
"true";
break;
112 switch (
MI->getOpcode()) {
114 case X86::VPCOMBmi:
case X86::VPCOMBri:
OS <<
"b\t";
break;
115 case X86::VPCOMDmi:
case X86::VPCOMDri:
OS <<
"d\t";
break;
116 case X86::VPCOMQmi:
case X86::VPCOMQri:
OS <<
"q\t";
break;
117 case X86::VPCOMUBmi:
case X86::VPCOMUBri:
OS <<
"ub\t";
break;
118 case X86::VPCOMUDmi:
case X86::VPCOMUDri:
OS <<
"ud\t";
break;
119 case X86::VPCOMUQmi:
case X86::VPCOMUQri:
OS <<
"uq\t";
break;
120 case X86::VPCOMUWmi:
case X86::VPCOMUWri:
OS <<
"uw\t";
break;
121 case X86::VPCOMWmi:
case X86::VPCOMWri:
OS <<
"w\t";
break;
131 switch (
MI->getOpcode()) {
133 case X86::VPCMPBZ128rmi:
case X86::VPCMPBZ128rri:
134 case X86::VPCMPBZ256rmi:
case X86::VPCMPBZ256rri:
135 case X86::VPCMPBZrmi:
case X86::VPCMPBZrri:
136 case X86::VPCMPBZ128rmik:
case X86::VPCMPBZ128rrik:
137 case X86::VPCMPBZ256rmik:
case X86::VPCMPBZ256rrik:
138 case X86::VPCMPBZrmik:
case X86::VPCMPBZrrik:
141 case X86::VPCMPDZ128rmi:
case X86::VPCMPDZ128rri:
142 case X86::VPCMPDZ256rmi:
case X86::VPCMPDZ256rri:
143 case X86::VPCMPDZrmi:
case X86::VPCMPDZrri:
144 case X86::VPCMPDZ128rmik:
case X86::VPCMPDZ128rrik:
145 case X86::VPCMPDZ256rmik:
case X86::VPCMPDZ256rrik:
146 case X86::VPCMPDZrmik:
case X86::VPCMPDZrrik:
147 case X86::VPCMPDZ128rmib:
case X86::VPCMPDZ128rmibk:
148 case X86::VPCMPDZ256rmib:
case X86::VPCMPDZ256rmibk:
149 case X86::VPCMPDZrmib:
case X86::VPCMPDZrmibk:
152 case X86::VPCMPQZ128rmi:
case X86::VPCMPQZ128rri:
153 case X86::VPCMPQZ256rmi:
case X86::VPCMPQZ256rri:
154 case X86::VPCMPQZrmi:
case X86::VPCMPQZrri:
155 case X86::VPCMPQZ128rmik:
case X86::VPCMPQZ128rrik:
156 case X86::VPCMPQZ256rmik:
case X86::VPCMPQZ256rrik:
157 case X86::VPCMPQZrmik:
case X86::VPCMPQZrrik:
158 case X86::VPCMPQZ128rmib:
case X86::VPCMPQZ128rmibk:
159 case X86::VPCMPQZ256rmib:
case X86::VPCMPQZ256rmibk:
160 case X86::VPCMPQZrmib:
case X86::VPCMPQZrmibk:
163 case X86::VPCMPUBZ128rmi:
case X86::VPCMPUBZ128rri:
164 case X86::VPCMPUBZ256rmi:
case X86::VPCMPUBZ256rri:
165 case X86::VPCMPUBZrmi:
case X86::VPCMPUBZrri:
166 case X86::VPCMPUBZ128rmik:
case X86::VPCMPUBZ128rrik:
167 case X86::VPCMPUBZ256rmik:
case X86::VPCMPUBZ256rrik:
168 case X86::VPCMPUBZrmik:
case X86::VPCMPUBZrrik:
171 case X86::VPCMPUDZ128rmi:
case X86::VPCMPUDZ128rri:
172 case X86::VPCMPUDZ256rmi:
case X86::VPCMPUDZ256rri:
173 case X86::VPCMPUDZrmi:
case X86::VPCMPUDZrri:
174 case X86::VPCMPUDZ128rmik:
case X86::VPCMPUDZ128rrik:
175 case X86::VPCMPUDZ256rmik:
case X86::VPCMPUDZ256rrik:
176 case X86::VPCMPUDZrmik:
case X86::VPCMPUDZrrik:
177 case X86::VPCMPUDZ128rmib:
case X86::VPCMPUDZ128rmibk:
178 case X86::VPCMPUDZ256rmib:
case X86::VPCMPUDZ256rmibk:
179 case X86::VPCMPUDZrmib:
case X86::VPCMPUDZrmibk:
182 case X86::VPCMPUQZ128rmi:
case X86::VPCMPUQZ128rri:
183 case X86::VPCMPUQZ256rmi:
case X86::VPCMPUQZ256rri:
184 case X86::VPCMPUQZrmi:
case X86::VPCMPUQZrri:
185 case X86::VPCMPUQZ128rmik:
case X86::VPCMPUQZ128rrik:
186 case X86::VPCMPUQZ256rmik:
case X86::VPCMPUQZ256rrik:
187 case X86::VPCMPUQZrmik:
case X86::VPCMPUQZrrik:
188 case X86::VPCMPUQZ128rmib:
case X86::VPCMPUQZ128rmibk:
189 case X86::VPCMPUQZ256rmib:
case X86::VPCMPUQZ256rmibk:
190 case X86::VPCMPUQZrmib:
case X86::VPCMPUQZrmibk:
193 case X86::VPCMPUWZ128rmi:
case X86::VPCMPUWZ128rri:
194 case X86::VPCMPUWZ256rri:
case X86::VPCMPUWZ256rmi:
195 case X86::VPCMPUWZrmi:
case X86::VPCMPUWZrri:
196 case X86::VPCMPUWZ128rmik:
case X86::VPCMPUWZ128rrik:
197 case X86::VPCMPUWZ256rrik:
case X86::VPCMPUWZ256rmik:
198 case X86::VPCMPUWZrmik:
case X86::VPCMPUWZrrik:
201 case X86::VPCMPWZ128rmi:
case X86::VPCMPWZ128rri:
202 case X86::VPCMPWZ256rmi:
case X86::VPCMPWZ256rri:
203 case X86::VPCMPWZrmi:
case X86::VPCMPWZrri:
204 case X86::VPCMPWZ128rmik:
case X86::VPCMPWZ128rrik:
205 case X86::VPCMPWZ256rmik:
case X86::VPCMPWZ256rrik:
206 case X86::VPCMPWZrmik:
case X86::VPCMPWZrrik:
214 OS << (IsVCmp ?
"vcmp" :
"cmp");
218 switch (
MI->getOpcode()) {
220 case X86::CMPPDrmi:
case X86::CMPPDrri:
221 case X86::VCMPPDrmi:
case X86::VCMPPDrri:
222 case X86::VCMPPDYrmi:
case X86::VCMPPDYrri:
223 case X86::VCMPPDZ128rmi:
case X86::VCMPPDZ128rri:
224 case X86::VCMPPDZ256rmi:
case X86::VCMPPDZ256rri:
225 case X86::VCMPPDZrmi:
case X86::VCMPPDZrri:
226 case X86::VCMPPDZ128rmik:
case X86::VCMPPDZ128rrik:
227 case X86::VCMPPDZ256rmik:
case X86::VCMPPDZ256rrik:
228 case X86::VCMPPDZrmik:
case X86::VCMPPDZrrik:
229 case X86::VCMPPDZ128rmbi:
case X86::VCMPPDZ128rmbik:
230 case X86::VCMPPDZ256rmbi:
case X86::VCMPPDZ256rmbik:
231 case X86::VCMPPDZrmbi:
case X86::VCMPPDZrmbik:
232 case X86::VCMPPDZrrib:
case X86::VCMPPDZrribk:
235 case X86::CMPPSrmi:
case X86::CMPPSrri:
236 case X86::VCMPPSrmi:
case X86::VCMPPSrri:
237 case X86::VCMPPSYrmi:
case X86::VCMPPSYrri:
238 case X86::VCMPPSZ128rmi:
case X86::VCMPPSZ128rri:
239 case X86::VCMPPSZ256rmi:
case X86::VCMPPSZ256rri:
240 case X86::VCMPPSZrmi:
case X86::VCMPPSZrri:
241 case X86::VCMPPSZ128rmik:
case X86::VCMPPSZ128rrik:
242 case X86::VCMPPSZ256rmik:
case X86::VCMPPSZ256rrik:
243 case X86::VCMPPSZrmik:
case X86::VCMPPSZrrik:
244 case X86::VCMPPSZ128rmbi:
case X86::VCMPPSZ128rmbik:
245 case X86::VCMPPSZ256rmbi:
case X86::VCMPPSZ256rmbik:
246 case X86::VCMPPSZrmbi:
case X86::VCMPPSZrmbik:
247 case X86::VCMPPSZrrib:
case X86::VCMPPSZrribk:
250 case X86::CMPSDrm:
case X86::CMPSDrr:
251 case X86::CMPSDrm_Int:
case X86::CMPSDrr_Int:
252 case X86::VCMPSDrm:
case X86::VCMPSDrr:
253 case X86::VCMPSDrm_Int:
case X86::VCMPSDrr_Int:
254 case X86::VCMPSDZrm:
case X86::VCMPSDZrr:
255 case X86::VCMPSDZrm_Int:
case X86::VCMPSDZrr_Int:
256 case X86::VCMPSDZrm_Intk:
case X86::VCMPSDZrr_Intk:
257 case X86::VCMPSDZrrb_Int:
case X86::VCMPSDZrrb_Intk:
260 case X86::CMPSSrm:
case X86::CMPSSrr:
261 case X86::CMPSSrm_Int:
case X86::CMPSSrr_Int:
262 case X86::VCMPSSrm:
case X86::VCMPSSrr:
263 case X86::VCMPSSrm_Int:
case X86::VCMPSSrr_Int:
264 case X86::VCMPSSZrm:
case X86::VCMPSSZrr:
265 case X86::VCMPSSZrm_Int:
case X86::VCMPSSZrr_Int:
266 case X86::VCMPSSZrm_Intk:
case X86::VCMPSSZrr_Intk:
267 case X86::VCMPSSZrrb_Int:
case X86::VCMPSSZrrb_Intk:
270 case X86::VCMPPHZ128rmi:
case X86::VCMPPHZ128rri:
271 case X86::VCMPPHZ256rmi:
case X86::VCMPPHZ256rri:
272 case X86::VCMPPHZrmi:
case X86::VCMPPHZrri:
273 case X86::VCMPPHZ128rmik:
case X86::VCMPPHZ128rrik:
274 case X86::VCMPPHZ256rmik:
case X86::VCMPPHZ256rrik:
275 case X86::VCMPPHZrmik:
case X86::VCMPPHZrrik:
276 case X86::VCMPPHZ128rmbi:
case X86::VCMPPHZ128rmbik:
277 case X86::VCMPPHZ256rmbi:
case X86::VCMPPHZ256rmbik:
278 case X86::VCMPPHZrmbi:
case X86::VCMPPHZrmbik:
279 case X86::VCMPPHZrrib:
case X86::VCMPPHZrribk:
282 case X86::VCMPSHZrm:
case X86::VCMPSHZrr:
283 case X86::VCMPSHZrm_Int:
case X86::VCMPSHZrr_Int:
284 case X86::VCMPSHZrrb_Int:
case X86::VCMPSHZrrb_Intk:
285 case X86::VCMPSHZrm_Intk:
case X86::VCMPSHZrr_Intk:
293 int64_t Imm =
MI->getOperand(
Op).getImm();
333 assert(
Op.isExpr() &&
"unknown pcrel immediate operand");
336 const MCConstantExpr *BranchTarget = dyn_cast<MCConstantExpr>(
Op.getExpr());
338 if (BranchTarget && BranchTarget->evaluateAsAbsolute(
Address)) {
349 if (
MI->getOperand(OpNo).getReg()) {
359 unsigned Flags =
MI->getFlags();
389 if (MemoryOperand != -1)
410 switch (
MI->getOperand(OpNo).getReg()) {
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
This class represents an Operation in the Expression.
bool print(raw_ostream &OS, DIDumpOptions DumpOpts, const DWARFExpression *Expr, DWARFUnit *U) const
unsigned getCodePointerSize() const
Get the code pointer size in bytes.
format_object< int64_t > formatHex(int64_t Value) const
bool SymbolizeOperands
If true, symbolize branch target and memory reference operands.
virtual void printRegName(raw_ostream &OS, MCRegister Reg) const
Print the assembler register name.
WithMarkup markup(raw_ostream &OS, Markup M) const
format_object< int64_t > formatImm(int64_t Value) const
Utility function to print immediates in decimal or hex.
bool PrintBranchImmAsAddress
If true, a branch immediate (e.g.
Instances of this class represent a single low-level machine instruction.
Describe properties that are true of each instruction in the target description file.
const MCInstrDesc & get(unsigned Opcode) const
Return the machine instruction descriptor that corresponds to the specified instruction opcode.
Instances of this class represent operands of the MCInst class.
Generic base class for all target subtargets.
bool hasFeature(unsigned Feature) const
Target - Wrapper for Target specific information.
void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &O)
void printPCRelImm(const MCInst *MI, uint64_t Address, unsigned OpNo, raw_ostream &O)
value (e.g.
void printOptionalSegReg(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printVPCOMMnemonic(const MCInst *MI, raw_ostream &OS)
void printSSEAVXCC(const MCInst *MI, unsigned Op, raw_ostream &OS)
void printVKPair(const MCInst *MI, unsigned OpNo, raw_ostream &OS)
virtual void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O)=0
void printCondCode(const MCInst *MI, unsigned Op, raw_ostream &OS)
void printCMPMnemonic(const MCInst *MI, bool IsVCmp, raw_ostream &OS)
void printInstFlags(const MCInst *MI, raw_ostream &O, const MCSubtargetInfo &STI)
void printVPCMPMnemonic(const MCInst *MI, raw_ostream &OS)
This class implements an extremely fast bulk output stream that can only output to a stream.
#define llvm_unreachable(msg)
Marks that the current location is not supposed to be reachable.
int getMemoryOperandNo(uint64_t TSFlags)
The function returns the MCInst operand # for the first field of the memory operand.
unsigned getOperandBias(const MCInstrDesc &Desc)
Compute whether all of the def operands are repeated in the uses and therefore should be skipped.
bool needsAddressSizeOverride(const MCInst &MI, const MCSubtargetInfo &STI, int MemoryOperand, uint64_t TSFlags)
Returns true if this instruction needs an Address-Size override prefix.
This is an optimization pass for GlobalISel generic memory operations.
Description of the encoding of one expression Op.