1# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \ 2# RUN: | llvm-objdump -disassemble -no-show-raw-insn - | FileCheck %s 3 4# Test simple NOP insertion for single instructions. 5 6 .text 7foo: 8 # Will be bundle-aligning to 16 byte boundaries 9 .bundle_align_mode 4 10 pushq %rbp 11 pushq %r14 12 pushq %rbx 13 14 movl %edi, %ebx 15 callq bar 16 movl %eax, %r14d 17 18 imull $17, %ebx, %ebp 19# This imull is 3 bytes long and should have started at 0xe, so two bytes 20# of nop padding are inserted instead and it starts at 0x10 21# CHECK: nop 22# CHECK-NEXT: 10: imull 23 24 movl %ebx, %edi 25 callq bar 26 cmpl %r14d, %ebp 27 jle .L_ELSE 28# Due to the padding that's inserted before the addl, the jump target 29# becomes farther by one byte. 30# CHECK: jle 5 31 32 addl %ebp, %eax 33# CHECK: nop 34# CHECK-NEXT: 20: addl 35 36 jmp .L_RET 37.L_ELSE: 38 imull %ebx, %eax 39.L_RET: 40 ret 41 42# Just sanity checking that data fills don't drive bundling crazy 43 .data 44 .byte 40 45 .byte 98 46 47 48