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