2 // Detect WAW violations. Cases taken from DV tables.
25 // AR[FPSR].sf0.controls
30 // AR[FPSR].sf1.controls
35 // AR[FPSR].sf2.controls
40 // AR[FPSR].sf3.controls
46 fcmp.eq.s0 p1, p2 = f3, f4
47 fcmp.eq.s0 p3, p4 = f3, f4 // no DV here
49 fcmp.eq.s0 p1, p2 = f3, f4
54 fcmp.eq.s1 p1, p2 = f3, f4
55 fcmp.eq.s1 p3, p4 = f3, f4 // no DV here
57 fcmp.eq.s1 p1, p2 = f3, f4
62 fcmp.eq.s2 p1, p2 = f3, f4
63 fcmp.eq.s2 p3, p4 = f3, f4 // no DV here
65 fcmp.eq.s2 p1, p2 = f3, f4
70 fcmp.eq.s3 p1, p2 = f3, f4
71 fcmp.eq.s3 p3, p4 = f3, f4 // no DV here
73 fcmp.eq.s3 p1, p2 = f3, f4
77 // AR[FPSR].traps/rv plus all controls/flags
107 // AR[RNAT] (see also AR[BSPSTORE])
147 // CR[EOI] (and InService)
202 // CR[IRR%] (and others)
232 // CR[IVR] (no explicit writers)
241 mov cr.lrr1 = r0 // no DV here
270 ptc.e r1 // no DVs here
272 ptc.e r0 // (and others)
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
284 itr.d dtr[r0] = r1 // (and others)
328 mov pkr[r2] = r1 // no DV here
345 cmp.eq p1, p0 = r0, r1
346 cmp.eq p1, p0 = r2, r3
348 fcmp.eq p1, p2 = f2, f3
349 fcmp.eq p1, p3 = f2, f3
351 cmp.eq.and p1, p2 = r0, r1
352 cmp.eq.or p1, p3 = r2, r3
354 cmp.eq.or p1, p3 = r2, r3
355 cmp.eq.and p1, p2 = r0, r1
357 cmp.eq.and p1, p2 = r0, r1
358 cmp.eq.and p1, p3 = r2, r3 // no DV here
360 cmp.eq.or p1, p2 = r0, r1
361 cmp.eq.or p1, p3 = r2, r3 // no DV here
368 cmp.eq p63, p0 = r0, r1
369 cmp.eq p63, p0 = r2, r3
371 fcmp.eq p63, p2 = f2, f3
372 fcmp.eq p63, p3 = f2, f3
374 cmp.eq.and p63, p2 = r0, r1
375 cmp.eq.or p63, p3 = r2, r3
377 cmp.eq.or p63, p3 = r2, r3
378 cmp.eq.and p63, p2 = r0, r1
380 cmp.eq.and p63, p2 = r0, r1
381 cmp.eq.and p63, p3 = r2, r3 // no DV here
383 cmp.eq.or p63, p2 = r0, r1
384 cmp.eq.or p63, p3 = r2, r3 // no DV here
398 bsw.0 // GAS automatically emits a stop after bsw.n
399 bsw.0 // so this conflict is avoided
407 // PSR.da (rfi is the only writer)
408 // PSR.db (and others)
414 // PSR.dd (rfi is the only writer)
438 // PSR.ed (rfi is the only writer)
444 // PSR.ia (no DV semantics)
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)
455 // PSR.mc (rfi is the only writer)
470 mov f34 = f35 // no DV here
487 mov f4 = f5 // no DV here
500 // PSR.ri (no DV semantics)
501 // PSR.rt (see PSR.db)
514 // PSR.ss (rfi is the only writer)
515 // PSR.tb (see PSR.db)
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
534 cmp.eq.and.orcm p6, p7 = 1, r32
535 cmp.eq.and.orcm p6, p7 = 5, r36 // no DV here
537 cmp.eq.or.andcm p63, p7 = 1, r32
538 cmp.eq.or.andcm p63, p7 = 5, r36 // no DV here
540 cmp.eq.or.andcm p6, p63 = 1, r32
541 cmp.eq.or.andcm p6, p63 = 5, r36 // no DV here
543 cmp.eq.and.orcm p63, p7 = 1, r32
544 cmp.eq.and.orcm p63, p7 = 5, r36 // no DV here
546 cmp.eq.and.orcm p6, p63 = 1, r32
547 cmp.eq.and.orcm p6, p63 = 5, r36 // no DV here
549 cmp.eq.or.andcm p6, p7 = 1, r32
550 cmp.eq.and.orcm p6, p7 = 5, r36
552 cmp.eq.or.andcm p63, p7 = 1, r32
553 cmp.eq.and.orcm p63, p7 = 5, r36
555 cmp.eq.or.andcm p6, p63 = 1, r32
556 cmp.eq.and.orcm p6, p63 = 5, r36
560 cmp.eq p21, p0 = r0, r1
561 cmp.eq p21, p0 = r2, r3
563 fcmp.eq p21, p22 = f2, f3
564 fcmp.eq p21, p23 = f2, f3
566 cmp.eq.and p21, p22 = r0, r1
567 cmp.eq.or p21, p23 = r2, r3
569 cmp.eq.or p21, p23 = r2, r3
570 cmp.eq.and p21, p22 = r0, r1
572 cmp.eq.and p21, p22 = r0, r1
573 cmp.eq.and p21, p23 = r2, r3 // no DV here
575 cmp.eq.or p21, p22 = r0, r1
576 cmp.eq.or p21, p23 = r2, r3 // no DV here