llvm-project/llvm/test/MC/X86/align-branch-64.s

111 lines
1.8 KiB
ArmAsm

# RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu --x86-align-branch-boundary=32 --x86-align-branch=call+jmp+indirect+ret+jcc %s | llvm-objdump -d --no-show-raw-insn - | FileCheck %s
# These tests are checking the basic cases for each instructions, and a
# bit of the alignment checking logic itself. Fused instruction cases are
# excluded, as are details of argument parsing.
# instruction sizes for reference:
# callq is 5 bytes long
# int3 is 1 byte
# jmp <near-label> is 2 bytes
# jmp <far-label> is 5 bytes
# ret N is 2 bytes
# Next couple tests are checking the edge cases on the alignment computation
.text
# CHECK: test1:
# CHECK: 20: callq
.globl test1
.p2align 5
test1:
.rept 29
int3
.endr
callq bar
# CHECK: test2:
# CHECK: 60: callq
.globl test2
.p2align 5
test2:
.rept 31
int3
.endr
callq bar
# CHECK: test3:
# CHECK: a0: callq
.globl test3
.p2align 5
test3:
.rept 27
int3
.endr
callq bar
# next couple check instruction type coverage
# CHECK: test_jmp:
# CHECK: e0: jmp
.globl test_jmp
.p2align 5
test_jmp:
.rept 31
int3
.endr
jmp bar
# CHECK: test_ret:
# CHECK: 120: retq
.globl test_ret
.p2align 5
test_ret:
.rept 31
int3
.endr
retq $0
# check a case with a relaxable instruction
# CHECK: test_jmp_far:
# CHECK: 160: jmp
.globl test_jmp_far
.p2align 5
test_jmp_far:
.rept 31
int3
.endr
jmp baz
# CHECK: test_jcc:
# CHECK: 1a0: jne
.globl test_jcc
.p2align 5
test_jcc:
.rept 31
int3
.endr
jne bar
# CHECK: test_indirect:
# CHECK: 1e0: jmp
.globl test_indirect
.p2align 5
test_indirect:
.rept 31
int3
.endr
jmpq *(%rax)
.p2align 4
.type bar,@function
bar:
retq
.section "unknown"
.p2align 4
.type baz,@function
baz:
retq