Upload Tizen:Base source
[external/binutils.git] / gas / testsuite / gas / ia64 / dv-waw-err.s
1 //      
2 // Detect WAW violations.  Cases taken from DV tables.
3 //      
4 .text
5         .explicit
6 // AR[BSP]
7         mov     ar.bsp = r0
8         mov     ar.bsp = r1
9         ;;
10 // AR[BSPSTORE] 
11         mov     ar.bspstore = r2
12         mov     ar.bspstore = r3
13         ;;
14         
15 // AR[CCV]
16         mov     ar.ccv = r4
17         mov     ar.ccv = r4
18         ;;
19         
20 // AR[EC]       
21         br.wtop.sptk    L
22         mov     ar.ec = r0
23         ;;
24
25 // AR[FPSR].sf0.controls 
26         mov             ar.fpsr = r0
27         fsetc.s0        0x7f, 0x0f
28         ;;
29
30 // AR[FPSR].sf1.controls
31         mov             ar.fpsr = r0
32         fsetc.s1        0x7f, 0x0f
33         ;;
34
35 // AR[FPSR].sf2.controls
36         mov             ar.fpsr = r0
37         fsetc.s2        0x7f, 0x0f
38         ;;
39
40 // AR[FPSR].sf3.controls
41         mov             ar.fpsr = r0
42         fsetc.s3        0x7f, 0x0f
43         ;;
44
45 // AR[FPSR].sf0.flags
46         fcmp.eq.s0      p1, p2 = f3, f4
47         fcmp.eq.s0      p3, p4 = f3, f4 // no DV here
48         ;;
49         fcmp.eq.s0      p1, p2 = f3, f4
50         fclrf.s0
51         ;;
52
53 // AR[FPSR].sf1.flags
54         fcmp.eq.s1      p1, p2 = f3, f4
55         fcmp.eq.s1      p3, p4 = f3, f4 // no DV here
56         ;;
57         fcmp.eq.s1      p1, p2 = f3, f4
58         fclrf.s1
59         ;;
60
61 // AR[FPSR].sf2.flags
62         fcmp.eq.s2      p1, p2 = f3, f4
63         fcmp.eq.s2      p3, p4 = f3, f4 // no DV here
64         ;;
65         fcmp.eq.s2      p1, p2 = f3, f4
66         fclrf.s2
67         ;;
68
69 // AR[FPSR].sf3.flags
70         fcmp.eq.s3      p1, p2 = f3, f4
71         fcmp.eq.s3      p3, p4 = f3, f4 // no DV here
72         ;;
73         fcmp.eq.s3      p1, p2 = f3, f4
74         fclrf.s3
75         ;;
76
77 // AR[FPSR].traps/rv plus all controls/flags
78         mov     ar.fpsr = r0
79         mov     ar.fpsr = r0
80         ;;
81
82 // AR[ITC]
83         mov     ar.itc = r1
84         mov     ar.itc = r1
85         ;;
86
87 // AR[RUC]
88         mov     ar.ruc = r1
89         mov     ar.ruc = r1
90         ;;
91
92 // AR[K]
93         mov     ar.k2 = r3
94         mov     ar.k2 = r3
95         ;;
96         
97 // AR[LC]
98         br.cloop.sptk   L
99         mov     ar.lc = r0
100         ;;
101         
102 // AR[PFS]
103         mov     ar.pfs = r0
104         br.call.sptk    b0 = L
105         ;;
106
107 // AR[RNAT] (see also AR[BSPSTORE])
108         mov     ar.rnat = r8
109         mov     ar.rnat = r8
110         ;;
111         
112 // AR[RSC]
113         mov     ar.rsc = r10
114         mov     ar.rsc = r10
115         ;;      
116         
117 // AR[UNAT]     
118         mov     ar.unat = r12
119         st8.spill       [r0] = r1
120         ;;
121         
122 // AR%
123         mov     ar48 = r0
124         mov     ar48 = r0
125         ;;
126
127 // BR%
128         mov     b1 = r0
129         mov     b1 = r1
130         ;;
131         
132 // CFM (and others)
133         br.wtop.sptk    L
134         br.wtop.sptk    L
135         ;;
136         
137 // CR[CMCV]
138         mov     cr.cmcv = r1
139         mov     cr.cmcv = r2
140         ;;
141
142 // CR[DCR]
143         mov     cr.dcr = r3
144         mov     cr.dcr = r3
145         ;;
146
147 // CR[EOI] (and InService)
148         mov     cr.eoi = r0
149         mov     cr.eoi = r0
150         ;;
151         srlz.d
152         
153 // CR[GPTA]
154         mov     cr.gpta = r6
155         mov     cr.gpta = r7
156         ;;
157
158 // CR[IFA]
159         mov     cr.ifa = r9
160         mov     cr.ifa = r10
161         ;;
162
163 // CR[IFS]
164         mov     cr.ifs = r11
165         cover
166         ;;
167
168 // CR[IHA]
169         mov     cr.iha = r13
170         mov     cr.iha = r14
171         ;;
172
173 // CR[IIB%]
174         mov     cr.iib0 = r15
175         mov     cr.iib0 = r16
176         ;;
177
178         mov     cr.iib1 = r15
179         mov     cr.iib1 = r16
180         ;;
181
182 // CR[IIM]
183         mov     cr.iim = r15
184         mov     cr.iim = r16
185         ;;
186
187 // CR[IIP] 
188         mov     cr.iip = r17
189         mov     cr.iip = r17
190         ;;
191
192 // CR[IIPA]
193         mov     cr.iipa = r19
194         mov     cr.iipa = r20
195         ;;
196
197 // CR[IPSR]
198         mov     cr.ipsr = r21
199         mov     cr.ipsr = r22
200         ;;
201
202 // CR[IRR%] (and others)
203         mov     r2 = cr.ivr
204         mov     r3 = cr.ivr
205         ;;
206         
207 // CR[ISR]
208         mov     cr.isr = r24
209         mov     cr.isr = r25
210         ;;      
211         
212 // CR[ITIR]
213         mov     cr.itir = r26
214         mov     cr.itir = r27
215         ;;      
216         
217 // CR[ITM]
218         mov     cr.itm = r28
219         mov     cr.itm = r29
220         ;;      
221         
222 // CR[ITV]
223         mov     cr.itv = r0
224         mov     cr.itv = r1
225         ;;      
226         
227 // CR[IVA]
228         mov     cr.iva = r0
229         mov     cr.iva = r1
230         ;;      
231         
232 // CR[IVR] (no explicit writers)
233         
234 // CR[LID]
235         mov     cr.lid = r0
236         mov     cr.lid = r1
237         ;;
238         
239 // CR[LRR%]
240         mov     cr.lrr0 = r0
241         mov     cr.lrr1 = r0 // no DV here
242         ;;
243         mov     cr.lrr0 = r0
244         mov     cr.lrr0 = r0
245         ;;
246         
247 // CR[PMV]
248         mov     cr.pmv = r0
249         mov     cr.pmv = r1
250         ;;
251         
252 // CR[PTA]
253         mov     cr.pta = r0
254         mov     cr.pta = r1
255         ;;
256         
257 // CR[TPR]
258         mov     cr.tpr = r0
259         mov     cr.tpr = r1
260         ;;
261         
262 // DBR# 
263         mov     dbr[r1] = r1
264         mov     dbr[r1] = r2
265         ;;
266         srlz.d
267         
268 // DTC
269         ptc.e   r0
270         ptc.e   r1      // no DVs here
271         ;;
272         ptc.e   r0      // (and others)
273         itc.i   r0
274         ;;
275         srlz.d
276         
277 // DTC_LIMIT
278         ptc.g   r0, r1          // NOTE: GAS automatically emits stops after 
279         ptc.ga  r2, r3          //  ptc.g/ptc.ga, so this conflict is no     
280         ;;                      //  longer possible in GAS-generated assembly
281         srlz.d
282         
283 // DTR 
284         itr.d   dtr[r0] = r1    // (and others)
285         ptr.d   r2, r3
286         ;;
287         srlz.d
288         
289 // FR%
290         mov             f3 = f2
291         ldfs.c.clr      f3 = [r1]
292         ;;
293
294 // GR%
295         mov             r2 = r0         
296         ld8.c.clr       r2 = [r1]
297         ;;
298
299 // IBR#
300         mov     ibr[r0] = r2
301         mov     ibr[r1] = r2
302         ;;
303
304 // InService            
305         mov     cr.eoi = r0
306         mov     r1 = cr.ivr
307         ;;
308         srlz.d
309         
310 // ITC          
311         ptc.e   r0
312         itc.i   r1
313         ;;
314         srlz.i
315         ;;
316         
317 // ITR  
318         itr.i   itr[r0] = r1
319         ptr.i   r2, r3
320         ;;
321         srlz.i
322         ;;
323         
324 // PKR#
325         .reg.val r1, 0x1
326         .reg.val r2, ~0x1
327         mov     pkr[r1] = r1
328         mov     pkr[r2] = r1    // no DV here
329         ;;
330         mov     pkr[r1] = r1
331         mov     pkr[r1] = r1
332         ;;
333         
334 // PMC#
335         mov     pmc[r3] = r1
336         mov     pmc[r4] = r1
337         ;;
338         
339 // PMD#
340         mov     pmd[r3] = r1
341         mov     pmd[r4] = r1
342         ;;
343         
344 // PR%, 1 - 15
345         cmp.eq  p1, p0 = r0, r1
346         cmp.eq  p1, p0 = r2, r3
347         ;;
348         fcmp.eq p1, p2 = f2, f3
349         fcmp.eq p1, p3 = f2, f3
350         ;;
351         cmp.eq.and p1, p2 = r0, r1
352         cmp.eq.or  p1, p3 = r2, r3
353         ;;
354         cmp.eq.or  p1, p3 = r2, r3
355         cmp.eq.and p1, p2 = r0, r1
356         ;;
357         cmp.eq.and p1, p2 = r0, r1
358         cmp.eq.and p1, p3 = r2, r3 // no DV here
359         ;;
360         cmp.eq.or p1, p2 = r0, r1
361         cmp.eq.or p1, p3 = r2, r3 // no DV here
362         ;;
363         
364 // PR63
365         br.wtop.sptk    L
366         br.wtop.sptk    L
367         ;;
368         cmp.eq  p63, p0 = r0, r1
369         cmp.eq  p63, p0 = r2, r3
370         ;;
371         fcmp.eq p63, p2 = f2, f3
372         fcmp.eq p63, p3 = f2, f3
373         ;;
374         cmp.eq.and p63, p2 = r0, r1
375         cmp.eq.or  p63, p3 = r2, r3
376         ;;
377         cmp.eq.or  p63, p3 = r2, r3
378         cmp.eq.and p63, p2 = r0, r1
379         ;;
380         cmp.eq.and p63, p2 = r0, r1
381         cmp.eq.and p63, p3 = r2, r3 // no DV here
382         ;;
383         cmp.eq.or p63, p2 = r0, r1
384         cmp.eq.or p63, p3 = r2, r3 // no DV here
385         ;;
386
387 // PSR.ac
388         rum     (1<<3)
389         rum     (1<<3)
390         ;;
391
392 // PSR.be
393         rum     (1<<1)
394         rum     (1<<1)
395         ;;
396         
397 // PSR.bn
398         bsw.0                   // GAS automatically emits a stop after bsw.n
399         bsw.0                   // so this conflict is avoided               
400         ;;
401
402 // PSR.cpl
403         epc
404         br.ret.sptk     b0
405         ;;
406
407 // PSR.da (rfi is the only writer)
408 // PSR.db (and others)
409         mov     psr.l = r0
410         mov     psr.l = r1
411         ;;
412         srlz.d
413
414 // PSR.dd (rfi is the only writer)
415         
416 // PSR.dfh
417         ssm     (1<<19)
418         ssm     (1<<19)
419         ;;
420         srlz.d
421
422 // PSR.dfl
423         ssm     (1<<18)
424         ssm     (1<<18)
425         ;;
426         srlz.d
427         
428 // PSR.di
429         rsm     (1<<22)
430         rsm     (1<<22)
431         ;;
432
433 // PSR.dt
434         rsm     (1<<17)
435         rsm     (1<<17)
436         ;;
437         
438 // PSR.ed (rfi is the only writer)
439 // PSR.i
440         ssm     (1<<14)
441         ssm     (1<<14)
442         ;;
443         
444 // PSR.ia (no DV semantics)
445 // PSR.ic
446         ssm     (1<<13)
447         ssm     (1<<13)
448         ;;
449
450 // PSR.id (rfi is the only writer)
451 // PSR.is (br.ia and rfi are the only writers)
452 // PSR.it (rfi is the only writer)
453 // PSR.lp (see PSR.db)
454
455 // PSR.mc (rfi is the only writer)
456 // PSR.mfh
457         mov     f32 = f33
458         mov     r10 = psr
459         ;;
460         ssm     (1<<5)
461         ssm     (1<<5)
462         ;;
463         ssm     (1<<5)
464         mov     psr.um = r10
465         ;;
466         rum     (1<<5)
467         rum     (1<<5)
468         ;;
469         mov     f32 = f33
470         mov     f34 = f35       // no DV here
471         ;;
472
473 // PSR.mfl
474         mov     f2 = f3
475         mov     r10 = psr
476         ;;
477         ssm     (1<<4)
478         ssm     (1<<4)
479         ;;
480         ssm     (1<<4)
481         mov     psr.um = r10
482         ;;
483         rum     (1<<4)
484         rum     (1<<4)
485         ;;
486         mov     f2 = f3
487         mov     f4 = f5 // no DV here
488         ;;
489
490 // PSR.pk
491         rsm     (1<<15)
492         rsm     (1<<15)
493         ;;
494
495 // PSR.pp
496         rsm     (1<<21)
497         rsm     (1<<21)
498         ;;
499
500 // PSR.ri (no DV semantics)
501 // PSR.rt (see PSR.db)
502
503 // PSR.si
504         rsm     (1<<23)
505         ssm     (1<<23)
506         ;;
507
508 // PSR.sp
509         ssm     (1<<20)
510         rsm     (1<<20)
511         ;;
512         srlz.d
513
514 // PSR.ss (rfi is the only writer)
515 // PSR.tb (see PSR.db)
516
517 // PSR.up
518         rsm     (1<<2)
519         rsm     (1<<2)
520         ;;
521         rum     (1<<2)
522         mov     psr.um = r0
523         ;;
524
525 // RR#
526         mov     rr[r2] = r1
527         mov     rr[r2] = r3
528         ;;
529
530 // PR, additional cases (or.andcm and and.orcm interaction)
531         cmp.eq.or.andcm p6, p7 = 1, r32
532         cmp.eq.or.andcm p6, p7 = 5, r36 // no DV here
533         ;;
534         cmp.eq.and.orcm p6, p7 = 1, r32
535         cmp.eq.and.orcm p6, p7 = 5, r36 // no DV here
536         ;;
537         cmp.eq.or.andcm p63, p7 = 1, r32
538         cmp.eq.or.andcm p63, p7 = 5, r36 // no DV here
539         ;;
540         cmp.eq.or.andcm p6, p63 = 1, r32
541         cmp.eq.or.andcm p6, p63 = 5, r36 // no DV here
542         ;;
543         cmp.eq.and.orcm p63, p7 = 1, r32
544         cmp.eq.and.orcm p63, p7 = 5, r36 // no DV here
545         ;;
546         cmp.eq.and.orcm p6, p63 = 1, r32
547         cmp.eq.and.orcm p6, p63 = 5, r36 // no DV here
548         ;;
549         cmp.eq.or.andcm p6, p7 = 1, r32
550         cmp.eq.and.orcm p6, p7 = 5, r36 
551         ;;
552         cmp.eq.or.andcm p63, p7 = 1, r32
553         cmp.eq.and.orcm p63, p7 = 5, r36        
554         ;;
555         cmp.eq.or.andcm p6, p63 = 1, r32
556         cmp.eq.and.orcm p6, p63 = 5, r36        
557         ;;
558
559 // PR%, 16 - 62
560         cmp.eq  p21, p0 = r0, r1
561         cmp.eq  p21, p0 = r2, r3
562         ;;
563         fcmp.eq p21, p22 = f2, f3
564         fcmp.eq p21, p23 = f2, f3
565         ;;
566         cmp.eq.and p21, p22 = r0, r1
567         cmp.eq.or  p21, p23 = r2, r3
568         ;;
569         cmp.eq.or  p21, p23 = r2, r3
570         cmp.eq.and p21, p22 = r0, r1
571         ;;
572         cmp.eq.and p21, p22 = r0, r1
573         cmp.eq.and p21, p23 = r2, r3 // no DV here
574         ;;
575         cmp.eq.or p21, p22 = r0, r1
576         cmp.eq.or p21, p23 = r2, r3 // no DV here
577         ;;
578
579 // RSE
580
581 L: