Home | History | Annotate | Download | only in aarch64
      1 // Test file for AArch64 GAS -- instructions with relocation operators.
      2 
      3 func:
      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 
    191 llit:	.word	0xdeadf00d
    192 
    193 lab:
    194 
    195 	.data
    196 	.align 8
    197 
    198 dummy:	.xword  0
    199 
    200 ldata:	.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