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 | df7b984f5ab16aa25f4f75257def1ad1f9a1ea4c (patch) | |
| tree | 7b33d4ed1f149d7183654214d2d0436ed5c21c32 /llvm/lib/Target | |
| parent | 3065220deb6e0e163a6f9dc1ebff1087370a75a9 (diff) | |
| download | bcm5719-llvm-df7b984f5ab16aa25f4f75257def1ad1f9a1ea4c.tar.gz bcm5719-llvm-df7b984f5ab16aa25f4f75257def1ad1f9a1ea4c.zip | |
Allow X86 addressing modes to represent globals with offsets. Patch contributed
by Jeff Cohen!
llvm-svn: 17008
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86InstrBuilder.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/llvm/lib/Target/X86/X86InstrBuilder.h b/llvm/lib/Target/X86/X86InstrBuilder.h index 3c8cfd73a16..c77eba76b10 100644 --- a/llvm/lib/Target/X86/X86InstrBuilder.h +++ b/llvm/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 |

