LLVM: lib/Target/LoongArch/MCTargetDesc/LoongArchMCAsmInfo.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

19

20using namespace llvm;

21

24 return new (Ctx) LoongArchMCExpr(Expr, S, Hint);

25}

26

28 switch (S) {

29 default:

31 case ELF::R_LARCH_B16:

32 return "b16";

33 case ELF::R_LARCH_B21:

34 return "b21";

35 case ELF::R_LARCH_MARK_LA:

36 case ELF::R_LARCH_ABS_HI20:

37 return "abs_hi20";

38 case ELF::R_LARCH_ABS_LO12:

39 return "abs_lo12";

40 case ELF::R_LARCH_ABS64_LO20:

41 return "abs64_lo20";

42 case ELF::R_LARCH_ABS64_HI12:

43 return "abs64_hi12";

44 case ELF::R_LARCH_PCALA_HI20:

45 return "pc_hi20";

46 case ELF::R_LARCH_PCALA_LO12:

47 return "pc_lo12";

48 case ELF::R_LARCH_PCALA64_LO20:

49 return "pc64_lo20";

50 case ELF::R_LARCH_PCALA64_HI12:

51 return "pc64_hi12";

52 case ELF::R_LARCH_GOT_PC_HI20:

53 return "got_pc_hi20";

54 case ELF::R_LARCH_GOT_PC_LO12:

55 return "got_pc_lo12";

56 case ELF::R_LARCH_GOT64_PC_LO20:

57 return "got64_pc_lo20";

58 case ELF::R_LARCH_GOT64_PC_HI12:

59 return "got64_pc_hi12";

60 case ELF::R_LARCH_GOT_HI20:

61 return "got_hi20";

62 case ELF::R_LARCH_GOT_LO12:

63 return "got_lo12";

64 case ELF::R_LARCH_GOT64_LO20:

65 return "got64_lo20";

66 case ELF::R_LARCH_GOT64_HI12:

67 return "got64_hi12";

68 case ELF::R_LARCH_TLS_LE_HI20:

69 return "le_hi20";

70 case ELF::R_LARCH_TLS_LE_LO12:

71 return "le_lo12";

72 case ELF::R_LARCH_TLS_LE64_LO20:

73 return "le64_lo20";

74 case ELF::R_LARCH_TLS_LE64_HI12:

75 return "le64_hi12";

76 case ELF::R_LARCH_TLS_IE_PC_HI20:

77 return "ie_pc_hi20";

78 case ELF::R_LARCH_TLS_IE_PC_LO12:

79 return "ie_pc_lo12";

80 case ELF::R_LARCH_TLS_IE64_PC_LO20:

81 return "ie64_pc_lo20";

82 case ELF::R_LARCH_TLS_IE64_PC_HI12:

83 return "ie64_pc_hi12";

84 case ELF::R_LARCH_TLS_IE_HI20:

85 return "ie_hi20";

86 case ELF::R_LARCH_TLS_IE_LO12:

87 return "ie_lo12";

88 case ELF::R_LARCH_TLS_IE64_LO20:

89 return "ie64_lo20";

90 case ELF::R_LARCH_TLS_IE64_HI12:

91 return "ie64_hi12";

92 case ELF::R_LARCH_TLS_LD_PC_HI20:

93 return "ld_pc_hi20";

94 case ELF::R_LARCH_TLS_LD_HI20:

95 return "ld_hi20";

96 case ELF::R_LARCH_TLS_GD_PC_HI20:

97 return "gd_pc_hi20";

98 case ELF::R_LARCH_TLS_GD_HI20:

99 return "gd_hi20";

100 case ELF::R_LARCH_CALL36:

101 return "call36";

102 case ELF::R_LARCH_TLS_DESC_PC_HI20:

103 return "desc_pc_hi20";

104 case ELF::R_LARCH_TLS_DESC_PC_LO12:

105 return "desc_pc_lo12";

106 case ELF::R_LARCH_TLS_DESC64_PC_LO20:

107 return "desc64_pc_lo20";

108 case ELF::R_LARCH_TLS_DESC64_PC_HI12:

109 return "desc64_pc_hi12";

110 case ELF::R_LARCH_TLS_DESC_HI20:

111 return "desc_hi20";

112 case ELF::R_LARCH_TLS_DESC_LO12:

113 return "desc_lo12";

114 case ELF::R_LARCH_TLS_DESC64_LO20:

115 return "desc64_lo20";

116 case ELF::R_LARCH_TLS_DESC64_HI12:

117 return "desc64_hi12";

118 case ELF::R_LARCH_TLS_DESC_LD:

119 return "desc_ld";

120 case ELF::R_LARCH_TLS_DESC_CALL:

121 return "desc_call";

122 case ELF::R_LARCH_TLS_LE_HI20_R:

123 return "le_hi20_r";

124 case ELF::R_LARCH_TLS_LE_ADD_R:

125 return "le_add_r";

126 case ELF::R_LARCH_TLS_LE_LO12_R:

127 return "le_lo12_r";

128 case ELF::R_LARCH_PCREL20_S2:

129 return "pcrel_20";

130 case ELF::R_LARCH_TLS_LD_PCREL20_S2:

131 return "ld_pcrel_20";

132 case ELF::R_LARCH_TLS_GD_PCREL20_S2:

133 return "gd_pcrel_20";

134 case ELF::R_LARCH_TLS_DESC_PCREL20_S2:

135 return "desc_pcrel_20";

136 }

