LLVM: lib/Target/Hexagon/MCTargetDesc/HexagonMCELFStreamer.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

39#include

40#include

41

42#define DEBUG_TYPE "hexagonmcelfstreamer"

43

44using namespace llvm;

45

48 cl::desc("Global Pointer Addressing Size. The default size is 8."),

51

53 MCContext &Context, std::unique_ptr TAB,

54 std::unique_ptr OW, std::unique_ptr Emitter)

57

59 MCContext &Context, std::unique_ptr TAB,

60 std::unique_ptr OW, std::unique_ptr Emitter,

64

72 *RI);

73 [[maybe_unused]] bool CheckOk = Check.check(false);

75

76

77

81 }

82

84}

85

92

93

94

95

98 Align ByteAlignment,

99 unsigned AccessSize) {

101 StringRef sbss[4] = {".sbss.1", ".sbss.2", ".sbss.4", ".sbss.8"};

102

103 auto ELFSymbol = static_cast<MCSymbolELF *>(Symbol);

104 if (!ELFSymbol->isBindingSet())

106

108

111 ((AccessSize == 0) || (Size == 0) || (Size > GPSize))

112 ? ".bss"

113 : sbss[(Log2_64(AccessSize))];

118

119 if (ELFSymbol->isUndefined()) {

123 }

124

125

126 Section.ensureMinAlignment(ByteAlignment);

127

129 } else {

130 if (ELFSymbol->declareCommon(Size, ByteAlignment))

132 " redeclared as different type");

133 if ((AccessSize) && (Size <= GPSize)) {

135 (AccessSize <= GPSize)

138 ELFSymbol->setIndex(SectionIndex);

139 }

140 }

141

143}

144

147 Align ByteAlignment,

148 unsigned AccessSize) {

150 auto ELFSymbol = static_cast<const MCSymbolELF *>(Symbol);

153}

154

156 switch (Feature) {

157 case Hexagon::ArchV5:

158 return 5;

159 case Hexagon::ArchV55:

160 return 55;

161 case Hexagon::ArchV60:

162 case Hexagon::ExtensionHVXV60:

163 return 60;

164 case Hexagon::ArchV62:

165 case Hexagon::ExtensionHVXV62:

166 return 62;

167 case Hexagon::ArchV65:

168 case Hexagon::ExtensionHVXV65:

169 return 65;

170 case Hexagon::ArchV66:

171 case Hexagon::ExtensionHVXV66:

172 return 66;

173 case Hexagon::ArchV67:

174 case Hexagon::ExtensionHVXV67:

175 return 67;

176 case Hexagon::ArchV68:

177 case Hexagon::ExtensionHVXV68:

178 return 68;

179 case Hexagon::ArchV69:

180 case Hexagon::ExtensionHVXV69:

181 return 69;

182 case Hexagon::ArchV71:

183 case Hexagon::ExtensionHVXV71:

184 return 71;

185 case Hexagon::ArchV73:

186 case Hexagon::ExtensionHVXV73:

187 return 73;

188 case Hexagon::ArchV75:

189 case Hexagon::ExtensionHVXV75:

190 return 75;

191 case Hexagon::ArchV79:

192 case Hexagon::ExtensionHVXV79:

193 return 79;

194 case Hexagon::ArchV81:

195 case Hexagon::ExtensionHVXV81:

196 return 81;

197 }

199 return 0;

200}

201

207 if (HVXArch)

209 if (Features.test(Hexagon::ExtensionHVXIEEEFP))

211 if (Features.test(Hexagon::ExtensionHVXQFloat))

213 if (Features.test(Hexagon::ExtensionZReg))

215 if (Features.test(Hexagon::ExtensionAudio))

217 if (Features.test(Hexagon::FeatureCabac))

219}

220

221namespace llvm {

223 std::unique_ptr MAB,

224 std::unique_ptr OW,

225 std::unique_ptr CE) {

227 std::move(CE));

228 }

229

230}

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

dxil DXContainer Global Emitter

static cl::opt< unsigned > GPSize("gpsize", cl::NotHidden, cl::desc("Global Pointer Addressing Size. The default size is 8."), cl::Prefix, cl::init(8))

static unsigned featureToArchVersion(unsigned Feature)

Definition HexagonMCELFStreamer.cpp:155

#define HEXAGON_PACKET_SIZE

Check for a valid bundle.

void HexagonMCEmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size, Align ByteAlignment, unsigned AccessSize)

Definition HexagonMCELFStreamer.cpp:145

void HexagonMCEmitCommonSymbol(MCSymbol *Symbol, uint64_t Size, Align ByteAlignment, unsigned AccessSize)

Definition HexagonMCELFStreamer.cpp:96

void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override

Emit the given Instruction into the current section.

Definition HexagonMCELFStreamer.cpp:65

void EmitSymbol(const MCInst &Inst)

Definition HexagonMCELFStreamer.cpp:86

HexagonMCELFStreamer(MCContext &Context, std::unique_ptr< MCAsmBackend > TAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > Emitter)

Definition HexagonMCELFStreamer.cpp:52

void emitTargetAttributes(const MCSubtargetInfo &STI)

Definition HexagonMCELFStreamer.cpp:202

virtual void emitAttribute(unsigned Attribute, unsigned Value)

MCContext & getContext() const

LLVM_ABI bool registerSymbol(const MCSymbol &Symbol)

static LLVM_ABI const MCConstantExpr * create(int64_t Value, MCContext &Ctx, bool PrintInHex=false, unsigned SizeInBytes=0)

Context object for machine code objects.

MCSectionELF * getELFSection(const Twine &Section, unsigned Type, unsigned Flags)

const MCRegisterInfo * getRegisterInfo() const

void emitLabel(MCSymbol *Symbol, SMLoc Loc=SMLoc()) override

Emit a label for Symbol into the current section.

MCELFStreamer(MCContext &Context, std::unique_ptr< MCAsmBackend > TAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > Emitter)

Instances of this class represent a single low-level machine instruction.

unsigned getNumOperands() const

unsigned getOpcode() const

const MCOperand & getOperand(unsigned i) const

void emitValueToAlignment(Align Alignment, int64_t Fill=0, uint8_t FillLen=1, unsigned MaxBytesToEmit=0) override

Emit some number of copies of Value until the byte alignment ByteAlignment is reached.

MCAssembler & getAssembler()

void emitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI) override

Emit the given Instruction into the current section.

const MCExpr * getExpr() const

MCRegisterInfo base class - We assume that the target defines a static array of MCRegisterDesc object...

Instances of this class represent a uniqued identifier for a section in the current translation unit.

Streaming machine code generation interface.

MCContext & getContext() const

virtual void switchSection(MCSection *Section, uint32_t Subsec=0)

Set the current section where code is being emitted to Section.

MCSectionSubPair getCurrentSection() const

Return the current section that the streamer is emitting code to.

void emitZeros(uint64_t NumBytes)

Emit NumBytes worth of zeros.

void visitUsedExpr(const MCExpr &Expr)

Generic base class for all target subtargets.

const FeatureBitset & getFeatureBits() const

void setBinding(unsigned Binding) const

MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...

StringRef - Represent a constant reference to a string, i.e.

Triple - Helper class for working with autoconf configuration names.

#define llvm_unreachable(msg)

Marks that the current location is not supposed to be reachable.

size_t bundleSize(MCInst const &MCI)

iterator_range< Hexagon::PacketIterator > bundleInstructions(MCInstrInfo const &MCII, MCInst const &MCI)

unsigned getArchVersion(const FeatureBitset &Features)

std::optional< unsigned > getHVXVersion(const FeatureBitset &Features)

initializer< Ty > init(const Ty &Val)

This is an optimization pass for GlobalISel generic memory operations.

int bit_width(T Value)

Returns the number of bits needed to represent Value if Value is nonzero.

unsigned Log2_64(uint64_t Value)

Return the floor log base 2 of the specified value, -1 if the value is zero.

LLVM_ABI void report_fatal_error(Error Err, bool gen_crash_diag=true)

MCInstrInfo * createHexagonMCInstrInfo()

OutputIt move(R &&Range, OutputIt Out)

Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.

MCStreamer * createHexagonELFStreamer(Triple const &TT, MCContext &Context, std::unique_ptr< MCAsmBackend > MAB, std::unique_ptr< MCObjectWriter > OW, std::unique_ptr< MCCodeEmitter > CE)

Definition HexagonMCELFStreamer.cpp:222

std::pair< MCSection *, uint32_t > MCSectionSubPair

Implement std::hash so that hash_code can be used in STL containers.

This struct is a compact representation of a valid (non-zero power of two) alignment.