reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    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
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
# 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