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