1// Test file for AArch64 GAS -- instructions with relocation operators. 2 3func: 4 // BFD_RELOC_AARCH64_MOVW_G0 5 // immediate 6 movz x0,#:abs_g0:u12 7 8 // BFD_RELOC_AARCH64_MOVW_G0_S 9 // immediate 10 movz x0,#:abs_g0_s:s12 11 12 // BFD_RELOC_AARCH64_MOVW_G1 13 // immediate 14 movz x1,#:abs_g1:u32 15 movk x1,#:abs_g0_nc:u32 16 17 // BFD_RELOC_AARCH64_MOVW_G1_S 18 // immediate 19 movz x1,#:abs_g1_s:s12 20 movk x1,#:abs_g0_nc:s12 21 22 // BFD_RELOC_AARCH64_MOVW_G2 23 // immediate 24 movz x1,#:abs_g2:u48 25 movk x1,#:abs_g1_nc:u48 26 movk x1,#:abs_g0_nc:u48 27 28 // local data (section relative) 29 movz x1,#:abs_g2:ldata 30 movk x1,#:abs_g1_nc:ldata 31 movk x1,#:abs_g0_nc:ldata 32 33 // external data 34 movz x1,#:abs_g2:xdata 35 movk x1,#:abs_g1_nc:xdata 36 movk x1,#:abs_g0_nc:xdata 37 38 // BFD_RELOC_AARCH64_MOVW_G2_S 39 // immediate 40 movz x1,#:abs_g2_s:s12 41 movk x1,#:abs_g1_nc:s12 42 movk x1,#:abs_g0_nc:s12 43 44 // BFD_RELOC_AARCH64_MOVW_G3 45 // immediate 46 movz x1,#:abs_g3:s12 47 movk x1,#:abs_g2_nc:s12 48 movk x1,#:abs_g1_nc:s12 49 movk x1,#:abs_g0_nc:s12 50 51 movz x1,#:abs_g3:u64 52 movk x1,#:abs_g2_nc:u64 53 movk x1,#:abs_g1_nc:u64 54 movk x1,#:abs_g0_nc:u64 55 56 // BFD_RELOC_AARCH64_LD_LO19_PCREL 57 ldr x0,llit 58 ldr x1,ldata 59 ldr x2,xdata+12 60 61 // BFD_RELOC_AARCH64_ADR_LO21_PCREL 62 // AARCH64 ADR instruction, holding a simple 21 bit pc-relative byte offset. 63 adr x0,llit 64 adr x1,ldata 65 adr x2,ldata+4088 66 adr x3,xlit 67 adr x4,xdata+16 68 adr x5,xdata+4088 69 70 // BFD_RELOC_AARCH64_ADR_HI21_PCREL 71 adrp x0,llit 72 adrp x1,ldata 73 adrp x2,ldata+4088 74 adrp x3,xlit 75 adrp x4,xdata+16 76 adrp x5,xdata+4088 77 78 // BFD_RELOC_AARCH64_ADR_HI21_PCREL 79 adrp x0,:pg_hi21:llit 80 adrp x1,:pg_hi21:ldata 81 adrp x2,:pg_hi21:ldata+4088 82 adrp x3,:pg_hi21:xlit 83 adrp x4,:pg_hi21:xdata+16 84 adrp x5,:pg_hi21:xdata+4088 85 86 // BFD_RELOC_AARCH64_ADD_LO12 87 add x0,x0,#:lo12:llit 88 add x1,x1,#:lo12:ldata 89 add x2,x2,#:lo12:ldata+4088 90 add x3,x3,#:lo12:xlit 91 add x4,x4,#:lo12:xdata+16 92 add x5,x5,#:lo12:xdata+4088 93 add x6,x6,u12 94 95 // BFD_RELOC_AARCH64_LDST8_LO12 96 ldrb w0, [x0, #:lo12:llit] 97 ldrb w1, [x1, #:lo12:ldata] 98 ldrb w2, [x2, #:lo12:ldata+4088] 99 ldrb w3, [x3, #:lo12:xlit] 100 ldrb w4, [x4, #:lo12:xdata+16] 101 ldrb w5, [x5, #:lo12:xdata+4088] 102 ldrb w6, [x6, u12] 103 104 // BFD_RELOC_AARCH64_TSTBR14 105 tbz x0,#0,lab 106 tbz x1,#63,xlab 107 tbnz x2,#8,lab 108 tbnz x2,#47,xlab 109 110 // BFD_RELOC_AARCH64_BRANCH19 111 b.eq lab 112 b.eq xlab 113 114 // BFD_RELOC_AARCH64_COMPARE19 115 cbz x0,lab 116 cbnz x30,xlab 117 118 // BFD_RELOC_AARCH64_JUMP26 119 b lab 120 b xlab 121 122 // BFD_RELOC_AARCH64_CALL26 123 bl lab 124 bl xlab 125 126 // BFD_RELOC_AARCH64_MOVW_IMM 127 movz x0, #0x1234, lsl #48 128 movk x0, #0x5678, lsl #32 129 movk x0, #0x9abc, lsl #16 130 movk x0, #0xdef0, lsl #0 131 132 movz x0, (u64>>48)&0xffff, lsl #48 133 movk x0, (u64>>32)&0xffff, lsl #32 134 movk x0, (u64>>16)&0xffff, lsl #16 135 movk x0, (u64>>0)&0xffff, lsl #0 136 137 // BFD_RELOC_AARCH64_BIT_IMM 138 orr x0,x0,bit1 139 and x0,x0,bit2 140 and w0,w0,bit2 141 142 // BFD_RELOC_AARCH64_ADD_U12 143 add x0,x0,s12 144 add x0,x0,u12 145 sub x0,x0,s12 146 sub x0,x0,u12 147 148 // BFD_RELOC_AARCH64_EXC_U16 149 svc u16 150 151 // BFD_RELOC_AARCH64_LDST_I9 152 // Signed 9-bit byte offset for load/store single item with writeback options. 153 // Used internally by the AARCH64 assembler and not (currently) 154 // written to any object files. 155 ldr x0,[x1],#s9 156 ldr x0,[x1,#s9]! 157 158 // No writeback, but a negative offset should cause this 159 // to be converted to a LDST_I9 relocation 160 ldr x0,[x1,#s9] 161 162 // BFD_RELOC_AARCH64_LDST_U12 163 // Unsigned 12-bit byte offset for load/store single item without options. 164 // Used internally by the AARCH64 assembler and not (currently) 165 // written to any object files. 166 ldr x0,[x1,#(u12*8)] 167 168 // BFD_RELOC_AARCH64_LDST16_LO12 169 ldrh w0, [x0, #:lo12:llit] 170 // BFD_RELOC_AARCH64_LDST32_LO12 171 ldr w1, [x1, #:lo12:ldata] 172 // BFD_RELOC_AARCH64_LDST64_LO12 173 ldr x2, [x2, #:lo12:ldata+4088] 174 // BFD_RELOC_AARCH64_LDST128_LO12 175 ldr q3, [x3, #:lo12:xlit] 176 177 // BFD_RELOC_AARCH64_LDST64_LO12 178 prfm pstl1keep, [x7, #:lo12:ldata+4100] 179 180 // BFD_RELOC_AARCH64_GOT_LD_PREL19 181 ldr x0, :got:cdata 182 ldrb w1, [x0] 183 184 ret 185 186 // BFD_RELOC_AARCH64_LD64_GOTPAGE_LO15 187 ldr x28, [x13, #:gotpage_lo15:dummy] 188 // BFD_RELOC_AARCH64_LD64_GOTOFF_LO15 189 ldr x0, [x0, #:gotoff_lo15:dummy] 190 191llit: .word 0xdeadf00d 192 193lab: 194 195 .data 196 .align 8 197 198dummy: .xword 0 199 200ldata: .xword 0x1122334455667788 201 .space 8184 202 203.set u8, 248 204.set s9, -256 205.set s12, -2048 206.set u12, 4095 207.set u16, 65535 208.set u32, 0x12345678 209.set u48, 0xaabbccddeeff 210.set u64, 0xfedcba9876543210 211.set bit1,0xf000000000000000 212.set bit2,~0xf 213 214.comm cdata,1,8 215