- Add an endianness field to the TargetData datastructure

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4174 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2002-10-14 22:41:13 +00:00
parent ad9ea7e694
commit 85131c8277
2 changed files with 16 additions and 7 deletions

View File

@ -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

View File

@ -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;