diff --git a/include/llvm/Target/TargetData.h b/include/llvm/Target/TargetData.h index e6eaf503a9c..074345023fe 100644 --- a/include/llvm/Target/TargetData.h +++ b/include/llvm/Target/TargetData.h @@ -23,6 +23,7 @@ class StructType; class StructLayout; class TargetData : public ImmutablePass { + bool LittleEndian; // Defaults to false unsigned char ByteAlignment; // Defaults to 1 bytes unsigned char ShortAlignment; // Defaults to 2 bytes unsigned char IntAlignment; // Defaults to 4 bytes @@ -37,6 +38,7 @@ class TargetData : public ImmutablePass { static Annotation *TypeAnFactory(AnnotationID, const Annotable *, void *); public: TargetData(const std::string &TargetName = "SparcV9", + bool LittleEndian = false, unsigned char IntRegSize = 8, unsigned char PtrSize = 8, unsigned char PtrAl = 8, unsigned char DoubleAl = 8, @@ -45,6 +47,11 @@ public: unsigned char ByteAl = 1); ~TargetData(); // Not virtual, do not subclass this class + /// Target endianness... + bool isLittleEndian() const { return LittleEndian; } + bool isBigEndian() const { return !LittleEndian; } + + /// Target alignment constraints unsigned char getByteAlignment() const { return ByteAlignment; } unsigned char getShortAlignment() const { return ShortAlignment; } unsigned char getIntAlignment() const { return IntAlignment; } @@ -52,8 +59,8 @@ public: unsigned char getFloatAlignment() const { return FloatAlignment; } unsigned char getDoubleAlignment() const { return DoubleAlignment; } unsigned char getPointerAlignment() const { return PointerAlignment; } - unsigned char getPointerSize() const { return PointerSize; } - unsigned char getIntegerRegize() const { return IntegerRegSize; } + unsigned char getPointerSize() const { return PointerSize; } + unsigned char getIntegerRegize() const { return IntegerRegSize; } AnnotationID getStructLayoutAID() const { return AID; } // getTypeSize - Return the number of bytes neccesary to hold the specified diff --git a/lib/Target/TargetData.cpp b/lib/Target/TargetData.cpp index fae5e103e66..1207a6eed14 100644 --- a/lib/Target/TargetData.cpp +++ b/lib/Target/TargetData.cpp @@ -81,14 +81,16 @@ Annotation *TargetData::TypeAnFactory(AnnotationID AID, const Annotable *T, //===----------------------------------------------------------------------===// TargetData::TargetData(const std::string &TargetName, - unsigned char IntRegSize, unsigned char PtrSize, - unsigned char PtrAl, unsigned char DoubleAl, - unsigned char FloatAl, unsigned char LongAl, - unsigned char IntAl, unsigned char ShortAl, - unsigned char ByteAl) + bool isLittleEndian, + unsigned char IntRegSize, unsigned char PtrSize, + unsigned char PtrAl, unsigned char DoubleAl, + unsigned char FloatAl, unsigned char LongAl, + unsigned char IntAl, unsigned char ShortAl, + unsigned char ByteAl) : AID(AnnotationManager::getID("TargetData::" + TargetName)) { AnnotationManager::registerAnnotationFactory(AID, TypeAnFactory, this); + LittleEndian = isLittleEndian; IntegerRegSize = IntRegSize; PointerSize = PtrSize; PointerAlignment = PtrAl;