60 lines
1.4 KiB
ArmAsm
60 lines
1.4 KiB
ArmAsm
|
// RUN: llvm-mc < %s -triple=aarch64-none-linux-gnu -filetype=obj | llvm-readobj -r - | FileCheck %s
|
||
|
|
||
|
.file "<stdin>"
|
||
|
.text
|
||
|
.globl test_jumptable
|
||
|
.type test_jumptable,@function
|
||
|
test_jumptable: // @test_jumptable
|
||
|
.cfi_startproc
|
||
|
// %bb.0:
|
||
|
ubfx w1, w0, #0, #32
|
||
|
cmp w0, #4
|
||
|
b.hi .LBB0_3
|
||
|
// %bb.1:
|
||
|
adrp x0, .LJTI0_0
|
||
|
add x0, x0, #:lo12:.LJTI0_0
|
||
|
ldr x0, [x0, x1, lsl #3]
|
||
|
br x0
|
||
|
.LBB0_2: // %lbl1
|
||
|
movz x0, #1
|
||
|
ret
|
||
|
.LBB0_3: // %def
|
||
|
mov x0, xzr
|
||
|
ret
|
||
|
.LBB0_4: // %lbl2
|
||
|
movz x0, #2
|
||
|
ret
|
||
|
.LBB0_5: // %lbl3
|
||
|
movz x0, #4
|
||
|
ret
|
||
|
.LBB0_6: // %lbl4
|
||
|
movz x0, #8
|
||
|
ret
|
||
|
.Ltmp0:
|
||
|
.size test_jumptable, .Ltmp0-test_jumptable
|
||
|
.cfi_endproc
|
||
|
.section .rodata,"a",@progbits
|
||
|
.align 3
|
||
|
.LJTI0_0:
|
||
|
.xword .LBB0_2
|
||
|
.xword .LBB0_4
|
||
|
.xword .LBB0_5
|
||
|
.xword .LBB0_3
|
||
|
.xword .LBB0_6
|
||
|
|
||
|
|
||
|
|
||
|
// First make sure we get a page/lo12 pair in .text to pick up the jump-table
|
||
|
|
||
|
// CHECK: Relocations [
|
||
|
// CHECK: Section ({{[0-9]+}}) .rela.text {
|
||
|
// CHECK-NEXT: 0x{{[0-9,A-F]+}} R_AARCH64_ADR_PREL_PG_HI21 .rodata
|
||
|
// CHECK-NEXT: 0x{{[0-9,A-F]+}} R_AARCH64_ADD_ABS_LO12_NC .rodata
|
||
|
// CHECK: }
|
||
|
|
||
|
// Also check the targets in .rodata are relocated
|
||
|
// CHECK: Section ({{[0-9]+}}) .rela.rodata {
|
||
|
// CHECK-NEXT: 0x{{[0-9,A-F]+}} R_AARCH64_ABS64 .text
|
||
|
// CHECK: }
|
||
|
// CHECK: ]
|