mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
Pack MCSymbol::Flags in to the bitfield with other members. NFC.
All file formats only needed 16-bits right now which is enough to fit in to the padding with other fields. This reduces the size of MCSymbol to 24-bytes on a 64-bit system. The layout is now 0 | class llvm::MCSymbol 0 | class llvm::PointerIntPair SectionOrFragmentAndHasName 0 | intptr_t Value | [sizeof=8, dsize=8, align=8 | nvsize=8, nvalign=8] 8 | unsigned int IsTemporary 8 | unsigned int IsRedefinable 8 | unsigned int IsUsed 8 | _Bool IsRegistered 8 | unsigned int IsExternal 8 | unsigned int IsPrivateExtern 8 | unsigned int Kind 9 | unsigned int IsUsedInReloc 9 | unsigned int SymbolContents 9 | unsigned int CommonAlignLog2 10 | uint32_t Flags 12 | uint32_t Index 16 | union 16 | uint64_t Offset 16 | uint64_t CommonSize 16 | const class llvm::MCExpr * Value | [sizeof=8, dsize=8, align=8 | nvsize=8, nvalign=8] | [sizeof=24, dsize=24, align=8 | nvsize=24, nvalign=8] llvm-svn: 241196
This commit is contained in:
parent
3b5aac894a
commit
c7d19030e2
@ -117,6 +117,11 @@ protected:
|
||||
static const unsigned NumCommonAlignmentBits = 5;
|
||||
unsigned CommonAlignLog2 : NumCommonAlignmentBits;
|
||||
|
||||
/// The Flags field is used by object file implementations to store
|
||||
/// additional per symbol information which is not easily classified.
|
||||
static const unsigned NumFlagsBits = 16;
|
||||
mutable uint32_t Flags : NumFlagsBits;
|
||||
|
||||
/// Index field, for use by the object file implementation.
|
||||
mutable uint32_t Index = 0;
|
||||
|
||||
@ -131,10 +136,6 @@ protected:
|
||||
const MCExpr *Value;
|
||||
};
|
||||
|
||||
/// The Flags field is used by object file implementations to store
|
||||
/// additional per symbol information which is not easily classified.
|
||||
mutable uint32_t Flags = 0;
|
||||
|
||||
protected: // MCContext creates and uniques these.
|
||||
friend class MCExpr;
|
||||
friend class MCContext;
|
||||
@ -152,7 +153,7 @@ protected: // MCContext creates and uniques these.
|
||||
: IsTemporary(isTemporary), IsRedefinable(false), IsUsed(false),
|
||||
IsRegistered(false), IsExternal(false), IsPrivateExtern(false),
|
||||
Kind(Kind), IsUsedInReloc(false), SymbolContents(SymContentsUnset),
|
||||
CommonAlignLog2(0) {
|
||||
CommonAlignLog2(0), Flags(0) {
|
||||
Offset = 0;
|
||||
SectionOrFragmentAndHasName.setInt(!!Name);
|
||||
if (Name)
|
||||
@ -402,10 +403,14 @@ protected:
|
||||
uint32_t getFlags() const { return Flags; }
|
||||
|
||||
/// Set the (implementation defined) symbol flags.
|
||||
void setFlags(uint32_t Value) const { Flags = Value; }
|
||||
void setFlags(uint32_t Value) const {
|
||||
assert(Value < (1U << NumFlagsBits) && "Out of range flags");
|
||||
Flags = Value;
|
||||
}
|
||||
|
||||
/// Modify the flags via a mask
|
||||
void modifyFlags(uint32_t Value, uint32_t Mask) const {
|
||||
assert(Value < (1U << NumFlagsBits) && "Out of range flags");
|
||||
Flags = (Flags & ~Mask) | Value;
|
||||
}
|
||||
};
|
||||
|
@ -20,6 +20,7 @@ using namespace llvm;
|
||||
MCSection *MCSymbol::AbsolutePseudoSection = reinterpret_cast<MCSection *>(1);
|
||||
|
||||
const unsigned MCSymbol::NumCommonAlignmentBits;
|
||||
const unsigned MCSymbol::NumFlagsBits;
|
||||
|
||||
void *MCSymbol::operator new(size_t s, const StringMapEntry<bool> *Name,
|
||||
MCContext &Ctx) {
|
||||
|
Loading…
Reference in New Issue
Block a user