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