137}

138

141 .Case("plt", ELF::R_LARCH_B26)

142 .Case("b16", ELF::R_LARCH_B16)

143 .Case("b21", ELF::R_LARCH_B21)

144 .Case("b26", ELF::R_LARCH_B26)

145 .Case("abs_hi20", ELF::R_LARCH_ABS_HI20)

146 .Case("abs_lo12", ELF::R_LARCH_ABS_LO12)

147 .Case("abs64_lo20", ELF::R_LARCH_ABS64_LO20)

148 .Case("abs64_hi12", ELF::R_LARCH_ABS64_HI12)

149 .Case("pc_hi20", ELF::R_LARCH_PCALA_HI20)

150 .Case("pc_lo12", ELF::R_LARCH_PCALA_LO12)

151 .Case("pc64_lo20", ELF::R_LARCH_PCALA64_LO20)

152 .Case("pc64_hi12", ELF::R_LARCH_PCALA64_HI12)

153 .Case("got_pc_hi20", ELF::R_LARCH_GOT_PC_HI20)

154 .Case("got_pc_lo12", ELF::R_LARCH_GOT_PC_LO12)

155 .Case("got64_pc_lo20", ELF::R_LARCH_GOT64_PC_LO20)

156 .Case("got64_pc_hi12", ELF::R_LARCH_GOT64_PC_HI12)

157 .Case("got_hi20", ELF::R_LARCH_GOT_HI20)

158 .Case("got_lo12", ELF::R_LARCH_GOT_LO12)

159 .Case("got64_lo20", ELF::R_LARCH_GOT64_LO20)

160 .Case("got64_hi12", ELF::R_LARCH_GOT64_HI12)

161 .Case("le_hi20", ELF::R_LARCH_TLS_LE_HI20)

162 .Case("le_lo12", ELF::R_LARCH_TLS_LE_LO12)

163 .Case("le64_lo20", ELF::R_LARCH_TLS_LE64_LO20)

164 .Case("le64_hi12", ELF::R_LARCH_TLS_LE64_HI12)

165 .Case("ie_pc_hi20", ELF::R_LARCH_TLS_IE_PC_HI20)

166 .Case("ie_pc_lo12", ELF::R_LARCH_TLS_IE_PC_LO12)

167 .Case("ie64_pc_lo20", ELF::R_LARCH_TLS_IE64_PC_LO20)

168 .Case("ie64_pc_hi12", ELF::R_LARCH_TLS_IE64_PC_HI12)

169 .Case("ie_hi20", ELF::R_LARCH_TLS_IE_HI20)

170 .Case("ie_lo12", ELF::R_LARCH_TLS_IE_LO12)

171 .Case("ie64_lo20", ELF::R_LARCH_TLS_IE64_LO20)

172 .Case("ie64_hi12", ELF::R_LARCH_TLS_IE64_HI12)

173 .Case("ld_pc_hi20", ELF::R_LARCH_TLS_LD_PC_HI20)

174 .Case("ld_hi20", ELF::R_LARCH_TLS_LD_HI20)

175 .Case("gd_pc_hi20", ELF::R_LARCH_TLS_GD_PC_HI20)

176 .Case("gd_hi20", ELF::R_LARCH_TLS_GD_HI20)

177 .Case("call36", ELF::R_LARCH_CALL36)

