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/MCSubtargetInfo.h" 22 #include "llvm/MC/MCSymbol.h" 23 #include "llvm/Support/raw_ostream.h" 24 25 using namespace llvm; 26 27 namespace { 28 class X86MCCodeEmitter : public MCCodeEmitter { 29 X86MCCodeEmitter(const X86MCCodeEmitter &); // DO NOT IMPLEMENT 30 void operator=(const X86MCCodeEmitter &); // DO NOT IMPLEMENT 31 const MCInstrInfo &MCII; 32 const MCSubtargetInfo &STI; 33 MCContext &Ctx; 34 public: 35 X86MCCodeEmitter(const MCInstrInfo &mcii, const MCSubtargetInfo &sti, 36 MCContext &ctx) 37 : MCII(mcii), STI(sti), Ctx(ctx) { 38 } 39 40 ~X86MCCodeEmitter() {} 41 42 bool is64BitMode() const { 43 // FIXME: Can tablegen auto-generate this? 44 return (STI.getFeatureBits() & X86::Mode64Bit) != 0; 45 } 46 47 static unsigned GetX86RegNum(const MCOperand &MO) { 48 return X86_MC::getX86RegNum(MO.getReg()); 49 } 50 51 // On regular x86, both XMM0-XMM7 and XMM8-XMM15 are encoded in the range 52 // 0-7 and the difference between the 2 groups is given by the REX prefix. 53 // In the VEX prefix, registers are seen sequencially from 0-15 and encoded 54 // in 1's complement form, example: 55 // 56 // ModRM field => XMM9 => 1 57 // VEX.VVVV => XMM9 => ~9 58 // 59 // See table 4-35 of Intel AVX Programming Reference for details. 60 static unsigned char getVEXRegisterEncoding(const MCInst &MI, 61 unsigned OpNum) { 62 unsigned SrcReg = MI.getOperand(OpNum).getReg(); 63 unsigned SrcRegNum = GetX86RegNum(MI.getOperand(OpNum)); 64 if ((SrcReg >= X86::XMM8 && SrcReg <= X86::XMM15) || 65 (SrcReg >= X86::YMM8 && SrcReg <= X86::YMM15)) 66 SrcRegNum += 8; 67 68 // The registers represented through VEX_VVVV should 69 // be encoded in 1's complement form. 70 return (~SrcRegNum) & 0xf; 71 } 72 73 void EmitByte(unsigned char C, unsigned &CurByte, raw_ostream &OS) const { 74 OS << (char)C; 75 ++CurByte; 76 } 77 78 void EmitConstant(uint64_t Val, unsigned Size, unsigned &CurByte, 79 raw_ostream &OS) const { 80 // Output the constant in little endian byte order. 81 for (unsigned i = 0; i != Size; ++i) { 82 EmitByte(Val & 255, CurByte, OS); 83 Val >>= 8; 84 } 85 } 86 87 void EmitImmediate(const MCOperand &Disp, 88 unsigned ImmSize, MCFixupKind FixupKind, 89 unsigned &CurByte, raw_ostream &OS, 90 SmallVectorImpl<MCFixup> &Fixups, 91 int ImmOffset = 0) const; 92 93 inline static unsigned char ModRMByte(unsigned Mod, unsigned RegOpcode, 94 unsigned RM) { 95 assert(Mod < 4 && RegOpcode < 8 && RM < 8 && "ModRM Fields out of range!"); 96 return RM | (RegOpcode << 3) | (Mod << 6); 97 } 98 99 void EmitRegModRMByte(const MCOperand &ModRMReg, unsigned RegOpcodeFld, 100 unsigned &CurByte, raw_ostream &OS) const { 101 EmitByte(ModRMByte(3, RegOpcodeFld, GetX86RegNum(ModRMReg)), CurByte, OS); 102 } 103 104 void EmitSIBByte(unsigned SS, unsigned Index, unsigned Base, 105 unsigned &CurByte, raw_ostream &OS) const { 106 // SIB byte is in the same format as the ModRMByte. 107 EmitByte(ModRMByte(SS, Index, Base), CurByte, OS); 108 } 109 110 111 void EmitMemModRMByte(const MCInst &MI, unsigned Op, 112 unsigned RegOpcodeField, 113 uint64_t TSFlags, unsigned &CurByte, raw_ostream &OS, 114 SmallVectorImpl<MCFixup> &Fixups) const; 115 116 void EncodeInstruction(const MCInst &MI, raw_ostream &OS, 117 SmallVectorImpl<MCFixup> &Fixups) const; 118 119 void EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte, int MemOperand, 120 const MCInst &MI, const MCInstrDesc &Desc, 121 raw_ostream &OS) const; 122 123 void EmitSegmentOverridePrefix(uint64_t TSFlags, unsigned &CurByte, 124 int MemOperand, const MCInst &MI, 125 raw_ostream &OS) const; 126 127 void EmitOpcodePrefix(uint64_t TSFlags, unsigned &CurByte, int MemOperand, 128 const MCInst &MI, const MCInstrDesc &Desc, 129 raw_ostream &OS) const; 130 }; 131 132 } // end anonymous namespace 133 134 135 MCCodeEmitter *llvm::createX86MCCodeEmitter(const MCInstrInfo &MCII, 136 const MCSubtargetInfo &STI, 137 MCContext &Ctx) { 138 return new X86MCCodeEmitter(MCII, STI, Ctx); 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 MCInstrDesc &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 beginning 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 MCInstrDesc &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, MCOI::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 MCInstrDesc &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 MCInstrDesc &Desc = MCII.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, MCOI::TIED_TO) != -1) 818 ++CurOp; 819 else if (NumOps > 2 && Desc.getOperandConstraint(NumOps-1, MCOI::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::ADD64ri32 || 1019 MI.getOpcode() == X86::MOV64ri32 || 1020 MI.getOpcode() == X86::MOV64mi32 || 1021 MI.getOpcode() == X86::PUSH64i32) 1022 FixupKind = X86::reloc_signed_4byte; 1023 else 1024 FixupKind = getImmFixupKind(TSFlags); 1025 EmitImmediate(MI.getOperand(CurOp++), 1026 X86II::getSizeOfImm(TSFlags), MCFixupKind(FixupKind), 1027 CurByte, OS, Fixups); 1028 } 1029 } 1030 1031 if ((TSFlags >> X86II::VEXShift) & X86II::Has3DNow0F0FOpcode) 1032 EmitByte(X86II::getBaseOpcodeFor(TSFlags), CurByte, OS); 1033 1034 1035 #ifndef NDEBUG 1036 // FIXME: Verify. 1037 if (/*!Desc.isVariadic() &&*/ CurOp != NumOps) { 1038 errs() << "Cannot encode all operands of: "; 1039 MI.dump(); 1040 errs() << '\n'; 1041 abort(); 1042 } 1043 #endif 1044 } 1045