diff --git a/lib/Target/X86/X86RegisterClasses.cpp b/lib/Target/X86/X86RegisterClasses.cpp index ebdfa470fa0..805b918dbac 100644 --- a/lib/Target/X86/X86RegisterClasses.cpp +++ b/lib/Target/X86/X86RegisterClasses.cpp @@ -14,97 +14,68 @@ enum { }; namespace { - static const unsigned X86ByteRegisterClassRegs[] = { + const unsigned ByteRegClassRegs[] = { #define R(ENUM, NAME, FLAGS, TSFLAGS) #define R8(ENUM, NAME, FLAGS, TSFLAGS) ENUM, #include "X86RegisterInfo.def" }; - struct X86ByteRegisterClass : public TargetRegisterClass { - unsigned getNumRegs() const { - return sizeof(X86ByteRegisterClassRegs)/ - sizeof(X86ByteRegisterClassRegs[0]); - } - unsigned getRegister(unsigned idx) const { - assert(idx < getNumRegs() && "Index out of bounds!"); - return X86ByteRegisterClassRegs[idx]; - } - - unsigned getDataSize() const { return 1; } - } X86ByteRegisterClassInstance; - + TargetRegisterClass X86ByteRegisterClassInstance(1, ByteRegClassRegs, + ByteRegClassRegs+sizeof(ByteRegClassRegs)/sizeof(ByteRegClassRegs[0])); // // // - static const unsigned X86ShortRegisterClassRegs[] = { + const unsigned ShortRegClassRegs[] = { #define R(ENUM, NAME, FLAGS, TSFLAGS) #define R16(ENUM, NAME, FLAGS, TSFLAGS) ENUM, #include "X86RegisterInfo.def" }; - struct X86ShortRegisterClass : public TargetRegisterClass { - unsigned getNumRegs() const { - return sizeof(X86ShortRegisterClassRegs)/ - sizeof(X86ShortRegisterClassRegs[0]); } - unsigned getRegister(unsigned idx) const { - assert(idx < getNumRegs() && "Index out of bounds!"); - return X86ShortRegisterClassRegs[idx]; - } - unsigned getDataSize() const { return 2; } - } X86ShortRegisterClassInstance; + TargetRegisterClass X86ShortRegisterClassInstance(2, ShortRegClassRegs, + ShortRegClassRegs+sizeof(ShortRegClassRegs)/sizeof(ShortRegClassRegs[0])); // // // - static const unsigned X86IntRegisterClassRegs[] = { + const unsigned IntRegClassRegs[] = { #define R(ENUM, NAME, FLAGS, TSFLAGS) #define R32(ENUM, NAME, FLAGS, TSFLAGS) ENUM, #include "X86RegisterInfo.def" }; - struct X86IntRegisterClass : public TargetRegisterClass { - unsigned getNumRegs() const { - return sizeof(X86IntRegisterClassRegs)/ - sizeof(X86IntRegisterClassRegs[0]); } - unsigned getRegister(unsigned idx) const { - assert(idx < getNumRegs() && "Index out of bounds!"); - return X86IntRegisterClassRegs[idx]; - } - unsigned getDataSize() const { return 4; } - } X86IntRegisterClassInstance; + TargetRegisterClass X86IntRegisterClassInstance(4, IntRegClassRegs, + IntRegClassRegs+sizeof(IntRegClassRegs)/sizeof(IntRegClassRegs[0])); - - static const TargetRegisterClass *X86RegClasses[] = { + const TargetRegisterClass * const X86RegClasses[] = { &X86ByteRegisterClassInstance, &X86ShortRegisterClassInstance, &X86IntRegisterClassInstance }; +} - const TargetRegisterClass* X86RegisterInfo::getRegClassForType(const Type* Ty) - const - { - switch (Ty->getPrimitiveID()) { - case Type::BoolTyID: - case Type::SByteTyID: - case Type::UByteTyID: return &X86ByteRegisterClassInstance; - case Type::ShortTyID: - case Type::UShortTyID: return &X86ShortRegisterClassInstance; - case Type::LongTyID: // None of these are handled yet! - case Type::ULongTyID: // FIXME: Treat these like ints, this is bogus! - - case Type::IntTyID: - case Type::UIntTyID: - case Type::PointerTyID: return &X86IntRegisterClassInstance; - - case Type::FloatTyID: - case Type::DoubleTyID: - - default: - assert(0 && "Invalid type to getClass!"); - return 0; // not reached - } +const TargetRegisterClass* X86RegisterInfo::getRegClassForType(const Type* Ty) + const { + switch (Ty->getPrimitiveID()) { + case Type::BoolTyID: + case Type::SByteTyID: + case Type::UByteTyID: return &X86ByteRegisterClassInstance; + case Type::ShortTyID: + case Type::UShortTyID: return &X86ShortRegisterClassInstance; + case Type::LongTyID: // None of these are handled yet! + case Type::ULongTyID: // FIXME: Treat these like ints, this is bogus! + + case Type::IntTyID: + case Type::UIntTyID: + case Type::PointerTyID: return &X86IntRegisterClassInstance; + + case Type::FloatTyID: + case Type::DoubleTyID: + + default: + assert(0 && "Invalid type to getClass!"); + return 0; // not reached } }