Upload Tizen:Base source
[external/binutils.git] / gas / testsuite / gas / tic4x / addressing.s
1         ;; 
2         ;; test all addressing modes and register constraints
3         ;; (types/classes is read from include/opcodes/tic4x.h)
4         ;;
5         .text
6 start:
7         
8         ;;
9         ;; Type B - infix condition branch
10         ;;
11 Type_BI:bu      Type_BI         ; Unconditional branch (00000)
12         bc      Type_BI         ; Carry branch (00001)
13         blo     Type_BI         ; Lower than branch (00001)
14         bls     Type_BI         ; Lower than or same branch (00010)
15         bhi     Type_BI         ; Higher than branch (00011)
16         bhs     Type_BI         ; Higher than or same branch (00100)
17         bnc     Type_BI         ; No carry branch (00100)
18         beq     Type_BI         ; Equal to branch (00101)
19         bz      Type_BI         ; Zero branch (00101)
20         bne     Type_BI         ; Not equal to branch (00110)
21         bnz     Type_BI         ; Not zero branch (00110)
22         blt     Type_BI         ; Less than branch (00111)
23         bn      Type_BI         ; Negative branch (00111)
24         ble     Type_BI         ; Less than or equal to branch (01000)
25         bgt     Type_BI         ; Greater than branch (01001)
26         bp      Type_BI         ; Positive branch (01001)
27         bge     Type_BI         ; Greater than or equal branch (01010)
28         bnn     Type_BI         ; Nonnegative branch (01010)
29         bnv     Type_BI         ; No overflow branch (01000)
30         bv      Type_BI         ; Overflow branch (01101)
31         bnuf    Type_BI         ; No underflow branch (01110)
32         buf     Type_BI         ; Underflow branch (01111)
33         bnlv    Type_BI         ; No latched overflow branch (10000)
34         blv     Type_BI         ; Latched overflow branch (10001)
35         bnluf   Type_BI         ; No latched FP underflow branch (10010)
36         bluf    Type_BI         ; Latched FP underflow branch (10011)
37         bzuf    Type_BI         ; Zero or FP underflow branch (10100)
38         b       Type_BI         ; Unconditional branch (00000)
39
40         ;;
41         ;; Type C - infix condition load
42         ;;
43 Type_CI:ldiu    R0,R0           ; Unconditional load (00000)
44         ldic    R0,R0           ; Carry load (00001)
45         ldilo   R0,R0           ; Lower than load (00001)
46         ldils   R0,R0           ; Lower than or same load (00010)
47         ldihi   R0,R0           ; Higher than load (00011)
48         ldihs   R0,R0           ; Higher than or same load (00100)
49         ldinc   R0,R0           ; No carry load (00100)
50         ldieq   R0,R0           ; Equal to load (00101)
51         ldiz    R0,R0           ; Zero load (00101)
52         ldine   R0,R0           ; Not equal to load (00110)
53         ldinz   R0,R0           ; Not zero load (00110)
54         ldil    R0,R0           ; Less than load (00111)
55         ldin    R0,R0           ; Negative load (00111)
56         ldile   R0,R0           ; Less than or equal to load (01000)
57         ldigt   R0,R0           ; Greater than load (01001)
58         ldip    R0,R0           ; Positive load (01001)
59         ldige   R0,R0           ; Greater than or equal load (01010)
60         ldinn   R0,R0           ; Nonnegative load (01010)
61         ldinv   R0,R0           ; No overflow load (01000)
62         ldiv    R0,R0           ; Overflow load (01101)
63         ldinuf  R0,R0           ; No underflow load (01110)
64         ldiuf   R0,R0           ; Underflow load (01111)
65         ldinlv  R0,R0           ; No latched overflow load (10000)
66         ldilv   R0,R0           ; Latched overflow load (10001)
67         ldinluf R0,R0           ; No latched FP underflow load (10010)
68         ldiluf  R0,R0           ; Latched FP underflow load (10011)
69         ldizuf  R0,R0           ; Zero or FP underflow load (10100)
70
71         ;;
72         ;; Type * - Indirect (full)
73         ;;
74 Type_ind:       
75         ldi     *AR0,R0         ; Indirect addressing (G=10)
76         ldi     *+AR0(5),R0     ;   with predisplacement add
77         ldi     *-AR0(5),R0     ;   with predisplacement subtract
78         ldi     *++AR0(5),R0    ;   with predisplacement add and modify
79         ldi     *--AR0(5),R0    ;   with predisplacement subtract and modify
80         ldi     *AR0++(5),R0    ;   with postdisplacement add and modify
81         ldi     *AR0--(5),R0    ;   with postdisplacement subtract and modify
82         ldi     *AR0++(5)%,R0   ;   with postdisplacement add and circular modify
83         ldi     *AR0--(5)%,R0   ;   with postdisplacement subtract and circular modify
84         ldi     *+AR0(IR0),R0   ;   with predisplacement add
85         ldi     *-AR0(IR0),R0   ;   with predisplacement subtract
86         ldi     *++AR0(IR0),R0  ;   with predisplacement add and modify
87         ldi     *--AR0(IR0),R0  ;   with predisplacement subtract and modify
88         ldi     *AR0++(IR0),R0  ;   with postdisplacement add and modify
89         ldi     *AR0--(IR0),R0  ;   with postdisplacement subtract and modify
90         ldi     *AR0++(IR0)%,R0 ;   with postdisplacement add and circular modify
91         ldi     *AR0--(IR0)%,R0 ;   with postdisplacement subtract and circular modify
92         ldi     *AR0++(IR0)B,R0 ;   with postincrement add and bit-reversed modify
93         ldi     *AR0++,R0       ; Same as *AR0++(1)
94
95         ;;
96         ;; Type # - Direct for ldp
97         ;;
98 Type_ldp:       
99         ldp     12
100         ldp     @start
101         ldp     start
102
103         ;;
104         ;; Type @ - Direct
105         ;;
106 Type_dir:       
107         ldi     @start,R0
108         ldi     start,R0
109         ldi     @16,R0
110         ldi     @65535,R0
111
112         ;;
113         ;; Type A - Address register
114         ;;
115 Type_A: dbc     AR0,R0
116         dbc     AR2,R0
117         dbc     AR7,R0
118
119         ;;
120         ;; Type B - Unsigned integer (PC)
121         ;;
122 Type_B: br      start
123         br      0x809800
124
125         ;;
126         ;; Type C - Indirect
127         ;;
128         .ifdef TEST_C4X
129 Type_C: addc3   *+AR0(5),R0,R0
130         .endif
131
132         ;;
133         ;; Type E - Register (all)
134         ;;
135 Type_E: andn3   R0,R0,R0
136         andn3   AR0,R0,R0
137         addc3   DP,R0,R0
138         andn3   R7,R0,R0
139
140         ;;
141         ;; Type e - Register (0-11)
142         ;;
143 Type_ee:subf3   R7,R0,R0
144         addf3   R0,R0,R0
145         addf3   R7,R0,R0
146         cmpf3   R7,R0
147         .ifdef TEST_C4X
148         addf3   R11,R0,R0
149         .endif
150         
151         ;;
152         ;; Type F - Short float immediate
153         ;;
154 Type_F: ldf     0,R0
155         ldf     3.5,R0
156         ldf     -3.5,R0
157         ldf     0e-3.5e-1,R0
158
159         ;;
160         ;; Type G - Register (all)
161         ;;
162 Type_G: andn3   R0,AR0,R0
163         addc3   R0,DP,R0
164         addc3   R0,R0,R0
165         andn3   R0,R7,R0
166
167         ;;
168         ;; Type g - Register (0-11)
169         ;; 
170 Type_gg:subf3   R0,R7,R0
171         addf3   R0,R0,R0
172         addf3   R0,R7,R0
173         cmpf3   R0,R7
174         .ifdef  TEST_C4X
175         addf3   R0,R11,R0
176         .endif
177         
178         ;;
179         ;; Type H - Register (0-7)
180         ;;
181 Type_H: stf     R0,*AR0 &|| stf R0,*AR0
182         stf     R0,*AR0 &|| stf R2,*AR0
183         stf     R0,*AR0 &|| stf R7,*AR0
184
185         ;;
186         ;; Type I - Indirect
187         ;;
188 Type_I: addf3   *AR0,R0,R0      ; Indirect addressing (G=10)
189         addf3   *+AR0(1),R0,R0  ;   with predisplacement add
190         addf3   *-AR0(1),R0,R0  ;   with predisplacement subtract
191         addf3   *++AR0(1),R0,R0 ;   with predisplacement add and modify
192         addf3   *--AR0(1),R0,R0 ;   with predisplacement subtract and modify
193         addf3   *AR0++(1),R0,R0 ;   with postdisplacement add and modify
194         addf3   *AR0--(1),R0,R0 ;   with postdisplacement subtract and modify
195         addf3   *AR0++(1)%,R0,R0;   with postdisplacement add and circular modify
196         addf3   *AR0--(1)%,R0,R0;   with postdisplacement subtract and circular modify
197         addf3   *+AR0(IR0),R0,R0;   with predisplacement add
198         addf3   *-AR0(IR0),R0,R0;   with predisplacement subtract
199         addf3   *++AR0(IR0),R0,R0;  with predisplacement add and modify
200         addf3   *--AR0(IR0),R0,R0;  with predisplacement subtract and modify
201         addf3   *AR0++(IR0),R0,R0;  with postdisplacement add and modify
202         addf3   *AR0--(IR0),R0,R0;  with postdisplacement subtract and modify
203         addf3   *AR0++(IR0)%,R0,R0; with postdisplacement add and circular modify
204         addf3   *AR0--(IR0)%,R0,R0; with postdisplacement subtract and circular modify
205         addf3   *AR0++(IR0)B,R0,R0; with postincrement add and bit-reversed modify
206         addf3   *AR0++,R0,R0    ; Same as *AR0++(1)
207
208         ;;
209         ;; Type J - Indirect
210         ;;
211 Type_J: addf3   R0,*AR0,R0      ; Indirect addressing (G=10)
212         addf3   R0,*+AR0(1),R0  ;   with predisplacement add
213         addf3   R0,*-AR0(1),R0  ;   with predisplacement subtract
214         addf3   R0,*++AR0(1),R0 ;   with predisplacement add and modify
215         addf3   R0,*--AR0(1),R0 ;   with predisplacement subtract and modify
216         addf3   R0,*AR0++(1),R0 ;   with postdisplacement add and modify
217         addf3   R0,*AR0--(1),R0 ;   with postdisplacement subtract and modify
218         addf3   R0,*AR0++(1)%,R0;   with postdisplacement add and circular modify
219         addf3   R0,*AR0--(1)%,R0;   with postdisplacement subtract and circular modify
220         addf3   R0,*+AR0(IR0),R0;   with predisplacement add
221         addf3   R0,*-AR0(IR0),R0;   with predisplacement subtract
222         addf3   R0,*++AR0(IR0),R0;  with predisplacement add and modify
223         addf3   R0,*--AR0(IR0),R0;  with predisplacement subtract and modify
224         addf3   R0,*AR0++(IR0),R0;  with postdisplacement add and modify
225         addf3   R0,*AR0--(IR0),R0;  with postdisplacement subtract and modify
226         addf3   R0,*AR0++(IR0)%,R0; with postdisplacement add and circular modify
227         addf3   R0,*AR0--(IR0)%,R0; with postdisplacement subtract and circular modify
228         addf3   R0,*AR0++(IR0)B,R0; with postincrement add and bit-reversed modify
229         addf3   R0,*AR0++,R0    ; Same as *AR0++(1)
230
231         ;;
232         ;; Type K - Register (0-7)
233         ;;
234 Type_K: ldf     *AR0,R0 &|| ldf *AR0,R1
235         ldf     *AR0,R0 &|| ldf *AR0,R2
236         ldf     *AR0,R0 &|| ldf *AR0,R7
237
238         ;;
239         ;; Type L - Register (0-7)
240         ;;
241 Type_L: stf     R0,*AR0 &|| stf R0,*AR0
242         stf     R2,*AR0 &|| stf R0,*AR0
243         stf     R7,*AR0 &|| stf R0,*AR0
244
245         ;;
246         ;; Type M - Register (2-3)
247         ;; 
248 Type_M: mpyf3   *AR0,*AR0,R0 &|| addf3 R0,R0,R2
249         mpyf3   *AR0,*AR0,R0 &|| addf3 R0,R0,R3
250         
251         ;;
252         ;; Type N - Register (0-1)
253         ;;
254 Type_N: mpyf3   *AR0,*AR0,R0 &|| addf3 R0,R0,R2
255         mpyf3   *AR0,*AR0,R1 &|| addf3 R0,R0,R2
256
257         ;;
258         ;; Type O - Indirect
259         ;;
260         .ifdef TEST_C4X
261 Type_O: addc3   *+AR0(5),*+AR0(5),R0
262         .endif
263         
264         ;;
265         ;; Type P - Displacement (PC rel)
266         ;; 
267 Type_P: callc   start
268         callc   1
269
270         ;;
271         ;; Type Q - Register (all)
272         ;;
273 Type_Q: ldi     R0,R0
274         ldi     AR0,R0
275         ldi     DP,R0
276         ldi     SP,R0
277
278         ;;
279         ;; Type q - Register (0-11)
280         ;;
281 Type_qq:fix     R0,R0
282         fix     R7,R0
283         .ifdef  TEST_C4X
284         fix     R11,R0
285         absf    R11,R0
286         .endif
287
288         ;;
289         ;; Type R - Register (all)
290         ;;
291 Type_R: ldi     R0,R0
292         ldi     R0,AR0
293         ldi     R0,DP
294         ldi     R0,SP
295
296         ;;
297         ;; Type r - Register (0-11)
298         ;;
299 Type_rr:ldf     R0,R0
300         ldf     R0,R7
301         .ifdef  TEST_C4X
302         ldf     R0,R11
303         .endif
304
305         ;;
306         ;; Type S - Signed immediate
307         ;;
308 Type_S: ldi     0,R0
309         ldi     -123,R0
310         ldi     6543,R0
311         ldi     -32768, R0
312
313         ;;
314         ;; Type T - Integer
315         ;;
316         .ifdef  TEST_C4X
317 Type_T: stik    0,*AR0
318         stik    12,*AR0
319         stik    -5,*AR0
320         .endif
321
322         ;;
323         ;; Type U - Unsigned integer
324         ;;
325 Type_U: and     0,R0
326         and     256,R0
327         and     65535,R0
328
329         ;;
330         ;; Type V - Vector
331         ;;
332 Type_V: trapu   12
333         trapu   0
334         trapu   31
335         .ifdef  TEST_C4X
336         trapu   511
337         .endif
338
339         ;;
340         ;; Type W - Short int
341         ;;
342         .ifdef  TEST_C4X
343 Type_W: addc3   -3,R0,R0
344         addc3   5,R0,R0
345         .endif
346
347         ;;
348         ;; Type X - Expansion register
349         ;;
350         .ifdef  TEST_C4X
351 Type_X: ldep    IVTP,R0
352         ldep    TVTP,R0
353         .endif
354         
355         ;;
356         ;; Type Y - Address register
357         ;;
358         .ifdef  TEST_C4X
359 Type_Y: lda     R0,AR0
360         lda     R0,DP
361         lda     R0,SP
362         lda     R0,IR0
363         .endif
364
365         ;;
366         ;; Type Z - Expansion register
367         ;;
368         .ifdef  TEST_C4X
369 Type_Z: ldpe    R0,IVTP
370         ldpe    R0,TVTP
371         .endif