| # RUN: llvm-mc -filetype=obj -triple x86_64 --x86-align-branch-boundary=32 --x86-align-branch=jcc+jmp+indirect+call+ret %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s |
| |
| # Exercise cases where mixed kinds of branch are asked to be aligned. |
| |
| .text |
| .globl labeled_mixed_test1 |
| labeled_mixed_test1: |
| .p2align 5 |
| .rept 30 |
| int3 |
| .endr |
| # This call should have started at 0x1e and ends at 0x23, so two bytes of |
| # padding are inserted before it. |
| # CHECK: 20: callq |
| call bar |
| .rept 28 |
| int3 |
| .endr |
| # If the previous call was not aligned, this jmp should have started at 0x3f |
| # and need two bytes of padding. After the two bytes of padding are inserted |
| # for the call, this jmp starts at 0xa1 and does not need padding. |
| # CHECK: 41: jmp |
| jmp *%rax |
| |
| .globl labeled_mixed_test2 |
| labeled_mixed_test2: |
| .p2align 5 |
| .rept 30 |
| int3 |
| .endr |
| # This jne should have started at 0x7e, so two bytes of padding are inserted |
| # before it. |
| # CHECK: 80: jne |
| jne bar |
| .rept 28 |
| int3 |
| .endr |
| # If the previous jne was not aligned, this jmp should have started at 0x3c. |
| # After the two bytes of padding are inserted for the jne, this jmp should |
| # have started at 0x9e, so two bytes of padding are inserted and it starts at |
| # 0xa0. |
| # CHECK: a0: jmp |
| jmp bar |
| |
| .globl labeled_mixed_test3 |
| labeled_mixed_test3: |
| .p2align 5 |
| .type bar,@function |
| bar: |
| # CHECK: c0: retq |
| retq |