116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - \ 216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# RUN: | llvm-objdump -disassemble -no-show-raw-insn - | FileCheck %s 316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# Test simple NOP insertion for single instructions. 516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky .text 716996c4940ad4248dc2a874d060b30e94e55b672Eli Benderskyfoo: 816996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky # Will be bundle-aligning to 16 byte boundaries 916996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky .bundle_align_mode 4 1016996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky pushq %rbp 1116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky pushq %r14 1216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky pushq %rbx 1316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 1416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky movl %edi, %ebx 1516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky callq bar 1616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky movl %eax, %r14d 1716996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 1816996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky imull $17, %ebx, %ebp 1916996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# This imull is 3 bytes long and should have started at 0xe, so two bytes 2016996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# of nop padding are inserted instead and it starts at 0x10 2116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK: nop 2216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK-NEXT: 10: imull 2316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 2416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky movl %ebx, %edi 2516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky callq bar 2616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky cmpl %r14d, %ebp 2716996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky jle .L_ELSE 2816996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# Due to the padding that's inserted before the addl, the jump target 2916996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# becomes farther by one byte. 3016996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK: jle 5 3116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 3216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky addl %ebp, %eax 3316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK: nop 3416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# CHECK-NEXT: 20: addl 3516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 3616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky jmp .L_RET 3716996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky.L_ELSE: 3816996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky imull %ebx, %eax 3916996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky.L_RET: 4016996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky ret 4116996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 4216996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky# Just sanity checking that data fills don't drive bundling crazy 4316996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky .data 4416996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky .byte 40 4516996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky .byte 98 4616996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 4716996c4940ad4248dc2a874d060b30e94e55b672Eli Bendersky 48