align-branch-single.s
2.56 KB
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
# RUN: llvm-mc -filetype=obj -triple x86_64 --x86-align-branch-boundary=32 --x86-align-branch=jcc %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=JCC
# RUN: llvm-mc -filetype=obj -triple x86_64 --x86-align-branch-boundary=32 --x86-align-branch=jmp %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=JMP
# RUN: llvm-mc -filetype=obj -triple x86_64 --x86-align-branch-boundary=32 --x86-align-branch=indirect %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=IND
# RUN: llvm-mc -filetype=obj -triple x86_64 --x86-align-branch-boundary=32 --x86-align-branch=call %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=CAL
# RUN: llvm-mc -filetype=obj -triple x86_64 --x86-align-branch-boundary=32 --x86-align-branch=ret %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s --check-prefixes=RET
# Exercise cases where only one kind of instruction is asked to be aligned.
# Fused instruction cases are excluded.
.text
.globl foo
.p2align 5
foo:
.p2align 5
.rept 30
int3
.endr
# JCC: 20: jne
# JMP: 1e: jne
# IND: 1e: jne
# CAL: 1e: jne
# RET: 1e: jne
jne foo
int3
.p2align 5
.rept 30
int3
.endr
# JCC: 5e: jmp
# JMP: 60: jmp
# IND: 5e: jmp
# CAL: 5e: jmp
# RET: 5e: jmp
jmp foo
int3
.p2align 5
.rept 30
int3
.endr
# JCC: 9e: jmpq *%rax
# JMP: 9e: jmpq *%rax
# IND: a0: jmpq *%rax
# CAL: 9e: jmpq *%rax
# RET: 9e: jmpq *%rax
jmp *%rax
int3
.p2align 5
.rept 30
int3
.endr
# JCC: de: callq *%rax
# JMP: de: callq *%rax
# IND: de: callq *%rax
# CAL: e0: callq *%rax
# RET: de: callq *%rax
call *%rax
int3
.p2align 5
.rept 30
int3
.endr
# JCC: 11e: retq
# JMP: 11e: retq
# IND: 11e: retq
# CAL: 11e: retq
# RET: 120: retq
ret $0
int3
.p2align 5
.rept 29
int3
.endr
# JCC: 15d: cmpq %rax, %rbp
# JCC: 160: je
# JMP: 15d: cmpq %rax, %rbp
# JMP: 160: je
# IND: 15d: cmpq %rax, %rbp
# IND: 160: je
# CAL: 15d: cmpq %rax, %rbp
# CAL: 160: je
# RET: 15d: cmpq %rax, %rbp
# RET: 160: je
cmp %rax, %rbp
je foo
int3