| # 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 |
| # RUN: llvm-mc -triple=i686-nacl -filetype=obj -mc-relax-all %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 |