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