[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / MC / Mips / relocation.s
blob9c8bb657ea68c1e5c147f74418ec2489ae3c113b
1 // RUN: llvm-mc -triple mips-unknown-linux < %s -show-encoding \
2 // RUN: | FileCheck -check-prefixes=ENCBE,FIXUP %s
3 // RUN: llvm-mc -triple mipsel-unknown-linux < %s -show-encoding \
4 // RUN: | FileCheck -check-prefixes=ENCLE,FIXUP %s
5 // RUN: llvm-mc -filetype=obj -triple mipsel-unknown-linux < %s \
6 // RUN: | llvm-readobj -r - | FileCheck -check-prefix=RELOC %s
7 // RUN: llvm-mc -filetype=obj -triple mips-unknown-linux < %s \
8 // RUN: | llvm-readobj --sections --section-data - \
9 // RUN: | FileCheck -check-prefix=DATA %s
11 // Test that we produce the correct relocation.
12 // FIXME: move more relocation only tests here.
14 // Check prefixes:
15 // RELOC - Check the relocation in the object.
16 // FIXUP - Check the fixup on the instruction.
17 // ENCBE - Check the big-endian encoding on the instruction.
18 // ENCLE - Check the little-endian encoding on the instruction.
19 // ????? - Placeholder. Relocation is defined but the way of generating it is
20 // unknown.
21 // FIXME - Placeholder. Generation method is known but doesn't work.
23 // RELOC-LABEL: .rel.text {
24 // DATA-LABEL: Name: .text
25 // DATA: SectionData (
27 // DATA-NEXT: 0000: 00000004 00000000 00000004 0C000000
28 .short foo // RELOC: R_MIPS_16 foo
30 .short bar // RELOC: R_MIPS_16 .data
32 baz: .long foo // RELOC: R_MIPS_32 foo
34 .long bar // RELOC: R_MIPS_32 .data
36 // ?????: R_MIPS_REL32 foo
38 jal foo // RELOC: R_MIPS_26 foo
39 // ENCBE: jal foo # encoding: [0b000011AA,A,A,A]
40 // ENCLE: jal foo # encoding: [A,A,A,0b000011AA]
41 // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_Mips_26
43 // The nop from the jal is at 0x0010
44 // DATA-NEXT: 0010: 00000000 0C000001 00000000 24620000
45 jal baz // RELOC: R_MIPS_26 .text
46 // ENCBE: jal baz # encoding: [0b000011AA,A,A,A]
47 // ENCLE: jal baz # encoding: [A,A,A,0b000011AA]
48 // FIXUP: # fixup A - offset: 0, value: baz, kind: fixup_Mips_26
50 addiu $2, $3, %hi(foo) // RELOC: R_MIPS_HI16 foo
51 // ENCBE: addiu $2, $3, %hi(foo) # encoding: [0x24,0x62,A,A]
52 // ENCLE: addiu $2, $3, %hi(foo) # encoding: [A,A,0x62,0x24]
53 // FIXUP: # fixup A - offset: 0, value: %hi(foo), kind: fixup_Mips_HI16
55 // DATA-NEXT: 0020: 24620000 24620000 24620004 24620000
56 addiu $2, $3, %lo(foo) // RELOC: R_MIPS_LO16 foo
57 // ENCBE: addiu $2, $3, %lo(foo) # encoding: [0x24,0x62,A,A]
58 // ENCLE: addiu $2, $3, %lo(foo) # encoding: [A,A,0x62,0x24]
59 // FIXUP: # fixup A - offset: 0, value: %lo(foo), kind: fixup_Mips_LO16
61 addiu $2, $3, %hi(bar) // RELOC: R_MIPS_HI16 .data
62 // ENCBE: addiu $2, $3, %hi(bar) # encoding: [0x24,0x62,A,A]
63 // ENCLE: addiu $2, $3, %hi(bar) # encoding: [A,A,0x62,0x24]
64 // FIXUP: # fixup A - offset: 0, value: %hi(bar), kind: fixup_Mips_HI16
66 addiu $2, $3, %lo(bar) // RELOC: R_MIPS_LO16 .data
67 // ENCBE: addiu $2, $3, %lo(bar) # encoding: [0x24,0x62,A,A]
68 // ENCLE: addiu $2, $3, %lo(bar) # encoding: [A,A,0x62,0x24]
69 // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_Mips_LO16
71 addiu $2, $3, %gp_rel(foo) // RELOC: R_MIPS_GPREL16 foo
72 // ENCBE: addiu $2, $3, %gp_rel(foo) # encoding: [0x24,0x62,A,A]
73 // ENCLE: addiu $2, $3, %gp_rel(foo) # encoding: [A,A,0x62,0x24]
74 // FIXUP: # fixup A - offset: 0, value: %gp_rel(foo), kind: fixup_Mips_GPREL
76 // DATA-NEXT: 0030: 24620004 24620000 24420000 24620000
77 addiu $2, $3, %gp_rel(bar) // RELOC: R_MIPS_GPREL16 .data
78 // ENCBE: addiu $2, $3, %gp_rel(bar) # encoding: [0x24,0x62,A,A]
79 // ENCLE: addiu $2, $3, %gp_rel(bar) # encoding: [A,A,0x62,0x24]
80 // FIXUP: # fixup A - offset: 0, value: %gp_rel(bar), kind: fixup_Mips_GPREL
82 // ?????: R_MIPS_LITERAL foo
84 addiu $2, $3, %got(foo) // RELOC: R_MIPS_GOT16 foo
85 // ENCBE: addiu $2, $3, %got(foo) # encoding: [0x24,0x62,A,A]
86 // ENCLE: addiu $2, $3, %got(foo) # encoding: [A,A,0x62,0x24]
87 // FIXUP: # fixup A - offset: 0, value: %got(foo), kind: fixup_Mips_GOT
88 // %got requires a %lo pair
89 addiu $2, $2, %lo(foo)
91 addiu $2, $3, %got(bar) // RELOC: R_MIPS_GOT16 .data
92 // ENCBE: addiu $2, $3, %got(bar) # encoding: [0x24,0x62,A,A]
93 // ENCLE: addiu $2, $3, %got(bar) # encoding: [A,A,0x62,0x24]
94 // FIXUP: # fixup A - offset: 0, value: %got(bar), kind: fixup_Mips_GOT
95 // DATA-NEXT: 0040: 24420004 0000FFBE 24620000
96 // %got requires a %lo pair
97 addiu $2, $2, %lo(bar)
99 .short foo-. // RELOC: R_MIPS_PC16 foo
100 .short baz-. // RELOC-NOT: R_MIPS_PC16
102 addiu $2, $3, %call16(foo) // RELOC: R_MIPS_CALL16 foo
103 // ENCBE: addiu $2, $3, %call16(foo) # encoding: [0x24,0x62,A,A]
104 // ENCLE: addiu $2, $3, %call16(foo) # encoding: [A,A,0x62,0x24]
105 // FIXUP: # fixup A - offset: 0, value: %call16(foo), kind: fixup_Mips_CALL16
107 .p2align 4
108 // DATA-NEXT: 0050: 00000000 00000000 00000000 00000004
109 .quad foo // RELOC: R_MIPS_64 foo
110 .quad bar // RELOC: R_MIPS_64 .data
112 // ?????: R_MIPS_GPREL32 foo
113 // ?????: R_MIPS_UNUSED1 foo
114 // ?????: R_MIPS_UNUSED2 foo
115 // ?????: R_MIPS_UNUSED3 foo
116 // ?????: R_MIPS_SHIFT5 foo
117 // ?????: R_MIPS_SHIFT6 foo
119 // DATA-NEXT: 0060: 24620000 24620000 24620004 24620000
120 addiu $2, $3, %got_disp(foo) // RELOC: R_MIPS_GOT_DISP foo
121 // ENCBE: addiu $2, $3, %got_disp(foo) # encoding: [0x24,0x62,A,A]
122 // ENCLE: addiu $2, $3, %got_disp(foo) # encoding: [A,A,0x62,0x24]
123 // FIXUP: # fixup A - offset: 0, value: %got_disp(foo), kind: fixup_Mips_GOT_DISP
125 addiu $2, $3, %got_page(foo) // RELOC: R_MIPS_GOT_PAGE foo
126 // ENCBE: addiu $2, $3, %got_page(foo) # encoding: [0x24,0x62,A,A]
127 // ENCLE: addiu $2, $3, %got_page(foo) # encoding: [A,A,0x62,0x24]
128 // FIXUP: # fixup A - offset: 0, value: %got_page(foo), kind: fixup_Mips_GOT_PAGE
130 addiu $2, $3, %got_page(bar) // RELOC: R_MIPS_GOT_PAGE .data
131 // ENCBE: addiu $2, $3, %got_page(bar) # encoding: [0x24,0x62,A,A]
132 // ENCLE: addiu $2, $3, %got_page(bar) # encoding: [A,A,0x62,0x24]
133 // FIXUP: # fixup A - offset: 0, value: %got_page(bar), kind: fixup_Mips_GOT_PAGE
135 addiu $2, $3, %got_ofst(foo) // RELOC: R_MIPS_GOT_OFST foo
136 // ENCBE: addiu $2, $3, %got_ofst(foo) # encoding: [0x24,0x62,A,A]
137 // ENCLE: addiu $2, $3, %got_ofst(foo) # encoding: [A,A,0x62,0x24]
138 // FIXUP: # fixup A - offset: 0, value: %got_ofst(foo), kind: fixup_Mips_GOT_OFST
140 // DATA-NEXT: 0070: 24620004 24620000 24620000 64620000
141 addiu $2, $3, %got_ofst(bar) // RELOC: R_MIPS_GOT_OFST .data
142 // ENCBE: addiu $2, $3, %got_ofst(bar) # encoding: [0x24,0x62,A,A]
143 // ENCLE: addiu $2, $3, %got_ofst(bar) # encoding: [A,A,0x62,0x24]
144 // FIXUP: # fixup A - offset: 0, value: %got_ofst(bar), kind: fixup_Mips_GOT_OFST
146 addiu $2, $3, %got_hi(foo) // RELOC: R_MIPS_GOT_HI16 foo
147 // ENCBE: addiu $2, $3, %got_hi(foo) # encoding: [0x24,0x62,A,A]
148 // ENCLE: addiu $2, $3, %got_hi(foo) # encoding: [A,A,0x62,0x24]
149 // FIXUP: # fixup A - offset: 0, value: %got_hi(foo), kind: fixup_Mips_GOT_HI16
151 addiu $2, $3, %got_lo(foo) // RELOC: R_MIPS_GOT_LO16 foo
152 // ENCBE: addiu $2, $3, %got_lo(foo) # encoding: [0x24,0x62,A,A]
153 // ENCLE: addiu $2, $3, %got_lo(foo) # encoding: [A,A,0x62,0x24]
154 // FIXUP: # fixup A - offset: 0, value: %got_lo(foo), kind: fixup_Mips_GOT_LO16
156 // It turns out that %neg() isn't actually usable for anything. It's
157 // not supported in .quad and it doesn't make sense to use a 64-bit
158 // reloc on a 32-bit instruction.
159 // .quad %neg(foo) // ?????: R_MIPS_SUB foo
160 // ?????: R_MIPS_INSERT_A
161 // ?????: R_MIPS_INSERT_B
162 // ?????: R_MIPS_DELETE
164 .set mips64
165 daddiu $2, $3, %higher(foo) // RELOC: R_MIPS_HIGHER foo
166 // ENCBE: daddiu $2, $3, %higher(foo) # encoding: [0x64,0x62,A,A]
167 // ENCLE: daddiu $2, $3, %higher(foo) # encoding: [A,A,0x62,0x64]
168 // FIXUP: # fixup A - offset: 0, value: %higher(foo), kind: fixup_Mips_HIGHER
170 // DATA-NEXT: 0080: 64620000 24620000 24620000 00000000
171 daddiu $2, $3, %highest(foo) // RELOC: R_MIPS_HIGHEST foo
172 // ENCBE: daddiu $2, $3, %highest(foo) # encoding: [0x64,0x62,A,A]
173 // ENCLE: daddiu $2, $3, %highest(foo) # encoding: [A,A,0x62,0x64]
174 // FIXUP: # fixup A - offset: 0, value: %highest(foo), kind: fixup_Mips_HIGHEST
176 .set mips0
177 addiu $2, $3, %call_hi(foo) // RELOC: R_MIPS_CALL_HI16 foo
178 // ENCBE: addiu $2, $3, %call_hi(foo) # encoding: [0x24,0x62,A,A]
179 // ENCLE: addiu $2, $3, %call_hi(foo) # encoding: [A,A,0x62,0x24]
180 // FIXUP: # fixup A - offset: 0, value: %call_hi(foo), kind: fixup_Mips_CALL_HI16
182 addiu $2, $3, %call_lo(foo) // RELOC: R_MIPS_CALL_LO16 foo
183 // ENCBE: addiu $2, $3, %call_lo(foo) # encoding: [0x24,0x62,A,A]
184 // ENCLE: addiu $2, $3, %call_lo(foo) # encoding: [A,A,0x62,0x24]
185 // FIXUP: # fixup A - offset: 0, value: %call_lo(foo), kind: fixup_Mips_CALL_LO16
187 // ?????: R_MIPS_SCN_DISP foo
188 // ?????: R_MIPS_REL16 foo
189 // ?????: R_MIPS_ADD_IMMEDIATE foo
190 // ?????: R_MIPS_PJUMP foo
191 // ?????: R_MIPS_RELGOT foo
192 // jalr $25 // ?????: R_MIPS_JALR foo
194 // ?????: R_MIPS_TLS_DTPMOD32 foo
195 .dtprelword foo // RELOC: R_MIPS_TLS_DTPREL32 foo
197 // DATA-NEXT: 0090: 00000000 00000000 24620000 24620000
198 // ?????: R_MIPS_TLS_DTPMOD64 foo
199 .dtpreldword foo // RELOC: R_MIPS_TLS_DTPREL64 foo
200 addiu $2, $3, %tlsgd(foo) // RELOC: R_MIPS_TLS_GD foo
201 // ENCBE: addiu $2, $3, %tlsgd(foo) # encoding: [0x24,0x62,A,A]
202 // ENCLE: addiu $2, $3, %tlsgd(foo) # encoding: [A,A,0x62,0x24]
203 // FIXUP: # fixup A - offset: 0, value: %tlsgd(foo), kind: fixup_Mips_TLSGD
205 addiu $2, $3, %tlsldm(foo) // RELOC: R_MIPS_TLS_LDM foo
206 // ENCBE: addiu $2, $3, %tlsldm(foo) # encoding: [0x24,0x62,A,A]
207 // ENCLE: addiu $2, $3, %tlsldm(foo) # encoding: [A,A,0x62,0x24]
208 // FIXUP: # fixup A - offset: 0, value: %tlsldm(foo), kind: fixup_Mips_TLSLDM
210 // DATA-NEXT: 00A0: 24620000 24620000 24620000 00000000
211 addiu $2, $3, %dtprel_hi(foo) // RELOC: R_MIPS_TLS_DTPREL_HI16 foo
212 // ENCBE: addiu $2, $3, %dtprel_hi(foo) # encoding: [0x24,0x62,A,A]
213 // ENCLE: addiu $2, $3, %dtprel_hi(foo) # encoding: [A,A,0x62,0x24]
214 // FIXUP: # fixup A - offset: 0, value: %dtprel_hi(foo), kind: fixup_Mips_DTPREL_HI
216 addiu $2, $3, %dtprel_lo(foo) // RELOC: R_MIPS_TLS_DTPREL_LO16 foo
217 // ENCBE: addiu $2, $3, %dtprel_lo(foo) # encoding: [0x24,0x62,A,A]
218 // ENCLE: addiu $2, $3, %dtprel_lo(foo) # encoding: [A,A,0x62,0x24]
219 // FIXUP: # fixup A - offset: 0, value: %dtprel_lo(foo), kind: fixup_Mips_DTPREL_LO
221 addiu $2, $3, %gottprel(foo) // RELOC: R_MIPS_TLS_GOTTPREL foo
222 // ENCBE: addiu $2, $3, %gottprel(foo) # encoding: [0x24,0x62,A,A]
223 // ENCLE: addiu $2, $3, %gottprel(foo) # encoding: [A,A,0x62,0x24]
224 // FIXUP: # fixup A - offset: 0, value: %gottprel(foo), kind: fixup_Mips_GOTTPREL
226 .tprelword foo // RELOC: R_MIPS_TLS_TPREL32 foo
228 // DATA-NEXT: 00B0: 00000000 00000000 24620000 24620000
229 .tpreldword foo // RELOC: R_MIPS_TLS_TPREL64 foo
230 addiu $2, $3, %tprel_hi(foo) // RELOC: R_MIPS_TLS_TPREL_HI16 foo
231 // ENCBE: addiu $2, $3, %tprel_hi(foo) # encoding: [0x24,0x62,A,A]
232 // ENCLE: addiu $2, $3, %tprel_hi(foo) # encoding: [A,A,0x62,0x24]
233 // FIXUP: # fixup A - offset: 0, value: %tprel_hi(foo), kind: fixup_Mips_TPREL_HI
235 addiu $2, $3, %tprel_lo(foo) // RELOC: R_MIPS_TLS_TPREL_LO16 foo
236 // ENCBE: addiu $2, $3, %tprel_lo(foo) # encoding: [0x24,0x62,A,A]
237 // ENCLE: addiu $2, $3, %tprel_lo(foo) # encoding: [A,A,0x62,0x24]
238 // FIXUP: # fixup A - offset: 0, value: %tprel_lo(foo), kind: fixup_Mips_TPREL_LO
240 // DATA-NEXT: 00C0: D85FFFFF CBFFFFFF EC580000 EC480000
241 // ?????: R_MIPS_GLOB_DAT foo
242 .set mips32r6
243 beqzc $2, foo // RELOC: R_MIPS_PC21_S2 foo
244 // ENCBE: beqzc $2, foo # encoding: [0xd8,0b010AAAAA,A,A]
245 // ENCLE: beqzc $2, foo # encoding: [A,A,0b010AAAAA,0xd8]
246 // FIXUP: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC21_S2
248 bc foo // RELOC: R_MIPS_PC26_S2 foo
249 // ENCBE: bc foo # encoding: [0b110010AA,A,A,A]
250 // ENCLE: bc foo # encoding: [A,A,A,0b110010AA]
251 // FIXUP: # fixup A - offset: 0, value: foo-4, kind: fixup_MIPS_PC26_S2
253 .set mips64r6
254 ldpc $2, foo // RELOC: R_MIPS_PC18_S3 foo
255 // ENCBE: ldpc $2, foo # encoding: [0xec,0b010110AA,A,A]
256 // ENCLE: ldpc $2, foo # encoding: [A,A,0b010110AA,0xec]
257 // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_Mips_PC18_S3
259 .set mips32r6
260 lwpc $2, foo // RELOC: R_MIPS_PC19_S2 foo
261 // ENCBE: lwpc $2, foo # encoding: [0xec,0b01001AAA,A,A]
262 // ENCLE: lwpc $2, foo # encoding: [A,A,0b01001AAA,0xec]
263 // FIXUP: # fixup A - offset: 0, value: foo, kind: fixup_MIPS_PC19_S2
265 // DATA-NEXT: 00D0: 24620000 24620000 00000000
266 addiu $2, $3, %pcrel_hi(foo) // RELOC: R_MIPS_PCHI16 foo
267 // ENCBE: addiu $2, $3, %pcrel_hi(foo) # encoding: [0x24,0x62,A,A]
268 // ENCLE: addiu $2, $3, %pcrel_hi(foo) # encoding: [A,A,0x62,0x24]
269 // FIXUP: # fixup A - offset: 0, value: %pcrel_hi(foo), kind: fixup_MIPS_PCHI16
271 addiu $2, $3, %pcrel_lo(foo) // RELOC: R_MIPS_PCLO16 foo
272 // ENCBE: addiu $2, $3, %pcrel_lo(foo) # encoding: [0x24,0x62,A,A]
273 // ENCLE: addiu $2, $3, %pcrel_lo(foo) # encoding: [A,A,0x62,0x24]
274 // FIXUP: # fixup A - offset: 0, value: %pcrel_lo(foo), kind: fixup_MIPS_PCLO16
276 .set mips0
277 // FIXME: R_MIPS16_*
278 // ?????: R_MIPS_COPY foo
279 // ?????: R_MIPS_JUMP_SLOT foo
280 // FIXME: R_MICROMIPS_*
281 .long foo-. // RELOC: R_MIPS_PC32 foo
282 // .ehword foo // FIXME: R_MIPS_EH foo
284 .data
285 .word 0
286 bar:
287 .word 1
289 .section .text_mm, "ax", @progbits
290 .set micromips
292 // RELOC-LABEL: .rel.text_mm {
293 // ENCBE-LABEL: mm:
294 // ENCLE-LABEL: mm:
295 // DATA-LABEL: Name: .text_mm
296 // DATA: SectionData (
298 // DATA-NEXT: 0000: 30430000 30420000 30430000 30420004
299 addiu $2, $3, %got(foo_mm) // RELOC: R_MICROMIPS_GOT16 foo_mm
300 // ENCBE: addiu $2, $3, %got(foo_mm) # encoding: [0x30,0x43,A,A]
301 // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
302 // ENCLE: addiu $2, $3, %got(foo_mm) # encoding: [0x43'A',0x30'A',0x00,0x00]
303 // FIXUP: # fixup A - offset: 0, value: %got(foo_mm), kind: fixup_MICROMIPS_GOT16
304 // %got requires a %lo pair
305 addiu $2, $2, %lo(foo_mm) // RELOC: R_MICROMIPS_LO16 foo_mm
306 // ENCBE: addiu $2, $2, %lo(foo_mm) # encoding: [0x30,0x42,A,A]
307 // ENCLE: addiu $2, $2, %lo(foo_mm) # encoding: [0x42'A',0x30'A',0x00,0x00]
308 // FIXUP: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16
310 foo_mm:
311 addiu $2, $3, %got(bar) // RELOC: R_MICROMIPS_GOT16 .data
312 // ENCBE: addiu $2, $3, %got(bar) # encoding: [0x30,0x43,A,A]
313 // ENCLE: addiu $2, $3, %got(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
314 // FIXUP: # fixup A - offset: 0, value: %got(bar), kind: fixup_MICROMIPS_GOT16
315 // %got requires a %lo pair
316 addiu $2, $2, %lo(bar) // RELOC: R_MICROMIPS_LO16 .data
317 // ENCBE: addiu $2, $2, %lo(bar) # encoding: [0x30,0x42,A,A]
318 // ENCLE: addiu $2, $2, %lo(bar) # encoding: [0x42'A',0x30'A',0x00,0x00]
319 // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16
321 // DATA-NEXT: 0010: 30430000 30420004 30430001 3042003C
322 addiu $2, $3, %got(baz) // RELOC: R_MICROMIPS_GOT16 .text
323 // ENCBE: addiu $2, $3, %got(baz) # encoding: [0x30,0x43,A,A]
324 // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
325 // ENCLE: addiu $2, $3, %got(baz) # encoding: [0x43'A',0x30'A',0x00,0x00]
326 // FIXUP: # fixup A - offset: 0, value: %got(baz), kind: fixup_MICROMIPS_GOT16
327 // %got requires a %lo pair
328 addiu $2, $2, %lo(baz) // RELOC: R_MICROMIPS_LO16 .text
329 // ENCBE: addiu $2, $2, %lo(baz) # encoding: [0x30,0x42,A,A]
330 // ENCLE: addiu $2, $2, %lo(baz) # encoding: [0x42'A',0x30'A',0x00,0x00]
331 // FIXUP: # fixup A - offset: 0, value: %lo(baz), kind: fixup_MICROMIPS_LO16
333 addiu $2, $3, %got(long_mm) // RELOC: R_MICROMIPS_GOT16 .text
334 // ENCBE: addiu $2, $3, %got(long_mm) # encoding: [0x30,0x43,A,A]
335 // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
336 // ENCLE: addiu $2, $3, %got(long_mm) # encoding: [0x43'A',0x30'A',0x00,0x00]
337 // FIXUP: # fixup A - offset: 0, value: %got(long_mm), kind: fixup_MICROMIPS_GOT16
338 // %got requires a %lo pair
339 addiu $2, $2, %lo(long_mm) // RELOC: R_MICROMIPS_LO16 .text
340 // ENCBE: addiu $2, $2, %lo(long_mm) # encoding: [0x30,0x42,A,A]
341 // ENCLE: addiu $2, $2, %lo(long_mm) # encoding: [0x42'A',0x30'A',0x00,0x00]
342 // FIXUP: # fixup A - offset: 0, value: %lo(long_mm), kind: fixup_MICROMIPS_LO16
344 // DATA-NEXT: 0020: 30430004 00000000 30430004 00000000
345 addiu $2, $3, %got_page(bar) // RELOC: R_MICROMIPS_GOT_PAGE .data
346 // ENCBE: addiu $2, $3, %got_page(bar) # encoding: [0x30,0x43,A,A]
347 // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
348 // ENCLE: addiu $2, $3, %got_page(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
349 // FIXUP: # fixup A - offset: 0, value: %got_page(bar), kind: fixup_MICROMIPS_GOT_PAGE
352 addiu $2, $3, %got_ofst(bar) // RELOC: R_MICROMIPS_GOT_OFST .data
353 // ENCBE: addiu $2, $3, %got_ofst(bar) # encoding: [0x30,0x43,A,A]
354 // The placement of the 'A' annotations is incorrect. They use 32-bit little endian instead of 2x 16-bit little endian.
355 // ENCLE: addiu $2, $3, %got_ofst(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
356 // FIXUP: # fixup A - offset: 0, value: %got_ofst(bar), kind: fixup_MICROMIPS_GOT_OFST
359 // DATA-NEXT: 0030: 30430000 30420000 30430000 30420004
360 addiu $2, $3, %hi(foo_mm) // RELOC: R_MICROMIPS_HI16 foo_mm
361 // ENCBE: addiu $2, $3, %hi(foo_mm) # encoding: [0x30,0x43,A,A]
362 // ENCLE: addiu $2, $3, %hi(foo_mm) # encoding: [0x43'A',0x30'A',0x00,0x00]
363 // FIXUP: # fixup A - offset: 0, value: %hi(foo_mm), kind: fixup_MICROMIPS_HI16
365 addiu $2, $2, %lo(foo_mm) // RELOC: R_MICROMIPS_LO16 foo_mm
366 // ENCBE: addiu $2, $2, %lo(foo_mm) # encoding: [0x30,0x42,A,A]
367 // ENCLE: addiu $2, $2, %lo(foo_mm) # encoding: [0x42'A',0x30'A',0x00,0x00]
368 // FIXUP: # fixup A - offset: 0, value: %lo(foo_mm), kind: fixup_MICROMIPS_LO16
370 addiu $2, $3, %hi(bar) // RELOC: R_MICROMIPS_HI16 .data
371 // ENCBE: addiu $2, $3, %hi(bar) # encoding: [0x30,0x43,A,A]
372 // ENCLE: addiu $2, $3, %hi(bar) # encoding: [0x43'A',0x30'A',0x00,0x00]
373 // FIXUP: # fixup A - offset: 0, value: %hi(bar), kind: fixup_MICROMIPS_HI16
375 addiu $2, $2, %lo(bar) // RELOC: R_MICROMIPS_LO16 .data
376 // ENCBE: addiu $2, $2, %lo(bar) # encoding: [0x30,0x42,A,A]
377 // ENCLE: addiu $2, $2, %lo(bar) # encoding: [0x42'A',0x30'A',0x00,0x00]
378 // FIXUP: # fixup A - offset: 0, value: %lo(bar), kind: fixup_MICROMIPS_LO16
380 // DATA-NEXT: 0040: 30430000 41A50000 41A50000 00000000
381 addiu $2, $3, %gottprel(foo) // RELOC: R_MICROMIPS_TLS_GOTTPREL foo
382 // ENCBE: addiu $2, $3, %gottprel(foo) # encoding: [0x30,0x43,A,A]
383 // ENCLE: addiu $2, $3, %gottprel(foo) # encoding: [0x43'A',0x30'A',0x00,0x00]
384 // FIXUP: # fixup A - offset: 0, value: %gottprel(foo), kind: fixup_MICROMIPS_GOTTPREL
386 lui $5, %higher(foo) // RELOC: R_MICROMIPS_HIGHER foo
387 // ENCBE: lui $5, %higher(foo) # encoding: [0x41,0xa5,A,A]
388 // ENCLE: lui $5, %higher(foo) # encoding: [0xa5'A',0x41'A',0x00,0x00]
389 // FIXUP: # fixup A - offset: 0, value: %higher(foo), kind: fixup_MICROMIPS_HIGHER
391 lui $5, %highest(foo) // RELOC: R_MICROMIPS_HIGHEST foo
392 // ENCBE: lui $5, %highest(foo) # encoding: [0x41,0xa5,A,A]
393 // ENCLE: lui $5, %highest(foo) # encoding: [0xa5'A',0x41'A',0x00,0x00]
394 // FIXUP: # fixup A - offset: 0, value: %highest(foo), kind: fixup_MICROMIPS_HIGHEST
396 .space 65520, 0
397 long_mm: