d671040515a39090376999989e759f3a15088d48
[deliverable/binutils-gdb.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 ;;
This page took 0.04335 seconds and 4 git commands to generate.