forked from OSchip/llvm-project
53 lines
944 B
ArmAsm
53 lines
944 B
ArmAsm
# Test case with a simple PIC-style jump table where the register containing
|
|
# the jump table address is defined outside of the basic block containing the
|
|
# jump on register.
|
|
#
|
|
# One of the destinations of the jump table points past the end of the function
|
|
# similar to the code generated for __builtin_unreachable().
|
|
|
|
.text
|
|
.globl main
|
|
.type main, @function
|
|
main:
|
|
.cfi_startproc
|
|
pushq %rbx
|
|
.cfi_def_cfa_offset 16
|
|
.cfi_offset 3, -16
|
|
leaq .LJUMPTABLE(%rip), %rcx
|
|
.L13:
|
|
cmpl $3, %edi
|
|
ja .L2
|
|
|
|
movslq (%rcx,%rdi,4), %rax
|
|
addq %rcx, %rax
|
|
jmp *%rax
|
|
|
|
.L12:
|
|
movq %rdi, %rax
|
|
popq %rbx
|
|
.cfi_remember_state
|
|
.cfi_def_cfa_offset 8
|
|
ret
|
|
|
|
.L5:
|
|
.cfi_restore_state
|
|
addq $9, %rdi
|
|
jmp .L12
|
|
.L6:
|
|
addq $8, %rdi
|
|
jmp .L12
|
|
.L2:
|
|
addq $2, %rdi
|
|
jmp .L12
|
|
.LUNREACHABLE:
|
|
.cfi_endproc
|
|
.size main, .-main
|
|
|
|
.section .rodata
|
|
.align 4
|
|
.LJUMPTABLE:
|
|
.long .L2-.LJUMPTABLE
|
|
.long .L6-.LJUMPTABLE
|
|
.long .L5-.LJUMPTABLE
|
|
.long .LUNREACHABLE-.LJUMPTABLE
|