1# REQUIRES: aarch64 2 3# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %s -o %t.o 4# RUN: %lld -arch arm64 %t.o -o %t 5# RUN: llvm-objdump -d --macho %t | FileCheck %s 6 7# CHECK-LABEL: _main: 8## Out of range, before 9# CHECK-NEXT: adrp x0 10# CHECK-NEXT: add x0, x0 11## In range, before 12# CHECK-NEXT: adr x1 13# CHECK-NEXT: nop 14## Registers don't match (invalid input) 15# CHECK-NEXT: adrp x2 16# CHECK-NEXT: add x0 17## Not an adrp instruction (invalid input) 18# CHECK-NEXT: nop 19# CHECK-NEXT: add x4 20## In range, after 21# CHECK-NEXT: adr x5 22# CHECK-NEXT: nop 23## In range, add's destination register is not the same as its source 24# CHECK-NEXT: adr x7 25# CHECK-NEXT: nop 26## Valid, non-adjacent instructions - start 27# CHECK-NEXT: adr x8 28## Out of range, after 29# CHECK-NEXT: adrp x9 30# CHECK-NEXT: add x9, x9 31## Valid, non-adjacent instructions - end 32# CHECK-NEXT: nop 33 34.text 35.align 2 36_before_far: 37 .space 1048576 38 39_before_near: 40 nop 41 42.globl _main 43_main: 44L1: 45 adrp x0, _before_far@PAGE 46L2: 47 add x0, x0, _before_far@PAGEOFF 48L3: 49 adrp x1, _before_near@PAGE 50L4: 51 add x1, x1, _before_near@PAGEOFF 52L5: 53 adrp x2, _before_near@PAGE 54L6: 55 add x0, x0, _before_near@PAGEOFF 56L9: 57 nop 58L10: 59 add x4, x4, _after_near@PAGEOFF 60L11: 61 adrp x5, _after_near@PAGE 62L12: 63 add x5, x5, _after_near@PAGEOFF 64L13: 65 adrp x6, _after_near@PAGE 66L14: 67 add x7, x6, _after_near@PAGEOFF 68L15: 69 adrp x8, _after_near@PAGE 70L16: 71 adrp x9, _after_far@PAGE 72L17: 73 add x9, x9, _after_far@PAGEOFF 74L18: 75 add x8, x8, _after_near@PAGEOFF 76 77_after_near: 78 .space 1048576 79 80_after_far: 81 nop 82 83.loh AdrpAdd L1, L2 84.loh AdrpAdd L3, L4 85.loh AdrpAdd L5, L6 86.loh AdrpAdd L9, L10 87.loh AdrpAdd L11, L12 88.loh AdrpAdd L13, L14 89.loh AdrpAdd L15, L18 90.loh AdrpAdd L16, L17 91