X86RegisterInfo.cpp revision b83b28697ccabfcb6b8ddbc73fb3c4554f6d17ce
1//===- X86RegisterInfo.cpp - X86 Register Information ---------------------===// 2// 3// This file contains the X86 implementation of the MRegisterInfo class. 4// 5//===----------------------------------------------------------------------===// 6 7#include "X86.h" 8#include "X86RegisterInfo.h" 9#include "llvm/Constants.h" 10#include "llvm/Type.h" 11#include "llvm/CodeGen/MachineInstrBuilder.h" 12 13// X86Regs - Turn the X86RegisterInfo.def file into a bunch of register 14// descriptors 15// 16static const MRegisterDesc X86Regs[] = { 17#define R(ENUM, NAME, FLAGS, TSFLAGS) { NAME, FLAGS, TSFLAGS }, 18#include "X86RegisterInfo.def" 19}; 20 21X86RegisterInfo::X86RegisterInfo() 22 : MRegisterInfo(X86Regs, sizeof(X86Regs)/sizeof(X86Regs[0])) { 23} 24 25 26void X86RegisterInfo::copyReg2PCRel(MachineBasicBlock *MBB, 27 MachineBasicBlock::iterator &MBBI, 28 unsigned SrcReg, unsigned ImmOffset, 29 unsigned dataSize) const 30{ 31 MachineInstrBuilder MI = BuildMI(X86::MOVmr32, 2) 32 .addPCDisp(ConstantUInt::get(Type::UIntTy, ImmOffset)).addReg(SrcReg); 33 MBB->insert(MBBI, &*MI); 34} 35 36void X86RegisterInfo::copyPCRel2Reg(MachineBasicBlock *MBB, 37 MachineBasicBlock::iterator &MBBI, 38 unsigned ImmOffset, unsigned DestReg, 39 unsigned dataSize) const 40{ 41 MachineInstrBuilder MI = BuildMI(X86::MOVrm32, 2) 42 .addReg(DestReg).addPCDisp(ConstantUInt::get(Type::UIntTy, ImmOffset)); 43 MBB->insert(MBBI, &*MI); 44} 45 46