# REQUIRES: aarch64 # RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %s -o %t.o # RUN: %lld -arch arm64 %t.o -o %t # RUN: llvm-objdump --no-print-imm-hex -d --macho %t | FileCheck %s .text .align 2 _before_far: .space 1048576 .align 2 _before_near: .quad 0 .globl _main # CHECK-LABEL: _main: _main: ## Out of range, before L1: adrp x0, _before_far@PAGE L2: ldr x0, [x0, _before_far@PAGEOFF] # CHECK-NEXT: adrp x0 # CHECK-NEXT: ldr x0 ## In range, before L3: adrp x1, _before_near@PAGE L4: ldr x1, [x1, _before_near@PAGEOFF] # CHECK-NEXT: nop # CHECK-NEXT: ldr x1, #-20 ## Registers don't match (invalid input) L5: adrp x2, _before_near@PAGE L6: ldr x3, [x3, _before_near@PAGEOFF] # CHECK-NEXT: adrp x2 # CHECK-NEXT: ldr x3 ## Not an adrp instruction L9: udf 0 L10: ldr x5, [x5, _after_near@PAGEOFF] # CHECK-NEXT: udf # CHECK-NEXT: ldr x5 ## Not an ldr with an immediate offset L11: adrp x6, _after_near@PAGE L12: ldr x6, 0 # CHECK-NEXT: adrp x6 # CHECK-NEXT: ldr x6, #0 ## Byte load, unsupported L15: adrp x8, _after_near@PAGE L16: ldr b8, [x8, _after_near@PAGEOFF] # CHECK-NEXT: adrp x8 # CHECK-NEXT: ldr b8 ## Halfword load, unsupported L17: adrp x9, _after_near@PAGE L18: ldr h9, [x9, _after_near@PAGEOFF] # CHECK-NEXT: adrp x9 # CHECK-NEXT: ldr h9 ## Word load L19: adrp x10, _after_near@PAGE L20: ldr w10, [x10, _after_near@PAGEOFF] # CHECK-NEXT: nop # CHECK-NEXT: ldr w10, _after_near ## With addend L21: adrp x11, _after_near@PAGE + 8 L22: ldr x11, [x11, _after_near@PAGEOFF + 8] # CHECK-NEXT: nop # CHECK-NEXT: ldr x11 ## Signed 32-bit read from 16-bit value, unsupported L23: adrp x12, _after_near@PAGE L24: ldrsb w12, [x12, _after_near@PAGEOFF] # CHECK-NEXT: adrp x12 # CHECK-NEXT: ldrsb w12 ## 64-bit load from signed 32-bit value L25: adrp x13, _after_near@PAGE L26: ldrsw x13, [x13, _after_near@PAGEOFF] # CHECK-NEXT: nop # CHECK-NEXT: ldrsw x13, _after_near ## Single precision FP read L27: adrp x14, _after_near@PAGE L28: ldr s0, [x14, _after_near@PAGEOFF] # CHECK-NEXT: nop # CHECK-NEXT: ldr s0, _after_near ## Double precision FP read L29: adrp x15, _after_near@PAGE L30: ldr d0, [x15, _after_near@PAGEOFF] # CHECK-NEXT: nop # CHECK-NEXT: ldr d0, _after_near ## Quad precision FP read L31: adrp x16, _after_near@PAGE L32: ldr q0, [x16, _after_near@PAGEOFF] # CHECK-NEXT: nop # CHECK-NEXT: ldr q0, _after_near ## Out of range, after L33: adrp x17, _after_far@PAGE L34: ldr x17, [x17, _after_far@PAGEOFF] # CHECK-NEXT: adrp x17 # CHECK-NEXT: ldr x17 .data .align 4 _after_near: .quad 0 .quad 0 .space 1048576 _after_far: .quad 0 .loh AdrpLdr L1, L2 .loh AdrpLdr L3, L4 .loh AdrpLdr L5, L6 .loh AdrpLdr L9, L10 .loh AdrpLdr L11, L12 .loh AdrpLdr L15, L16 .loh AdrpLdr L17, L18 .loh AdrpLdr L19, L20 .loh AdrpLdr L21, L22 .loh AdrpLdr L23, L24 .loh AdrpLdr L25, L26 .loh AdrpLdr L27, L28 .loh AdrpLdr L29, L30 .loh AdrpLdr L31, L32 .loh AdrpLdr L33, L34