diff --git a/include/llvm/Target/TargetMachine.h b/include/llvm/Target/TargetMachine.h index 02d57880b72..508ae330db2 100644 --- a/include/llvm/Target/TargetMachine.h +++ b/include/llvm/Target/TargetMachine.h @@ -39,13 +39,14 @@ public: protected: TargetMachine(const std::string &name, // Can only create subclasses... + bool LittleEndian = false, unsigned char SubWordSize = 1, unsigned char IntRegSize = 8, unsigned char PtrSize = 8, unsigned char PtrAl = 8, unsigned char DoubleAl = 8, unsigned char FloatAl = 4, unsigned char LongAl = 8, unsigned char IntAl = 4, unsigned char ShortAl = 2, unsigned char ByteAl = 1) - : Name(name), DataLayout(name, SubWordSize, IntRegSize, PtrSize, PtrAl, - DoubleAl, FloatAl, LongAl, + : Name(name), DataLayout(name, LittleEndian, SubWordSize, IntRegSize, + PtrSize, PtrAl, DoubleAl, FloatAl, LongAl, IntAl, ShortAl, ByteAl) {} public: virtual ~TargetMachine() {} diff --git a/include/llvm/Target/TargetMachineImpls.h b/include/llvm/Target/TargetMachineImpls.h index e9156c7b2dc..4b8450eb010 100644 --- a/include/llvm/Target/TargetMachineImpls.h +++ b/include/llvm/Target/TargetMachineImpls.h @@ -8,6 +8,18 @@ #ifndef LLVM_TARGET_TARGETMACHINEIMPLS_H #define LLVM_TARGET_TARGETMACHINEIMPLS_H +namespace TM { + enum { + PtrSizeMask = 1, + PtrSize32 = 0, + PtrSize64 = 1, + + EndianMask = 2, + LittleEndian = 0, + BigEndian = 2, + }; +} + class TargetMachine; // allocateSparcTargetMachine - Allocate and return a subclass of TargetMachine @@ -16,8 +28,11 @@ class TargetMachine; TargetMachine *allocateSparcTargetMachine(); // allocateX86TargetMachine - Allocate and return a subclass of TargetMachine -// that implements the X86 backend. +// that implements the X86 backend. The X86 target machine can run in +// "emulation" mode, where it is capable of emulating machines of larger pointer +// size and different endianness if desired. // -TargetMachine *allocateX86TargetMachine(); +TargetMachine *allocateX86TargetMachine(unsigned Configuration = + TM::PtrSize32|TM::LittleEndian); #endif