178 .Case("desc_pc_hi20", ELF::R_LARCH_TLS_DESC_PC_HI20)

179 .Case("desc_pc_lo12", ELF::R_LARCH_TLS_DESC_PC_LO12)

180 .Case("desc64_pc_lo20", ELF::R_LARCH_TLS_DESC64_PC_LO20)

181 .Case("desc64_pc_hi12", ELF::R_LARCH_TLS_DESC64_PC_HI12)

182 .Case("desc_hi20", ELF::R_LARCH_TLS_DESC_HI20)

183 .Case("desc_lo12", ELF::R_LARCH_TLS_DESC_LO12)

184 .Case("desc64_lo20", ELF::R_LARCH_TLS_DESC64_LO20)

185 .Case("desc64_hi12", ELF::R_LARCH_TLS_DESC64_HI12)

186 .Case("desc_ld", ELF::R_LARCH_TLS_DESC_LD)

187 .Case("desc_call", ELF::R_LARCH_TLS_DESC_CALL)

188 .Case("le_hi20_r", ELF::R_LARCH_TLS_LE_HI20_R)

189 .Case("le_add_r", ELF::R_LARCH_TLS_LE_ADD_R)

190 .Case("le_lo12_r", ELF::R_LARCH_TLS_LE_LO12_R)

191 .Case("pcrel_20", ELF::R_LARCH_PCREL20_S2)

192 .Case("ld_pcrel_20", ELF::R_LARCH_TLS_LD_PCREL20_S2)

193 .Case("gd_pcrel_20", ELF::R_LARCH_TLS_GD_PCREL20_S2)

194 .Case("desc_pcrel_20", ELF::R_LARCH_TLS_DESC_PCREL20_S2)

196}

197

198void LoongArchMCAsmInfo::anchor() {}

199

214

218 bool HasSpecifier = S != 0 && S != ELF::R_LARCH_B26;

219 if (HasSpecifier)

222 if (HasSpecifier)

223 OS << ')';

224}

This file contains constants used for implementing Dwarf debug support.

static StringRef getLoongArchSpecifierName(uint16_t S)

Definition LoongArchMCAsmInfo.cpp:27

LoongArchMCAsmInfo(const Triple &TargetTriple)

Definition LoongArchMCAsmInfo.cpp:200

void printSpecifierExpr(raw_ostream &OS, const MCSpecifierExpr &Expr) const override

Definition LoongArchMCAsmInfo.cpp:215

static const LoongArchMCExpr * create(const MCExpr *Expr, uint16_t S, MCContext &Ctx, bool Hint=false)

Definition LoongArchMCAsmInfo.cpp:22

const char * Data16bitsDirective

const char * Data8bitsDirective

These directives are used to output some unit of integer data to the current section.

const char * Data64bitsDirective

ExceptionHandling ExceptionsType

Exception handling format for the target. Defaults to None.

bool AllowDollarAtStartOfIdentifier

This is true if the assembler allows the "$" character at the start of of a string to be lexed as an ...

const char * Data32bitsDirective

void printExpr(raw_ostream &, const MCExpr &) const

bool SupportsDebugInformation

True if target supports emission of debugging information.

bool AlignmentIsInBytes

If this is true (the default) then the asmprinter emits ".align N" directives, where N is the number ...

const char * ZeroDirective

This should be set to the directive used to get some number of zero (and non-zero if supported by the...

bool DwarfRegNumForCFI

True if dwarf register numbers are printed instead of symbolic register names in ....

unsigned CodePointerSize

Code pointer size in bytes. Default is 4.

unsigned CalleeSaveStackSlotSize

Size of the stack slot reserved for callee-saved registers, in bytes.

StringRef CommentString

This indicates the comment string used by the assembler.

Context object for machine code objects.

Base class for the full range of assembler expressions which are needed for parsing.

Extension point for target-specific MCExpr subclasses with a relocation specifier,...

const MCExpr * getSubExpr() const

Spec getSpecifier() const

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

A switch()-like statement whose cases are string literals.

StringSwitch & Case(StringLiteral S, T Value)

Triple - Helper class for working with autoconf configuration names.

This class implements an extremely fast bulk output stream that can only output to a stream.

#define llvm_unreachable(msg)

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

uint16_t parseSpecifier(StringRef name)

Definition LoongArchMCAsmInfo.cpp:139

This is an optimization pass for GlobalISel generic memory operations.

@ DwarfCFI

DWARF-like instruction based exceptions.