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