1 //===-- X86MCCodeEmitter.cpp - Convert X86 code to machine code -----------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the X86MCCodeEmitter class.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "MCTargetDesc/X86MCTargetDesc.h"
15 #include "MCTargetDesc/X86BaseInfo.h"
16 #include "MCTargetDesc/X86FixupKinds.h"
17 #include "llvm/MC/MCCodeEmitter.h"
18 #include "llvm/MC/MCContext.h"
19 #include "llvm/MC/MCExpr.h"
20 #include "llvm/MC/MCInst.h"
21 #include "llvm/MC/MCInstrInfo.h"
22 #include "llvm/MC/MCRegisterInfo.h"
23 #include "llvm/MC/MCSubtargetInfo.h"
24 #include "llvm/MC/MCSymbol.h"
25 #include "llvm/Support/raw_ostream.h"
26 
27 using namespace llvm;
28 
29 #define DEBUG_TYPE "mccodeemitter"
30 
31 namespace {
32 class X86MCCodeEmitter : public MCCodeEmitter {
33   X86MCCodeEmitter(const X86MCCodeEmitter &) = delete;
34   void operator=(const X86MCCodeEmitter &) = delete;
35   const MCInstrInfo &MCII;
36   MCContext &Ctx;
37 public:
38   X86MCCodeEmitter(const MCInstrInfo &mcii, MCContext &ctx)
39     : MCII(mcii), Ctx(ctx) {
40   }
41 
42   ~X86MCCodeEmitter() override {}
43 
44   bool is64BitMode(const MCSubtargetInfo &STI) const {
45     return STI.getFeatureBits()[X86::Mode64Bit];
46   }
47 
48   bool is32BitMode(const MCSubtargetInfo &STI) const {
49     return STI.getFeatureBits()[X86::Mode32Bit];
50   }
51 
52   bool is16BitMode(const MCSubtargetInfo &STI) const {
53     return STI.getFeatureBits()[X86::Mode16Bit];
54   }
55 
56   /// Is16BitMemOperand - Return true if the specified instruction has
57   /// a 16-bit memory operand. Op specifies the operand # of the memoperand.
58   bool Is16BitMemOperand(const MCInst &MI, unsigned Op,
59                          const MCSubtargetInfo &STI) const {
60     const MCOperand &BaseReg  = MI.getOperand(Op+X86::AddrBaseReg);
61     const MCOperand &IndexReg = MI.getOperand(Op+X86::AddrIndexReg);
62     const MCOperand &Disp     = MI.getOperand(Op+X86::AddrDisp);
63 
64     if (is16BitMode(STI) && BaseReg.getReg() == 0 &&
65         Disp.isImm() && Disp.getImm() < 0x10000)
66       return true;
67     if ((BaseReg.getReg() != 0 &&
68          X86MCRegisterClasses[X86::GR16RegClassID].contains(BaseReg.getReg())) ||
69         (IndexReg.getReg() != 0 &&
70          X86MCRegisterClasses[X86::GR16RegClassID].contains(IndexReg.getReg())))
71       return true;
72     return false;
73   }
74 
75   unsigned GetX86RegNum(const MCOperand &MO) const {
76     return Ctx.getRegisterInfo()->getEncodingValue(MO.getReg()) & 0x7;
77   }
78 
79   unsigned getX86RegEncoding(const MCInst &MI, unsigned OpNum) const {
80     return Ctx.getRegisterInfo()->getEncodingValue(
81                                                  MI.getOperand(OpNum).getReg());
82   }
83 
84   bool isX86_64ExtendedReg(const MCInst &MI, unsigned OpNum) const {
85     return (getX86RegEncoding(MI, OpNum) >> 3) & 1;
86   }
87 
88   void EmitByte(uint8_t C, unsigned &CurByte, raw_ostream &OS) const {
89     OS << (char)C;
90     ++CurByte;
91   }
92 
93   void EmitConstant(uint64_t Val, unsigned Size, unsigned &CurByte,
94                     raw_ostream &OS) const {
95     // Output the constant in little endian byte order.
96     for (unsigned i = 0; i != Size; ++i) {
97       EmitByte(Val & 255, CurByte, OS);
98       Val >>= 8;
99     }
100   }
101 
102   void EmitImmediate(const MCOperand &Disp, SMLoc Loc,
103                      unsigned ImmSize, MCFixupKind FixupKind,
104                      unsigned &CurByte, raw_ostream &OS,
105                      SmallVectorImpl<MCFixup> &Fixups,
106                      int ImmOffset = 0) const;
107 
108   inline static uint8_t ModRMByte(unsigned Mod, unsigned RegOpcode,
109                                   unsigned RM) {
110     assert(Mod < 4 && RegOpcode < 8 && RM < 8 && "ModRM Fields out of range!");
111     return RM | (RegOpcode << 3) | (Mod << 6);
112   }
113 
114   void EmitRegModRMByte(const MCOperand &ModRMReg, unsigned RegOpcodeFld,
115                         unsigned &CurByte, raw_ostream &OS) const {
116     EmitByte(ModRMByte(3, RegOpcodeFld, GetX86RegNum(ModRMReg)), CurByte, OS);
117   }
118 
119   void EmitSIBByte(unsigned SS, unsigned Index, unsigned Base,
120                    unsigned &CurByte, raw_ostream &OS) const {
121     // SIB byte is in the same format as the ModRMByte.
122     EmitByte(ModRMByte(SS, Index, Base), CurByte, OS);
123   }
124 
125   void emitMemModRMByte(const MCInst &MI, unsigned Op, unsigned RegOpcodeField,
126                         uint64_t TSFlags, bool Rex, unsigned &CurByte,
127                         raw_ostream &OS, SmallVectorImpl<MCFixup> &Fixups,
128                         const MCSubtargetInfo &STI) const;
129 
130   void encodeInstruction(const MCInst &MI, raw_ostream &OS,
131                          SmallVectorImpl<MCFixup> &Fixups,
132                          const MCSubtargetInfo &STI) const override;
133 
134   void EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte, int MemOperand,
135                            const MCInst &MI, const MCInstrDesc &Desc,
136                            raw_ostream &OS) const;
137 
138   void EmitSegmentOverridePrefix(unsigned &CurByte, unsigned SegOperand,
139                                  const MCInst &MI, raw_ostream &OS) const;
140 
141   bool emitOpcodePrefix(uint64_t TSFlags, unsigned &CurByte, int MemOperand,
142                         const MCInst &MI, const MCInstrDesc &Desc,
143                         const MCSubtargetInfo &STI, raw_ostream &OS) const;
144 
145   uint8_t DetermineREXPrefix(const MCInst &MI, uint64_t TSFlags,
146                              int MemOperand, const MCInstrDesc &Desc) const;
147 };
148 
149 } // end anonymous namespace
150 
151 MCCodeEmitter *llvm::createX86MCCodeEmitter(const MCInstrInfo &MCII,
152                                             const MCRegisterInfo &MRI,
153                                             MCContext &Ctx) {
154   return new X86MCCodeEmitter(MCII, Ctx);
155 }
156 
157 /// isDisp8 - Return true if this signed displacement fits in a 8-bit
158 /// sign-extended field.
159 static bool isDisp8(int Value) {
160   return Value == (int8_t)Value;
161 }
162 
163 /// isCDisp8 - Return true if this signed displacement fits in a 8-bit
164 /// compressed dispacement field.
165 static bool isCDisp8(uint64_t TSFlags, int Value, int& CValue) {
166   assert(((TSFlags & X86II::EncodingMask) == X86II::EVEX) &&
167          "Compressed 8-bit displacement is only valid for EVEX inst.");
168 
169   unsigned CD8_Scale =
170     (TSFlags & X86II::CD8_Scale_Mask) >> X86II::CD8_Scale_Shift;
171   if (CD8_Scale == 0) {
172     CValue = Value;
173     return isDisp8(Value);
174   }
175 
176   unsigned Mask = CD8_Scale - 1;
177   assert((CD8_Scale & Mask) == 0 && "Invalid memory object size.");
178   if (Value & Mask) // Unaligned offset
179     return false;
180   Value /= (int)CD8_Scale;
181   bool Ret = (Value == (int8_t)Value);
182 
183   if (Ret)
184     CValue = Value;
185   return Ret;
186 }
187 
188 /// getImmFixupKind - Return the appropriate fixup kind to use for an immediate
189 /// in an instruction with the specified TSFlags.
190 static MCFixupKind getImmFixupKind(uint64_t TSFlags) {
191   unsigned Size = X86II::getSizeOfImm(TSFlags);
192   bool isPCRel = X86II::isImmPCRel(TSFlags);
193 
194   if (X86II::isImmSigned(TSFlags)) {
195     switch (Size) {
196     default: llvm_unreachable("Unsupported signed fixup size!");
197     case 4: return MCFixupKind(X86::reloc_signed_4byte);
198     }
199   }
200   return MCFixup::getKindForSize(Size, isPCRel);
201 }
202 
203 /// Is32BitMemOperand - Return true if the specified instruction has
204 /// a 32-bit memory operand. Op specifies the operand # of the memoperand.
205 static bool Is32BitMemOperand(const MCInst &MI, unsigned Op) {
206   const MCOperand &BaseReg  = MI.getOperand(Op+X86::AddrBaseReg);
207   const MCOperand &IndexReg = MI.getOperand(Op+X86::AddrIndexReg);
208 
209   if ((BaseReg.getReg() != 0 &&
210        X86MCRegisterClasses[X86::GR32RegClassID].contains(BaseReg.getReg())) ||
211       (IndexReg.getReg() != 0 &&
212        X86MCRegisterClasses[X86::GR32RegClassID].contains(IndexReg.getReg())))
213     return true;
214   if (BaseReg.getReg() == X86::EIP) {
215     assert(IndexReg.getReg() == 0 && "Invalid eip-based address.");
216     return true;
217   }
218   return false;
219 }
220 
221 /// Is64BitMemOperand - Return true if the specified instruction has
222 /// a 64-bit memory operand. Op specifies the operand # of the memoperand.
223 #ifndef NDEBUG
224 static bool Is64BitMemOperand(const MCInst &MI, unsigned Op) {
225   const MCOperand &BaseReg  = MI.getOperand(Op+X86::AddrBaseReg);
226   const MCOperand &IndexReg = MI.getOperand(Op+X86::AddrIndexReg);
227 
228   if ((BaseReg.getReg() != 0 &&
229        X86MCRegisterClasses[X86::GR64RegClassID].contains(BaseReg.getReg())) ||
230       (IndexReg.getReg() != 0 &&
231        X86MCRegisterClasses[X86::GR64RegClassID].contains(IndexReg.getReg())))
232     return true;
233   return false;
234 }
235 #endif
236 
237 /// StartsWithGlobalOffsetTable - Check if this expression starts with
238 ///  _GLOBAL_OFFSET_TABLE_ and if it is of the form
239 ///  _GLOBAL_OFFSET_TABLE_-symbol. This is needed to support PIC on ELF
240 /// i386 as _GLOBAL_OFFSET_TABLE_ is magical. We check only simple case that
241 /// are know to be used: _GLOBAL_OFFSET_TABLE_ by itself or at the start
242 /// of a binary expression.
243 enum GlobalOffsetTableExprKind {
244   GOT_None,
245   GOT_Normal,
246   GOT_SymDiff
247 };
248 static GlobalOffsetTableExprKind
249 StartsWithGlobalOffsetTable(const MCExpr *Expr) {
250   const MCExpr *RHS = nullptr;
251   if (Expr->getKind() == MCExpr::Binary) {
252     const MCBinaryExpr *BE = static_cast<const MCBinaryExpr *>(Expr);
253     Expr = BE->getLHS();
254     RHS = BE->getRHS();
255   }
256 
257   if (Expr->getKind() != MCExpr::SymbolRef)
258     return GOT_None;
259 
260   const MCSymbolRefExpr *Ref = static_cast<const MCSymbolRefExpr*>(Expr);
261   const MCSymbol &S = Ref->getSymbol();
262   if (S.getName() != "_GLOBAL_OFFSET_TABLE_")
263     return GOT_None;
264   if (RHS && RHS->getKind() == MCExpr::SymbolRef)
265     return GOT_SymDiff;
266   return GOT_Normal;
267 }
268 
269 static bool HasSecRelSymbolRef(const MCExpr *Expr) {
270   if (Expr->getKind() == MCExpr::SymbolRef) {
271     const MCSymbolRefExpr *Ref = static_cast<const MCSymbolRefExpr*>(Expr);
272     return Ref->getKind() == MCSymbolRefExpr::VK_SECREL;
273   }
274   return false;
275 }
276 
277 void X86MCCodeEmitter::
278 EmitImmediate(const MCOperand &DispOp, SMLoc Loc, unsigned Size,
279               MCFixupKind FixupKind, unsigned &CurByte, raw_ostream &OS,
280               SmallVectorImpl<MCFixup> &Fixups, int ImmOffset) const {
281   const MCExpr *Expr = nullptr;
282   if (DispOp.isImm()) {
283     // If this is a simple integer displacement that doesn't require a
284     // relocation, emit it now.
285     if (FixupKind != FK_PCRel_1 &&
286         FixupKind != FK_PCRel_2 &&
287         FixupKind != FK_PCRel_4) {
288       EmitConstant(DispOp.getImm()+ImmOffset, Size, CurByte, OS);
289       return;
290     }
291     Expr = MCConstantExpr::create(DispOp.getImm(), Ctx);
292   } else {
293     Expr = DispOp.getExpr();
294   }
295 
296   // If we have an immoffset, add it to the expression.
297   if ((FixupKind == FK_Data_4 ||
298        FixupKind == FK_Data_8 ||
299        FixupKind == MCFixupKind(X86::reloc_signed_4byte))) {
300     GlobalOffsetTableExprKind Kind = StartsWithGlobalOffsetTable(Expr);
301     if (Kind != GOT_None) {
302       assert(ImmOffset == 0);
303 
304       if (Size == 8) {
305         FixupKind = MCFixupKind(X86::reloc_global_offset_table8);
306       } else {
307         assert(Size == 4);
308         FixupKind = MCFixupKind(X86::reloc_global_offset_table);
309       }
310 
311       if (Kind == GOT_Normal)
312         ImmOffset = CurByte;
313     } else if (Expr->getKind() == MCExpr::SymbolRef) {
314       if (HasSecRelSymbolRef(Expr)) {
315         FixupKind = MCFixupKind(FK_SecRel_4);
316       }
317     } else if (Expr->getKind() == MCExpr::Binary) {
318       const MCBinaryExpr *Bin = static_cast<const MCBinaryExpr*>(Expr);
319       if (HasSecRelSymbolRef(Bin->getLHS())
320           || HasSecRelSymbolRef(Bin->getRHS())) {
321         FixupKind = MCFixupKind(FK_SecRel_4);
322       }
323     }
324   }
325 
326   // If the fixup is pc-relative, we need to bias the value to be relative to
327   // the start of the field, not the end of the field.
328   if (FixupKind == FK_PCRel_4 ||
329       FixupKind == MCFixupKind(X86::reloc_riprel_4byte) ||
330       FixupKind == MCFixupKind(X86::reloc_riprel_4byte_movq_load) ||
331       FixupKind == MCFixupKind(X86::reloc_riprel_4byte_relax) ||
332       FixupKind == MCFixupKind(X86::reloc_riprel_4byte_relax_rex))
333     ImmOffset -= 4;
334   if (FixupKind == FK_PCRel_2)
335     ImmOffset -= 2;
336   if (FixupKind == FK_PCRel_1)
337     ImmOffset -= 1;
338 
339   if (ImmOffset)
340     Expr = MCBinaryExpr::createAdd(Expr, MCConstantExpr::create(ImmOffset, Ctx),
341                                    Ctx);
342 
343   // Emit a symbolic constant as a fixup and 4 zeros.
344   Fixups.push_back(MCFixup::create(CurByte, Expr, FixupKind, Loc));
345   EmitConstant(0, Size, CurByte, OS);
346 }
347 
348 void X86MCCodeEmitter::emitMemModRMByte(const MCInst &MI, unsigned Op,
349                                         unsigned RegOpcodeField,
350                                         uint64_t TSFlags, bool Rex,
351                                         unsigned &CurByte, raw_ostream &OS,
352                                         SmallVectorImpl<MCFixup> &Fixups,
353                                         const MCSubtargetInfo &STI) const {
354   const MCOperand &Disp     = MI.getOperand(Op+X86::AddrDisp);
355   const MCOperand &Base     = MI.getOperand(Op+X86::AddrBaseReg);
356   const MCOperand &Scale    = MI.getOperand(Op+X86::AddrScaleAmt);
357   const MCOperand &IndexReg = MI.getOperand(Op+X86::AddrIndexReg);
358   unsigned BaseReg = Base.getReg();
359   bool HasEVEX = (TSFlags & X86II::EncodingMask) == X86II::EVEX;
360 
361   // Handle %rip relative addressing.
362   if (BaseReg == X86::RIP ||
363       BaseReg == X86::EIP) {    // [disp32+rIP] in X86-64 mode
364     assert(is64BitMode(STI) && "Rip-relative addressing requires 64-bit mode");
365     assert(IndexReg.getReg() == 0 && "Invalid rip-relative address");
366     EmitByte(ModRMByte(0, RegOpcodeField, 5), CurByte, OS);
367 
368     unsigned Opcode = MI.getOpcode();
369     // movq loads are handled with a special relocation form which allows the
370     // linker to eliminate some loads for GOT references which end up in the
371     // same linkage unit.
372     unsigned FixupKind = [=]() {
373       switch (Opcode) {
374       default:
375         return X86::reloc_riprel_4byte;
376       case X86::MOV64rm:
377         assert(Rex);
378         return X86::reloc_riprel_4byte_movq_load;
379       case X86::CALL64m:
380       case X86::JMP64m:
381       case X86::TEST64rm:
382       case X86::ADC64rm:
383       case X86::ADD64rm:
384       case X86::AND64rm:
385       case X86::CMP64rm:
386       case X86::OR64rm:
387       case X86::SBB64rm:
388       case X86::SUB64rm:
389       case X86::XOR64rm:
390         return Rex ? X86::reloc_riprel_4byte_relax_rex
391                    : X86::reloc_riprel_4byte_relax;
392       }
393     }();
394 
395     // rip-relative addressing is actually relative to the *next* instruction.
396     // Since an immediate can follow the mod/rm byte for an instruction, this
397     // means that we need to bias the immediate field of the instruction with
398     // the size of the immediate field.  If we have this case, add it into the
399     // expression to emit.
400     int ImmSize = X86II::hasImm(TSFlags) ? X86II::getSizeOfImm(TSFlags) : 0;
401 
402     EmitImmediate(Disp, MI.getLoc(), 4, MCFixupKind(FixupKind),
403                   CurByte, OS, Fixups, -ImmSize);
404     return;
405   }
406 
407   unsigned BaseRegNo = BaseReg ? GetX86RegNum(Base) : -1U;
408 
409   // 16-bit addressing forms of the ModR/M byte have a different encoding for
410   // the R/M field and are far more limited in which registers can be used.
411   if (Is16BitMemOperand(MI, Op, STI)) {
412     if (BaseReg) {
413       // For 32-bit addressing, the row and column values in Table 2-2 are
414       // basically the same. It's AX/CX/DX/BX/SP/BP/SI/DI in that order, with
415       // some special cases. And GetX86RegNum reflects that numbering.
416       // For 16-bit addressing it's more fun, as shown in the SDM Vol 2A,
417       // Table 2-1 "16-Bit Addressing Forms with the ModR/M byte". We can only
418       // use SI/DI/BP/BX, which have "row" values 4-7 in no particular order,
419       // while values 0-3 indicate the allowed combinations (base+index) of
420       // those: 0 for BX+SI, 1 for BX+DI, 2 for BP+SI, 3 for BP+DI.
421       //
422       // R16Table[] is a lookup from the normal RegNo, to the row values from
423       // Table 2-1 for 16-bit addressing modes. Where zero means disallowed.
424       static const unsigned R16Table[] = { 0, 0, 0, 7, 0, 6, 4, 5 };
425       unsigned RMfield = R16Table[BaseRegNo];
426 
427       assert(RMfield && "invalid 16-bit base register");
428 
429       if (IndexReg.getReg()) {
430         unsigned IndexReg16 = R16Table[GetX86RegNum(IndexReg)];
431 
432         assert(IndexReg16 && "invalid 16-bit index register");
433         // We must have one of SI/DI (4,5), and one of BP/BX (6,7).
434         assert(((IndexReg16 ^ RMfield) & 2) &&
435                "invalid 16-bit base/index register combination");
436         assert(Scale.getImm() == 1 &&
437                "invalid scale for 16-bit memory reference");
438 
439         // Allow base/index to appear in either order (although GAS doesn't).
440         if (IndexReg16 & 2)
441           RMfield = (RMfield & 1) | ((7 - IndexReg16) << 1);
442         else
443           RMfield = (IndexReg16 & 1) | ((7 - RMfield) << 1);
444       }
445 
446       if (Disp.isImm() && isDisp8(Disp.getImm())) {
447         if (Disp.getImm() == 0 && BaseRegNo != N86::EBP) {
448           // There is no displacement; just the register.
449           EmitByte(ModRMByte(0, RegOpcodeField, RMfield), CurByte, OS);
450           return;
451         }
452         // Use the [REG]+disp8 form, including for [BP] which cannot be encoded.
453         EmitByte(ModRMByte(1, RegOpcodeField, RMfield), CurByte, OS);
454         EmitImmediate(Disp, MI.getLoc(), 1, FK_Data_1, CurByte, OS, Fixups);
455         return;
456       }
457       // This is the [REG]+disp16 case.
458       EmitByte(ModRMByte(2, RegOpcodeField, RMfield), CurByte, OS);
459     } else {
460       // There is no BaseReg; this is the plain [disp16] case.
461       EmitByte(ModRMByte(0, RegOpcodeField, 6), CurByte, OS);
462     }
463 
464     // Emit 16-bit displacement for plain disp16 or [REG]+disp16 cases.
465     EmitImmediate(Disp, MI.getLoc(), 2, FK_Data_2, CurByte, OS, Fixups);
466     return;
467   }
468 
469   // Determine whether a SIB byte is needed.
470   // If no BaseReg, issue a RIP relative instruction only if the MCE can
471   // resolve addresses on-the-fly, otherwise use SIB (Intel Manual 2A, table
472   // 2-7) and absolute references.
473 
474   if (// The SIB byte must be used if there is an index register.
475       IndexReg.getReg() == 0 &&
476       // The SIB byte must be used if the base is ESP/RSP/R12, all of which
477       // encode to an R/M value of 4, which indicates that a SIB byte is
478       // present.
479       BaseRegNo != N86::ESP &&
480       // If there is no base register and we're in 64-bit mode, we need a SIB
481       // byte to emit an addr that is just 'disp32' (the non-RIP relative form).
482       (!is64BitMode(STI) || BaseReg != 0)) {
483 
484     if (BaseReg == 0) {          // [disp32]     in X86-32 mode
485       EmitByte(ModRMByte(0, RegOpcodeField, 5), CurByte, OS);
486       EmitImmediate(Disp, MI.getLoc(), 4, FK_Data_4, CurByte, OS, Fixups);
487       return;
488     }
489 
490     // If the base is not EBP/ESP and there is no displacement, use simple
491     // indirect register encoding, this handles addresses like [EAX].  The
492     // encoding for [EBP] with no displacement means [disp32] so we handle it
493     // by emitting a displacement of 0 below.
494     if (Disp.isImm() && Disp.getImm() == 0 && BaseRegNo != N86::EBP) {
495       EmitByte(ModRMByte(0, RegOpcodeField, BaseRegNo), CurByte, OS);
496       return;
497     }
498 
499     // Otherwise, if the displacement fits in a byte, encode as [REG+disp8].
500     if (Disp.isImm()) {
501       if (!HasEVEX && isDisp8(Disp.getImm())) {
502         EmitByte(ModRMByte(1, RegOpcodeField, BaseRegNo), CurByte, OS);
503         EmitImmediate(Disp, MI.getLoc(), 1, FK_Data_1, CurByte, OS, Fixups);
504         return;
505       }
506       // Try EVEX compressed 8-bit displacement first; if failed, fall back to
507       // 32-bit displacement.
508       int CDisp8 = 0;
509       if (HasEVEX && isCDisp8(TSFlags, Disp.getImm(), CDisp8)) {
510         EmitByte(ModRMByte(1, RegOpcodeField, BaseRegNo), CurByte, OS);
511         EmitImmediate(Disp, MI.getLoc(), 1, FK_Data_1, CurByte, OS, Fixups,
512                       CDisp8 - Disp.getImm());
513         return;
514       }
515     }
516 
517     // Otherwise, emit the most general non-SIB encoding: [REG+disp32]
518     EmitByte(ModRMByte(2, RegOpcodeField, BaseRegNo), CurByte, OS);
519     EmitImmediate(Disp, MI.getLoc(), 4, MCFixupKind(X86::reloc_signed_4byte),
520                   CurByte, OS, Fixups);
521     return;
522   }
523 
524   // We need a SIB byte, so start by outputting the ModR/M byte first
525   assert(IndexReg.getReg() != X86::ESP &&
526          IndexReg.getReg() != X86::RSP && "Cannot use ESP as index reg!");
527 
528   bool ForceDisp32 = false;
529   bool ForceDisp8  = false;
530   int CDisp8 = 0;
531   int ImmOffset = 0;
532   if (BaseReg == 0) {
533     // If there is no base register, we emit the special case SIB byte with
534     // MOD=0, BASE=5, to JUST get the index, scale, and displacement.
535     EmitByte(ModRMByte(0, RegOpcodeField, 4), CurByte, OS);
536     ForceDisp32 = true;
537   } else if (!Disp.isImm()) {
538     // Emit the normal disp32 encoding.
539     EmitByte(ModRMByte(2, RegOpcodeField, 4), CurByte, OS);
540     ForceDisp32 = true;
541   } else if (Disp.getImm() == 0 &&
542              // Base reg can't be anything that ends up with '5' as the base
543              // reg, it is the magic [*] nomenclature that indicates no base.
544              BaseRegNo != N86::EBP) {
545     // Emit no displacement ModR/M byte
546     EmitByte(ModRMByte(0, RegOpcodeField, 4), CurByte, OS);
547   } else if (!HasEVEX && isDisp8(Disp.getImm())) {
548     // Emit the disp8 encoding.
549     EmitByte(ModRMByte(1, RegOpcodeField, 4), CurByte, OS);
550     ForceDisp8 = true;           // Make sure to force 8 bit disp if Base=EBP
551   } else if (HasEVEX && isCDisp8(TSFlags, Disp.getImm(), CDisp8)) {
552     // Emit the disp8 encoding.
553     EmitByte(ModRMByte(1, RegOpcodeField, 4), CurByte, OS);
554     ForceDisp8 = true;           // Make sure to force 8 bit disp if Base=EBP
555     ImmOffset = CDisp8 - Disp.getImm();
556   } else {
557     // Emit the normal disp32 encoding.
558     EmitByte(ModRMByte(2, RegOpcodeField, 4), CurByte, OS);
559   }
560 
561   // Calculate what the SS field value should be...
562   static const unsigned SSTable[] = { ~0U, 0, 1, ~0U, 2, ~0U, ~0U, ~0U, 3 };
563   unsigned SS = SSTable[Scale.getImm()];
564 
565   if (BaseReg == 0) {
566     // Handle the SIB byte for the case where there is no base, see Intel
567     // Manual 2A, table 2-7. The displacement has already been output.
568     unsigned IndexRegNo;
569     if (IndexReg.getReg())
570       IndexRegNo = GetX86RegNum(IndexReg);
571     else // Examples: [ESP+1*<noreg>+4] or [scaled idx]+disp32 (MOD=0,BASE=5)
572       IndexRegNo = 4;
573     EmitSIBByte(SS, IndexRegNo, 5, CurByte, OS);
574   } else {
575     unsigned IndexRegNo;
576     if (IndexReg.getReg())
577       IndexRegNo = GetX86RegNum(IndexReg);
578     else
579       IndexRegNo = 4;   // For example [ESP+1*<noreg>+4]
580     EmitSIBByte(SS, IndexRegNo, GetX86RegNum(Base), CurByte, OS);
581   }
582 
583   // Do we need to output a displacement?
584   if (ForceDisp8)
585     EmitImmediate(Disp, MI.getLoc(), 1, FK_Data_1, CurByte, OS, Fixups, ImmOffset);
586   else if (ForceDisp32 || Disp.getImm() != 0)
587     EmitImmediate(Disp, MI.getLoc(), 4, MCFixupKind(X86::reloc_signed_4byte),
588                   CurByte, OS, Fixups);
589 }
590 
591 /// EmitVEXOpcodePrefix - AVX instructions are encoded using a opcode prefix
592 /// called VEX.
593 void X86MCCodeEmitter::EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
594                                            int MemOperand, const MCInst &MI,
595                                            const MCInstrDesc &Desc,
596                                            raw_ostream &OS) const {
597   assert(!(TSFlags & X86II::LOCK) && "Can't have LOCK VEX.");
598 
599   uint64_t Encoding = TSFlags & X86II::EncodingMask;
600   bool HasEVEX_K = TSFlags & X86II::EVEX_K;
601   bool HasVEX_4V = TSFlags & X86II::VEX_4V;
602   bool HasVEX_4VOp3 = TSFlags & X86II::VEX_4VOp3;
603   bool HasMemOp4 = TSFlags & X86II::MemOp4;
604   bool HasEVEX_RC = TSFlags & X86II::EVEX_RC;
605 
606   // VEX_R: opcode externsion equivalent to REX.R in
607   // 1's complement (inverted) form
608   //
609   //  1: Same as REX_R=0 (must be 1 in 32-bit mode)
610   //  0: Same as REX_R=1 (64 bit mode only)
611   //
612   uint8_t VEX_R = 0x1;
613   uint8_t EVEX_R2 = 0x1;
614 
615   // VEX_X: equivalent to REX.X, only used when a
616   // register is used for index in SIB Byte.
617   //
618   //  1: Same as REX.X=0 (must be 1 in 32-bit mode)
619   //  0: Same as REX.X=1 (64-bit mode only)
620   uint8_t VEX_X = 0x1;
621 
622   // VEX_B:
623   //
624   //  1: Same as REX_B=0 (ignored in 32-bit mode)
625   //  0: Same as REX_B=1 (64 bit mode only)
626   //
627   uint8_t VEX_B = 0x1;
628 
629   // VEX_W: opcode specific (use like REX.W, or used for
630   // opcode extension, or ignored, depending on the opcode byte)
631   uint8_t VEX_W = (TSFlags & X86II::VEX_W) ? 1 : 0;
632 
633   // VEX_5M (VEX m-mmmmm field):
634   //
635   //  0b00000: Reserved for future use
636   //  0b00001: implied 0F leading opcode
637   //  0b00010: implied 0F 38 leading opcode bytes
638   //  0b00011: implied 0F 3A leading opcode bytes
639   //  0b00100-0b11111: Reserved for future use
640   //  0b01000: XOP map select - 08h instructions with imm byte
641   //  0b01001: XOP map select - 09h instructions with no imm byte
642   //  0b01010: XOP map select - 0Ah instructions with imm dword
643   uint8_t VEX_5M;
644   switch (TSFlags & X86II::OpMapMask) {
645   default: llvm_unreachable("Invalid prefix!");
646   case X86II::TB:   VEX_5M = 0x1; break; // 0F
647   case X86II::T8:   VEX_5M = 0x2; break; // 0F 38
648   case X86II::TA:   VEX_5M = 0x3; break; // 0F 3A
649   case X86II::XOP8: VEX_5M = 0x8; break;
650   case X86II::XOP9: VEX_5M = 0x9; break;
651   case X86II::XOPA: VEX_5M = 0xA; break;
652   }
653 
654   // VEX_4V (VEX vvvv field): a register specifier
655   // (in 1's complement form) or 1111 if unused.
656   uint8_t VEX_4V = 0xf;
657   uint8_t EVEX_V2 = 0x1;
658 
659   // EVEX_L2/VEX_L (Vector Length):
660   //
661   // L2 L
662   //  0 0: scalar or 128-bit vector
663   //  0 1: 256-bit vector
664   //  1 0: 512-bit vector
665   //
666   uint8_t VEX_L = (TSFlags & X86II::VEX_L) ? 1 : 0;
667   uint8_t EVEX_L2 = (TSFlags & X86II::EVEX_L2) ? 1 : 0;
668 
669   // VEX_PP: opcode extension providing equivalent
670   // functionality of a SIMD prefix
671   //
672   //  0b00: None
673   //  0b01: 66
674   //  0b10: F3
675   //  0b11: F2
676   //
677   uint8_t VEX_PP;
678   switch (TSFlags & X86II::OpPrefixMask) {
679   default: llvm_unreachable("Invalid op prefix!");
680   case X86II::PS: VEX_PP = 0x0; break; // none
681   case X86II::PD: VEX_PP = 0x1; break; // 66
682   case X86II::XS: VEX_PP = 0x2; break; // F3
683   case X86II::XD: VEX_PP = 0x3; break; // F2
684   }
685 
686   // EVEX_U
687   uint8_t EVEX_U = 1; // Always '1' so far
688 
689   // EVEX_z
690   uint8_t EVEX_z = (HasEVEX_K && (TSFlags & X86II::EVEX_Z)) ? 1 : 0;
691 
692   // EVEX_b
693   uint8_t EVEX_b = (TSFlags & X86II::EVEX_B) ? 1 : 0;
694 
695   // EVEX_rc
696   uint8_t EVEX_rc = 0;
697 
698   // EVEX_aaa
699   uint8_t EVEX_aaa = 0;
700 
701   bool EncodeRC = false;
702 
703   // Classify VEX_B, VEX_4V, VEX_R, VEX_X
704   unsigned NumOps = Desc.getNumOperands();
705   unsigned CurOp = X86II::getOperandBias(Desc);
706 
707   switch (TSFlags & X86II::FormMask) {
708   default: llvm_unreachable("Unexpected form in EmitVEXOpcodePrefix!");
709   case X86II::RawFrm:
710     break;
711   case X86II::MRMDestMem: {
712     // MRMDestMem instructions forms:
713     //  MemAddr, src1(ModR/M)
714     //  MemAddr, src1(VEX_4V), src2(ModR/M)
715     //  MemAddr, src1(ModR/M), imm8
716     //
717     unsigned BaseRegEnc = getX86RegEncoding(MI, MemOperand + X86::AddrBaseReg);
718     VEX_B = ~(BaseRegEnc >> 3) & 1;
719     unsigned IndexRegEnc = getX86RegEncoding(MI, MemOperand+X86::AddrIndexReg);
720     VEX_X = ~(IndexRegEnc >> 3) & 1;
721     if (!HasVEX_4V) // Only needed with VSIB which don't use VVVV.
722       EVEX_V2 = ~(IndexRegEnc >> 4) & 1;
723 
724     CurOp += X86::AddrNumOperands;
725 
726     if (HasEVEX_K)
727       EVEX_aaa = getX86RegEncoding(MI, CurOp++);
728 
729     if (HasVEX_4V) {
730       unsigned VRegEnc = getX86RegEncoding(MI, CurOp++);
731       VEX_4V = ~VRegEnc & 0xf;
732       EVEX_V2 = ~(VRegEnc >> 4) & 1;
733     }
734 
735     unsigned RegEnc = getX86RegEncoding(MI, CurOp++);
736     VEX_R = ~(RegEnc >> 3) & 1;
737     EVEX_R2 = ~(RegEnc >> 4) & 1;
738     break;
739   }
740   case X86II::MRMSrcMem: {
741     // MRMSrcMem instructions forms:
742     //  src1(ModR/M), MemAddr
743     //  src1(ModR/M), src2(VEX_4V), MemAddr
744     //  src1(ModR/M), MemAddr, imm8
745     //  src1(ModR/M), MemAddr, src2(VEX_I8IMM)
746     //
747     //  FMA4:
748     //  dst(ModR/M.reg), src1(VEX_4V), src2(ModR/M), src3(VEX_I8IMM)
749     //  dst(ModR/M.reg), src1(VEX_4V), src2(VEX_I8IMM), src3(ModR/M),
750     unsigned RegEnc = getX86RegEncoding(MI, CurOp++);
751     VEX_R = ~(RegEnc >> 3) & 1;
752     EVEX_R2 = ~(RegEnc >> 4) & 1;
753 
754     if (HasEVEX_K)
755       EVEX_aaa = getX86RegEncoding(MI, CurOp++);
756 
757     if (HasVEX_4V) {
758       unsigned VRegEnc = getX86RegEncoding(MI, CurOp++);
759       VEX_4V = ~VRegEnc & 0xf;
760       EVEX_V2 = ~(VRegEnc >> 4) & 1;
761     }
762 
763     unsigned BaseRegEnc = getX86RegEncoding(MI, MemOperand + X86::AddrBaseReg);
764     VEX_B = ~(BaseRegEnc >> 3) & 1;
765     unsigned IndexRegEnc = getX86RegEncoding(MI, MemOperand+X86::AddrIndexReg);
766     VEX_X = ~(IndexRegEnc >> 3) & 1;
767     if (!HasVEX_4V) // Only needed with VSIB which don't use VVVV.
768       EVEX_V2 = ~(IndexRegEnc >> 4) & 1;
769 
770     if (HasVEX_4VOp3)
771       // Instruction format for 4VOp3:
772       //   src1(ModR/M), MemAddr, src3(VEX_4V)
773       // CurOp points to start of the MemoryOperand,
774       //   it skips TIED_TO operands if exist, then increments past src1.
775       // CurOp + X86::AddrNumOperands will point to src3.
776       VEX_4V = ~getX86RegEncoding(MI, CurOp + X86::AddrNumOperands) & 0xf;
777     break;
778   }
779   case X86II::MRM0m: case X86II::MRM1m:
780   case X86II::MRM2m: case X86II::MRM3m:
781   case X86II::MRM4m: case X86II::MRM5m:
782   case X86II::MRM6m: case X86II::MRM7m: {
783     // MRM[0-9]m instructions forms:
784     //  MemAddr
785     //  src1(VEX_4V), MemAddr
786     if (HasVEX_4V) {
787       unsigned VRegEnc = getX86RegEncoding(MI, CurOp++);
788       VEX_4V = ~VRegEnc & 0xf;
789       EVEX_V2 = ~(VRegEnc >> 4) & 1;
790     }
791 
792     if (HasEVEX_K)
793       EVEX_aaa = getX86RegEncoding(MI, CurOp++);
794 
795     unsigned BaseRegEnc = getX86RegEncoding(MI, MemOperand + X86::AddrBaseReg);
796     VEX_B = ~(BaseRegEnc >> 3) & 1;
797     unsigned IndexRegEnc = getX86RegEncoding(MI, MemOperand+X86::AddrIndexReg);
798     VEX_X = ~(IndexRegEnc >> 3) & 1;
799     break;
800   }
801   case X86II::MRMSrcReg: {
802     // MRMSrcReg instructions forms:
803     //  dst(ModR/M), src1(VEX_4V), src2(ModR/M), src3(VEX_I8IMM)
804     //  dst(ModR/M), src1(ModR/M)
805     //  dst(ModR/M), src1(ModR/M), imm8
806     //
807     //  FMA4:
808     //  dst(ModR/M.reg), src1(VEX_4V), src2(ModR/M), src3(VEX_I8IMM)
809     //  dst(ModR/M.reg), src1(VEX_4V), src2(VEX_I8IMM), src3(ModR/M),
810     unsigned RegEnc = getX86RegEncoding(MI, CurOp++);
811     VEX_R = ~(RegEnc >> 3) & 1;
812     EVEX_R2 = ~(RegEnc >> 4) & 1;
813 
814     if (HasEVEX_K)
815       EVEX_aaa = getX86RegEncoding(MI, CurOp++);
816 
817     if (HasVEX_4V) {
818       unsigned VRegEnc = getX86RegEncoding(MI, CurOp++);
819       VEX_4V = ~VRegEnc & 0xf;
820       EVEX_V2 = ~(VRegEnc >> 4) & 1;
821     }
822 
823     if (HasMemOp4) // Skip second register source (encoded in I8IMM)
824       CurOp++;
825 
826     RegEnc = getX86RegEncoding(MI, CurOp++);
827     VEX_B = ~(RegEnc >> 3) & 1;
828     VEX_X = ~(RegEnc >> 4) & 1;
829     if (HasVEX_4VOp3)
830       VEX_4V = ~getX86RegEncoding(MI, CurOp++) & 0xf;
831     if (EVEX_b) {
832       if (HasEVEX_RC) {
833         unsigned RcOperand = NumOps-1;
834         assert(RcOperand >= CurOp);
835         EVEX_rc = MI.getOperand(RcOperand).getImm() & 0x3;
836       }
837       EncodeRC = true;
838     }
839     break;
840   }
841   case X86II::MRMDestReg: {
842     // MRMDestReg instructions forms:
843     //  dst(ModR/M), src(ModR/M)
844     //  dst(ModR/M), src(ModR/M), imm8
845     //  dst(ModR/M), src1(VEX_4V), src2(ModR/M)
846     unsigned RegEnc = getX86RegEncoding(MI, CurOp++);
847     VEX_B = ~(RegEnc >> 3) & 1;
848     VEX_X = ~(RegEnc >> 4) & 1;
849 
850     if (HasEVEX_K)
851       EVEX_aaa = getX86RegEncoding(MI, CurOp++);
852 
853     if (HasVEX_4V) {
854       unsigned VRegEnc = getX86RegEncoding(MI, CurOp++);
855       VEX_4V = ~VRegEnc & 0xf;
856       EVEX_V2 = ~(VRegEnc >> 4) & 1;
857     }
858 
859     RegEnc = getX86RegEncoding(MI, CurOp++);
860     VEX_R = ~(RegEnc >> 3) & 1;
861     EVEX_R2 = ~(RegEnc >> 4) & 1;
862     if (EVEX_b)
863       EncodeRC = true;
864     break;
865   }
866   case X86II::MRM0r: case X86II::MRM1r:
867   case X86II::MRM2r: case X86II::MRM3r:
868   case X86II::MRM4r: case X86II::MRM5r:
869   case X86II::MRM6r: case X86II::MRM7r: {
870     // MRM0r-MRM7r instructions forms:
871     //  dst(VEX_4V), src(ModR/M), imm8
872     if (HasVEX_4V) {
873       unsigned VRegEnc = getX86RegEncoding(MI, CurOp++);
874       VEX_4V = ~VRegEnc & 0xf;
875       EVEX_V2 = ~(VRegEnc >> 4) & 1;
876     }
877     if (HasEVEX_K)
878       EVEX_aaa = getX86RegEncoding(MI, CurOp++);
879 
880     unsigned RegEnc = getX86RegEncoding(MI, CurOp++);
881     VEX_B = ~(RegEnc >> 3) & 1;
882     VEX_X = ~(RegEnc >> 4) & 1;
883     break;
884   }
885   }
886 
887   if (Encoding == X86II::VEX || Encoding == X86II::XOP) {
888     // VEX opcode prefix can have 2 or 3 bytes
889     //
890     //  3 bytes:
891     //    +-----+ +--------------+ +-------------------+
892     //    | C4h | | RXB | m-mmmm | | W | vvvv | L | pp |
893     //    +-----+ +--------------+ +-------------------+
894     //  2 bytes:
895     //    +-----+ +-------------------+
896     //    | C5h | | R | vvvv | L | pp |
897     //    +-----+ +-------------------+
898     //
899     //  XOP uses a similar prefix:
900     //    +-----+ +--------------+ +-------------------+
901     //    | 8Fh | | RXB | m-mmmm | | W | vvvv | L | pp |
902     //    +-----+ +--------------+ +-------------------+
903     uint8_t LastByte = VEX_PP | (VEX_L << 2) | (VEX_4V << 3);
904 
905     // Can we use the 2 byte VEX prefix?
906     if (Encoding == X86II::VEX && VEX_B && VEX_X && !VEX_W && (VEX_5M == 1)) {
907       EmitByte(0xC5, CurByte, OS);
908       EmitByte(LastByte | (VEX_R << 7), CurByte, OS);
909       return;
910     }
911 
912     // 3 byte VEX prefix
913     EmitByte(Encoding == X86II::XOP ? 0x8F : 0xC4, CurByte, OS);
914     EmitByte(VEX_R << 7 | VEX_X << 6 | VEX_B << 5 | VEX_5M, CurByte, OS);
915     EmitByte(LastByte | (VEX_W << 7), CurByte, OS);
916   } else {
917     assert(Encoding == X86II::EVEX && "unknown encoding!");
918     // EVEX opcode prefix can have 4 bytes
919     //
920     // +-----+ +--------------+ +-------------------+ +------------------------+
921     // | 62h | | RXBR' | 00mm | | W | vvvv | U | pp | | z | L'L | b | v' | aaa |
922     // +-----+ +--------------+ +-------------------+ +------------------------+
923     assert((VEX_5M & 0x3) == VEX_5M
924            && "More than 2 significant bits in VEX.m-mmmm fields for EVEX!");
925 
926     EmitByte(0x62, CurByte, OS);
927     EmitByte((VEX_R   << 7) |
928              (VEX_X   << 6) |
929              (VEX_B   << 5) |
930              (EVEX_R2 << 4) |
931              VEX_5M, CurByte, OS);
932     EmitByte((VEX_W   << 7) |
933              (VEX_4V  << 3) |
934              (EVEX_U  << 2) |
935              VEX_PP, CurByte, OS);
936     if (EncodeRC)
937       EmitByte((EVEX_z  << 7) |
938                (EVEX_rc << 5) |
939                (EVEX_b  << 4) |
940                (EVEX_V2 << 3) |
941                EVEX_aaa, CurByte, OS);
942     else
943       EmitByte((EVEX_z  << 7) |
944                (EVEX_L2 << 6) |
945                (VEX_L   << 5) |
946                (EVEX_b  << 4) |
947                (EVEX_V2 << 3) |
948                EVEX_aaa, CurByte, OS);
949   }
950 }
951 
952 /// DetermineREXPrefix - Determine if the MCInst has to be encoded with a X86-64
953 /// REX prefix which specifies 1) 64-bit instructions, 2) non-default operand
954 /// size, and 3) use of X86-64 extended registers.
955 uint8_t X86MCCodeEmitter::DetermineREXPrefix(const MCInst &MI, uint64_t TSFlags,
956                                              int MemOperand,
957                                              const MCInstrDesc &Desc) const {
958   uint8_t REX = 0;
959   bool UsesHighByteReg = false;
960 
961   if (TSFlags & X86II::REX_W)
962     REX |= 1 << 3; // set REX.W
963 
964   if (MI.getNumOperands() == 0) return REX;
965 
966   unsigned NumOps = MI.getNumOperands();
967   unsigned CurOp = X86II::getOperandBias(Desc);
968 
969   // If it accesses SPL, BPL, SIL, or DIL, then it requires a 0x40 REX prefix.
970   for (unsigned i = CurOp; i != NumOps; ++i) {
971     const MCOperand &MO = MI.getOperand(i);
972     if (!MO.isReg()) continue;
973     unsigned Reg = MO.getReg();
974     if (Reg == X86::AH || Reg == X86::BH || Reg == X86::CH || Reg == X86::DH)
975       UsesHighByteReg = true;
976     if (!X86II::isX86_64NonExtLowByteReg(Reg)) continue;
977     // FIXME: The caller of DetermineREXPrefix slaps this prefix onto anything
978     // that returns non-zero.
979     REX |= 0x40; // REX fixed encoding prefix
980     break;
981   }
982 
983   switch (TSFlags & X86II::FormMask) {
984   case X86II::AddRegFrm:
985     REX |= isX86_64ExtendedReg(MI, CurOp++) << 0; // REX.B
986     break;
987   case X86II::MRMSrcReg:
988     REX |= isX86_64ExtendedReg(MI, CurOp++) << 2; // REX.R
989     REX |= isX86_64ExtendedReg(MI, CurOp++) << 0; // REX.B
990     break;
991   case X86II::MRMSrcMem: {
992     REX |= isX86_64ExtendedReg(MI, CurOp++) << 2; // REX.R
993     REX |= isX86_64ExtendedReg(MI, MemOperand+X86::AddrBaseReg) << 0; // REX.B
994     REX |= isX86_64ExtendedReg(MI, MemOperand+X86::AddrIndexReg) << 1; // REX.X
995     CurOp += X86::AddrNumOperands;
996     break;
997   }
998   case X86II::MRMDestReg:
999     REX |= isX86_64ExtendedReg(MI, CurOp++) << 0; // REX.B
1000     REX |= isX86_64ExtendedReg(MI, CurOp++) << 2; // REX.R
1001     break;
1002   case X86II::MRMDestMem:
1003     REX |= isX86_64ExtendedReg(MI, MemOperand+X86::AddrBaseReg) << 0; // REX.B
1004     REX |= isX86_64ExtendedReg(MI, MemOperand+X86::AddrIndexReg) << 1; // REX.X
1005     CurOp += X86::AddrNumOperands;
1006     REX |= isX86_64ExtendedReg(MI, CurOp++) << 2; // REX.R
1007     break;
1008   case X86II::MRMXm:
1009   case X86II::MRM0m: case X86II::MRM1m:
1010   case X86II::MRM2m: case X86II::MRM3m:
1011   case X86II::MRM4m: case X86II::MRM5m:
1012   case X86II::MRM6m: case X86II::MRM7m:
1013     REX |= isX86_64ExtendedReg(MI, MemOperand+X86::AddrBaseReg) << 0; // REX.B
1014     REX |= isX86_64ExtendedReg(MI, MemOperand+X86::AddrIndexReg) << 1; // REX.X
1015     break;
1016   case X86II::MRMXr:
1017   case X86II::MRM0r: case X86II::MRM1r:
1018   case X86II::MRM2r: case X86II::MRM3r:
1019   case X86II::MRM4r: case X86II::MRM5r:
1020   case X86II::MRM6r: case X86II::MRM7r:
1021     REX |= isX86_64ExtendedReg(MI, CurOp++) << 0; // REX.B
1022     break;
1023   }
1024   if (REX && UsesHighByteReg)
1025     report_fatal_error("Cannot encode high byte register in REX-prefixed instruction");
1026 
1027   return REX;
1028 }
1029 
1030 /// EmitSegmentOverridePrefix - Emit segment override opcode prefix as needed
1031 void X86MCCodeEmitter::EmitSegmentOverridePrefix(unsigned &CurByte,
1032                                                  unsigned SegOperand,
1033                                                  const MCInst &MI,
1034                                                  raw_ostream &OS) const {
1035   // Check for explicit segment override on memory operand.
1036   switch (MI.getOperand(SegOperand).getReg()) {
1037   default: llvm_unreachable("Unknown segment register!");
1038   case 0: break;
1039   case X86::CS: EmitByte(0x2E, CurByte, OS); break;
1040   case X86::SS: EmitByte(0x36, CurByte, OS); break;
1041   case X86::DS: EmitByte(0x3E, CurByte, OS); break;
1042   case X86::ES: EmitByte(0x26, CurByte, OS); break;
1043   case X86::FS: EmitByte(0x64, CurByte, OS); break;
1044   case X86::GS: EmitByte(0x65, CurByte, OS); break;
1045   }
1046 }
1047 
1048 /// Emit all instruction prefixes prior to the opcode.
1049 ///
1050 /// MemOperand is the operand # of the start of a memory operand if present.  If
1051 /// Not present, it is -1.
1052 ///
1053 /// Returns true if a REX prefix was used.
1054 bool X86MCCodeEmitter::emitOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
1055                                         int MemOperand, const MCInst &MI,
1056                                         const MCInstrDesc &Desc,
1057                                         const MCSubtargetInfo &STI,
1058                                         raw_ostream &OS) const {
1059   bool Ret = false;
1060   // Emit the operand size opcode prefix as needed.
1061   if ((TSFlags & X86II::OpSizeMask) == (is16BitMode(STI) ? X86II::OpSize32
1062                                                          : X86II::OpSize16))
1063     EmitByte(0x66, CurByte, OS);
1064 
1065   // Emit the LOCK opcode prefix.
1066   if (TSFlags & X86II::LOCK)
1067     EmitByte(0xF0, CurByte, OS);
1068 
1069   switch (TSFlags & X86II::OpPrefixMask) {
1070   case X86II::PD:   // 66
1071     EmitByte(0x66, CurByte, OS);
1072     break;
1073   case X86II::XS:   // F3
1074     EmitByte(0xF3, CurByte, OS);
1075     break;
1076   case X86II::XD:   // F2
1077     EmitByte(0xF2, CurByte, OS);
1078     break;
1079   }
1080 
1081   // Handle REX prefix.
1082   // FIXME: Can this come before F2 etc to simplify emission?
1083   if (is64BitMode(STI)) {
1084     if (uint8_t REX = DetermineREXPrefix(MI, TSFlags, MemOperand, Desc)) {
1085       EmitByte(0x40 | REX, CurByte, OS);
1086       Ret = true;
1087     }
1088   }
1089 
1090   // 0x0F escape code must be emitted just before the opcode.
1091   switch (TSFlags & X86II::OpMapMask) {
1092   case X86II::TB:  // Two-byte opcode map
1093   case X86II::T8:  // 0F 38
1094   case X86II::TA:  // 0F 3A
1095     EmitByte(0x0F, CurByte, OS);
1096     break;
1097   }
1098 
1099   switch (TSFlags & X86II::OpMapMask) {
1100   case X86II::T8:    // 0F 38
1101     EmitByte(0x38, CurByte, OS);
1102     break;
1103   case X86II::TA:    // 0F 3A
1104     EmitByte(0x3A, CurByte, OS);
1105     break;
1106   }
1107   return Ret;
1108 }
1109 
1110 void X86MCCodeEmitter::
1111 encodeInstruction(const MCInst &MI, raw_ostream &OS,
1112                   SmallVectorImpl<MCFixup> &Fixups,
1113                   const MCSubtargetInfo &STI) const {
1114   unsigned Opcode = MI.getOpcode();
1115   const MCInstrDesc &Desc = MCII.get(Opcode);
1116   uint64_t TSFlags = Desc.TSFlags;
1117 
1118   // Pseudo instructions don't get encoded.
1119   if ((TSFlags & X86II::FormMask) == X86II::Pseudo)
1120     return;
1121 
1122   unsigned NumOps = Desc.getNumOperands();
1123   unsigned CurOp = X86II::getOperandBias(Desc);
1124 
1125   // Keep track of the current byte being emitted.
1126   unsigned CurByte = 0;
1127 
1128   // Encoding type for this instruction.
1129   uint64_t Encoding = TSFlags & X86II::EncodingMask;
1130 
1131   // It uses the VEX.VVVV field?
1132   bool HasVEX_4V = TSFlags & X86II::VEX_4V;
1133   bool HasVEX_4VOp3 = TSFlags & X86II::VEX_4VOp3;
1134   bool HasMemOp4 = TSFlags & X86II::MemOp4;
1135   bool HasVEX_I8IMM = TSFlags & X86II::VEX_I8IMM;
1136   assert((!HasMemOp4 || HasVEX_I8IMM) && "MemOp4 should imply VEX_I8IMM");
1137 
1138   // It uses the EVEX.aaa field?
1139   bool HasEVEX_K = TSFlags & X86II::EVEX_K;
1140   bool HasEVEX_RC = TSFlags & X86II::EVEX_RC;
1141 
1142   // Used if a register is encoded in 7:4 of immediate.
1143   unsigned I8RegNum = 0;
1144 
1145   // Determine where the memory operand starts, if present.
1146   int MemoryOperand = X86II::getMemoryOperandNo(TSFlags);
1147   if (MemoryOperand != -1) MemoryOperand += CurOp;
1148 
1149   // Emit segment override opcode prefix as needed.
1150   if (MemoryOperand >= 0)
1151     EmitSegmentOverridePrefix(CurByte, MemoryOperand+X86::AddrSegmentReg,
1152                               MI, OS);
1153 
1154   // Emit the repeat opcode prefix as needed.
1155   if (TSFlags & X86II::REP)
1156     EmitByte(0xF3, CurByte, OS);
1157 
1158   // Emit the address size opcode prefix as needed.
1159   bool need_address_override;
1160   uint64_t AdSize = TSFlags & X86II::AdSizeMask;
1161   if ((is16BitMode(STI) && AdSize == X86II::AdSize32) ||
1162       (is32BitMode(STI) && AdSize == X86II::AdSize16) ||
1163       (is64BitMode(STI) && AdSize == X86II::AdSize32)) {
1164     need_address_override = true;
1165   } else if (MemoryOperand < 0) {
1166     need_address_override = false;
1167   } else if (is64BitMode(STI)) {
1168     assert(!Is16BitMemOperand(MI, MemoryOperand, STI));
1169     need_address_override = Is32BitMemOperand(MI, MemoryOperand);
1170   } else if (is32BitMode(STI)) {
1171     assert(!Is64BitMemOperand(MI, MemoryOperand));
1172     need_address_override = Is16BitMemOperand(MI, MemoryOperand, STI);
1173   } else {
1174     assert(is16BitMode(STI));
1175     assert(!Is64BitMemOperand(MI, MemoryOperand));
1176     need_address_override = !Is16BitMemOperand(MI, MemoryOperand, STI);
1177   }
1178 
1179   if (need_address_override)
1180     EmitByte(0x67, CurByte, OS);
1181 
1182   bool Rex = false;
1183   if (Encoding == 0)
1184     Rex = emitOpcodePrefix(TSFlags, CurByte, MemoryOperand, MI, Desc, STI, OS);
1185   else
1186     EmitVEXOpcodePrefix(TSFlags, CurByte, MemoryOperand, MI, Desc, OS);
1187 
1188   uint8_t BaseOpcode = X86II::getBaseOpcodeFor(TSFlags);
1189 
1190   if (TSFlags & X86II::Has3DNow0F0FOpcode)
1191     BaseOpcode = 0x0F;   // Weird 3DNow! encoding.
1192 
1193   uint64_t Form = TSFlags & X86II::FormMask;
1194   switch (Form) {
1195   default: errs() << "FORM: " << Form << "\n";
1196     llvm_unreachable("Unknown FormMask value in X86MCCodeEmitter!");
1197   case X86II::Pseudo:
1198     llvm_unreachable("Pseudo instruction shouldn't be emitted");
1199   case X86II::RawFrmDstSrc: {
1200     unsigned siReg = MI.getOperand(1).getReg();
1201     assert(((siReg == X86::SI && MI.getOperand(0).getReg() == X86::DI) ||
1202             (siReg == X86::ESI && MI.getOperand(0).getReg() == X86::EDI) ||
1203             (siReg == X86::RSI && MI.getOperand(0).getReg() == X86::RDI)) &&
1204            "SI and DI register sizes do not match");
1205     // Emit segment override opcode prefix as needed (not for %ds).
1206     if (MI.getOperand(2).getReg() != X86::DS)
1207       EmitSegmentOverridePrefix(CurByte, 2, MI, OS);
1208     // Emit AdSize prefix as needed.
1209     if ((!is32BitMode(STI) && siReg == X86::ESI) ||
1210         (is32BitMode(STI) && siReg == X86::SI))
1211       EmitByte(0x67, CurByte, OS);
1212     CurOp += 3; // Consume operands.
1213     EmitByte(BaseOpcode, CurByte, OS);
1214     break;
1215   }
1216   case X86II::RawFrmSrc: {
1217     unsigned siReg = MI.getOperand(0).getReg();
1218     // Emit segment override opcode prefix as needed (not for %ds).
1219     if (MI.getOperand(1).getReg() != X86::DS)
1220       EmitSegmentOverridePrefix(CurByte, 1, MI, OS);
1221     // Emit AdSize prefix as needed.
1222     if ((!is32BitMode(STI) && siReg == X86::ESI) ||
1223         (is32BitMode(STI) && siReg == X86::SI))
1224       EmitByte(0x67, CurByte, OS);
1225     CurOp += 2; // Consume operands.
1226     EmitByte(BaseOpcode, CurByte, OS);
1227     break;
1228   }
1229   case X86II::RawFrmDst: {
1230     unsigned siReg = MI.getOperand(0).getReg();
1231     // Emit AdSize prefix as needed.
1232     if ((!is32BitMode(STI) && siReg == X86::EDI) ||
1233         (is32BitMode(STI) && siReg == X86::DI))
1234       EmitByte(0x67, CurByte, OS);
1235     ++CurOp; // Consume operand.
1236     EmitByte(BaseOpcode, CurByte, OS);
1237     break;
1238   }
1239   case X86II::RawFrm:
1240     EmitByte(BaseOpcode, CurByte, OS);
1241     break;
1242   case X86II::RawFrmMemOffs:
1243     // Emit segment override opcode prefix as needed.
1244     EmitSegmentOverridePrefix(CurByte, 1, MI, OS);
1245     EmitByte(BaseOpcode, CurByte, OS);
1246     EmitImmediate(MI.getOperand(CurOp++), MI.getLoc(),
1247                   X86II::getSizeOfImm(TSFlags), getImmFixupKind(TSFlags),
1248                   CurByte, OS, Fixups);
1249     ++CurOp; // skip segment operand
1250     break;
1251   case X86II::RawFrmImm8:
1252     EmitByte(BaseOpcode, CurByte, OS);
1253     EmitImmediate(MI.getOperand(CurOp++), MI.getLoc(),
1254                   X86II::getSizeOfImm(TSFlags), getImmFixupKind(TSFlags),
1255                   CurByte, OS, Fixups);
1256     EmitImmediate(MI.getOperand(CurOp++), MI.getLoc(), 1, FK_Data_1, CurByte,
1257                   OS, Fixups);
1258     break;
1259   case X86II::RawFrmImm16:
1260     EmitByte(BaseOpcode, CurByte, OS);
1261     EmitImmediate(MI.getOperand(CurOp++), MI.getLoc(),
1262                   X86II::getSizeOfImm(TSFlags), getImmFixupKind(TSFlags),
1263                   CurByte, OS, Fixups);
1264     EmitImmediate(MI.getOperand(CurOp++), MI.getLoc(), 2, FK_Data_2, CurByte,
1265                   OS, Fixups);
1266     break;
1267 
1268   case X86II::AddRegFrm:
1269     EmitByte(BaseOpcode + GetX86RegNum(MI.getOperand(CurOp++)), CurByte, OS);
1270     break;
1271 
1272   case X86II::MRMDestReg: {
1273     EmitByte(BaseOpcode, CurByte, OS);
1274     unsigned SrcRegNum = CurOp + 1;
1275 
1276     if (HasEVEX_K) // Skip writemask
1277       ++SrcRegNum;
1278 
1279     if (HasVEX_4V) // Skip 1st src (which is encoded in VEX_VVVV)
1280       ++SrcRegNum;
1281 
1282     EmitRegModRMByte(MI.getOperand(CurOp),
1283                      GetX86RegNum(MI.getOperand(SrcRegNum)), CurByte, OS);
1284     CurOp = SrcRegNum + 1;
1285     break;
1286   }
1287   case X86II::MRMDestMem: {
1288     EmitByte(BaseOpcode, CurByte, OS);
1289     unsigned SrcRegNum = CurOp + X86::AddrNumOperands;
1290 
1291     if (HasEVEX_K) // Skip writemask
1292       ++SrcRegNum;
1293 
1294     if (HasVEX_4V) // Skip 1st src (which is encoded in VEX_VVVV)
1295       ++SrcRegNum;
1296 
1297     emitMemModRMByte(MI, CurOp, GetX86RegNum(MI.getOperand(SrcRegNum)), TSFlags,
1298                      Rex, CurByte, OS, Fixups, STI);
1299     CurOp = SrcRegNum + 1;
1300     break;
1301   }
1302   case X86II::MRMSrcReg: {
1303     EmitByte(BaseOpcode, CurByte, OS);
1304     unsigned SrcRegNum = CurOp + 1;
1305 
1306     if (HasEVEX_K) // Skip writemask
1307       ++SrcRegNum;
1308 
1309     if (HasVEX_4V) // Skip 1st src (which is encoded in VEX_VVVV)
1310       ++SrcRegNum;
1311 
1312     if (HasMemOp4) // Capture 2nd src (which is encoded in I8IMM)
1313       I8RegNum = getX86RegEncoding(MI, SrcRegNum++);
1314 
1315     EmitRegModRMByte(MI.getOperand(SrcRegNum),
1316                      GetX86RegNum(MI.getOperand(CurOp)), CurByte, OS);
1317     CurOp = SrcRegNum + 1;
1318     if (HasVEX_4VOp3)
1319       ++CurOp;
1320     if (!HasMemOp4 && HasVEX_I8IMM)
1321       I8RegNum = getX86RegEncoding(MI, CurOp++);
1322     // do not count the rounding control operand
1323     if (HasEVEX_RC)
1324       --NumOps;
1325     break;
1326   }
1327   case X86II::MRMSrcMem: {
1328     unsigned FirstMemOp = CurOp+1;
1329 
1330     if (HasEVEX_K) // Skip writemask
1331       ++FirstMemOp;
1332 
1333     if (HasVEX_4V)
1334       ++FirstMemOp;  // Skip the register source (which is encoded in VEX_VVVV).
1335 
1336     if (HasMemOp4) // Capture second register source (encoded in I8IMM)
1337       I8RegNum = getX86RegEncoding(MI, FirstMemOp++);
1338 
1339     EmitByte(BaseOpcode, CurByte, OS);
1340 
1341     emitMemModRMByte(MI, FirstMemOp, GetX86RegNum(MI.getOperand(CurOp)),
1342                      TSFlags, Rex, CurByte, OS, Fixups, STI);
1343     CurOp = FirstMemOp + X86::AddrNumOperands;
1344     if (HasVEX_4VOp3)
1345       ++CurOp;
1346     if (!HasMemOp4 && HasVEX_I8IMM)
1347       I8RegNum = getX86RegEncoding(MI, CurOp++);
1348     break;
1349   }
1350 
1351   case X86II::MRMXr:
1352   case X86II::MRM0r: case X86II::MRM1r:
1353   case X86II::MRM2r: case X86II::MRM3r:
1354   case X86II::MRM4r: case X86II::MRM5r:
1355   case X86II::MRM6r: case X86II::MRM7r: {
1356     if (HasVEX_4V) // Skip the register dst (which is encoded in VEX_VVVV).
1357       ++CurOp;
1358     if (HasEVEX_K) // Skip writemask
1359       ++CurOp;
1360     EmitByte(BaseOpcode, CurByte, OS);
1361     EmitRegModRMByte(MI.getOperand(CurOp++),
1362                      (Form == X86II::MRMXr) ? 0 : Form-X86II::MRM0r,
1363                      CurByte, OS);
1364     break;
1365   }
1366 
1367   case X86II::MRMXm:
1368   case X86II::MRM0m: case X86II::MRM1m:
1369   case X86II::MRM2m: case X86II::MRM3m:
1370   case X86II::MRM4m: case X86II::MRM5m:
1371   case X86II::MRM6m: case X86II::MRM7m: {
1372     if (HasVEX_4V) // Skip the register dst (which is encoded in VEX_VVVV).
1373       ++CurOp;
1374     if (HasEVEX_K) // Skip writemask
1375       ++CurOp;
1376     EmitByte(BaseOpcode, CurByte, OS);
1377     emitMemModRMByte(MI, CurOp,
1378                      (Form == X86II::MRMXm) ? 0 : Form - X86II::MRM0m, TSFlags,
1379                      Rex, CurByte, OS, Fixups, STI);
1380     CurOp += X86::AddrNumOperands;
1381     break;
1382   }
1383   case X86II::MRM_C0: case X86II::MRM_C1: case X86II::MRM_C2:
1384   case X86II::MRM_C3: case X86II::MRM_C4: case X86II::MRM_C5:
1385   case X86II::MRM_C6: case X86II::MRM_C7: case X86II::MRM_C8:
1386   case X86II::MRM_C9: case X86II::MRM_CA: case X86II::MRM_CB:
1387   case X86II::MRM_CC: case X86II::MRM_CD: case X86II::MRM_CE:
1388   case X86II::MRM_CF: case X86II::MRM_D0: case X86II::MRM_D1:
1389   case X86II::MRM_D2: case X86II::MRM_D3: case X86II::MRM_D4:
1390   case X86II::MRM_D5: case X86II::MRM_D6: case X86II::MRM_D7:
1391   case X86II::MRM_D8: case X86II::MRM_D9: case X86II::MRM_DA:
1392   case X86II::MRM_DB: case X86II::MRM_DC: case X86II::MRM_DD:
1393   case X86II::MRM_DE: case X86II::MRM_DF: case X86II::MRM_E0:
1394   case X86II::MRM_E1: case X86II::MRM_E2: case X86II::MRM_E3:
1395   case X86II::MRM_E4: case X86II::MRM_E5: case X86II::MRM_E6:
1396   case X86II::MRM_E7: case X86II::MRM_E8: case X86II::MRM_E9:
1397   case X86II::MRM_EA: case X86II::MRM_EB: case X86II::MRM_EC:
1398   case X86II::MRM_ED: case X86II::MRM_EE: case X86II::MRM_EF:
1399   case X86II::MRM_F0: case X86II::MRM_F1: case X86II::MRM_F2:
1400   case X86II::MRM_F3: case X86II::MRM_F4: case X86II::MRM_F5:
1401   case X86II::MRM_F6: case X86II::MRM_F7: case X86II::MRM_F8:
1402   case X86II::MRM_F9: case X86II::MRM_FA: case X86II::MRM_FB:
1403   case X86II::MRM_FC: case X86II::MRM_FD: case X86II::MRM_FE:
1404   case X86II::MRM_FF:
1405     EmitByte(BaseOpcode, CurByte, OS);
1406     EmitByte(0xC0 + Form - X86II::MRM_C0, CurByte, OS);
1407     break;
1408   }
1409 
1410   if (HasVEX_I8IMM) {
1411     // The last source register of a 4 operand instruction in AVX is encoded
1412     // in bits[7:4] of a immediate byte.
1413     assert(I8RegNum < 16 && "Register encoding out of range");
1414     I8RegNum <<= 4;
1415     if (CurOp != NumOps) {
1416       unsigned Val = MI.getOperand(CurOp++).getImm();
1417       assert(Val < 16 && "Immediate operand value out of range");
1418       I8RegNum |= Val;
1419     }
1420     EmitImmediate(MCOperand::createImm(I8RegNum), MI.getLoc(), 1, FK_Data_1,
1421                   CurByte, OS, Fixups);
1422   } else {
1423     // If there is a remaining operand, it must be a trailing immediate. Emit it
1424     // according to the right size for the instruction. Some instructions
1425     // (SSE4a extrq and insertq) have two trailing immediates.
1426     while (CurOp != NumOps && NumOps - CurOp <= 2) {
1427       EmitImmediate(MI.getOperand(CurOp++), MI.getLoc(),
1428                     X86II::getSizeOfImm(TSFlags), getImmFixupKind(TSFlags),
1429                     CurByte, OS, Fixups);
1430     }
1431   }
1432 
1433   if (TSFlags & X86II::Has3DNow0F0FOpcode)
1434     EmitByte(X86II::getBaseOpcodeFor(TSFlags), CurByte, OS);
1435 
1436 #ifndef NDEBUG
1437   // FIXME: Verify.
1438   if (/*!Desc.isVariadic() &&*/ CurOp != NumOps) {
1439     errs() << "Cannot encode all operands of: ";
1440     MI.dump();
1441     errs() << '\n';
1442     abort();
1443   }
1444 #endif
1445 }
1446