Added methods to read/write values to stack in .h, fixed implementation in
[oota-llvm.git] / lib / Target / X86 / X86RegisterInfo.cpp
1 //===- X86RegisterInfo.cpp - X86 Register Information -----------*- C++ -*-===//
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 "X86InstrBuilder.h"
10 #include "llvm/Constants.h"
11 #include "llvm/Type.h"
12 #include "llvm/CodeGen/MachineInstrBuilder.h"
13
14 // X86Regs - Turn the X86RegisterInfo.def file into a bunch of register
15 // descriptors
16 //
17 static const MRegisterDesc X86Regs[] = {
18 #define R(ENUM, NAME, FLAGS, TSFLAGS) { NAME, FLAGS, TSFLAGS },
19 #include "X86RegisterInfo.def"
20 };
21
22 X86RegisterInfo::X86RegisterInfo()
23   : MRegisterInfo(X86Regs, sizeof(X86Regs)/sizeof(X86Regs[0])) {
24 }
25
26
27 MachineBasicBlock::iterator
28 X86RegisterInfo::storeReg2RegOffset(MachineBasicBlock *MBB,
29                                     MachineBasicBlock::iterator &MBBI,
30                                     unsigned SrcReg, unsigned DestReg, 
31                                     unsigned ImmOffset, unsigned dataSize)
32   const
33 {
34   MachineInstr *MI = addRegOffset(BuildMI(X86::MOVmr32, 5).addReg(SrcReg),
35                                   DestReg, ImmOffset);
36   return ++(MBB->insert(MBBI, MI));
37 }
38
39 MachineBasicBlock::iterator
40 X86RegisterInfo::loadRegOffset2Reg(MachineBasicBlock *MBB,
41                                    MachineBasicBlock::iterator &MBBI,
42                                    unsigned DestReg, unsigned SrcReg,
43                                    unsigned ImmOffset, unsigned dataSize)
44   const
45 {
46   MachineInstr *MI = addRegOffset(BuildMI(X86::MOVrm32, 5).addReg(DestReg),
47                                   SrcReg, ImmOffset);
48   return ++(MBB->insert(MBBI, MI));
49 }
50
51
52 unsigned X86RegisterInfo::getFramePointer() const {
53   return X86::EBP;
54 }
55
56 unsigned X86RegisterInfo::getStackPointer() const {
57   return X86::ESP;
58 }