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