diff options
author | Chris Lattner <sabre@nondot.org> | 2004-10-15 04:43:20 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-10-15 04:43:20 +0000 |
commit | fb3d844e5018c55f070fceede9662269a4ddec2e (patch) | |
tree | 9992ac63708347faa84ad9474b19049fb53f10a5 | |
parent | ca4f6ebefc4dc55d13a0182a0be5b02e92fc63ea (diff) |
Allow X86 addressing modes to represent globals with offsets. Patch contributed
by Jeff Cohen!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17008 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86InstrBuilder.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/lib/Target/X86/X86InstrBuilder.h b/lib/Target/X86/X86InstrBuilder.h index 3c8cfd73a1..c77eba76b1 100644 --- a/lib/Target/X86/X86InstrBuilder.h +++ b/lib/Target/X86/X86InstrBuilder.h @@ -30,13 +30,13 @@ namespace llvm { /// X86AddressMode - This struct holds a generalized full x86 address mode. /// The base register can be a frame index, which will eventually be replaced -/// with BP or SP and Disp being offsetted accordingly. -/// FIXME: add support for globals as a new base type. +/// with BP or SP and Disp being offsetted accordingly. The displacement may +/// also include the offset of a global value. struct X86AddressMode { enum { UnknownBase, RegBase, - FrameIndexBase + FrameIndexBase, } BaseType; union { @@ -47,8 +47,9 @@ struct X86AddressMode { unsigned Scale; unsigned IndexReg; unsigned Disp; + GlobalValue *GV; - X86AddressMode() : BaseType(UnknownBase) {} + X86AddressMode() : BaseType(UnknownBase), GV(NULL) {} }; /// addDirectMem - This function is used to add a direct memory reference to the @@ -82,7 +83,11 @@ inline const MachineInstrBuilder &addFullAddress(const MachineInstrBuilder &MIB, MIB.addFrameIndex(AM.Base.FrameIndex); else assert (0); - return MIB.addZImm(AM.Scale).addReg(AM.IndexReg).addSImm(AM.Disp); + MIB.addZImm(AM.Scale).addReg(AM.IndexReg); + if (AM.GV) + return MIB.addGlobalAddress(AM.GV, false, AM.Disp); + else + return MIB.addSImm(AM.Disp); } /// addFrameReference - This function is used to add a reference to the base of |