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() {}
#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
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