diff options
Diffstat (limited to 'binutils-2.25/gas/testsuite/gas/aarch64/reloc-insn.s')
-rw-r--r-- | binutils-2.25/gas/testsuite/gas/aarch64/reloc-insn.s | 209 |
1 files changed, 209 insertions, 0 deletions
diff --git a/binutils-2.25/gas/testsuite/gas/aarch64/reloc-insn.s b/binutils-2.25/gas/testsuite/gas/aarch64/reloc-insn.s new file mode 100644 index 00000000..99ca9659 --- /dev/null +++ b/binutils-2.25/gas/testsuite/gas/aarch64/reloc-insn.s @@ -0,0 +1,209 @@ +// Test file for AArch64 GAS -- instructions with relocation operators. + +func: + // BFD_RELOC_AARCH64_MOVW_G0 + // immediate + movz x0,#:abs_g0:u12 + + // BFD_RELOC_AARCH64_MOVW_G0_S + // immediate + movz x0,#:abs_g0_s:s12 + + // BFD_RELOC_AARCH64_MOVW_G1 + // immediate + movz x1,#:abs_g1:u32 + movk x1,#:abs_g0_nc:u32 + + // BFD_RELOC_AARCH64_MOVW_G1_S + // immediate + movz x1,#:abs_g1_s:s12 + movk x1,#:abs_g0_nc:s12 + + // BFD_RELOC_AARCH64_MOVW_G2 + // immediate + movz x1,#:abs_g2:u48 + movk x1,#:abs_g1_nc:u48 + movk x1,#:abs_g0_nc:u48 + + // local data (section relative) + movz x1,#:abs_g2:ldata + movk x1,#:abs_g1_nc:ldata + movk x1,#:abs_g0_nc:ldata + + // external data + movz x1,#:abs_g2:xdata + movk x1,#:abs_g1_nc:xdata + movk x1,#:abs_g0_nc:xdata + + // BFD_RELOC_AARCH64_MOVW_G2_S + // immediate + movz x1,#:abs_g2_s:s12 + movk x1,#:abs_g1_nc:s12 + movk x1,#:abs_g0_nc:s12 + + // BFD_RELOC_AARCH64_MOVW_G3 + // immediate + movz x1,#:abs_g3:s12 + movk x1,#:abs_g2_nc:s12 + movk x1,#:abs_g1_nc:s12 + movk x1,#:abs_g0_nc:s12 + + movz x1,#:abs_g3:u64 + movk x1,#:abs_g2_nc:u64 + movk x1,#:abs_g1_nc:u64 + movk x1,#:abs_g0_nc:u64 + + // BFD_RELOC_AARCH64_LD_LO19_PCREL + ldr x0,llit + ldr x1,ldata + ldr x2,xdata+12 + + // BFD_RELOC_AARCH64_ADR_LO21_PCREL + // AARCH64 ADR instruction, holding a simple 21 bit pc-relative byte offset. + adr x0,llit + adr x1,ldata + adr x2,ldata+4088 + adr x3,xlit + adr x4,xdata+16 + adr x5,xdata+4088 + + // BFD_RELOC_AARCH64_ADR_HI21_PCREL + adrp x0,llit + adrp x1,ldata + adrp x2,ldata+4088 + adrp x3,xlit + adrp x4,xdata+16 + adrp x5,xdata+4088 + + // BFD_RELOC_AARCH64_ADR_HI21_PCREL + adrp x0,:pg_hi21:llit + adrp x1,:pg_hi21:ldata + adrp x2,:pg_hi21:ldata+4088 + adrp x3,:pg_hi21:xlit + adrp x4,:pg_hi21:xdata+16 + adrp x5,:pg_hi21:xdata+4088 + + // BFD_RELOC_AARCH64_ADD_LO12 + add x0,x0,#:lo12:llit + add x1,x1,#:lo12:ldata + add x2,x2,#:lo12:ldata+4088 + add x3,x3,#:lo12:xlit + add x4,x4,#:lo12:xdata+16 + add x5,x5,#:lo12:xdata+4088 + add x6,x6,u12 + + // BFD_RELOC_AARCH64_LDST8_LO12 + ldrb w0, [x0, #:lo12:llit] + ldrb w1, [x1, #:lo12:ldata] + ldrb w2, [x2, #:lo12:ldata+4088] + ldrb w3, [x3, #:lo12:xlit] + ldrb w4, [x4, #:lo12:xdata+16] + ldrb w5, [x5, #:lo12:xdata+4088] + ldrb w6, [x6, u12] + + // BFD_RELOC_AARCH64_TSTBR14 + tbz x0,#0,lab + tbz x1,#63,xlab + tbnz x2,#8,lab + tbnz x2,#47,xlab + + // BFD_RELOC_AARCH64_BRANCH19 + b.eq lab + b.eq xlab + + // BFD_RELOC_AARCH64_COMPARE19 + cbz x0,lab + cbnz x30,xlab + + // BFD_RELOC_AARCH64_JUMP26 + b lab + b xlab + + // BFD_RELOC_AARCH64_CALL26 + bl lab + bl xlab + + // BFD_RELOC_AARCH64_MOVW_IMM + movz x0, #0x1234, lsl #48 + movk x0, #0x5678, lsl #32 + movk x0, #0x9abc, lsl #16 + movk x0, #0xdef0, lsl #0 + + movz x0, (u64>>48)&0xffff, lsl #48 + movk x0, (u64>>32)&0xffff, lsl #32 + movk x0, (u64>>16)&0xffff, lsl #16 + movk x0, (u64>>0)&0xffff, lsl #0 + + // BFD_RELOC_AARCH64_BIT_IMM + orr x0,x0,bit1 + and x0,x0,bit2 + and w0,w0,bit2 + + // BFD_RELOC_AARCH64_ADD_U12 + add x0,x0,s12 + add x0,x0,u12 + sub x0,x0,s12 + sub x0,x0,u12 + + // BFD_RELOC_AARCH64_EXC_U16 + svc u16 + + // BFD_RELOC_AARCH64_LDST_I9 + // Signed 9-bit byte offset for load/store single item with writeback options. + // Used internally by the AARCH64 assembler and not (currently) + // written to any object files. + ldr x0,[x1],#s9 + ldr x0,[x1,#s9]! + + // No writeback, but a negative offset should cause this + // to be converted to a LDST_I9 relocation + ldr x0,[x1,#s9] + + // BFD_RELOC_AARCH64_LDST_U12 + // Unsigned 12-bit byte offset for load/store single item without options. + // Used internally by the AARCH64 assembler and not (currently) + // written to any object files. + ldr x0,[x1,#(u12*8)] + + // BFD_RELOC_AARCH64_LDST16_LO12 + ldrh w0, [x0, #:lo12:llit] + // BFD_RELOC_AARCH64_LDST32_LO12 + ldr w1, [x1, #:lo12:ldata] + // BFD_RELOC_AARCH64_LDST64_LO12 + ldr x2, [x2, #:lo12:ldata+4088] + // BFD_RELOC_AARCH64_LDST128_LO12 + ldr q3, [x3, #:lo12:xlit] + + // BFD_RELOC_AARCH64_LDST64_LO12 + prfm pstl1keep, [x7, #:lo12:ldata+4100] + + // BFD_RELOC_AARCH64_GOT_LD_PREL19 + ldr x0, :got:cdata + ldrb w1, [x0] + + ret + +llit: .word 0xdeadf00d + +lab: + + .data + .align 8 + +dummy: .xword 0 + +ldata: .xword 0x1122334455667788 + .space 8184 + +.set u8, 248 +.set s9, -256 +.set s12, -2048 +.set u12, 4095 +.set u16, 65535 +.set u32, 0x12345678 +.set u48, 0xaabbccddeeff +.set u64, 0xfedcba9876543210 +.set bit1,0xf000000000000000 +.set bit2,~0xf + +.comm cdata,1,8 |