15 #define DEBUG_TYPE "asm-printer"
28 #include "X86GenAsmWriter1.inc"
37 uint64_t TSFlags = Desc.
TSFlags;
57 case 0: O <<
"eq";
break;
58 case 1: O <<
"lt";
break;
59 case 2: O <<
"le";
break;
60 case 3: O <<
"unord";
break;
61 case 4: O <<
"neq";
break;
62 case 5: O <<
"nlt";
break;
63 case 6: O <<
"nle";
break;
64 case 7: O <<
"ord";
break;
65 case 8: O <<
"eq_uq";
break;
66 case 9: O <<
"nge";
break;
67 case 0xa: O <<
"ngt";
break;
68 case 0xb: O <<
"false";
break;
69 case 0xc: O <<
"neq_oq";
break;
70 case 0xd: O <<
"ge";
break;
71 case 0xe: O <<
"gt";
break;
72 case 0xf: O <<
"true";
break;
81 case 0: O <<
"eq";
break;
82 case 1: O <<
"lt";
break;
83 case 2: O <<
"le";
break;
84 case 3: O <<
"unord";
break;
85 case 4: O <<
"neq";
break;
86 case 5: O <<
"nlt";
break;
87 case 6: O <<
"nle";
break;
88 case 7: O <<
"ord";
break;
89 case 8: O <<
"eq_uq";
break;
90 case 9: O <<
"nge";
break;
91 case 0xa: O <<
"ngt";
break;
92 case 0xb: O <<
"false";
break;
93 case 0xc: O <<
"neq_oq";
break;
94 case 0xd: O <<
"ge";
break;
95 case 0xe: O <<
"gt";
break;
96 case 0xf: O <<
"true";
break;
97 case 0x10: O <<
"eq_os";
break;
98 case 0x11: O <<
"lt_oq";
break;
99 case 0x12: O <<
"le_oq";
break;
100 case 0x13: O <<
"unord_s";
break;
101 case 0x14: O <<
"neq_us";
break;
102 case 0x15: O <<
"nlt_uq";
break;
103 case 0x16: O <<
"nle_uq";
break;
104 case 0x17: O <<
"ord_s";
break;
105 case 0x18: O <<
"eq_us";
break;
106 case 0x19: O <<
"nge_uq";
break;
107 case 0x1a: O <<
"ngt_uq";
break;
108 case 0x1b: O <<
"false_os";
break;
109 case 0x1c: O <<
"neq_os";
break;
110 case 0x1d: O <<
"ge_oq";
break;
111 case 0x1e: O <<
"gt_oq";
break;
112 case 0x1f: O <<
"true_us";
break;
124 assert(Op.
isExpr() &&
"unknown pcrel immediate operand");
129 if (BranchTarget && BranchTarget->EvaluateAsAbsolute(Address)) {
144 }
else if (Op.
isImm()) {
147 assert(Op.
isExpr() &&
"unknown operand kind in printOperand");
168 bool NeedPlus =
false;
175 if (NeedPlus) O <<
" + ";
177 O << ScaleVal <<
'*';
182 if (!DispSpec.
isImm()) {
183 if (NeedPlus) O <<
" + ";
184 assert(DispSpec.
isExpr() &&
"non-immediate displacement for LEA?");
187 int64_t DispVal = DispSpec.
getImm();
188 if (DispVal || (!IndexReg.
getReg() && !BaseReg.
getReg())) {
210 if (DispSpec.
isImm()) {
213 assert(DispSpec.
isExpr() &&
"non-immediate displacement?");
void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void printMemOffset(const MCInst *MI, unsigned OpNo, raw_ostream &O)
enable_if_c<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)
void printInstruction(const MCInst *MI, raw_ostream &O)
void printSSECC(const MCInst *MI, unsigned Op, raw_ostream &O)
format_object1< int64_t > formatImm(const int64_t Value) const
Utility function to print immediates in decimal or hex.
#define llvm_unreachable(msg)
unsigned getReg() const
getReg - Returns the register number.
virtual void printRegName(raw_ostream &OS, unsigned RegNo) const
printRegName - Print the assembler register name.
const MCExpr * getExpr() const
format_object1< int64_t > formatHex(const int64_t Value) const
static const char * getRegisterName(unsigned RegNo)
void printAVXCC(const MCInst *MI, unsigned Op, raw_ostream &O)
const MCInstrDesc & get(unsigned Opcode) const
raw_ostream * CommentStream
unsigned getOpcode() const
void printMemReference(const MCInst *MI, unsigned Op, raw_ostream &O)
virtual void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot)
void printAnnotation(raw_ostream &OS, StringRef Annot)
Utility function for printing annotations.
void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O)
void EmitAnyX86InstComments(const MCInst *MI, raw_ostream &OS, const char *(*getRegName)(unsigned))
const MCOperand & getOperand(unsigned i) const