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.
20 cmpxchg8.acq
r5 = [r6],r7,ar.ccv
28 // AR
[FPSR
].sf0.controls
30 fpcmp.eq.s0
f2 = f3, f4
33 // AR
[FPSR
].sf1.controls
35 fpcmp.eq.s1
f2 = f3, f4
38 // AR
[FPSR
].sf2.controls
40 fpcmp.eq.s2
f2 = f3, f4
43 // AR
[FPSR
].sf3.controls
45 fpcmp.eq.s3
f2 = f3, f4
49 fpcmp.eq.s0
f2 = f3, f4
54 fpcmp.eq.s1
f2 = f3, f4
59 fpcmp.eq.s2
f2 = f3, f4
64 fpcmp.eq.s3
f2 = f3, f4
70 fcmp.eq.s3 p1
, p2
= f5, f6
116 fadd f0 = f1, f32
// read from rotating register region
197 // CR[IVR
] (all writes are implicit in other resource usage
)
227 mov
r1 = cr.ivr
// data
231 mov psr.
l = r3 // other
254 // DTC_LIMIT
/ITC_LIMIT
255 ptc.g
r0, r1 // NOTE
: GAS automatically emits stops after
256 ptc.ga
r2, r3 // ptc.g
/ptc.ga
, so this conflict is no
257 ;;
// longer possible in GAS-generated assembly
272 mov
f3 = f2 // no DV here
279 ld8.c.clr
r0 = [r1] // no DV here
297 mov
r3 = cr.ivr
// several DVs
310 // ITC_LIMIT
(see DTC_LIMIT
)
345 cmp.eq p1
, p2
= r0, r1 // pr-writer
/pr-reader-nobr-nomovpr
348 mov pr
= r5, 0xffff // mov-to-pr-allreg
/pr-reader-nobr-nomovpr
351 fcmp.eq p5
, p6
= f2, f3 // pr-writer-fp
/pr-reader-
br
354 cmp.eq p7
, p8
= r11, r12
355 (p7
) br.cond.sptk b1
// no DV here
360 (p63
) add r0 = r1, r2
362 fcmp.eq p62
, p63
= f2, f3
363 (p63
) add r3 = r4, r5
365 cmp.eq p62
, p63
= r6, r7 // no DV here
366 (p63
) br.cond.sptk b0
381 mov
r0 = r15 // no DV here
, since gr
< 16
383 bsw.1
// GAS automatically emits
a stop after bsw.n
384 mov
r1 = r16 // so this conflict is avoided
407 mov ar.bsp
= r8 // no DV here
410 mov
r9 = ar.bsp
// no DV here
413 mov cr.ifa
= r10 // any mov-to
/from-
cr is
a DV
416 mov
r11 = cr.eoi
// any mov-to
/from-
cr is
a DV
419 // PSR.da
(rfi is the only writer
)
420 // PSR.db
(also ac
,be,dt
,pk
)
426 // PSR.dd
(rfi is the only writer
)
450 // PSR.ed
(rfi is the only writer
)
456 // PSR.ia
(no DV semantics
)
467 mov
r1 = cr.irr0
// no DV here
471 // PSR.id
(rfi is the only writer
)
472 // PSR.is
(br.ia
and rfi are the only writers
)
473 // PSR.it
(rfi is the only writer
)
479 // PSR.mc
(rfi is the only writer
)
503 // PSR.ri
(no DV semantics
)
515 mov
r1 = ar.ec
// no DV here
529 // PSR.ss
(rfi is the only writer
)
543 ld8
r2 = [r0] // data
546 mov
r6 = rr
[r7] // impliedf
552 // GR
%, additional cases
555 addl
r3 = 12345, r2 // impliedf
, IA64_OPND_R3_2
559 mov
r8 = r32
// impliedf
563 cmp.eq p21
, p22
= r0, r1 // pr-writer
/pr-reader-nobr-nomovpr
564 (p21
) add r2 = r3, r4
566 mov pr
= r5, 0x1ffff // mov-to-pr-allreg
/pr-reader-nobr-nomovpr
567 (p22
) add r6 = r7, r8
569 mov pr.rot
= 0xffff0000 // mov-to-pr-rotreg
/pr-reader-nobr-nomovpr
570 (p23
) add r9 = r10, r11
572 fcmp.eq p25
, p26
= f2, f3 // pr-writer-fp
/pr-reader-
br
573 (p25
) br.cond.sptk b0
575 cmp.eq p27
, p28
= r11, r12
576 (p27
) br.cond.sptk b1
// no DV here
581 add r7 = 8, r6 // impliedf
584 add r7 = 8, r6 // impliedf
590 ld8
r8 = [r6], 16 // impliedf
, WAW
593 ldfd
f14 = [r6], 16 // impliedf
, WAW