update a bunch of entries.
[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 >> 32) & 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 >> 32) & X86II::VEX_W)
450     VEX_W = 1;
451
452   if ((TSFlags >> 32) & 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::TB:  // Bypass: Not used by VEX
474   case 0:
475     break;  // No prefix!
476   }
477
478   // Set the vector length to 256-bit if YMM0-YMM15 is used
479   for (unsigned i = 0; i != MI.getNumOperands(); ++i) {
480     if (!MI.getOperand(i).isReg())
481       continue;
482     unsigned SrcReg = MI.getOperand(i).getReg();
483     if (SrcReg >= X86::YMM0 && SrcReg <= X86::YMM15)
484       VEX_L = 1;
485   }
486
487   unsigned NumOps = MI.getNumOperands();
488   unsigned CurOp = 0;
489   bool IsDestMem = false;
490
491   switch (TSFlags & X86II::FormMask) {
492   case X86II::MRMInitReg: assert(0 && "FIXME: Remove this!");
493   case X86II::MRMDestMem:
494     IsDestMem = true;
495     // The important info for the VEX prefix is never beyond the address
496     // registers. Don't check beyond that.
497     NumOps = CurOp = X86::AddrNumOperands;
498   case X86II::MRM0m: case X86II::MRM1m:
499   case X86II::MRM2m: case X86II::MRM3m:
500   case X86II::MRM4m: case X86II::MRM5m:
501   case X86II::MRM6m: case X86II::MRM7m:
502   case X86II::MRMSrcMem:
503   case X86II::MRMSrcReg:
504     if (MI.getNumOperands() > CurOp && MI.getOperand(CurOp).isReg() &&
505         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(CurOp).getReg()))
506       VEX_R = 0x0;
507     CurOp++;
508
509     if (HasVEX_4V) {
510       VEX_4V = getVEXRegisterEncoding(MI, IsDestMem ? CurOp-1 : CurOp);
511       CurOp++;
512     }
513
514     // To only check operands before the memory address ones, start
515     // the search from the begining
516     if (IsDestMem)
517       CurOp = 0;
518
519     // If the last register should be encoded in the immediate field
520     // do not use any bit from VEX prefix to this register, ignore it
521     if ((TSFlags >> 32) & X86II::VEX_I8IMM)
522       NumOps--;
523
524     for (; CurOp != NumOps; ++CurOp) {
525       const MCOperand &MO = MI.getOperand(CurOp);
526       if (MO.isReg() && X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
527         VEX_B = 0x0;
528       if (!VEX_B && MO.isReg() &&
529           ((TSFlags & X86II::FormMask) == X86II::MRMSrcMem) &&
530           X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
531         VEX_X = 0x0;
532     }
533     break;
534   default: // MRMDestReg, MRM0r-MRM7r, RawFrm
535     if (!MI.getNumOperands())
536       break;
537
538     if (MI.getOperand(CurOp).isReg() &&
539         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(CurOp).getReg()))
540       VEX_B = 0;
541
542     if (HasVEX_4V)
543       VEX_4V = getVEXRegisterEncoding(MI, CurOp);
544
545     CurOp++;
546     for (; CurOp != NumOps; ++CurOp) {
547       const MCOperand &MO = MI.getOperand(CurOp);
548       if (MO.isReg() && !HasVEX_4V &&
549           X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
550         VEX_R = 0x0;
551     }
552     break;
553   }
554
555   // Emit segment override opcode prefix as needed.
556   EmitSegmentOverridePrefix(TSFlags, CurByte, MemOperand, MI, OS);
557
558   // VEX opcode prefix can have 2 or 3 bytes
559   //
560   //  3 bytes:
561   //    +-----+ +--------------+ +-------------------+
562   //    | C4h | | RXB | m-mmmm | | W | vvvv | L | pp |
563   //    +-----+ +--------------+ +-------------------+
564   //  2 bytes:
565   //    +-----+ +-------------------+
566   //    | C5h | | R | vvvv | L | pp |
567   //    +-----+ +-------------------+
568   //
569   unsigned char LastByte = VEX_PP | (VEX_L << 2) | (VEX_4V << 3);
570
571   if (VEX_B && VEX_X && !VEX_W && (VEX_5M == 1)) { // 2 byte VEX prefix
572     EmitByte(0xC5, CurByte, OS);
573     EmitByte(LastByte | (VEX_R << 7), CurByte, OS);
574     return;
575   }
576
577   // 3 byte VEX prefix
578   EmitByte(0xC4, CurByte, OS);
579   EmitByte(VEX_R << 7 | VEX_X << 6 | VEX_B << 5 | VEX_5M, CurByte, OS);
580   EmitByte(LastByte | (VEX_W << 7), CurByte, OS);
581 }
582
583 /// DetermineREXPrefix - Determine if the MCInst has to be encoded with a X86-64
584 /// REX prefix which specifies 1) 64-bit instructions, 2) non-default operand
585 /// size, and 3) use of X86-64 extended registers.
586 static unsigned DetermineREXPrefix(const MCInst &MI, uint64_t TSFlags,
587                                    const TargetInstrDesc &Desc) {
588   unsigned REX = 0;
589   if (TSFlags & X86II::REX_W)
590     REX |= 1 << 3; // set REX.W
591
592   if (MI.getNumOperands() == 0) return REX;
593
594   unsigned NumOps = MI.getNumOperands();
595   // FIXME: MCInst should explicitize the two-addrness.
596   bool isTwoAddr = NumOps > 1 &&
597                       Desc.getOperandConstraint(1, TOI::TIED_TO) != -1;
598
599   // If it accesses SPL, BPL, SIL, or DIL, then it requires a 0x40 REX prefix.
600   unsigned i = isTwoAddr ? 1 : 0;
601   for (; i != NumOps; ++i) {
602     const MCOperand &MO = MI.getOperand(i);
603     if (!MO.isReg()) continue;
604     unsigned Reg = MO.getReg();
605     if (!X86InstrInfo::isX86_64NonExtLowByteReg(Reg)) continue;
606     // FIXME: The caller of DetermineREXPrefix slaps this prefix onto anything
607     // that returns non-zero.
608     REX |= 0x40; // REX fixed encoding prefix
609     break;
610   }
611
612   switch (TSFlags & X86II::FormMask) {
613   case X86II::MRMInitReg: assert(0 && "FIXME: Remove this!");
614   case X86II::MRMSrcReg:
615     if (MI.getOperand(0).isReg() &&
616         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(0).getReg()))
617       REX |= 1 << 2; // set REX.R
618     i = isTwoAddr ? 2 : 1;
619     for (; i != NumOps; ++i) {
620       const MCOperand &MO = MI.getOperand(i);
621       if (MO.isReg() && X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
622         REX |= 1 << 0; // set REX.B
623     }
624     break;
625   case X86II::MRMSrcMem: {
626     if (MI.getOperand(0).isReg() &&
627         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(0).getReg()))
628       REX |= 1 << 2; // set REX.R
629     unsigned Bit = 0;
630     i = isTwoAddr ? 2 : 1;
631     for (; i != NumOps; ++i) {
632       const MCOperand &MO = MI.getOperand(i);
633       if (MO.isReg()) {
634         if (X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
635           REX |= 1 << Bit; // set REX.B (Bit=0) and REX.X (Bit=1)
636         Bit++;
637       }
638     }
639     break;
640   }
641   case X86II::MRM0m: case X86II::MRM1m:
642   case X86II::MRM2m: case X86II::MRM3m:
643   case X86II::MRM4m: case X86II::MRM5m:
644   case X86II::MRM6m: case X86II::MRM7m:
645   case X86II::MRMDestMem: {
646     unsigned e = (isTwoAddr ? X86::AddrNumOperands+1 : X86::AddrNumOperands);
647     i = isTwoAddr ? 1 : 0;
648     if (NumOps > e && MI.getOperand(e).isReg() &&
649         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(e).getReg()))
650       REX |= 1 << 2; // set REX.R
651     unsigned Bit = 0;
652     for (; i != e; ++i) {
653       const MCOperand &MO = MI.getOperand(i);
654       if (MO.isReg()) {
655         if (X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
656           REX |= 1 << Bit; // REX.B (Bit=0) and REX.X (Bit=1)
657         Bit++;
658       }
659     }
660     break;
661   }
662   default:
663     if (MI.getOperand(0).isReg() &&
664         X86InstrInfo::isX86_64ExtendedReg(MI.getOperand(0).getReg()))
665       REX |= 1 << 0; // set REX.B
666     i = isTwoAddr ? 2 : 1;
667     for (unsigned e = NumOps; i != e; ++i) {
668       const MCOperand &MO = MI.getOperand(i);
669       if (MO.isReg() && X86InstrInfo::isX86_64ExtendedReg(MO.getReg()))
670         REX |= 1 << 2; // set REX.R
671     }
672     break;
673   }
674   return REX;
675 }
676
677 /// EmitSegmentOverridePrefix - Emit segment override opcode prefix as needed
678 void X86MCCodeEmitter::EmitSegmentOverridePrefix(uint64_t TSFlags,
679                                         unsigned &CurByte, int MemOperand,
680                                         const MCInst &MI,
681                                         raw_ostream &OS) const {
682   switch (TSFlags & X86II::SegOvrMask) {
683   default: assert(0 && "Invalid segment!");
684   case 0:
685     // No segment override, check for explicit one on memory operand.
686     if (MemOperand != -1) {   // If the instruction has a memory operand.
687       switch (MI.getOperand(MemOperand+X86::AddrSegmentReg).getReg()) {
688       default: assert(0 && "Unknown segment register!");
689       case 0: break;
690       case X86::CS: EmitByte(0x2E, CurByte, OS); break;
691       case X86::SS: EmitByte(0x36, CurByte, OS); break;
692       case X86::DS: EmitByte(0x3E, CurByte, OS); break;
693       case X86::ES: EmitByte(0x26, CurByte, OS); break;
694       case X86::FS: EmitByte(0x64, CurByte, OS); break;
695       case X86::GS: EmitByte(0x65, CurByte, OS); break;
696       }
697     }
698     break;
699   case X86II::FS:
700     EmitByte(0x64, CurByte, OS);
701     break;
702   case X86II::GS:
703     EmitByte(0x65, CurByte, OS);
704     break;
705   }
706 }
707
708 /// EmitOpcodePrefix - Emit all instruction prefixes prior to the opcode.
709 ///
710 /// MemOperand is the operand # of the start of a memory operand if present.  If
711 /// Not present, it is -1.
712 void X86MCCodeEmitter::EmitOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
713                                         int MemOperand, const MCInst &MI,
714                                         const TargetInstrDesc &Desc,
715                                         raw_ostream &OS) const {
716
717   // Emit the lock opcode prefix as needed.
718   if (TSFlags & X86II::LOCK)
719     EmitByte(0xF0, CurByte, OS);
720
721   // Emit segment override opcode prefix as needed.
722   EmitSegmentOverridePrefix(TSFlags, CurByte, MemOperand, MI, OS);
723
724   // Emit the repeat opcode prefix as needed.
725   if ((TSFlags & X86II::Op0Mask) == X86II::REP)
726     EmitByte(0xF3, CurByte, OS);
727
728   // Emit the address size opcode prefix as needed.
729   if ((TSFlags & X86II::AdSize) ||
730       (MemOperand != -1 && Is64BitMode && Is32BitMemOperand(MI, MemOperand)))
731     EmitByte(0x67, CurByte, OS);
732   
733   // Emit the operand size opcode prefix as needed.
734   if (TSFlags & X86II::OpSize)
735     EmitByte(0x66, CurByte, OS);
736
737   bool Need0FPrefix = false;
738   switch (TSFlags & X86II::Op0Mask) {
739   default: assert(0 && "Invalid prefix!");
740   case 0: break;  // No prefix!
741   case X86II::REP: break; // already handled.
742   case X86II::TB:  // Two-byte opcode prefix
743   case X86II::T8:  // 0F 38
744   case X86II::TA:  // 0F 3A
745     Need0FPrefix = true;
746     break;
747   case X86II::TF: // F2 0F 38
748     EmitByte(0xF2, CurByte, OS);
749     Need0FPrefix = true;
750     break;
751   case X86II::XS:   // F3 0F
752     EmitByte(0xF3, CurByte, OS);
753     Need0FPrefix = true;
754     break;
755   case X86II::XD:   // F2 0F
756     EmitByte(0xF2, CurByte, OS);
757     Need0FPrefix = true;
758     break;
759   case X86II::D8: EmitByte(0xD8, CurByte, OS); break;
760   case X86II::D9: EmitByte(0xD9, CurByte, OS); break;
761   case X86II::DA: EmitByte(0xDA, CurByte, OS); break;
762   case X86II::DB: EmitByte(0xDB, CurByte, OS); break;
763   case X86II::DC: EmitByte(0xDC, CurByte, OS); break;
764   case X86II::DD: EmitByte(0xDD, CurByte, OS); break;
765   case X86II::DE: EmitByte(0xDE, CurByte, OS); break;
766   case X86II::DF: EmitByte(0xDF, CurByte, OS); break;
767   }
768
769   // Handle REX prefix.
770   // FIXME: Can this come before F2 etc to simplify emission?
771   if (Is64BitMode) {
772     if (unsigned REX = DetermineREXPrefix(MI, TSFlags, Desc))
773       EmitByte(0x40 | REX, CurByte, OS);
774   }
775
776   // 0x0F escape code must be emitted just before the opcode.
777   if (Need0FPrefix)
778     EmitByte(0x0F, CurByte, OS);
779
780   // FIXME: Pull this up into previous switch if REX can be moved earlier.
781   switch (TSFlags & X86II::Op0Mask) {
782   case X86II::TF:    // F2 0F 38
783   case X86II::T8:    // 0F 38
784     EmitByte(0x38, CurByte, OS);
785     break;
786   case X86II::TA:    // 0F 3A
787     EmitByte(0x3A, CurByte, OS);
788     break;
789   }
790 }
791
792 void X86MCCodeEmitter::
793 EncodeInstruction(const MCInst &MI, raw_ostream &OS,
794                   SmallVectorImpl<MCFixup> &Fixups) const {
795   unsigned Opcode = MI.getOpcode();
796   const TargetInstrDesc &Desc = TII.get(Opcode);
797   uint64_t TSFlags = Desc.TSFlags;
798
799   // Pseudo instructions don't get encoded.
800   if ((TSFlags & X86II::FormMask) == X86II::Pseudo)
801     return;
802
803   // If this is a two-address instruction, skip one of the register operands.
804   // FIXME: This should be handled during MCInst lowering.
805   unsigned NumOps = Desc.getNumOperands();
806   unsigned CurOp = 0;
807   if (NumOps > 1 && Desc.getOperandConstraint(1, TOI::TIED_TO) != -1)
808     ++CurOp;
809   else if (NumOps > 2 && Desc.getOperandConstraint(NumOps-1, TOI::TIED_TO)== 0)
810     // Skip the last source operand that is tied_to the dest reg. e.g. LXADD32
811     --NumOps;
812
813   // Keep track of the current byte being emitted.
814   unsigned CurByte = 0;
815
816   // Is this instruction encoded using the AVX VEX prefix?
817   bool HasVEXPrefix = false;
818
819   // It uses the VEX.VVVV field?
820   bool HasVEX_4V = false;
821
822   if ((TSFlags >> 32) & X86II::VEX)
823     HasVEXPrefix = true;
824   if ((TSFlags >> 32) & X86II::VEX_4V)
825     HasVEX_4V = true;
826
827   
828   // Determine where the memory operand starts, if present.
829   int MemoryOperand = X86II::getMemoryOperandNo(TSFlags);
830   if (MemoryOperand != -1) MemoryOperand += CurOp;
831
832   if (!HasVEXPrefix)
833     EmitOpcodePrefix(TSFlags, CurByte, MemoryOperand, MI, Desc, OS);
834   else
835     EmitVEXOpcodePrefix(TSFlags, CurByte, MemoryOperand, MI, Desc, OS);
836
837   
838   unsigned char BaseOpcode = X86II::getBaseOpcodeFor(TSFlags);
839   
840   if ((TSFlags >> 32) & X86II::Has3DNow0F0FOpcode)
841     BaseOpcode = 0x0F;   // Weird 3DNow! encoding.
842   
843   unsigned SrcRegNum = 0;
844   switch (TSFlags & X86II::FormMask) {
845   case X86II::MRMInitReg:
846     assert(0 && "FIXME: Remove this form when the JIT moves to MCCodeEmitter!");
847   default: errs() << "FORM: " << (TSFlags & X86II::FormMask) << "\n";
848     assert(0 && "Unknown FormMask value in X86MCCodeEmitter!");
849   case X86II::Pseudo:
850     assert(0 && "Pseudo instruction shouldn't be emitted");
851   case X86II::RawFrm:
852     EmitByte(BaseOpcode, CurByte, OS);
853     break;
854       
855   case X86II::RawFrmImm8:
856     EmitByte(BaseOpcode, CurByte, OS);
857     EmitImmediate(MI.getOperand(CurOp++),
858                   X86II::getSizeOfImm(TSFlags), getImmFixupKind(TSFlags),
859                   CurByte, OS, Fixups);
860     EmitImmediate(MI.getOperand(CurOp++), 1, FK_Data_1, CurByte, OS, Fixups);
861     break;
862   case X86II::RawFrmImm16:
863     EmitByte(BaseOpcode, CurByte, OS);
864     EmitImmediate(MI.getOperand(CurOp++),
865                   X86II::getSizeOfImm(TSFlags), getImmFixupKind(TSFlags),
866                   CurByte, OS, Fixups);
867     EmitImmediate(MI.getOperand(CurOp++), 2, FK_Data_2, CurByte, OS, Fixups);
868     break;
869
870   case X86II::AddRegFrm:
871     EmitByte(BaseOpcode + GetX86RegNum(MI.getOperand(CurOp++)), CurByte, OS);
872     break;
873
874   case X86II::MRMDestReg:
875     EmitByte(BaseOpcode, CurByte, OS);
876     EmitRegModRMByte(MI.getOperand(CurOp),
877                      GetX86RegNum(MI.getOperand(CurOp+1)), CurByte, OS);
878     CurOp += 2;
879     break;
880
881   case X86II::MRMDestMem:
882     EmitByte(BaseOpcode, CurByte, OS);
883     SrcRegNum = CurOp + X86::AddrNumOperands;
884
885     if (HasVEX_4V) // Skip 1st src (which is encoded in VEX_VVVV)
886       SrcRegNum++;
887
888     EmitMemModRMByte(MI, CurOp,
889                      GetX86RegNum(MI.getOperand(SrcRegNum)),
890                      TSFlags, CurByte, OS, Fixups);
891     CurOp = SrcRegNum + 1;
892     break;
893
894   case X86II::MRMSrcReg:
895     EmitByte(BaseOpcode, CurByte, OS);
896     SrcRegNum = CurOp + 1;
897
898     if (HasVEX_4V) // Skip 1st src (which is encoded in VEX_VVVV)
899       SrcRegNum++;
900
901     EmitRegModRMByte(MI.getOperand(SrcRegNum),
902                      GetX86RegNum(MI.getOperand(CurOp)), CurByte, OS);
903     CurOp = SrcRegNum + 1;
904     break;
905
906   case X86II::MRMSrcMem: {
907     int AddrOperands = X86::AddrNumOperands;
908     unsigned FirstMemOp = CurOp+1;
909     if (HasVEX_4V) {
910       ++AddrOperands;
911       ++FirstMemOp;  // Skip the register source (which is encoded in VEX_VVVV).
912     }
913
914     EmitByte(BaseOpcode, CurByte, OS);
915
916     EmitMemModRMByte(MI, FirstMemOp, GetX86RegNum(MI.getOperand(CurOp)),
917                      TSFlags, CurByte, OS, Fixups);
918     CurOp += AddrOperands + 1;
919     break;
920   }
921
922   case X86II::MRM0r: case X86II::MRM1r:
923   case X86II::MRM2r: case X86II::MRM3r:
924   case X86II::MRM4r: case X86II::MRM5r:
925   case X86II::MRM6r: case X86II::MRM7r:
926     if (HasVEX_4V) // Skip the register dst (which is encoded in VEX_VVVV).
927       CurOp++;
928     EmitByte(BaseOpcode, CurByte, OS);
929     EmitRegModRMByte(MI.getOperand(CurOp++),
930                      (TSFlags & X86II::FormMask)-X86II::MRM0r,
931                      CurByte, OS);
932     break;
933   case X86II::MRM0m: case X86II::MRM1m:
934   case X86II::MRM2m: case X86II::MRM3m:
935   case X86II::MRM4m: case X86II::MRM5m:
936   case X86II::MRM6m: case X86II::MRM7m:
937     EmitByte(BaseOpcode, CurByte, OS);
938     EmitMemModRMByte(MI, CurOp, (TSFlags & X86II::FormMask)-X86II::MRM0m,
939                      TSFlags, CurByte, OS, Fixups);
940     CurOp += X86::AddrNumOperands;
941     break;
942   case X86II::MRM_C1:
943     EmitByte(BaseOpcode, CurByte, OS);
944     EmitByte(0xC1, CurByte, OS);
945     break;
946   case X86II::MRM_C2:
947     EmitByte(BaseOpcode, CurByte, OS);
948     EmitByte(0xC2, CurByte, OS);
949     break;
950   case X86II::MRM_C3:
951     EmitByte(BaseOpcode, CurByte, OS);
952     EmitByte(0xC3, CurByte, OS);
953     break;
954   case X86II::MRM_C4:
955     EmitByte(BaseOpcode, CurByte, OS);
956     EmitByte(0xC4, CurByte, OS);
957     break;
958   case X86II::MRM_C8:
959     EmitByte(BaseOpcode, CurByte, OS);
960     EmitByte(0xC8, CurByte, OS);
961     break;
962   case X86II::MRM_C9:
963     EmitByte(BaseOpcode, CurByte, OS);
964     EmitByte(0xC9, CurByte, OS);
965     break;
966   case X86II::MRM_E8:
967     EmitByte(BaseOpcode, CurByte, OS);
968     EmitByte(0xE8, CurByte, OS);
969     break;
970   case X86II::MRM_F0:
971     EmitByte(BaseOpcode, CurByte, OS);
972     EmitByte(0xF0, CurByte, OS);
973     break;
974   case X86II::MRM_F8:
975     EmitByte(BaseOpcode, CurByte, OS);
976     EmitByte(0xF8, CurByte, OS);
977     break;
978   case X86II::MRM_F9:
979     EmitByte(BaseOpcode, CurByte, OS);
980     EmitByte(0xF9, CurByte, OS);
981     break;
982   }
983
984   // If there is a remaining operand, it must be a trailing immediate.  Emit it
985   // according to the right size for the instruction.
986   if (CurOp != NumOps) {
987     // The last source register of a 4 operand instruction in AVX is encoded
988     // in bits[7:4] of a immediate byte, and bits[3:0] are ignored.
989     if ((TSFlags >> 32) & X86II::VEX_I8IMM) {
990       const MCOperand &MO = MI.getOperand(CurOp++);
991       bool IsExtReg =
992         X86InstrInfo::isX86_64ExtendedReg(MO.getReg());
993       unsigned RegNum = (IsExtReg ? (1 << 7) : 0);
994       RegNum |= GetX86RegNum(MO) << 4;
995       EmitImmediate(MCOperand::CreateImm(RegNum), 1, FK_Data_1, CurByte, OS,
996                     Fixups);
997     } else {
998       unsigned FixupKind;
999       // FIXME: Is there a better way to know that we need a signed relocation?
1000       if (MI.getOpcode() == X86::MOV64ri32 ||
1001           MI.getOpcode() == X86::MOV64mi32 ||
1002           MI.getOpcode() == X86::PUSH64i32)
1003         FixupKind = X86::reloc_signed_4byte;
1004       else
1005         FixupKind = getImmFixupKind(TSFlags);
1006       EmitImmediate(MI.getOperand(CurOp++),
1007                     X86II::getSizeOfImm(TSFlags), MCFixupKind(FixupKind),
1008                     CurByte, OS, Fixups);
1009     }
1010   }
1011
1012   if ((TSFlags >> 32) & X86II::Has3DNow0F0FOpcode)
1013     EmitByte(X86II::getBaseOpcodeFor(TSFlags), CurByte, OS);
1014   
1015
1016 #ifndef NDEBUG
1017   // FIXME: Verify.
1018   if (/*!Desc.isVariadic() &&*/ CurOp != NumOps) {
1019     errs() << "Cannot encode all operands of: ";
1020     MI.dump();
1021     errs() << '\n';
1022     abort();
1023   }
1024 #endif
1025 }