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# CHECK: larl %r14, target                      # encoding: [0xc0,0xe0,A,A,A,A]
8# CHECK-NEXT:                                   # fixup A - offset: 2, value: target+2, kind: FK_390_PC32DBL
9# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PC32DBL target 0x2
10	.align 16
11	larl %r14, target
12
13# CHECK: larl %r14, target@GOT                  # encoding: [0xc0,0xe0,A,A,A,A]
14# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@GOT+2, kind: FK_390_PC32DBL
15# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_GOTENT target 0x2
16	.align 16
17	larl %r14, target@got
18
19# CHECK: larl %r14, target@INDNTPOFF            # encoding: [0xc0,0xe0,A,A,A,A]
20# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@INDNTPOFF+2, kind: FK_390_PC32DBL
21# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_TLS_IEENT target 0x2
22	.align 16
23	larl %r14, target@indntpoff
24
25# CHECK: brasl %r14, target                     # encoding: [0xc0,0xe5,A,A,A,A]
26# CHECK-NEXT:                                   # fixup A - offset: 2, value: target+2, kind: FK_390_PC32DBL
27# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PC32DBL target 0x2
28	.align 16
29	brasl %r14, target
30
31# CHECK: brasl %r14, target@PLT                 # encoding: [0xc0,0xe5,A,A,A,A]
32# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC32DBL
33# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT32DBL target 0x2
34	.align 16
35	brasl %r14, target@plt
36
37# CHECK: brasl %r14, target@PLT:tls_gdcall:sym  # encoding: [0xc0,0xe5,A,A,A,A]
38# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC32DBL
39# CHECK-NEXT:                                   # fixup B - offset: 0, value: sym@TLSGD, kind: FK_390_TLS_CALL
40# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT32DBL target 0x2
41# CHECK-REL:                                    0x{{[0-9A-F]*0}} R_390_TLS_GDCALL sym 0x0
42	.align 16
43	brasl %r14, target@plt:tls_gdcall:sym
44
45# CHECK: brasl %r14, target@PLT:tls_ldcall:sym  # encoding: [0xc0,0xe5,A,A,A,A]
46# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC32DBL
47# CHECK-NEXT:                                   # fixup B - offset: 0, value: sym@TLSLDM, kind: FK_390_TLS_CALL
48# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT32DBL target 0x2
49# CHECK-REL:                                    0x{{[0-9A-F]*0}} R_390_TLS_LDCALL sym 0x0
50	.align 16
51	brasl %r14, target@plt:tls_ldcall:sym
52
53# CHECK: bras %r14, target                      # encoding: [0xa7,0xe5,A,A]
54# CHECK-NEXT:                                   # fixup A - offset: 2, value: target+2, kind: FK_390_PC16DBL
55# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PC16DBL target 0x2
56	.align 16
57	bras %r14, target
58
59# CHECK: bras %r14, target@PLT                  # encoding: [0xa7,0xe5,A,A]
60# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC16DBL
61# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT16DBL target 0x2
62	.align 16
63	bras %r14, target@plt
64
65# CHECK: bras %r14, target@PLT:tls_gdcall:sym   # encoding: [0xa7,0xe5,A,A]
66# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC16DBL
67# CHECK-NEXT:                                   # fixup B - offset: 0, value: sym@TLSGD, kind: FK_390_TLS_CALL
68# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT16DBL target 0x2
69# CHECK-REL:                                    0x{{[0-9A-F]*0}} R_390_TLS_GDCALL sym 0x0
70	.align 16
71	bras %r14, target@plt:tls_gdcall:sym
72
73# CHECK: bras %r14, target@PLT:tls_ldcall:sym   # encoding: [0xa7,0xe5,A,A]
74# CHECK-NEXT:                                   # fixup A - offset: 2, value: target@PLT+2, kind: FK_390_PC16DBL
75# CHECK-NEXT:                                   # fixup B - offset: 0, value: sym@TLSLDM, kind: FK_390_TLS_CALL
76# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_PLT16DBL target 0x2
77# CHECK-REL:                                    0x{{[0-9A-F]*0}} R_390_TLS_LDCALL sym 0x0
78	.align 16
79	bras %r14, target@plt:tls_ldcall:sym
80
81
82# Symbolic displacements
83
84## BD12
85# CHECK: vl %v0, src                            # encoding: [0xe7,0x00,0b0000AAAA,A,0x00,0x06]
86# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
87# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
88        .align 16
89        vl %v0, src
90
91# CHECK: vl %v0, src(%r1)                       # encoding: [0xe7,0x00,0b0001AAAA,A,0x00,0x06]
92# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
93# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
94        .align 16
95        vl %v0, src(%r1)
96
97# CHECK: .insn vrx,253987186016262,%v0,src(%r1),3  # encoding: [0xe7,0x00,0b0001AAAA,A,0x30,0x06]
98# CHECK-NEXT:                                      # fixup A - offset: 2, value: src, kind: FK_390_12
99# CHECK-REL:                                       0x{{[0-9A-F]*2}} R_390_12 src 0x0
100        .align 16
101        .insn vrx,0xe70000000006,%v0,src(%r1),3	   # vl
102
103## BD20
104# CHECK: lmg %r6, %r15, src                     # encoding: [0xeb,0x6f,0b0000AAAA,A,A,0x04]
105# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_20
106# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
107	.align 16
108        lmg %r6, %r15, src
109
110# CHECK: lmg %r6, %r15, src(%r1)                # encoding: [0xeb,0x6f,0b0001AAAA,A,A,0x04]
111# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_20
112# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
113	.align 16
114        lmg %r6, %r15, src(%r1)
115
116# CHECK: .insn siy,258385232527441,src(%r15),240  # encoding: [0xeb,0xf0,0b1111AAAA,A,A,0x51]
117# CHECK-NEXT:                                     # fixup A - offset: 2, value: src, kind: FK_390_20
118# CHECK-REL:                                      0x{{[0-9A-F]*2}} R_390_20 src 0x0
119	.align 16
120        .insn siy,0xeb0000000051,src(%r15),240	  # tmy
121
122## BDX12
123# CHECK: la %r14, src                           # encoding: [0x41,0xe0,0b0000AAAA,A]
124# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
125# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
126        .align 16
127        la %r14, src
128
129# CHECK: la %r14, src(%r1)                      # encoding: [0x41,0xe0,0b0001AAAA,A]
130# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
131# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
132        .align 16
133        la %r14, src(%r1)
134
135# CHECK: la %r14, src(%r1,%r2)                  # encoding: [0x41,0xe1,0b0010AAAA,A]
136# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
137# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
138        .align 16
139        la %r14, src(%r1, %r2)
140
141# CHECK: .insn vrx,253987186016262,%v2,src(%r2,%r3),3  # encoding: [0xe7,0x22,0b0011AAAA,A,0x30,0x06]
142# CHECK-NEXT:	                                       # fixup A - offset: 2, value: src, kind: FK_390_12
143# CHECK-REL:                                           0x{{[0-9A-F]*2}} R_390_12 src 0x0
144        .align 16
145        .insn vrx,0xe70000000006,%v2,src(%r2, %r3),3   # vl
146
147##BDX20
148# CHECK: lg %r14, src                           # encoding: [0xe3,0xe0,0b0000AAAA,A,A,0x04]
149# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_20
150# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
151	.align 16
152	lg %r14, src
153
154# CHECK: lg %r14, src(%r1)                      # encoding: [0xe3,0xe0,0b0001AAAA,A,A,0x04]
155# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_20
156# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
157	.align 16
158	lg %r14, src(%r1)
159
160# CHECK: lg %r14, src(%r1,%r2)                  # encoding: [0xe3,0xe1,0b0010AAAA,A,A,0x04]
161# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_20
162# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_20 src 0x0
163	.align 16
164	lg %r14, src(%r1, %r2)
165
166# CHECK:  .insn rxy,260584255783013,%f1,src(%r2,%r15)  # encoding: [0xed,0x12,0b1111AAAA,A,A,0x65]
167# CHECK-NEXT:                                          # fixup A - offset: 2, value: src, kind: FK_390_20
168# CHECK-REL:                                           0x{{[0-9A-F]*2}} R_390_20 src 0x0
169	.align 16
170	.insn rxy,0xed0000000065,%f1,src(%r2,%r15)     # ldy
171
172##BD12L4
173# CHECK: tp src(16)                             # encoding: [0xeb,0xf0,0b0000AAAA,A,0x00,0xc0]
174# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
175# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
176	.align 16
177        tp src(16)
178
179# CHECK: tp src(16,%r1)                         # encoding: [0xeb,0xf0,0b0001AAAA,A,0x00,0xc0]
180# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
181# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
182	.align 16
183        tp src(16, %r1)
184
185##BD12L8
186#SSa
187# CHECK: mvc dst(1,%r1), src(%r1)               # encoding: [0xd2,0x00,0b0001AAAA,A,0b0001BBBB,B]
188# CHECK-NEXT:                                   # fixup A - offset: 2, value: dst, kind: FK_390_12
189# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_12
190# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 dst 0x0
191# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
192        .align 16
193        mvc dst(1,%r1), src(%r1)
194
195#SSb
196# CHECK: mvo src(16,%r1), src(1,%r2)            # encoding: [0xf1,0xf0,0b0001AAAA,A,0b0010BBBB,B]
197# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
198# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_12
199# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
200# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
201        .align 16
202        mvo src(16,%r1), src(1,%r2)
203
204#SSc
205# CHECK: srp src(1,%r1), src(%r15), 0           # encoding: [0xf0,0x00,0b0001AAAA,A,0b1111BBBB,B]
206# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
207# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_12
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        srp src(1,%r1), src(%r15), 0
212
213##BDR12
214#SSd
215# CHECK: mvck dst(%r2,%r1), src, %r3            # encoding: [0xd9,0x23,0b0001AAAA,A,0b0000BBBB,B]
216# CHECK-NEXT:                                   # fixup A - offset: 2, value: dst, kind: FK_390_12
217# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_12
218# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 dst 0x0
219# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
220        .align 16
221	mvck dst(%r2,%r1), src, %r3
222
223# CHECK: .insn ss,238594023227392,dst(%r2,%r1),src,%r3  # encoding: [0xd9,0x23,0b0001AAAA,A,0b0000BBBB,B]
224# CHECK-NEXT:                                           # fixup A - offset: 2, value: dst, kind: FK_390_12
225# CHECK-NEXT:                                           # fixup B - offset: 4, value: src, kind: FK_390_12
226# CHECK-REL:                                            0x{{[0-9A-F]*2}} R_390_12 dst 0x0
227# CHECK-REL:                                            0x{{[0-9A-F]*4}} R_390_12 src 0x0
228        .align 16
229        .insn ss,0xd90000000000,dst(%r2,%r1),src,%r3	# mvck
230
231#SSe
232# CHECK: lmd %r2, %r4, src1(%r1), src2(%r1)     # encoding: [0xef,0x24,0b0001AAAA,A,0b0001BBBB,B]
233# CHECK-NEXT:                                   # fixup A - offset: 2, value: src1, kind: FK_390_12
234# CHECK-NEXT:                                   # fixup B - offset: 4, value: src2, kind: FK_390_12
235# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src1 0x0
236# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src2 0x0
237        .align 16
238        lmd %r2, %r4, src1(%r1), src2(%r1)
239
240#SSf
241# CHECK: pka dst(%r15), src(256,%r15)           # encoding: [0xe9,0xff,0b1111AAAA,A,0b1111BBBB,B]
242# CHECK-NEXT:                                   # fixup A - offset: 2, value: dst, kind: FK_390_12
243# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_12
244# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 dst 0x0
245# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
246        .align 16
247	pka     dst(%r15), src(256,%r15)
248
249#SSE
250# CHECK: strag dst(%r1), src(%r15)              # encoding: [0xe5,0x02,0b0001AAAA,A,0b1111BBBB,B]
251# CHECK-NEXT:                                   # fixup A - offset: 2, value: dst, kind: FK_390_12
252# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_12
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        strag dst(%r1), src(%r15)
257
258# CHECK: .insn sse,251796752695296,dst(%r1),src(%r15)  # encoding: [0xe5,0x02,0b0001AAAA,A,0b1111BBBB,B]
259# CHECK-NEXT:                                          # fixup A - offset: 2, value: dst, kind: FK_390_12
260# CHECK-NEXT:                                          # fixup B - offset: 4, value: src, kind: FK_390_12
261# CHECK-REL:                                           0x{{[0-9A-F]*2}} R_390_12 dst 0x0
262# CHECK-REL:                                           0x{{[0-9A-F]*4}} R_390_12 src 0x0
263	.align 16
264	.insn sse,0xe50200000000,dst(%r1),src(%r15)    # strag
265
266#SSF
267# CHECK: ectg src, src(%r15), %r2               # encoding: [0xc8,0x21,0b0000AAAA,A,0b1111BBBB,B]
268# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
269# CHECK-NEXT:                                   # fixup B - offset: 4, value: src, kind: FK_390_12
270# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
271# CHECK-REL:                                    0x{{[0-9A-F]*4}} R_390_12 src 0x0
272        .align 16
273        ectg src, src(%r15), %r2
274
275# CHECK: .insn ssf,219906620522496,src,src(%r15),%r2   # encoding: [0xc8,0x21,0b0000AAAA,A,0b1111BBBB,B]
276# CHECK-NEXT:                                          # fixup A - offset: 2, value: src, kind: FK_390_12
277# CHECK-NEXT:                                          # fixup B - offset: 4, value: src, kind: FK_390_12
278# CHECK-REL:                                           0x{{[0-9A-F]*2}} R_390_12 src 0x0
279# CHECK-REL:                                           0x{{[0-9A-F]*4}} R_390_12 src 0x0
280        .align 16
281        .insn ssf,0xc80100000000,src,src(%r15),%r2     # ectg
282
283##BDV12
284# CHECK: vgeg %v0, src(%v0,%r1), 0              # encoding: [0xe7,0x00,0b0001AAAA,A,0x00,0x12]
285# CHECK-NEXT:                                   # fixup A - offset: 2, value: src, kind: FK_390_12
286# CHECK-REL:                                    0x{{[0-9A-F]*2}} R_390_12 src 0x0
287        .align 16
288        vgeg %v0, src(%v0,%r1), 0
289
290## Fixup for second operand only
291# CHECK:  mvc     32(8,%r0), src                # encoding: [0xd2,0x07,0x00,0x20,0b0000AAAA,A]
292# CHECK-NEXT:                                   # fixup A - offset: 4, value: src, kind: FK_390_12
293        .align 16
294        mvc     32(8,%r0),src
295
296# Data relocs
297# llvm-mc does not show any "encoding" string for data, so we just check the relocs
298
299# CHECK-REL: .rela.data
300	.data
301
302# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LE64 target 0x0
303	.align 16
304	.quad target@ntpoff
305
306# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LDO64 target 0x0
307	.align 16
308	.quad target@dtpoff
309
310# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LDM64 target 0x0
311	.align 16
312	.quad target@tlsldm
313
314# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_GD64 target 0x0
315	.align 16
316	.quad target@tlsgd
317
318# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LE32 target 0x0
319	.align 16
320	.long target@ntpoff
321
322# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LDO32 target 0x0
323	.align 16
324	.long target@dtpoff
325
326# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_LDM32 target 0x0
327	.align 16
328	.long target@tlsldm
329
330# CHECK-REL: 0x{{[0-9A-F]*0}} R_390_TLS_GD32 target 0x0
331	.align 16
332	.long target@tlsgd
333
334