a2bd638c29a9a49be40185675fab12739a4e3068
[oota-llvm.git] / lib / Target / X86 / X86MCCodeEmitter.cpp
1 //===-- X86/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 #define DEBUG_TYPE "mccodeemitter"
15 #include "X86.h"
16 #include "X86InstrInfo.h"
17 #include "X86FixupKinds.h"
18 #include "llvm/MC/MCCodeEmitter.h"
19 #include "llvm/MC/MCExpr.h"
20 #include "llvm/MC/MCInst.h"
21 #include "llvm/MC/MCSymbol.h"
22 #include "llvm/Support/raw_ostream.h"
23 using namespace llvm;
24
25 namespace {
26 class X86MCCodeEmitter : public MCCodeEmitter {
27   X86MCCodeEmitter(const X86MCCodeEmitter &); // DO NOT IMPLEMENT
28   void operator=(const X86MCCodeEmitter &); // DO NOT IMPLEMENT
29   const TargetMachine &TM;
30   const TargetInstrInfo &TII;
31   MCContext &Ctx;
32   bool Is64BitMode;
33 public:
34   X86MCCodeEmitter(TargetMachine &tm, MCContext &ctx, bool is64Bit)
35     : TM(tm), TII(*TM.getInstrInfo()), Ctx(ctx) {
36     Is64BitMode = is64Bit;
37   }
38
39   ~X86MCCodeEmitter() {}
40
41   static unsigned GetX86RegNum(const MCOperand &MO) {
42     return X86RegisterInfo::getX86RegNum(MO.getReg());
43   }
44
45   // On regular x86, both XMM0-XMM7 and XMM8-XMM15 are encoded in the range
46   // 0-7 and the difference between the 2 groups is given by the REX prefix.
47   // In the VEX prefix, registers are seen sequencially from 0-15 and encoded
48   // in 1's complement form, example:
49   //
50   //  ModRM field => XMM9 => 1
51   //  VEX.VVVV    => XMM9 => ~9
52   //
53   // See table 4-35 of Intel AVX Programming Reference for details.
54   static unsigned char getVEXRegisterEncoding(const MCInst &MI,
55                                               unsigned OpNum) {
56     unsigned SrcReg = MI.getOperand(OpNum).getReg();
57     unsigned SrcRegNum = GetX86RegNum(MI.getOperand(OpNum));
58     if ((SrcReg >= X86::XMM8 && SrcReg <= X86::XMM15) ||
59         (SrcReg >= X86::YMM8 && SrcReg <= X86::YMM15))
60       SrcRegNum += 8;
61
62     // The registers represented through VEX_VVVV should
63     // be encoded in 1's complement form.
64     return (~SrcRegNum) & 0xf;
65   }
66
67   void EmitByte(unsigned char C, unsigned &CurByte, raw_ostream &OS) const {
68     OS << (char)C;
69     ++CurByte;
70   }
71
72   void EmitConstant(uint64_t Val, unsigned Size, unsigned &CurByte,
73                     raw_ostream &OS) const {
74     // Output the constant in little endian byte order.
75     for (unsigned i = 0; i != Size; ++i) {
76       EmitByte(Val & 255, CurByte, OS);
77       Val >>= 8;
78     }
79   }
80
81   void EmitImmediate(const MCOperand &Disp,
82                      unsigned ImmSize, MCFixupKind FixupKind,
83                      unsigned &CurByte, raw_ostream &OS,
84                      SmallVectorImpl<MCFixup> &Fixups,
85                      int ImmOffset = 0) const;
86
87   inline static unsigned char ModRMByte(unsigned Mod, unsigned RegOpcode,
88                                         unsigned RM) {
89     assert(Mod < 4 && RegOpcode < 8 && RM < 8 && "ModRM Fields out of range!");
90     return RM | (RegOpcode << 3) | (Mod << 6);
91   }
92
93   void EmitRegModRMByte(const MCOperand &ModRMReg, unsigned RegOpcodeFld,
94                         unsigned &CurByte, raw_ostream &OS) const {
95     EmitByte(ModRMByte(3, RegOpcodeFld, GetX86RegNum(ModRMReg)), CurByte, OS);
96   }
97
98   void EmitSIBByte(unsigned SS, unsigned Index, unsigned Base,
99                    unsigned &CurByte, raw_ostream &OS) const {
100     // SIB byte is in the same format as the ModRMByte.
101     EmitByte(ModRMByte(SS, Index, Base), CurByte, OS);
102   }
103
104
105   void EmitMemModRMByte(const MCInst &MI, unsigned Op,
106                         unsigned RegOpcodeField,
107                         uint64_t TSFlags, unsigned &CurByte, raw_ostream &OS,
108                         SmallVectorImpl<MCFixup> &Fixups) const;
109
110   void EncodeInstruction(const MCInst &MI, raw_ostream &OS,
111                          SmallVectorImpl<MCFixup> &Fixups) const;
112
113   void EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte, int MemOperand,
114                            const MCInst &MI, const TargetInstrDesc &Desc,
115                            raw_ostream &OS) const;
116
117   void EmitSegmentOverridePrefix(uint64_t TSFlags, unsigned &CurByte,
118                                  int MemOperand, const MCInst &MI,
119                                  raw_ostream &OS) const;
120
121   void EmitOpcodePrefix(uint64_t TSFlags, unsigned &CurByte, int MemOperand,
122                         const MCInst &MI, const TargetInstrDesc &Desc,
123                         raw_ostream &OS) const;
124 };
125
126 } // end anonymous namespace
127
128
129 MCCodeEmitter *llvm::createX86_32MCCodeEmitter(const Target &,
130                                                TargetMachine &TM,
131                                                MCContext &Ctx) {
132   return new X86MCCodeEmitter(TM, Ctx, false);
133 }
134
135 MCCodeEmitter *llvm::createX86_64MCCodeEmitter(const Target &,
136                                                TargetMachine &TM,
137                                                MCContext &Ctx) {
138   return new X86MCCodeEmitter(TM, Ctx, true);
139 }
140
141 /// isDisp8 - Return true if this signed displacement fits in a 8-bit
142 /// sign-extended field.
143 static bool isDisp8(int Value) {
144   return Value == (signed char)Value;
145 }
146
147 /// getImmFixupKind - Return the appropriate fixup kind to use for an immediate
148 /// in an instruction with the specified TSFlags.
149 static MCFixupKind getImmFixupKind(uint64_t TSFlags) {
150   unsigned Size = X86II::getSizeOfImm(TSFlags);
151   bool isPCRel = X86II::isImmPCRel(TSFlags);
152
153   return MCFixup::getKindForSize(Size, isPCRel);
154 }
155
156 /// Is32BitMemOperand - Return true if the specified instruction with a memory
157 /// operand should emit the 0x67 prefix byte in 64-bit mode due to a 32-bit
158 /// memory operand.  Op specifies the operand # of the memoperand.
159 static bool Is32BitMemOperand(const MCInst &MI, unsigned Op) {
160   const MCOperand &BaseReg  = MI.getOperand(Op+X86::AddrBaseReg);
161   const MCOperand &IndexReg = MI.getOperand(Op+X86::AddrIndexReg);
162   
163   if ((BaseReg.getReg() != 0 && X86::GR32RegClass.contains(BaseReg.getReg())) ||
164       (IndexReg.getReg() != 0 && X86::GR32RegClass.contains(IndexReg.getReg())))
165     return true;
166   return false;
167 }
168
169 /// StartsWithGlobalOffsetTable - Return true for the simple cases where this
170 /// expression starts with _GLOBAL_OFFSET_TABLE_. This is a needed to support
171 /// PIC on ELF i386 as that symbol is magic. We check only simple case that
172 /// are know to be used: _GLOBAL_OFFSET_TABLE_ by itself or at the start
173 /// of a binary expression.
174 static bool StartsWithGlobalOffsetTable(const MCExpr *Expr) {
175   if (Expr->getKind() == MCExpr::Binary) {
176     const MCBinaryExpr *BE = static_cast<const MCBinaryExpr *>(Expr);
177     Expr = BE->getLHS();
178   }
179
180   if (Expr->getKind() != MCExpr::SymbolRef)
181     return false;
182
183   const MCSymbolRefExpr *Ref = static_cast<const MCSymbolRefExpr*>(Expr);
184   const MCSymbol &S = Ref->getSymbol();
185   return S.getName() == "_GLOBAL_OFFSET_TABLE_";
186 }
187
188 void X86MCCodeEmitter::
189 EmitImmediate(const MCOperand &DispOp, unsigned Size, MCFixupKind FixupKind,
190               unsigned &CurByte, raw_ostream &OS,
191               SmallVectorImpl<MCFixup> &Fixups, int ImmOffset) const {
192   const MCExpr *Expr = NULL;
193   if (DispOp.isImm()) {
194     // If this is a simple integer displacement that doesn't require a relocation,
195     // emit it now.
196     if (FixupKind != FK_PCRel_1 &&
197         FixupKind != FK_PCRel_2 &&
198         FixupKind != FK_PCRel_4) {
199       EmitConstant(DispOp.getImm()+ImmOffset, Size, CurByte, OS);
200       return;
201     }
202     Expr = MCConstantExpr::Create(DispOp.getImm(), Ctx);
203   } else {
204     Expr = DispOp.getExpr();
205   }
206
207   // If we have an immoffset, add it to the expression.
208   if (FixupKind == FK_Data_4 && StartsWithGlobalOffsetTable(Expr)) {
209     assert(ImmOffset == 0);
210
211     FixupKind = MCFixupKind(X86::reloc_global_offset_table);
212     ImmOffset = CurByte;
213   }
214
215   // If the fixup is pc-relative, we need to bias the value to be relative to
216   // the start of the field, not the end of the field.
217   if (FixupKind == FK_PCRel_4 ||
218       FixupKind == MCFixupKind(X86::reloc_riprel_4byte) ||
219       FixupKind == MCFixupKind(X86::reloc_riprel_4byte_movq_load))
220     ImmOffset -= 4;
221   if (FixupKind == FK_PCRel_2)
222     ImmOffset -= 2;
223   if (FixupKind == FK_PCRel_1)
224     ImmOffset -= 1;
225
226   if (ImmOffset)
227     Expr = MCBinaryExpr::CreateAdd(Expr, MCConstantExpr::Create(ImmOffset, Ctx),
228                                    Ctx);
229
230   // Emit a symbolic constant as a fixup and 4 zeros.
231   Fixups.push_back(MCFixup::Create(CurByte, Expr, FixupKind));
232   EmitConstant(0, Size, CurByte, OS);
233 }
234
235 void X86MCCodeEmitter::EmitMemModRMByte(const MCInst &MI, unsigned Op,
236                                         unsigned RegOpcodeField,
237                                         uint64_t TSFlags, unsigned &CurByte,
238                                         raw_ostream &OS,
239                                         SmallVectorImpl<MCFixup> &Fixups) const{
240   const MCOperand &Disp     = MI.getOperand(Op+X86::AddrDisp);
241   const MCOperand &Base     = MI.getOperand(Op+X86::AddrBaseReg);
242   const MCOperand &Scale    = MI.getOperand(Op+X86::AddrScaleAmt);
243   const MCOperand &IndexReg = MI.getOperand(Op+X86::AddrIndexReg);
244   unsigned BaseReg = Base.getReg();
245
246   // Handle %rip relative addressing.
247   if (BaseReg == X86::RIP) {    // [disp32+RIP] in X86-64 mode
248     assert(Is64BitMode && "Rip-relative addressing requires 64-bit mode");
249     assert(IndexReg.getReg() == 0 && "Invalid rip-relative address");
250     EmitByte(ModRMByte(0, RegOpcodeField, 5), CurByte, OS);
251
252     unsigned FixupKind = X86::reloc_riprel_4byte;
253
254     // movq loads are handled with a special relocation form which allows the
255     // linker to eliminate some loads for GOT references which end up in the
256     // same linkage unit.
257     if (MI.getOpcode() == X86::MOV64rm)
258       FixupKind = X86::reloc_riprel_4byte_movq_load;
259
260     // rip-relative addressing is actually relative to the *next* instruction.
261     // Since an immediate can follow the mod/rm byte for an instruction, this
262     // means that we need to bias the immediate field of the instruction with
263     // the size of the immediate field.  If we have this case, add it into the
264     // expression to emit.
265     int ImmSize = X86II::hasImm(TSFlags) ? X86II::getSizeOfImm(TSFlags) : 0;
266
267     EmitImmediate(Disp, 4, MCFixupKind(FixupKind),
268                   CurByte, OS, Fixups, -ImmSize);
269     return;
270   }
271
272   unsigned BaseRegNo = BaseReg ? GetX86RegNum(Base) : -1U;
273
274   // Determine whether a SIB byte is needed.
275   // If no BaseReg, issue a RIP relative instruction only if the MCE can
276   // resolve addresses on-the-fly, otherwise use SIB (Intel Manual 2A, table
277   // 2-7) and absolute references.
278
279   if (// The SIB byte must be used if there is an index register.
280       IndexReg.getReg() == 0 &&
281       // The SIB byte must be used if the base is ESP/RSP/R12, all of which
282       // encode to an R/M value of 4, which indicates that a SIB byte is
283       // present.
284       BaseRegNo != N86::ESP &&
285       // If there is no base register and we're in 64-bit mode, we need a SIB
286       // byte to emit an addr that is just 'disp32' (the non-RIP relative form).
287       (!Is64BitMode || BaseReg != 0)) {
288
289     if (BaseReg == 0) {          // [disp32]     in X86-32 mode
290       EmitByte(ModRMByte(0, RegOpcodeField, 5), CurByte, OS);
291       EmitImmediate(Disp, 4, FK_Data_4, CurByte, OS, Fixups);
292       return;
293     }
294
295     // If the base is not EBP/ESP and there is no displacement, use simple
296     // indirect register encoding, this handles addresses like [EAX].  The
297     // encoding for [EBP] with no displacement means [disp32] so we handle it
298     // by emitting a displacement of 0 below.
299     if (Disp.isImm() && Disp.getImm() == 0 && BaseRegNo != N86::EBP) {
300       EmitByte(ModRMByte(0, RegOpcodeField, BaseRegNo), CurByte, OS);
301       return;
302     }
303
304     // Otherwise, if the displacement fits in a byte, encode as [REG+disp8].
305     if (Disp.isImm() && isDisp8(Disp.getImm())) {
306       EmitByte(ModRMByte(1, RegOpcodeField, BaseRegNo), CurByte, OS);
307       EmitImmediate(Disp, 1, FK_Data_1, CurByte, OS, Fixups);
308       return;
309     }
310
311     // Otherwise, emit the most general non-SIB encoding: [REG+disp32]
312     EmitByte(ModRMByte(2, RegOpcodeField, BaseRegNo), CurByte, OS);
313     EmitImmediate(Disp, 4, MCFixupKind(X86::reloc_signed_4byte), CurByte, OS,
314                   Fixups);
315     return;
316   }
317
318   // We need a SIB byte, so start by outputting the ModR/M byte first
319   assert(IndexReg.getReg() != X86::ESP &&
320          IndexReg.getReg() != X86::RSP && "Cannot use ESP as index reg!");
321
322   bool ForceDisp32 = false;
323   bool ForceDisp8  = false;
324   if (BaseReg == 0) {
325     // If there is no base register, we emit the special case SIB byte with
326     // MOD=0, BASE=5, to JUST get the index, scale, and displacement.
327     EmitByte(ModRMByte(0, RegOpcodeField, 4), CurByte, OS);
328     ForceDisp32 = true;
329   } else if (!Disp.isImm()) {
330     // Emit the normal disp32 encoding.
331     EmitByte(ModRMByte(2, RegOpcodeField, 4), CurByte, OS);
332     ForceDisp32 = true;
333   } else if (Disp.getImm() == 0 &&
334              // Base reg can't be anything that ends up with '5' as the base
335              // reg, it is the magic [*] nomenclature that indicates no base.
336              BaseRegNo != N86::EBP) {
337     // Emit no displacement ModR/M byte
338     EmitByte(ModRMByte(0, RegOpcodeField, 4), CurByte, OS);
339   } else if (isDisp8(Disp.getImm())) {
340     // Emit the disp8 encoding.
341     EmitByte(ModRMByte(1, RegOpcodeField, 4), CurByte, OS);
342     ForceDisp8 = true;           // Make sure to force 8 bit disp if Base=EBP
343   } else {
344     // Emit the normal disp32 encoding.
345     EmitByte(ModRMByte(2, RegOpcodeField, 4), CurByte, OS);
346   }
347
348   // Calculate what the SS field value should be...
349   static const unsigned SSTable[] = { ~0, 0, 1, ~0, 2, ~0, ~0, ~0, 3 };
350   unsigned SS = SSTable[Scale.getImm()];
351
352   if (BaseReg == 0) {
353     // Handle the SIB byte for the case where there is no base, see Intel
354     // Manual 2A, table 2-7. The displacement has already been output.
355     unsigned IndexRegNo;
356     if (IndexReg.getReg())
357       IndexRegNo = GetX86RegNum(IndexReg);
358     else // Examples: [ESP+1*<noreg>+4] or [scaled idx]+disp32 (MOD=0,BASE=5)
359       IndexRegNo = 4;
360     EmitSIBByte(SS, IndexRegNo, 5, CurByte, OS);
361   } else {
362     unsigned IndexRegNo;
363     if (IndexReg.getReg())
364       IndexRegNo = GetX86RegNum(IndexReg);
365     else
366       IndexRegNo = 4;   // For example [ESP+1*<noreg>+4]
367     EmitSIBByte(SS, IndexRegNo, GetX86RegNum(Base), CurByte, OS);
368   }
369
370   // Do we need to output a displacement?
371   if (ForceDisp8)
372     EmitImmediate(Disp, 1, FK_Data_1, CurByte, OS, Fixups);
373   else if (ForceDisp32 || Disp.getImm() != 0)
374     EmitImmediate(Disp, 4, MCFixupKind(X86::reloc_signed_4byte), CurByte, OS,
375                   Fixups);
376 }
377
378 /// EmitVEXOpcodePrefix - AVX instructions are encoded using a opcode prefix
379 /// called VEX.
380 void X86MCCodeEmitter::EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
381                                            int MemOperand, const MCInst &MI,
382                                            const TargetInstrDesc &Desc,
383                                            raw_ostream &OS) const {
384   bool HasVEX_4V = false;
385   if ((TSFlags >> X86II::VEXShift) & X86II::VEX_4V)
386     HasVEX_4V = true;
387
388   // VEX_R: opcode externsion equivalent to REX.R in
389   // 1's complement (inverted) form
390   //
391   //  1: Same as REX_R=0 (must be 1 in 32-bit mode)
392   //  0: Same as REX_R=1 (64 bit mode only)
393   //
394   unsigned char VEX_R = 0x1;
395
396   // VEX_X: equivalent to REX.X, only used when a
397   // register is used for index in SIB Byte.
398   //
399   //  1: Same as REX.X=0 (must be 1 in 32-bit mode)
400   //  0: Same as REX.X=1 (64-bit mode only)
401   unsigned char VEX_X = 0x1;
402
403   // VEX_B:
404   //
405   //  1: Same as REX_B=0 (ignored in 32-bit mode)
406   //  0: Same as REX_B=1 (64 bit mode only)
407   //
408   unsigned char VEX_B = 0x1;
409
410   // VEX_W: opcode specific (use like REX.W, or used for
411   // opcode extension, or ignored, depending on the opcode byte)
412   unsigned char VEX_W = 0;
413
414   // VEX_5M (VEX m-mmmmm field):
415   //
416   //  0b00000: Reserved for future use
417   //  0b00001: implied 0F leading opcode
418   //  0b00010: implied 0F 38 leading opcode bytes
419   //  0b00011: implied 0F 3A leading opcode bytes
420   //  0b00100-0b11111: Reserved for future use
421   //
422   unsigned char VEX_5M = 0x1;
423
424   // VEX_4V (VEX vvvv field): a register specifier
425   // (in 1's complement form) or 1111 if unused.
426   unsigned char VEX_4V = 0xf;
427
428   // VEX_L (Vector Length):
429   //
430   //  0: scalar or 128-bit vector
431   //  1: 256-bit vector
432   //
433   unsigned char VEX_L = 0;
434
435   // VEX_PP: opcode extension providing equivalent
436   // functionality of a SIMD prefix
437   //
438   //  0b00: None
439   //  0b01: 66
440   //  0b10: F3
441   //  0b11: F2
442   //
443   unsigned char VEX_PP = 0;
444
445   // Encode the operand size opcode prefix as needed.
446   if (TSFlags & X86II::OpSize)
447     VEX_PP = 0x01;
448
449   if ((TSFlags >> X86II::VEXShift) & X86II::VEX_W)
450     VEX_W = 1;
451
452   if ((TSFlags >> X86II::VEXShift) & X86II::VEX_L)
453     VEX_L = 1;
454
455   switch (TSFlags & X86II::Op0Mask) {
456   default: assert(0 && "Invalid prefix!");
457   case X86II::T8:  // 0F 38
458     VEX_5M = 0x2;
459     break;
460   case X86II::TA:  // 0F 3A
461     VEX_5M = 0x3;
462     break;
463   case X86II::TF:  // F2 0F 38
464     VEX_PP = 0x3;
465     VEX_5M = 0x2;
466     break;
467   case X86II::XS:  // F3 0F
468     VEX_PP = 0x2;
469     break;
470   case X86II::XD:  // F2 0F
471     VEX_PP = 0x3;
472     break;
473   case X86II::A6:  // Bypass: Not used by VEX
474   case X86II::A7:  // Bypass: Not used by VEX
475   case X86II::TB:  // Bypass: Not used by VEX
476   case 0:
477     break;  // No prefix!
478   }
479
480   // Set the vector length to 256-bit if YMM0-YMM15 is used
481   for (unsigned i = 0; i != MI.getNumOperands(); ++i) {
482     if (!MI.getOperand(i).isReg())
483       continue;
484     unsigned SrcReg = MI.getOperand(i).getReg();
485     if (SrcReg >= X86::YMM0 && SrcReg <= X86::YMM15)
486       VEX_L = 1;
487   }
488
489   unsigned NumOps = MI.getNumOperands();
490   unsigned CurOp = 0;
491   bool IsDestMem = false;
492
493   switch (TSFlags & X86II::FormMask) {
494   case X86II::MRMInitReg: assert(0 && "FIXME: Remove this!");
495   case X86II::MRMDestMem:
496     IsDestMem = true;
497     // The important info for the VEX prefix is never beyond the address
498     // registers. Don't check beyond that.
499     NumOps = CurOp = X86::AddrNumOperands;
500   case X86II::MRM0m: case X86II::MRM1m:
501   case X86II::MRM2m: case X86II::MRM3m:
502   case X86II::MRM4m: case X86II::MRM5m:
503   case X86II::MRM6m: case X86II::MRM7m:
504   case X86II::MRMSrcMem:
505   case X86II::MRMSrcReg:
506     if (MI.getNumOperands() > CurOp && MI.getOperand(CurOp).isReg() &&
507         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(CurOp).getReg()))
508       VEX_R = 0x0;
509     CurOp++;
510
511     if (HasVEX_4V) {
512       VEX_4V = getVEXRegisterEncoding(MI, IsDestMem ? CurOp-1 : CurOp);
513       CurOp++;
514     }
515
516     // To only check operands before the memory address ones, start
517     // the search from the begining
518     if (IsDestMem)
519       CurOp = 0;
520
521     // If the last register should be encoded in the immediate field
522     // do not use any bit from VEX prefix to this register, ignore it
523     if ((TSFlags >> X86II::VEXShift) & X86II::VEX_I8IMM)
524       NumOps--;
525
526     for (; CurOp != NumOps; ++CurOp) {
527       const MCOperand &MO = MI.getOperand(CurOp);
528       if (MO.isReg() && X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
529         VEX_B = 0x0;
530       if (!VEX_B && MO.isReg() &&
531           ((TSFlags & X86II::FormMask) == X86II::MRMSrcMem) &&
532           X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
533         VEX_X = 0x0;
534     }
535     break;
536   default: // MRMDestReg, MRM0r-MRM7r, RawFrm
537     if (!MI.getNumOperands())
538       break;
539
540     if (MI.getOperand(CurOp).isReg() &&
541         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(CurOp).getReg()))
542       VEX_B = 0;
543
544     if (HasVEX_4V)
545       VEX_4V = getVEXRegisterEncoding(MI, CurOp);
546
547     CurOp++;
548     for (; CurOp != NumOps; ++CurOp) {
549       const MCOperand &MO = MI.getOperand(CurOp);
550       if (MO.isReg() && !HasVEX_4V &&
551           X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
552         VEX_R = 0x0;
553     }
554     break;
555   }
556
557   // Emit segment override opcode prefix as needed.
558   EmitSegmentOverridePrefix(TSFlags, CurByte, MemOperand, MI, OS);
559
560   // VEX opcode prefix can have 2 or 3 bytes
561   //
562   //  3 bytes:
563   //    +-----+ +--------------+ +-------------------+
564   //    | C4h | | RXB | m-mmmm | | W | vvvv | L | pp |
565   //    +-----+ +--------------+ +-------------------+
566   //  2 bytes:
567   //    +-----+ +-------------------+
568   //    | C5h | | R | vvvv | L | pp |
569   //    +-----+ +-------------------+
570   //
571   unsigned char LastByte = VEX_PP | (VEX_L << 2) | (VEX_4V << 3);
572
573   if (VEX_B && VEX_X && !VEX_W && (VEX_5M == 1)) { // 2 byte VEX prefix
574     EmitByte(0xC5, CurByte, OS);
575     EmitByte(LastByte | (VEX_R << 7), CurByte, OS);
576     return;
577   }
578
579   // 3 byte VEX prefix
580   EmitByte(0xC4, CurByte, OS);
581   EmitByte(VEX_R << 7 | VEX_X << 6 | VEX_B << 5 | VEX_5M, CurByte, OS);
582   EmitByte(LastByte | (VEX_W << 7), CurByte, OS);
583 }
584
585 /// DetermineREXPrefix - Determine if the MCInst has to be encoded with a X86-64
586 /// REX prefix which specifies 1) 64-bit instructions, 2) non-default operand
587 /// size, and 3) use of X86-64 extended registers.
588 static unsigned DetermineREXPrefix(const MCInst &MI, uint64_t TSFlags,
589                                    const TargetInstrDesc &Desc) {
590   unsigned REX = 0;
591   if (TSFlags & X86II::REX_W)
592     REX |= 1 << 3; // set REX.W
593
594   if (MI.getNumOperands() == 0) return REX;
595
596   unsigned NumOps = MI.getNumOperands();
597   // FIXME: MCInst should explicitize the two-addrness.
598   bool isTwoAddr = NumOps > 1 &&
599                       Desc.getOperandConstraint(1, TOI::TIED_TO) != -1;
600
601   // If it accesses SPL, BPL, SIL, or DIL, then it requires a 0x40 REX prefix.
602   unsigned i = isTwoAddr ? 1 : 0;
603   for (; i != NumOps; ++i) {
604     const MCOperand &MO = MI.getOperand(i);
605     if (!MO.isReg()) continue;
606     unsigned Reg = MO.getReg();
607     if (!X86InstrInfo::isX86_64NonExtLowByteReg(Reg)) continue;
608     // FIXME: The caller of DetermineREXPrefix slaps this prefix onto anything
609     // that returns non-zero.
610     REX |= 0x40; // REX fixed encoding prefix
611     break;
612   }
613
614   switch (TSFlags & X86II::FormMask) {
615   case X86II::MRMInitReg: assert(0 && "FIXME: Remove this!");
616   case X86II::MRMSrcReg:
617     if (MI.getOperand(0).isReg() &&
618         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(0).getReg()))
619       REX |= 1 << 2; // set REX.R
620     i = isTwoAddr ? 2 : 1;
621     for (; i != NumOps; ++i) {
622       const MCOperand &MO = MI.getOperand(i);
623       if (MO.isReg() && X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
624         REX |= 1 << 0; // set REX.B
625     }
626     break;
627   case X86II::MRMSrcMem: {
628     if (MI.getOperand(0).isReg() &&
629         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(0).getReg()))
630       REX |= 1 << 2; // set REX.R
631     unsigned Bit = 0;
632     i = isTwoAddr ? 2 : 1;
633     for (; i != NumOps; ++i) {
634       const MCOperand &MO = MI.getOperand(i);
635       if (MO.isReg()) {
636         if (X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
637           REX |= 1 << Bit; // set REX.B (Bit=0) and REX.X (Bit=1)
638         Bit++;
639       }
640     }
641     break;
642   }
643   case X86II::MRM0m: case X86II::MRM1m:
644   case X86II::MRM2m: case X86II::MRM3m:
645   case X86II::MRM4m: case X86II::MRM5m:
646   case X86II::MRM6m: case X86II::MRM7m:
647   case X86II::MRMDestMem: {
648     unsigned e = (isTwoAddr ? X86::AddrNumOperands+1 : X86::AddrNumOperands);
649     i = isTwoAddr ? 1 : 0;
650     if (NumOps > e && MI.getOperand(e).isReg() &&
651         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(e).getReg()))
652       REX |= 1 << 2; // set REX.R
653     unsigned Bit = 0;
654     for (; i != e; ++i) {
655       const MCOperand &MO = MI.getOperand(i);
656       if (MO.isReg()) {
657         if (X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
658           REX |= 1 << Bit; // REX.B (Bit=0) and REX.X (Bit=1)
659         Bit++;
660       }
661     }
662     break;
663   }
664   default:
665     if (MI.getOperand(0).isReg() &&
666         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(0).getReg()))
667       REX |= 1 << 0; // set REX.B
668     i = isTwoAddr ? 2 : 1;
669     for (unsigned e = NumOps; i != e; ++i) {
670       const MCOperand &MO = MI.getOperand(i);
671       if (MO.isReg() && X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
672         REX |= 1 << 2; // set REX.R
673     }
674     break;
675   }
676   return REX;
677 }
678
679 /// EmitSegmentOverridePrefix - Emit segment override opcode prefix as needed
680 void X86MCCodeEmitter::EmitSegmentOverridePrefix(uint64_t TSFlags,
681                                         unsigned &CurByte, int MemOperand,
682                                         const MCInst &MI,
683                                         raw_ostream &OS) const {
684   switch (TSFlags & X86II::SegOvrMask) {
685   default: assert(0 && "Invalid segment!");
686   case 0:
687     // No segment override, check for explicit one on memory operand.
688     if (MemOperand != -1) {   // If the instruction has a memory operand.
689       switch (MI.getOperand(MemOperand+X86::AddrSegmentReg).getReg()) {
690       default: assert(0 && "Unknown segment register!");
691       case 0: break;
692       case X86::CS: EmitByte(0x2E, CurByte, OS); break;
693       case X86::SS: EmitByte(0x36, CurByte, OS); break;
694       case X86::DS: EmitByte(0x3E, CurByte, OS); break;
695       case X86::ES: EmitByte(0x26, CurByte, OS); break;
696       case X86::FS: EmitByte(0x64, CurByte, OS); break;
697       case X86::GS: EmitByte(0x65, CurByte, OS); break;
698       }
699     }
700     break;
701   case X86II::FS:
702     EmitByte(0x64, CurByte, OS);
703     break;
704   case X86II::GS:
705     EmitByte(0x65, CurByte, OS);
706     break;
707   }
708 }
709
710 /// EmitOpcodePrefix - Emit all instruction prefixes prior to the opcode.
711 ///
712 /// MemOperand is the operand # of the start of a memory operand if present.  If
713 /// Not present, it is -1.
714 void X86MCCodeEmitter::EmitOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
715                                         int MemOperand, const MCInst &MI,
716                                         const TargetInstrDesc &Desc,
717                                         raw_ostream &OS) const {
718
719   // Emit the lock opcode prefix as needed.
720   if (TSFlags & X86II::LOCK)
721     EmitByte(0xF0, CurByte, OS);
722
723   // Emit segment override opcode prefix as needed.
724   EmitSegmentOverridePrefix(TSFlags, CurByte, MemOperand, MI, OS);
725
726   // Emit the repeat opcode prefix as needed.
727   if ((TSFlags & X86II::Op0Mask) == X86II::REP)
728     EmitByte(0xF3, CurByte, OS);
729
730   // Emit the address size opcode prefix as needed.
731   if ((TSFlags & X86II::AdSize) ||
732       (MemOperand != -1 && Is64BitMode && Is32BitMemOperand(MI, MemOperand)))
733     EmitByte(0x67, CurByte, OS);
734   
735   // Emit the operand size opcode prefix as needed.
736   if (TSFlags & X86II::OpSize)
737     EmitByte(0x66, CurByte, OS);
738
739   bool Need0FPrefix = false;
740   switch (TSFlags & X86II::Op0Mask) {
741   default: assert(0 && "Invalid prefix!");
742   case 0: break;  // No prefix!
743   case X86II::REP: break; // already handled.
744   case X86II::TB:  // Two-byte opcode prefix
745   case X86II::T8:  // 0F 38
746   case X86II::TA:  // 0F 3A
747   case X86II::A6:  // 0F A6
748   case X86II::A7:  // 0F A7
749     Need0FPrefix = true;
750     break;
751   case X86II::TF: // F2 0F 38
752     EmitByte(0xF2, CurByte, OS);
753     Need0FPrefix = true;
754     break;
755   case X86II::XS:   // F3 0F
756     EmitByte(0xF3, CurByte, OS);
757     Need0FPrefix = true;
758     break;
759   case X86II::XD:   // F2 0F
760     EmitByte(0xF2, CurByte, OS);
761     Need0FPrefix = true;
762     break;
763   case X86II::D8: EmitByte(0xD8, CurByte, OS); break;
764   case X86II::D9: EmitByte(0xD9, CurByte, OS); break;
765   case X86II::DA: EmitByte(0xDA, CurByte, OS); break;
766   case X86II::DB: EmitByte(0xDB, CurByte, OS); break;
767   case X86II::DC: EmitByte(0xDC, CurByte, OS); break;
768   case X86II::DD: EmitByte(0xDD, CurByte, OS); break;
769   case X86II::DE: EmitByte(0xDE, CurByte, OS); break;
770   case X86II::DF: EmitByte(0xDF, CurByte, OS); break;
771   }
772
773   // Handle REX prefix.
774   // FIXME: Can this come before F2 etc to simplify emission?
775   if (Is64BitMode) {
776     if (unsigned REX = DetermineREXPrefix(MI, TSFlags, Desc))
777       EmitByte(0x40 | REX, CurByte, OS);
778   }
779
780   // 0x0F escape code must be emitted just before the opcode.
781   if (Need0FPrefix)
782     EmitByte(0x0F, CurByte, OS);
783
784   // FIXME: Pull this up into previous switch if REX can be moved earlier.
785   switch (TSFlags & X86II::Op0Mask) {
786   case X86II::TF:    // F2 0F 38
787   case X86II::T8:    // 0F 38
788     EmitByte(0x38, CurByte, OS);
789     break;
790   case X86II::TA:    // 0F 3A
791     EmitByte(0x3A, CurByte, OS);
792     break;
793   case X86II::A6:    // 0F A6
794     EmitByte(0xA6, CurByte, OS);
795     break;
796   case X86II::A7:    // 0F A7
797     EmitByte(0xA7, CurByte, OS);
798     break;
799   }
800 }
801
802 void X86MCCodeEmitter::
803 EncodeInstruction(const MCInst &MI, raw_ostream &OS,
804                   SmallVectorImpl<MCFixup> &Fixups) const {
805   unsigned Opcode = MI.getOpcode();
806   const TargetInstrDesc &Desc = TII.get(Opcode);
807   uint64_t TSFlags = Desc.TSFlags;
808
809   // Pseudo instructions don't get encoded.
810   if ((TSFlags & X86II::FormMask) == X86II::Pseudo)
811     return;
812
813   // If this is a two-address instruction, skip one of the register operands.
814   // FIXME: This should be handled during MCInst lowering.
815   unsigned NumOps = Desc.getNumOperands();
816   unsigned CurOp = 0;
817   if (NumOps > 1 && Desc.getOperandConstraint(1, TOI::TIED_TO) != -1)
818     ++CurOp;
819   else if (NumOps > 2 && Desc.getOperandConstraint(NumOps-1, TOI::TIED_TO)== 0)
820     // Skip the last source operand that is tied_to the dest reg. e.g. LXADD32
821     --NumOps;
822
823   // Keep track of the current byte being emitted.
824   unsigned CurByte = 0;
825
826   // Is this instruction encoded using the AVX VEX prefix?
827   bool HasVEXPrefix = false;
828
829   // It uses the VEX.VVVV field?
830   bool HasVEX_4V = false;
831
832   if ((TSFlags >> X86II::VEXShift) & X86II::VEX)
833     HasVEXPrefix = true;
834   if ((TSFlags >> X86II::VEXShift) & X86II::VEX_4V)
835     HasVEX_4V = true;
836
837   
838   // Determine where the memory operand starts, if present.
839   int MemoryOperand = X86II::getMemoryOperandNo(TSFlags);
840   if (MemoryOperand != -1) MemoryOperand += CurOp;
841
842   if (!HasVEXPrefix)
843     EmitOpcodePrefix(TSFlags, CurByte, MemoryOperand, MI, Desc, OS);
844   else
845     EmitVEXOpcodePrefix(TSFlags, CurByte, MemoryOperand, MI, Desc, OS);
846
847   
848   unsigned char BaseOpcode = X86II::getBaseOpcodeFor(TSFlags);
849   
850   if ((TSFlags >> X86II::VEXShift) & X86II::Has3DNow0F0FOpcode)
851     BaseOpcode = 0x0F;   // Weird 3DNow! encoding.
852   
853   unsigned SrcRegNum = 0;
854   switch (TSFlags & X86II::FormMask) {
855   case X86II::MRMInitReg:
856     assert(0 && "FIXME: Remove this form when the JIT moves to MCCodeEmitter!");
857   default: errs() << "FORM: " << (TSFlags & X86II::FormMask) << "\n";
858     assert(0 && "Unknown FormMask value in X86MCCodeEmitter!");
859   case X86II::Pseudo:
860     assert(0 && "Pseudo instruction shouldn't be emitted");
861   case X86II::RawFrm:
862     EmitByte(BaseOpcode, CurByte, OS);
863     break;
864       
865   case X86II::RawFrmImm8:
866     EmitByte(BaseOpcode, CurByte, OS);
867     EmitImmediate(MI.getOperand(CurOp++),
868                   X86II::getSizeOfImm(TSFlags), getImmFixupKind(TSFlags),
869                   CurByte, OS, Fixups);
870     EmitImmediate(MI.getOperand(CurOp++), 1, FK_Data_1, CurByte, OS, Fixups);
871     break;
872   case X86II::RawFrmImm16:
873     EmitByte(BaseOpcode, CurByte, OS);
874     EmitImmediate(MI.getOperand(CurOp++),
875                   X86II::getSizeOfImm(TSFlags), getImmFixupKind(TSFlags),
876                   CurByte, OS, Fixups);
877     EmitImmediate(MI.getOperand(CurOp++), 2, FK_Data_2, CurByte, OS, Fixups);
878     break;
879
880   case X86II::AddRegFrm:
881     EmitByte(BaseOpcode + GetX86RegNum(MI.getOperand(CurOp++)), CurByte, OS);
882     break;
883
884   case X86II::MRMDestReg:
885     EmitByte(BaseOpcode, CurByte, OS);
886     EmitRegModRMByte(MI.getOperand(CurOp),
887                      GetX86RegNum(MI.getOperand(CurOp+1)), CurByte, OS);
888     CurOp += 2;
889     break;
890
891   case X86II::MRMDestMem:
892     EmitByte(BaseOpcode, CurByte, OS);
893     SrcRegNum = CurOp + X86::AddrNumOperands;
894
895     if (HasVEX_4V) // Skip 1st src (which is encoded in VEX_VVVV)
896       SrcRegNum++;
897
898     EmitMemModRMByte(MI, CurOp,
899                      GetX86RegNum(MI.getOperand(SrcRegNum)),
900                      TSFlags, CurByte, OS, Fixups);
901     CurOp = SrcRegNum + 1;
902     break;
903
904   case X86II::MRMSrcReg:
905     EmitByte(BaseOpcode, CurByte, OS);
906     SrcRegNum = CurOp + 1;
907
908     if (HasVEX_4V) // Skip 1st src (which is encoded in VEX_VVVV)
909       SrcRegNum++;
910
911     EmitRegModRMByte(MI.getOperand(SrcRegNum),
912                      GetX86RegNum(MI.getOperand(CurOp)), CurByte, OS);
913     CurOp = SrcRegNum + 1;
914     break;
915
916   case X86II::MRMSrcMem: {
917     int AddrOperands = X86::AddrNumOperands;
918     unsigned FirstMemOp = CurOp+1;
919     if (HasVEX_4V) {
920       ++AddrOperands;
921       ++FirstMemOp;  // Skip the register source (which is encoded in VEX_VVVV).
922     }
923
924     EmitByte(BaseOpcode, CurByte, OS);
925
926     EmitMemModRMByte(MI, FirstMemOp, GetX86RegNum(MI.getOperand(CurOp)),
927                      TSFlags, CurByte, OS, Fixups);
928     CurOp += AddrOperands + 1;
929     break;
930   }
931
932   case X86II::MRM0r: case X86II::MRM1r:
933   case X86II::MRM2r: case X86II::MRM3r:
934   case X86II::MRM4r: case X86II::MRM5r:
935   case X86II::MRM6r: case X86II::MRM7r:
936     if (HasVEX_4V) // Skip the register dst (which is encoded in VEX_VVVV).
937       CurOp++;
938     EmitByte(BaseOpcode, CurByte, OS);
939     EmitRegModRMByte(MI.getOperand(CurOp++),
940                      (TSFlags & X86II::FormMask)-X86II::MRM0r,
941                      CurByte, OS);
942     break;
943   case X86II::MRM0m: case X86II::MRM1m:
944   case X86II::MRM2m: case X86II::MRM3m:
945   case X86II::MRM4m: case X86II::MRM5m:
946   case X86II::MRM6m: case X86II::MRM7m:
947     EmitByte(BaseOpcode, CurByte, OS);
948     EmitMemModRMByte(MI, CurOp, (TSFlags & X86II::FormMask)-X86II::MRM0m,
949                      TSFlags, CurByte, OS, Fixups);
950     CurOp += X86::AddrNumOperands;
951     break;
952   case X86II::MRM_C1:
953     EmitByte(BaseOpcode, CurByte, OS);
954     EmitByte(0xC1, CurByte, OS);
955     break;
956   case X86II::MRM_C2:
957     EmitByte(BaseOpcode, CurByte, OS);
958     EmitByte(0xC2, CurByte, OS);
959     break;
960   case X86II::MRM_C3:
961     EmitByte(BaseOpcode, CurByte, OS);
962     EmitByte(0xC3, CurByte, OS);
963     break;
964   case X86II::MRM_C4:
965     EmitByte(BaseOpcode, CurByte, OS);
966     EmitByte(0xC4, CurByte, OS);
967     break;
968   case X86II::MRM_C8:
969     EmitByte(BaseOpcode, CurByte, OS);
970     EmitByte(0xC8, CurByte, OS);
971     break;
972   case X86II::MRM_C9:
973     EmitByte(BaseOpcode, CurByte, OS);
974     EmitByte(0xC9, CurByte, OS);
975     break;
976   case X86II::MRM_E8:
977     EmitByte(BaseOpcode, CurByte, OS);
978     EmitByte(0xE8, CurByte, OS);
979     break;
980   case X86II::MRM_F0:
981     EmitByte(BaseOpcode, CurByte, OS);
982     EmitByte(0xF0, CurByte, OS);
983     break;
984   case X86II::MRM_F8:
985     EmitByte(BaseOpcode, CurByte, OS);
986     EmitByte(0xF8, CurByte, OS);
987     break;
988   case X86II::MRM_F9:
989     EmitByte(BaseOpcode, CurByte, OS);
990     EmitByte(0xF9, CurByte, OS);
991     break;
992   case X86II::MRM_D0:
993     EmitByte(BaseOpcode, CurByte, OS);
994     EmitByte(0xD0, CurByte, OS);
995     break;
996   case X86II::MRM_D1:
997     EmitByte(BaseOpcode, CurByte, OS);
998     EmitByte(0xD1, CurByte, OS);
999     break;
1000   }
1001
1002   // If there is a remaining operand, it must be a trailing immediate.  Emit it
1003   // according to the right size for the instruction.
1004   if (CurOp != NumOps) {
1005     // The last source register of a 4 operand instruction in AVX is encoded
1006     // in bits[7:4] of a immediate byte, and bits[3:0] are ignored.
1007     if ((TSFlags >> X86II::VEXShift) & X86II::VEX_I8IMM) {
1008       const MCOperand &MO = MI.getOperand(CurOp++);
1009       bool IsExtReg =
1010         X86InstrInfo::isX86_64ExtendedReg(MO.getReg());
1011       unsigned RegNum = (IsExtReg ? (1 << 7) : 0);
1012       RegNum |= GetX86RegNum(MO) << 4;
1013       EmitImmediate(MCOperand::CreateImm(RegNum), 1, FK_Data_1, CurByte, OS,
1014                     Fixups);
1015     } else {
1016       unsigned FixupKind;
1017       // FIXME: Is there a better way to know that we need a signed relocation?
1018       if (MI.getOpcode() == X86::MOV64ri32 ||
1019           MI.getOpcode() == X86::MOV64mi32 ||
1020           MI.getOpcode() == X86::PUSH64i32)
1021         FixupKind = X86::reloc_signed_4byte;
1022       else
1023         FixupKind = getImmFixupKind(TSFlags);
1024       EmitImmediate(MI.getOperand(CurOp++),
1025                     X86II::getSizeOfImm(TSFlags), MCFixupKind(FixupKind),
1026                     CurByte, OS, Fixups);
1027     }
1028   }
1029
1030   if ((TSFlags >> X86II::VEXShift) & X86II::Has3DNow0F0FOpcode)
1031     EmitByte(X86II::getBaseOpcodeFor(TSFlags), CurByte, OS);
1032   
1033
1034 #ifndef NDEBUG
1035   // FIXME: Verify.
1036   if (/*!Desc.isVariadic() &&*/ CurOp != NumOps) {
1037     errs() << "Cannot encode all operands of: ";
1038     MI.dump();
1039     errs() << '\n';
1040     abort();
1041   }
1042 #endif
1043 }