align-branch-system.s
1.25 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
# 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
# Exercise cases where we're enabling interrupts with one instruction delay
# and thus can't add a nop in between without changing behavior.
.text
# CHECK: 1e: sti
# CHECK: 1f: jmp
.p2align 5
.rept 30
int3
.endr
sti
jmp baz
# CHECK: 5c: movq %rax, %ss
# CHECK: 5f: jmp
.p2align 5
.rept 28
int3
.endr
movq %rax, %ss
jmp baz
# CHECK: 9d: movl %esi, %ss
# CHECK: 9f: jmp
.p2align 5
.rept 29
int3
.endr
movl %esi, %ss
jmp baz
# movw and movl are interchangeable since we're only using the low 16 bits.
# Both are generated as "MOV Sreg,r/m16**" (8E /r), but disassembled as movl
# CHECK: dd: movl %esi, %ss
# CHECK: df: jmp
.p2align 5
.rept 29
int3
.endr
movw %si, %ss
jmp baz
# CHECK: 11b: movw (%esi), %ss
# CHECK: 11e: jmp
.p2align 5
.rept 27
int3
.endr
movw (%esi), %ss
jmp baz
# CHECK: 15b: movw (%rsi), %ss
# CHECK: 15d: jmp
.p2align 5
.rept 27
int3
.endr
movw (%rsi), %ss
jmp baz
int3
.section ".text.other"
bar:
retq