Lines Matching full:x86
1 //===-- X86/X86CodeEmitter.cpp - Convert X86 code to machine code ---------===//
10 // This file contains the pass that transforms the X86 machine instructions into
15 #define DEBUG_TYPE "x86-emitter"
21 #include "X86.h"
68 return "X86 Machine Code Emitter";
107 /// createX86CodeEmitterPass - Return a pass that emits the collected X86 code
136 if (Desc.getOpcode() == X86::MOVPC32r)
137 emitInstruction(*I, &II->get(X86::POP32r));
146 /// determineREX - Determine if the MachineInstr has to be encoded with a X86-64
148 /// size, and 3) use of X86-64 extended registers.
211 unsigned e = (isTwoAddr ? X86::AddrNumOperands+1 : X86::AddrNumOperands);
252 X86::reloc_pcrel_word, MBB));
266 if (Reloc == X86::reloc_picrel_word)
268 else if (Reloc == X86::reloc_pcrel_word)
278 if (Reloc == X86::reloc_absolute_dword)
290 intptr_t RelocCST = (Reloc == X86::reloc_picrel_word) ? PICBaseOffset : 0;
292 // X86 never needs stubs because instruction selection will always pick
300 if (Reloc == X86::reloc_absolute_dword)
314 if (Reloc == X86::reloc_picrel_word)
316 else if (Reloc == X86::reloc_pcrel_word)
321 if (Reloc == X86::reloc_absolute_dword)
334 if (Reloc == X86::reloc_picrel_word)
336 else if (Reloc == X86::reloc_pcrel_word)
341 if (Reloc == X86::reloc_absolute_dword)
415 (IsPCRel ? X86::reloc_pcrel_word : X86::reloc_absolute_word_sext)
416 : (IsPIC ? X86::reloc_picrel_word : X86::reloc_absolute_word);
474 if (BaseReg == X86::RIP ||
475 (Is64BitMode && DispForReloc)) { // [disp32+RIP] in X86-64 mode
493 if (BaseReg != 0 && BaseReg != X86::RIP)
505 if (BaseReg == 0 || // [disp32] in X86-32 mode
506 BaseReg == X86::RIP) { // [disp32+RIP] in X86-64 mode
535 assert(IndexReg.getReg() != X86::ESP &&
536 IndexReg.getReg() != X86::RSP && "Cannot use ESP as index reg!");
599 case X86::ADD16rr_DB: Desc = &II->get(X86::OR16rr); MI.setDesc(*Desc);break;
600 case X86::ADD32rr_DB: Desc = &II->get(X86::OR32rr); MI.setDesc(*Desc);break;
601 case X86::ADD64rr_DB: Desc = &II->get(X86::OR64rr); MI.setDesc(*Desc);break;
602 case X86::ADD16ri_DB: Desc = &II->get(X86::OR16ri); MI.setDesc(*Desc);break;
603 case X86::ADD32ri_DB: Desc = &II->get(X86::OR32ri); MI.setDesc(*Desc);break;
604 case X86::ADD64ri32_DB:Desc = &II->get(X86::OR64ri32);MI.setDesc(*Desc);break;
605 case X86::ADD16ri8_DB: Desc = &II->get(X86::OR16ri8);MI.setDesc(*Desc);break;
606 case X86::ADD32ri8_DB: Desc = &II->get(X86::OR32ri8);MI.setDesc(*Desc);break;
607 case X86::ADD64ri8_DB: Desc = &II->get(X86::OR64ri8);MI.setDesc(*Desc);break;
712 llvm_unreachable("Unknown FormMask value in X86 MachineCodeEmitter!");
723 case X86::Int_MemBarrier:
742 case X86::MOVPC32r: {
775 emitGlobalAddress(MO.getGlobal(), X86::reloc_pcrel_word,
781 emitExternalSymbolAddress(MO.getSymbolName(), X86::reloc_pcrel_word);
787 emitJumpTableAddress(MO.getIndex(), X86::reloc_pcrel_word);
792 if (Opcode == X86::CALLpcrel32 || Opcode == X86::CALL64pcrel32 ||
793 Opcode == X86::WINCALL64pcrel32) {
817 unsigned rt = Is64BitMode ? X86::reloc_pcrel_word
818 : (IsPIC ? X86::reloc_picrel_word : X86::reloc_absolute_word);
819 if (Opcode == X86::MOV64ri64i32)
820 rt = X86::reloc_absolute_word; // FIXME: add X86II flag?
822 if (Opcode == X86::MOV64ri)
823 rt = X86::reloc_absolute_dword; // FIXME: add X86II flag?
850 X86_MC::getX86RegNum(MI.getOperand(CurOp + X86::AddrNumOperands)
852 CurOp += X86::AddrNumOperands + 1;
870 int AddrOperands = X86::AddrNumOperands;
903 unsigned rt = Is64BitMode ? X86::reloc_pcrel_word
904 : (IsPIC ? X86X86::reloc_absolute_word);
905 if (Opcode == X86::MOV64ri32)
906 rt = X86::reloc_absolute_word_sext; // FIXME: add X86II flag?
924 intptr_t PCAdj = (CurOp + X86::AddrNumOperands != NumOps) ?
925 (MI.getOperand(CurOp+X86::AddrNumOperands).isImm() ?
931 CurOp += X86::AddrNumOperands;
943 unsigned rt = Is64BitMode ? X86::reloc_pcrel_word
944 : (IsPIC ? X86::reloc_picrel_word : X86::reloc_absolute_word);
945 if (Opcode == X86::MOV64mi32)
946 rt = X86::reloc_absolute_word_sext; // FIXME: add X86II flag?