1# RUN: llvm-mc -triple=i686-linux -filetype=obj %s -o - | \
2# RUN: llvm-objdump -disassemble -no-show-raw-insn -r - | FileCheck %s
3# RUN: llvm-mc -triple=i686-nacl -filetype=obj %s -o - | \
4# RUN: llvm-objdump -disassemble -no-show-raw-insn -r - | FileCheck %s
5
6        .bundle_align_mode 5
7        .text
8        .globl  main
9        .align  32, 0x90
10        .type   main,@function
11main:                                   # @main
12# CHECK-LABEL: main:
13# Call + pop sequence for determining the PIC base.
14        .bundle_lock align_to_end
15        calll   .L0$pb
16        .bundle_unlock
17.L0$pb:
18        popl    %eax
19# CHECK: 20: popl
20# 26 bytes of instructions between the pop and the use of the pic base symbol.
21        movl    $3, 2(%ebx, %ebx)
22        movl    $3, 2(%ebx, %ebx)
23        movl    $3, 2(%ebx, %ebx)
24        hlt
25        hlt
26# CHECK: nop
27.Ltmp0:
28        addl    (.Ltmp0-.L0$pb), %eax
29# The addl has bundle padding to push it from 0x3b to 0x40.
30# The difference between the labels should be 0x20 (0x40-0x20) not 0x1b
31# (0x3b-0x20)
32# CHECK: 40: addl 32, %eax
33        popl    %ecx
34        jmp     *%ecx
35
36
37# Also make sure it works with a non-relaxable instruction (cmp vs add)
38# and for 2 adjacent labels that both point to the correct instruction
39        .section .text.bar, "ax"
40        .globl  bar
41        .align  32, 0x90
42        .type   bar,@function
43bar:
44# CHECK-LABEL: bar:
45        .bundle_lock align_to_end
46        calll   .L1$pb
47        .bundle_unlock
48.L1$pb:
49        popl %eax
50# CHECK: 20: popl
51# 26 bytes of instructions between the pop and the use of the pic base symbol.
52        movl    $3, 2(%ebx, %ebx)
53        movl    $3, 2(%ebx, %ebx)
54        movl    $3, 2(%ebx, %ebx)
55        hlt
56        hlt
57# CHECK: nop
58.Ltmp1:
59.Ltmp2:
60        cmpl    %eax, .Ltmp1
61# CHECK: 40: cmpl %eax, 64
62        cmpl     %eax, (.Ltmp2-.L1$pb)
63# CHECK: 46: cmpl %eax, 32
64        popl    %ecx
65        jmp *%ecx
66
67
68# Switch sections in the middle of a function
69        .section .text.foo, "ax"
70        .globl  foo
71        .align  32, 0x90
72        .type   foo,@function
73# CHECK-LABEL: foo:
74foo:
75        inc %eax
76tmp3:
77        .rodata
78        .type   obj,@object
79        .comm   obj,4,4
80        .section .text.foo
81        inc %eax
82# CHECK: tmp3:
83# CHECK-NEXT: 1: incl
84