# RUN: llvm-mc -mcpu=skylake -filetype=obj -triple x86_64-pc-linux-gnu %s -x86-pad-max-prefix-size=1 --x86-align-branch-boundary=32 --x86-align-branch=jmp+indirect | llvm-objdump -d - | FileCheck %s # RUN: llvm-mc -mcpu=skylake -filetype=obj -triple x86_64-pc-linux-gnu %s --mc-relax-all | llvm-objdump -d - | FileCheck --check-prefixes=RELAX-ALL %s # Exercise cases where we are allowed to increase the length of unrelaxable # instructions (by adding prefixes) for alignment purposes. # The first test checks instructions 'int3', 'push %rbp', which will be padded # later are unrelaxable (their encoding size is still 1 byte when # --mc-relax-all is passed). .text .globl labeled_unrelaxable_test labeled_unrelaxable_test: # RELAX-ALL: 0: cc int3 # RELAX-ALL: 1: 54 pushq %rsp int3 push %rsp # The second test is a basic test, we just check the jmp is aligned by prefix # padding the previous instructions. .text .globl labeled_basic_test labeled_basic_test: .p2align 5 .rept 28 int3 .endr # CHECK: 3c: 2e cc int3 # CHECK: 3e: 2e 54 pushq %rsp # CHECK: 40: eb 00 jmp int3 push %rsp jmp foo foo: ret # The third test check the correctness cornercase - can't add prefixes on a # prefix or a instruction following by a prefix. .globl labeled_prefix_test labeled_prefix_test: .p2align 5 .rept 28 int3 .endr # CHECK: 7c: 2e cc int3 int3 # CHECK: 7e: 3e cc int3 DS int3 # CHECK: 80: eb 00 jmp jmp bar bar: ret