~ubuntu-branches/ubuntu/utopic/binutils-arm64-cross/utopic

« back to all changes in this revision

Viewing changes to binutils-2.23.52.20130611/gas/testsuite/gas/aarch64/reloc-insn.s

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-06-20 17:38:09 UTC
  • Revision ID: package-import@ubuntu.com-20130620173809-app8lzgvymy5fg6c
Tags: 0.7
Build-depend on binutils-source (>= 2.23.52.20130620-1~).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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_prel19:cdata
 
182
        ldrb    w1, [x0]
 
183
        
 
184
        ret
 
185
        
 
186
llit:   .word   0xdeadf00d
 
187
        
 
188
lab:    
 
189
                
 
190
        .data
 
191
        .align 8
 
192
        
 
193
dummy:  .xword  0
 
194
        
 
195
ldata:  .xword  0x1122334455667788
 
196
        .space  8184
 
197
        
 
198
.set u8, 248
 
199
.set s9, -256
 
200
.set s12, -2048 
 
201
.set u12, 4095
 
202
.set u16, 65535
 
203
.set u32, 0x12345678
 
204
.set u48, 0xaabbccddeeff
 
205
.set u64, 0xfedcba9876543210
 
206
.set bit1,0xf000000000000000
 
207
.set bit2,~0xf
 
208
 
 
209
.comm   cdata,1,8