xref: /llvm-project/llvm/test/MC/SystemZ/fixups.s (revision bedac64d36dce88ea25bd444c60eaac7d420550e)
1
2# RUN: llvm-mc -triple s390x-unknown-unknown -mcpu=z13 --show-encoding %s | FileCheck %s
3
4# RUN: llvm-mc -triple s390x-unknown-unknown -mcpu=z13 -filetype=obj %s | \
5# RUN: llvm-readobj -r - | FileCheck %s -check-prefix=CHECK-REL
6
7# RUN: llvm-mc -triple s390x-unknown-unknown -mcpu=z13 -filetype=obj %s | \
8# RUN: llvm-objdump -d - | FileCheck %s -check-prefix=CHECK-DIS
9
10# CHECK: larl %r14, target                      # encoding: [0xc0,0xe0,A,A,A,A]
11# CHECK-NEXT:                                   # fixup A - offset: 2, value: target+2, kind: FK_390_PC32DBL
12# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PC32DBL target 0x2
13	.align 16
14	larl %r14, target
15
16# CHECK: larl %r14, target@GOT                  # encoding: [0xc0,0xe0,A,A,A,A]
17# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@GOT+2, kind: FK_390_PC32DBL
18# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_GOTENT target 0x2
19	.align 16
20	larl %r14, target@got
21
22# CHECK: larl %r14, target@GOTENT               # encoding: [0xc0,0xe0,A,A,A,A]
23# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@GOTENT+2, kind: FK_390_PC32DBL
24# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_GOTENT target 0x2
25	.align 16
26	larl %r14, target@gotent
27
28# CHECK: larl %r14, target@INDNTPOFF            # encoding: [0xc0,0xe0,A,A,A,A]
29# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@INDNTPOFF+2, kind: FK_390_PC32DBL
30# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_TLS_IEENT target 0x2
31	.align 16
32	larl %r14, target@indntpoff
33
34# CHECK: brasl %r14, target                     # encoding: [0xc0,0xe5,A,A,A,A]
35# CHECK-NEXT:                                   # fixup A - offset: 2, value: target+2, kind: FK_390_PC32DBL
36# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PC32DBL target 0x2
37	.align 16
38	brasl %r14, target
39
40# CHECK: brasl %r14, target@PLT                 # encoding: [0xc0,0xe5,A,A,A,A]
41# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC32DBL
42# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT32DBL target 0x2
43	.align 16
44	brasl %r14, target@plt
45
46# CHECK: brasl %r14, target@PLT:tls_gdcall:sym  # encoding: [0xc0,0xe5,A,A,A,A]
47# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC32DBL
48# CHECK-NEXT:                                   # fixup B - offset: 0, value: sym@TLSGD, kind: FK_390_TLS_CALL
49# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT32DBL target 0x2
50# CHECK-REL:                                    0x{{[0-9A-F]*0}} R_390_TLS_GDCALL sym 0x0
51	.align 16
52	brasl %r14, target@plt:tls_gdcall:sym
53
54# CHECK: brasl %r14, target@PLT:tls_ldcall:sym  # encoding: [0xc0,0xe5,A,A,A,A]
55# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC32DBL
56# CHECK-NEXT:                                   # fixup B - offset: 0, value: sym@TLSLDM, kind: FK_390_TLS_CALL
57# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT32DBL target 0x2
58# CHECK-REL:                                    0x{{[0-9A-F]*0}} R_390_TLS_LDCALL sym 0x0
59	.align 16
60	brasl %r14, target@plt:tls_ldcall:sym
61
62# CHECK: bras %r14, target                      # encoding: [0xa7,0xe5,A,A]
63# CHECK-NEXT:                                   # fixup A - offset: 2, value: target+2, kind: FK_390_PC16DBL
64# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PC16DBL target 0x2
65	.align 16
66	bras %r14, target
67
68# CHECK: bras %r14, target@PLT                  # encoding: [0xa7,0xe5,A,A]
69# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC16DBL
70# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT16DBL target 0x2
71	.align 16
72	bras %r14, target@plt
73
74# CHECK: bras %r14, target@PLT:tls_gdcall:sym   # encoding: [0xa7,0xe5,A,A]
75# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC16DBL
76# CHECK-NEXT:                                   # fixup B - offset: 0, value: sym@TLSGD, kind: FK_390_TLS_CALL
77# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT16DBL target 0x2
78# CHECK-REL:                                    0x{{[0-9A-F]*0}} R_390_TLS_GDCALL sym 0x0
79	.align 16
80	bras %r14, target@plt:tls_gdcall:sym
81
82# CHECK: bras %r14, target@PLT:tls_ldcall:sym   # encoding: [0xa7,0xe5,A,A]
83# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC16DBL
84# CHECK-NEXT:                                   # fixup B - offset: 0, value: sym@TLSLDM, kind: FK_390_TLS_CALL
85# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT16DBL target 0x2
86# CHECK-REL:                                    0x{{[0-9A-F]*0}} R_390_TLS_LDCALL sym 0x0
87	.align 16
88	bras %r14, target@plt:tls_ldcall:sym
89
90
91# Symbolic displacements
92
93## BD12
94# CHECK: vl %v0, src                            # encoding: [0xe7,0x00,0b0000AAAA,A,0x00,0x06]
95# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
96# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
97        .align 16
98        vl %v0, src
99
100# CHECK: vl %v0, src(%r1)                       # encoding: [0xe7,0x00,0b0001AAAA,A,0x00,0x06]
101# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
102# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
103        .align 16
104        vl %v0, src(%r1)
105
106# CHECK: .insn vrx,253987186016262,%v0,src(%r1),3  # encoding: [0xe7,0x00,0b0001AAAA,A,0x30,0x06]
107# CHECK-NEXT:                                      # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
108# CHECK-REL:                                       0x{{[0-9A-F]*2}} R_390_12 src 0x0
109        .align 16
110        .insn vrx,0xe70000000006,%v0,src(%r1),3	   # vl
111
112## BD20
113# CHECK: lmg %r6, %r15, src                     # encoding: [0xeb,0x6f,0b0000AAAA,A,A,0x04]
114# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_S20Imm
115# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
116	.align 16
117        lmg %r6, %r15, src
118
119# CHECK: lmg %r6, %r15, src(%r1)                # encoding: [0xeb,0x6f,0b0001AAAA,A,A,0x04]
120# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_S20Imm
121# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
122	.align 16
123        lmg %r6, %r15, src(%r1)
124
125# CHECK: .insn siy,258385232527441,src(%r15),240  # encoding: [0xeb,0xf0,0b1111AAAA,A,A,0x51]
126# CHECK-NEXT:                                     # fixup A - offset: 2, value: src, kind: FK_390_S20Imm
127# CHECK-REL:                                      0x{{[0-9A-F]*2}} R_390_20 src 0x0
128	.align 16
129        .insn siy,0xeb0000000051,src(%r15),240	  # tmy
130
131## BDX12
132# CHECK: la %r14, src                           # encoding: [0x41,0xe0,0b0000AAAA,A]
133# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
134# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
135        .align 16
136        la %r14, src
137
138# CHECK: la %r14, src(%r1)                      # encoding: [0x41,0xe0,0b0001AAAA,A]
139# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
140# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
141        .align 16
142        la %r14, src(%r1)
143
144# CHECK: la %r14, src(%r1,%r2)                  # encoding: [0x41,0xe1,0b0010AAAA,A]
145# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
146# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
147        .align 16
148        la %r14, src(%r1, %r2)
149
150# CHECK: .insn vrx,253987186016262,%v2,src(%r2,%r3),3  # encoding: [0xe7,0x22,0b0011AAAA,A,0x30,0x06]
151# CHECK-NEXT:	                                       # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
152# CHECK-REL:                                           0x{{[0-9A-F]*2}} R_390_12 src 0x0
153        .align 16
154        .insn vrx,0xe70000000006,%v2,src(%r2, %r3),3   # vl
155
156##BDX20
157# CHECK: lg %r14, src                           # encoding: [0xe3,0xe0,0b0000AAAA,A,A,0x04]
158# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_S20Imm
159# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
160	.align 16
161	lg %r14, src
162
163# CHECK: lg %r14, src(%r1)                      # encoding: [0xe3,0xe0,0b0001AAAA,A,A,0x04]
164# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_S20Imm
165# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
166	.align 16
167	lg %r14, src(%r1)
168
169# CHECK: lg %r14, src(%r1,%r2)                  # encoding: [0xe3,0xe1,0b0010AAAA,A,A,0x04]
170# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_S20Imm
171# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
172	.align 16
173	lg %r14, src(%r1, %r2)
174
175# CHECK:  .insn rxy,260584255783013,%f1,src(%r2,%r15)  # encoding: [0xed,0x12,0b1111AAAA,A,A,0x65]
176# CHECK-NEXT:                                          # fixup A - offset: 2, value: src, kind: FK_390_S20Imm
177# CHECK-REL:                                           0x{{[0-9A-F]*2}} R_390_20 src 0x0
178	.align 16
179	.insn rxy,0xed0000000065,%f1,src(%r2,%r15)     # ldy
180
181##BD12L4
182# CHECK: tp src(16)                             # encoding: [0xeb,0xf0,0b0000AAAA,A,0x00,0xc0]
183# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
184# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
185	.align 16
186        tp src(16)
187
188# CHECK: tp src(16,%r1)                         # encoding: [0xeb,0xf0,0b0001AAAA,A,0x00,0xc0]
189# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
190# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
191	.align 16
192        tp src(16, %r1)
193
194##BD12L8
195#SSa
196# CHECK: mvc dst(1,%r1), src(%r1)               # encoding: [0xd2,0x00,0b0001AAAA,A,0b0001BBBB,B]
197# CHECK-NEXT:                                   # fixup A - offset: 2, value: dst, kind: FK_390_U12Imm
198# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
199# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 dst 0x0
200# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
201        .align 16
202        mvc dst(1,%r1), src(%r1)
203
204#SSb
205# CHECK: mvo src(16,%r1), src(1,%r2)            # encoding: [0xf1,0xf0,0b0001AAAA,A,0b0010BBBB,B]
206# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
207# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
208# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
209# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
210        .align 16
211        mvo src(16,%r1), src(1,%r2)
212
213#SSc
214# CHECK: srp src(1,%r1), src(%r15), 0           # encoding: [0xf0,0x00,0b0001AAAA,A,0b1111BBBB,B]
215# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
216# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
217# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
218# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
219        .align 16
220        srp src(1,%r1), src(%r15), 0
221
222##BDR12
223#SSd
224# CHECK: mvck dst(%r2,%r1), src, %r3            # encoding: [0xd9,0x23,0b0001AAAA,A,0b0000BBBB,B]
225# CHECK-NEXT:                                   # fixup A - offset: 2, value: dst, kind: FK_390_U12Imm
226# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
227# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 dst 0x0
228# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
229        .align 16
230	mvck dst(%r2,%r1), src, %r3
231
232# CHECK: .insn ss,238594023227392,dst(%r2,%r1),src,%r3  # encoding: [0xd9,0x23,0b0001AAAA,A,0b0000BBBB,B]
233# CHECK-NEXT:                                           # fixup A - offset: 2, value: dst, kind: FK_390_U12Imm
234# CHECK-NEXT:                                           # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
235# CHECK-REL:                                            0x{{[0-9A-F]*2}} R_390_12 dst 0x0
236# CHECK-REL:                                            0x{{[0-9A-F]*4}} R_390_12 src 0x0
237        .align 16
238        .insn ss,0xd90000000000,dst(%r2,%r1),src,%r3	# mvck
239
240#SSe
241# CHECK: lmd %r2, %r4, src1(%r1), src2(%r1)     # encoding: [0xef,0x24,0b0001AAAA,A,0b0001BBBB,B]
242# CHECK-NEXT:                                   # fixup A - offset: 2, value: src1, kind: FK_390_U12Imm
243# CHECK-NEXT:                                   # fixup B - offset: 4, value: src2, kind: FK_390_U12Imm
244# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src1 0x0
245# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src2 0x0
246        .align 16
247        lmd %r2, %r4, src1(%r1), src2(%r1)
248
249#SSf
250# CHECK: pka dst(%r15), src(256,%r15)           # encoding: [0xe9,0xff,0b1111AAAA,A,0b1111BBBB,B]
251# CHECK-NEXT:                                   # fixup A - offset: 2, value: dst, kind: FK_390_U12Imm
252# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
253# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 dst 0x0
254# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
255        .align 16
256	pka     dst(%r15), src(256,%r15)
257
258#SSE
259# CHECK: strag dst(%r1), src(%r15)              # encoding: [0xe5,0x02,0b0001AAAA,A,0b1111BBBB,B]
260# CHECK-NEXT:                                   # fixup A - offset: 2, value: dst, kind: FK_390_U12Imm
261# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
262# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 dst 0x0
263# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
264        .align 16
265        strag dst(%r1), src(%r15)
266
267# CHECK: .insn sse,251796752695296,dst(%r1),src(%r15)  # encoding: [0xe5,0x02,0b0001AAAA,A,0b1111BBBB,B]
268# CHECK-NEXT:                                          # fixup A - offset: 2, value: dst, kind: FK_390_U12Imm
269# CHECK-NEXT:                                          # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
270# CHECK-REL:                                           0x{{[0-9A-F]*2}} R_390_12 dst 0x0
271# CHECK-REL:                                           0x{{[0-9A-F]*4}} R_390_12 src 0x0
272	.align 16
273	.insn sse,0xe50200000000,dst(%r1),src(%r15)    # strag
274
275#SSF
276# CHECK: ectg src, src(%r15), %r2               # encoding: [0xc8,0x21,0b0000AAAA,A,0b1111BBBB,B]
277# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
278# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
279# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
280# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
281        .align 16
282        ectg src, src(%r15), %r2
283
284# CHECK: .insn ssf,219906620522496,src,src(%r15),%r2   # encoding: [0xc8,0x21,0b0000AAAA,A,0b1111BBBB,B]
285# CHECK-NEXT:                                          # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
286# CHECK-NEXT:                                          # fixup B - offset: 4, value: src, kind: FK_390_U12Imm
287# CHECK-REL:                                           0x{{[0-9A-F]*2}} R_390_12 src 0x0
288# CHECK-REL:                                           0x{{[0-9A-F]*4}} R_390_12 src 0x0
289        .align 16
290        .insn ssf,0xc80100000000,src,src(%r15),%r2     # ectg
291
292##BDV12
293# CHECK: vgeg %v0, src(%v0,%r1), 0              # encoding: [0xe7,0x00,0b0001AAAA,A,0x00,0x12]
294# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U12Imm
295# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
296        .align 16
297        vgeg %v0, src(%v0,%r1), 0
298
299## Fixup for second operand only
300# CHECK:  mvc     32(8,%r1), src                # encoding: [0xd2,0x07,0x10,0x20,0b0000AAAA,A]
301# CHECK-NEXT:                                   # fixup A - offset: 4, value: src, kind: FK_390_U12Imm
302        .align 16
303        mvc     32(8,%r1),src
304
305##U8
306# CHECK: cli 0(%r1), src                        # encoding: [0x95,A,0x10,0x00]
307# CHECK-NEXT:                                   # fixup A - offset: 1, value: src, kind: FK_390_U8Imm
308# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_8 src 0x0
309       .align 16
310       cli 0(%r1),src
311
312# CHECK: [[L:\..+]]:
313# CHECK-NEXT: cli 0(%r1), local_u8-[[L]]        # encoding: [0x95,A,0x10,0x00]
314# CHECK-NEXT:                                   # fixup A - offset: 1, value: local_u8-[[L]], kind: FK_390_U8Imm
315# CHECK-DIS:                                    95 04 10 00   cli     0(%r1), 4
316       .align 16
317       cli 0(%r1),local_u8-.
318local_u8:
319
320##S8
321# CHECK: asi 0(%r1), src                        # encoding: [0xeb,A,0x10,0x00,0x00,0x6a]
322# CHECK-NEXT:                                   # fixup A - offset: 1, value: src, kind: FK_390_S8Imm
323# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_8 src 0x0
324       .align 16
325       asi 0(%r1),src
326
327# CHECK: [[L:\..+]]:
328# CHECK-NEXT: asi 0(%r1), local_s8-[[L]]        # encoding: [0xeb,A,0x10,0x00,0x00,0x6a]
329# CHECK-NEXT:                                   # fixup A - offset: 1, value: local_s8-[[L]], kind: FK_390_S8Imm
330# CHECK-DIS:                                    eb 06 10 00 00 6a     asi     0(%r1), 6
331       .align 16
332       asi 0(%r1),local_s8-.
333local_s8:
334
335##U16
336# CHECK: oill %r1, src                          # encoding: [0xa5,0x1b,A,A]
337# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U16Imm
338# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_16 src 0x0
339        .align 16
340        oill %r1,src
341
342# CHECK: [[L:\..+]]:
343# CHECK-NEXT: oill %r1, local_u16-[[L]]         # encoding: [0xa5,0x1b,A,A]
344# CHECK-NEXT:                                   # fixup A - offset: 2, value: local_u16-[[L]], kind: FK_390_U16Imm
345# CHECK-DIS:                                    a5 1b 00 04   oill    %r1, 4
346        .align 16
347        oill %r1,local_u16-.
348local_u16:
349
350# CHECK: [[L:\..+]]:
351# CHECK-NEXT: oill %r1, src-[[L]]               # encoding: [0xa5,0x1b,A,A]
352# CHECK-NEXT:                                   # fixup A - offset: 2, value: src-[[L]], kind: FK_390_U16Imm
353# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_PC16 src 0x2
354        .align 16
355        oill %r1,src-.
356
357##S16
358# CHECK: lghi %r1, src                          # encoding: [0xa7,0x19,A,A]
359# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_S16Imm
360# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_16 src 0x0
361        .align 16
362        lghi %r1,src
363
364# CHECK: [[L:\..+]]:
365# CHECK-NEXT: lghi %r1, local_s16-[[L]]         # encoding: [0xa7,0x19,A,A]
366# CHECK-NEXT:                                   # fixup A - offset: 2, value: local_s16-[[L]], kind: FK_390_S16Imm
367# CHECK-DIS:                                    a7 19 00 04   lghi    %r1, 4
368        .align 16
369        lghi %r1,local_s16-.
370local_s16:
371
372# CHECK: [[L:\..+]]:
373# CHECK-NEXT: lghi %r1, src-[[L]]               # encoding: [0xa7,0x19,A,A]
374# CHECK-NEXT:                                   # fixup A - offset: 2, value: src-[[L]], kind: FK_390_S16Imm
375# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_PC16 src 0x2
376        .align 16
377        lghi %r1,src-.
378
379##U32
380# CHECK: clfi %r1, src                          # encoding: [0xc2,0x1f,A,A,A,A]
381# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_U32Imm
382# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_32 src 0x0
383        .align 16
384        clfi %r1,src
385
386# CHECK: [[L:\..+]]:
387# CHECK-NEXT: clfi %r1, local_u32-[[L]]         # encoding: [0xc2,0x1f,A,A,A,A]
388# CHECK-NEXT:                                   # fixup A - offset: 2, value: local_u32-[[L]], kind: FK_390_U32Imm
389# CHECK-DIS:                                    c2 1f 00 00 00 06     clfi    %r1, 6
390        .align 16
391        clfi %r1,local_u32-.
392local_u32:
393
394# CHECK: [[L:\..+]]:
395# CHECK: clfi %r1, src-[[L]]                    # encoding: [0xc2,0x1f,A,A,A,A]
396# CHECK-NEXT:                                   # fixup A - offset: 2, value: src-[[L]], kind: FK_390_U32Imm
397# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_PC32 src 0x2
398        .align 16
399        clfi %r1,src-.
400
401##S32
402# CHECK: lgfi %r1, src                          # encoding: [0xc0,0x11,A,A,A,A]
403# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_S32Imm
404# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_32 src 0x0
405        .align 16
406        lgfi %r1,src
407
408# CHECK: [[L:\..+]]:
409# CHECK: lgfi %r1, local_s32-[[L]]              # encoding: [0xc0,0x11,A,A,A,A]
410# CHECK-NEXT:                                   # fixup A - offset: 2, value: local_s32-[[L]], kind: FK_390_S32Imm
411# CHECK-DIS:                                    c0 11 00 00 00 06     lgfi    %r1, 6
412        .align 16
413        lgfi %r1,local_s32-.
414local_s32:
415
416# CHECK: [[L:\..+]]:
417# CHECK: lgfi %r1, src-[[L]]                    # encoding: [0xc0,0x11,A,A,A,A]
418# CHECK-NEXT:                                   # fixup A - offset: 2, value: src-[[L]], kind: FK_390_S32Imm
419# CHECK-REL:                                    0x{{[0-9A-F]+}} R_390_PC32 src 0x2
420        .align 16
421        lgfi %r1,src-.
422
423# Data relocs
424# llvm-mc does not show any "encoding" string for data, so we just check the relocs
425
426# CHECK-REL: .rela.data
427	.data
428
429# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LE64 target 0x0
430	.align 16
431	.quad target@ntpoff
432
433# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LDO64 target 0x0
434	.align 16
435	.quad target@dtpoff
436
437# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LDM64 target 0x0
438	.align 16
439	.quad target@tlsldm
440
441# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_GD64 target 0x0
442	.align 16
443	.quad target@tlsgd
444
445# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LE32 target 0x0
446	.align 16
447	.long target@ntpoff
448
449# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LDO32 target 0x0
450	.align 16
451	.long target@dtpoff
452
453# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LDM32 target 0x0
454	.align 16
455	.long target@tlsldm
456
457# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_GD32 target 0x0
458	.align 16
459	.long target@tlsgd
460
461