summaryrefslogtreecommitdiffstats
path: root/llvm/test/MC/X86/align-branch-64.s
blob: 2f521abc0c01a65e10c64fb1161e1e37e86f3f34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
  # RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=call+jmp+indirect+ret+jcc %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s

  # These tests are checking the basic cases for each instructions, and a
  # bit of the alignment checking logic itself.  Fused instruction cases are
  # excluded, as are details of argument parsing.

  # instruction sizes for reference:
  #  callq is 5 bytes long
  #  int3 is 1 byte
  #  jmp <near-label> is 2 bytes
  #  jmp <far-label> is 5 bytes
  #  ret N is 2 bytes

  # Next couple tests are checking the edge cases on the alignment computation

  .text
  # CHECK: test1:
  # CHECK: 20: callq
  .globl  test1
  .p2align  5
test1:
  .rept 29
  int3
  .endr
  callq bar

  # CHECK: test2:
  # CHECK: 60: callq
  .globl  test2
  .p2align  5
test2:
  .rept 31
  int3
  .endr
  callq bar

  # CHECK: test3:
  # CHECK: a0: callq
  .globl  test3
  .p2align  5
test3:
  .rept 27
  int3
  .endr
  callq bar

  # next couple check instruction type coverage

  # CHECK: test_jmp:
  # CHECK: e0: jmp
  .globl  test_jmp
  .p2align  5
test_jmp:
  .rept 31
  int3
  .endr
  jmp bar

  # CHECK: test_ret:
  # CHECK: 120: retq
  .globl  test_ret
  .p2align  5
test_ret:
  .rept 31
  int3
  .endr
  retq $0

  # check a case with a relaxable instruction

  # CHECK: test_jmp_far:
  # CHECK: 160: jmp
  .globl  test_jmp_far
  .p2align  5
test_jmp_far:
  .rept 31
  int3
  .endr
  jmp baz

  # CHECK: test_jcc:
  # CHECK: 1a0: jne
  .globl  test_jcc
  .p2align  5
test_jcc:
  .rept 31
  int3
  .endr
  jne bar

  # CHECK: test_indirect:
  # CHECK: 1e0: jmp
  .globl  test_indirect
  .p2align  5
test_indirect:
  .rept 31
  int3
  .endr
  jmpq *(%rax)

  .p2align 4
  .type   bar,@function
bar:
  retq

  .section "unknown"
  .p2align 4
  .type   baz,@function
baz:
  retq
OpenPOWER on IntegriCloud