xref: /llvm-project/llvm/test/MC/X86/align-branch-variant-symbol.s (revision 8a71284cb9463a90fab0d9e8edbeb5d879531e32)
1# RUN: llvm-mc -filetype=obj -triple x86_64 --x86-align-branch-boundary=32 --x86-align-branch=call+indirect %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=CHECK,X64
2# RUN: llvm-mc -filetype=obj -triple i386 --x86-align-branch-boundary=32 --x86-align-branch=call+indirect %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=CHECK,X86
3
4  # Exercise cases where the instruction to be aligned has a variant symbol
5  # operand, and we can't add before it since linker may rewrite it.
6
7  .text
8  .global foo
9
10foo:
11  .p2align  5
12  .rept 30
13  int3
14  .endr
15  # CHECK:    1d:          int3
16  # X64:    1e:          callq
17  # X86:    1e:          calll
18  # CHECK:    23:          int3
19  call    ___tls_get_addr@PLT
20  int3
21
22  .p2align  5
23  .rept 30
24  int3
25  .endr
26  # CHECK:    5d:          int3
27  # X64:    5e:          callq    *(%ecx)
28  # X64:    65:          int3
29  # X86:    5e:          calll    *(%ecx)
30  # X86:    64:          int3
31  call *___tls_get_addr@GOT(%ecx)
32  int3
33
34  .p2align  5
35  .rept 30
36  int3
37  .endr
38  # CHECK:    9d:          int3
39  # X64:    9e:          callq    *(%eax)
40  # X64:    a1:          int3
41  # X86:    9e:          calll    *(%eax)
42  # X86:    a0:          int3
43  call *foo@tlscall(%eax)
44  int3
45
46  .p2align  5
47  .rept 30
48  int3
49  .endr
50  # CHECK:    dd:          int3
51  # X64:    de:          jmpq    *(%eax)
52  # X64:    e1:          int3
53  # X86:    de:          jmpl    *(%eax)
54  # X86:    e0:          int3
55  jmp  *foo@tlscall(%eax)
56  int3
57