# RUN: llvm-mc -triple=i686-linux -filetype=obj %s -o - | \ # RUN: llvm-objdump -disassemble -no-show-raw-insn -r - | FileCheck %s # RUN: llvm-mc -triple=i686-nacl -filetype=obj %s -o - | \ # RUN: llvm-objdump -disassemble -no-show-raw-insn -r - | FileCheck %s .bundle_align_mode 5 .text .globl main .align 32, 0x90 .type main,@function main: # @main # CHECK-LABEL: main: # Call + pop sequence for determining the PIC base. .bundle_lock align_to_end calll .L0$pb .bundle_unlock .L0$pb: popl %eax # CHECK: 20: popl # 26 bytes of instructions between the pop and the use of the pic base symbol. movl $3, 2(%ebx, %ebx) movl $3, 2(%ebx, %ebx) movl $3, 2(%ebx, %ebx) hlt hlt # CHECK: nop .Ltmp0: addl (.Ltmp0-.L0$pb), %eax # The addl has bundle padding to push it from 0x3b to 0x40. # The difference between the labels should be 0x20 (0x40-0x20) not 0x1b # (0x3b-0x20) # CHECK: 40: addl 32, %eax popl %ecx jmp *%ecx # Also make sure it works with a non-relaxable instruction (cmp vs add) # and for 2 adjacent labels that both point to the correct instruction .section .text.bar, "ax" .globl bar .align 32, 0x90 .type bar,@function bar: # CHECK-LABEL: bar: .bundle_lock align_to_end calll .L1$pb .bundle_unlock .L1$pb: popl %eax # CHECK: 20: popl # 26 bytes of instructions between the pop and the use of the pic base symbol. movl $3, 2(%ebx, %ebx) movl $3, 2(%ebx, %ebx) movl $3, 2(%ebx, %ebx) hlt hlt # CHECK: nop .Ltmp1: .Ltmp2: cmpl %eax, .Ltmp1 # CHECK: 40: cmpl %eax, 64 cmpl %eax, (.Ltmp2-.L1$pb) # CHECK: 46: cmpl %eax, 32 popl %ecx jmp *%ecx # Switch sections in the middle of a function .section .text.foo, "ax" .globl foo .align 32, 0x90 .type foo,@function # CHECK-LABEL: foo: foo: inc %eax tmp3: .rodata .type obj,@object .comm obj,4,4 .section .text.foo inc %eax # CHECK: tmp3: # CHECK-NEXT: 1: incl