LLVM: lib/Target/X86/MCTargetDesc/X86IntelInstPrinter.cpp Source File (original) (raw)
44
45
46 if (MI->getOpcode() == X86::DATA16_PREFIX &&
48 OS << "\tdata32";
51
52
54
55
58}
61 if (MI->getNumOperands() == 0 ||
62 ->getOperand(MI->getNumOperands() - 1).isImm())
63 return false;
64
65 int64_t Imm = MI->getOperand(MI->getNumOperands() - 1).getImm();
66
68
69
70
71 switch (MI->getOpcode()) {
72 case X86::CMPPDrmi: case X86::CMPPDrri:
73 case X86::CMPPSrmi: case X86::CMPPSrri:
74 case X86::CMPSDrmi: case X86::CMPSDrri:
75 case X86::CMPSDrmi_Int: case X86::CMPSDrri_Int:
76 case X86::CMPSSrmi: case X86::CMPSSrri:
77 case X86::CMPSSrmi_Int: case X86::CMPSSrri_Int:
78 if (Imm >= 0 && Imm <= 7) {
79 OS << '\t';
82 OS << ", ";
83
84
90 else
92 } else
94
95 return true;
96 }
97 break;
98
99 case X86::VCMPPDrmi: case X86::VCMPPDrri:
100 case X86::VCMPPDYrmi: case X86::VCMPPDYrri:
101 case X86::VCMPPDZ128rmi: case X86::VCMPPDZ128rri:
102 case X86::VCMPPDZ256rmi: case X86::VCMPPDZ256rri:
103 case X86::VCMPPDZrmi: case X86::VCMPPDZrri:
104 case X86::VCMPPSrmi: case X86::VCMPPSrri:
105 case X86::VCMPPSYrmi: case X86::VCMPPSYrri:
106 case X86::VCMPPSZ128rmi: case X86::VCMPPSZ128rri:
107 case X86::VCMPPSZ256rmi: case X86::VCMPPSZ256rri:
108 case X86::VCMPPSZrmi: case X86::VCMPPSZrri:
109 case X86::VCMPSDrmi: case X86::VCMPSDrri:
110 case X86::VCMPSDZrmi: case X86::VCMPSDZrri:
111 case X86::VCMPSDrmi_Int: case X86::VCMPSDrri_Int:
112 case X86::VCMPSDZrmi_Int: case X86::VCMPSDZrri_Int:
113 case X86::VCMPSSrmi: case X86::VCMPSSrri:
114 case X86::VCMPSSZrmi: case X86::VCMPSSZrri:
115 case X86::VCMPSSrmi_Int: case X86::VCMPSSrri_Int:
116 case X86::VCMPSSZrmi_Int: case X86::VCMPSSZrri_Int:
117 case X86::VCMPPDZ128rmik: case X86::VCMPPDZ128rrik:
118 case X86::VCMPPDZ256rmik: case X86::VCMPPDZ256rrik:
119 case X86::VCMPPDZrmik: case X86::VCMPPDZrrik:
120 case X86::VCMPPSZ128rmik: case X86::VCMPPSZ128rrik:
121 case X86::VCMPPSZ256rmik: case X86::VCMPPSZ256rrik:
122 case X86::VCMPPSZrmik: case X86::VCMPPSZrrik:
123 case X86::VCMPSDZrmik_Int: case X86::VCMPSDZrrik_Int:
124 case X86::VCMPSSZrmik_Int: case X86::VCMPSSZrrik_Int:
125 case X86::VCMPPDZ128rmbi: case X86::VCMPPDZ128rmbik:
126 case X86::VCMPPDZ256rmbi: case X86::VCMPPDZ256rmbik:
127 case X86::VCMPPDZrmbi: case X86::VCMPPDZrmbik:
128 case X86::VCMPPSZ128rmbi: case X86::VCMPPSZ128rmbik:
129 case X86::VCMPPSZ256rmbi: case X86::VCMPPSZ256rmbik:
130 case X86::VCMPPSZrmbi: case X86::VCMPPSZrmbik:
131 case X86::VCMPPDZrrib: case X86::VCMPPDZrribk:
132 case X86::VCMPPSZrrib: case X86::VCMPPSZrribk:
133 case X86::VCMPSDZrrib_Int: case X86::VCMPSDZrribk_Int:
134 case X86::VCMPSSZrrib_Int: case X86::VCMPSSZrribk_Int:
135 case X86::VCMPPHZ128rmi: case X86::VCMPPHZ128rri:
136 case X86::VCMPPHZ256rmi: case X86::VCMPPHZ256rri:
137 case X86::VCMPPHZrmi: case X86::VCMPPHZrri:
138 case X86::VCMPSHZrmi: case X86::VCMPSHZrri:
139 case X86::VCMPSHZrmi_Int: case X86::VCMPSHZrri_Int:
140 case X86::VCMPPHZ128rmik: case X86::VCMPPHZ128rrik:
141 case X86::VCMPPHZ256rmik: case X86::VCMPPHZ256rrik:
142 case X86::VCMPPHZrmik: case X86::VCMPPHZrrik:
143 case X86::VCMPSHZrmik_Int: case X86::VCMPSHZrrik_Int:
144 case X86::VCMPPHZ128rmbi: case X86::VCMPPHZ128rmbik:
145 case X86::VCMPPHZ256rmbi: case X86::VCMPPHZ256rmbik:
146 case X86::VCMPPHZrmbi: case X86::VCMPPHZrmbik:
147 case X86::VCMPPHZrrib: case X86::VCMPPHZrribk:
148 case X86::VCMPSHZrrib_Int: case X86::VCMPSHZrribk_Int:
149 case X86::VCMPBF16Z128rmi: case X86::VCMPBF16Z128rri:
150 case X86::VCMPBF16Z256rmi: case X86::VCMPBF16Z256rri:
151 case X86::VCMPBF16Zrmi: case X86::VCMPBF16Zrri:
152 case X86::VCMPBF16Z128rmik: case X86::VCMPBF16Z128rrik:
153 case X86::VCMPBF16Z256rmik: case X86::VCMPBF16Z256rrik:
154 case X86::VCMPBF16Zrmik: case X86::VCMPBF16Zrrik:
155 case X86::VCMPBF16Z128rmbi: case X86::VCMPBF16Z128rmbik:
156 case X86::VCMPBF16Z256rmbi: case X86::VCMPBF16Z256rmbik:
157 case X86::VCMPBF16Zrmbi: case X86::VCMPBF16Zrmbik:
158 if (Imm >= 0 && Imm <= 31) {
159 OS << '\t';
161
162 unsigned CurOp = 0;
164
166
167 OS << " {";
169 OS << "}";
170 }
171 OS << ", ";
173 OS << ", ";
174
177
178
184 } else {
186 }
187
188
189 unsigned NumElts;
194 else
198 NumElts *= 2;
199 }
200 OS << "{1to" << NumElts << "}";
201 } else {
205 else
214 } else {
216 }
217 }
218 } else {
221 OS << ", {sae}";
222 }
223
224 return true;
225 }
226 break;
227
228 case X86::VPCOMBmi: case X86::VPCOMBri:
229 case X86::VPCOMDmi: case X86::VPCOMDri:
230 case X86::VPCOMQmi: case X86::VPCOMQri:
231 case X86::VPCOMUBmi: case X86::VPCOMUBri:
232 case X86::VPCOMUDmi: case X86::VPCOMUDri:
233 case X86::VPCOMUQmi: case X86::VPCOMUQri:
234 case X86::VPCOMUWmi: case X86::VPCOMUWri:
235 case X86::VPCOMWmi: case X86::VPCOMWri:
236 if (Imm >= 0 && Imm <= 7) {
237 OS << '\t';
240 OS << ", ";
242 OS << ", ";
245 else
247 return true;
248 }
249 break;
250
251 case X86::VPCMPBZ128rmi: case X86::VPCMPBZ128rri:
252 case X86::VPCMPBZ256rmi: case X86::VPCMPBZ256rri:
253 case X86::VPCMPBZrmi: case X86::VPCMPBZrri:
254 case X86::VPCMPDZ128rmi: case X86::VPCMPDZ128rri:
255 case X86::VPCMPDZ256rmi: case X86::VPCMPDZ256rri:
256 case X86::VPCMPDZrmi: case X86::VPCMPDZrri:
257 case X86::VPCMPQZ128rmi: case X86::VPCMPQZ128rri:
258 case X86::VPCMPQZ256rmi: case X86::VPCMPQZ256rri:
259 case X86::VPCMPQZrmi: case X86::VPCMPQZrri:
260 case X86::VPCMPUBZ128rmi: case X86::VPCMPUBZ128rri:
261 case X86::VPCMPUBZ256rmi: case X86::VPCMPUBZ256rri:
262 case X86::VPCMPUBZrmi: case X86::VPCMPUBZrri:
263 case X86::VPCMPUDZ128rmi: case X86::VPCMPUDZ128rri:
264 case X86::VPCMPUDZ256rmi: case X86::VPCMPUDZ256rri:
265 case X86::VPCMPUDZrmi: case X86::VPCMPUDZrri:
266 case X86::VPCMPUQZ128rmi: case X86::VPCMPUQZ128rri:
267 case X86::VPCMPUQZ256rmi: case X86::VPCMPUQZ256rri:
268 case X86::VPCMPUQZrmi: case X86::VPCMPUQZrri:
269 case X86::VPCMPUWZ128rmi: case X86::VPCMPUWZ128rri:
270 case X86::VPCMPUWZ256rmi: case X86::VPCMPUWZ256rri:
271 case X86::VPCMPUWZrmi: case X86::VPCMPUWZrri:
272 case X86::VPCMPWZ128rmi: case X86::VPCMPWZ128rri:
273 case X86::VPCMPWZ256rmi: case X86::VPCMPWZ256rri:
274 case X86::VPCMPWZrmi: case X86::VPCMPWZrri:
275 case X86::VPCMPBZ128rmik: case X86::VPCMPBZ128rrik:
276 case X86::VPCMPBZ256rmik: case X86::VPCMPBZ256rrik:
277 case X86::VPCMPBZrmik: case X86::VPCMPBZrrik:
278 case X86::VPCMPDZ128rmik: case X86::VPCMPDZ128rrik:
279 case X86::VPCMPDZ256rmik: case X86::VPCMPDZ256rrik:
280 case X86::VPCMPDZrmik: case X86::VPCMPDZrrik:
281 case X86::VPCMPQZ128rmik: case X86::VPCMPQZ128rrik:
282 case X86::VPCMPQZ256rmik: case X86::VPCMPQZ256rrik:
283 case X86::VPCMPQZrmik: case X86::VPCMPQZrrik:
284 case X86::VPCMPUBZ128rmik: case X86::VPCMPUBZ128rrik:
285 case X86::VPCMPUBZ256rmik: case X86::VPCMPUBZ256rrik:
286 case X86::VPCMPUBZrmik: case X86::VPCMPUBZrrik:
287 case X86::VPCMPUDZ128rmik: case X86::VPCMPUDZ128rrik:
288 case X86::VPCMPUDZ256rmik: case X86::VPCMPUDZ256rrik:
289 case X86::VPCMPUDZrmik: case X86::VPCMPUDZrrik:
290 case X86::VPCMPUQZ128rmik: case X86::VPCMPUQZ128rrik:
291 case X86::VPCMPUQZ256rmik: case X86::VPCMPUQZ256rrik:
292 case X86::VPCMPUQZrmik: case X86::VPCMPUQZrrik:
293 case X86::VPCMPUWZ128rmik: case X86::VPCMPUWZ128rrik:
294 case X86::VPCMPUWZ256rmik: case X86::VPCMPUWZ256rrik:
295 case X86::VPCMPUWZrmik: case X86::VPCMPUWZrrik:
296 case X86::VPCMPWZ128rmik: case X86::VPCMPWZ128rrik:
297 case X86::VPCMPWZ256rmik: case X86::VPCMPWZ256rrik:
298 case X86::VPCMPWZrmik: case X86::VPCMPWZrrik:
299 case X86::VPCMPDZ128rmbi: case X86::VPCMPDZ128rmbik:
300 case X86::VPCMPDZ256rmbi: case X86::VPCMPDZ256rmbik:
301 case X86::VPCMPDZrmbi: case X86::VPCMPDZrmbik:
302 case X86::VPCMPQZ128rmbi: case X86::VPCMPQZ128rmbik:
303 case X86::VPCMPQZ256rmbi: case X86::VPCMPQZ256rmbik:
304 case X86::VPCMPQZrmbi: case X86::VPCMPQZrmbik:
305 case X86::VPCMPUDZ128rmbi: case X86::VPCMPUDZ128rmbik:
306 case X86::VPCMPUDZ256rmbi: case X86::VPCMPUDZ256rmbik:
307 case X86::VPCMPUDZrmbi: case X86::VPCMPUDZrmbik:
308 case X86::VPCMPUQZ128rmbi: case X86::VPCMPUQZ128rmbik:
309 case X86::VPCMPUQZ256rmbi: case X86::VPCMPUQZ256rmbik:
310 case X86::VPCMPUQZrmbi: case X86::VPCMPUQZrmbik:
311 if ((Imm >= 0 && Imm <= 2) || (Imm >= 4 && Imm <= 6)) {
312 OS << '\t';
314
315 unsigned CurOp = 0;
317
319
320 OS << " {";
322 OS << "}";
323 }
324 OS << ", ";
326 OS << ", ";
327
330
331
334 else
336
337
338 unsigned NumElts;
343 else
345 OS << "{1to" << NumElts << "}";
346 } else {
351 else
353 }
354 } else {
356 }
357
358 return true;
359 }
360 break;
361 }
362
363 return false;
364}
369 if (Op.isReg()) {
371 } else if (Op.isImm()) {
373 } else {
374 assert(Op.isExpr() && "unknown operand kind in printOperand");
375 O << "offset ";
376 MAI.printExpr(O, *Op.getExpr());
377 }
378}
382
383
386 if (MIA->evaluateBranch(*MI, 0, 0, Target))
387 return;
388 if (MIA->evaluateMemoryOperandAddress(*MI, nullptr, 0, 0))
389 return;
390 }
395
396
398
400 O << '[';
401
402 bool NeedPlus = false;
403 if (BaseReg.getReg()) {
405 NeedPlus = true;
406 }
407
408 if (IndexReg.getReg()) {
409 if (NeedPlus) O << " + ";
410 if (ScaleVal != 1 || !BaseReg.getReg())
411 O << ScaleVal << '*';
413 NeedPlus = true;
414 }
415
416 if (!DispSpec.isImm()) {
417 if (NeedPlus) O << " + ";
418 assert(DispSpec.isExpr() && "non-immediate displacement for LEA?");
419 MAI.printExpr(O, *DispSpec.getExpr());
420 } else {
421 int64_t DispVal = DispSpec.getImm();
422 if (DispVal || (!IndexReg.getReg() && !BaseReg.getReg())) {
423 if (NeedPlus) {
424 if (DispVal > 0)
425 O << " + ";
426 else {
427 O << " - ";
428 DispVal = -DispVal;
429 }
430 }
432 }
433 }
434
435 O << ']';
436}
440
442
444 O << '[';
446 O << ']';
447}
451
452 O << "es:";
453
455 O << '[';
457 O << ']';
458}
463
464
466
468 O << '[';
469
470 if (DispSpec.isImm()) {
472 } else {
473 assert(DispSpec.isExpr() && "non-immediate displacement?");
474 MAI.printExpr(O, *DispSpec.getExpr());
475 }
476
477 O << ']';
478}
482 if (MI->getOperand(Op).isExpr())
483 return MAI.printExpr(O, *MI->getOperand(Op).getExpr());
484
486}
490 MCRegister Reg = MI->getOperand(OpNo).getReg();
491
492 if (Reg == X86::ST0)
493 OS << "st(0)";
494 else
496}