fde8a699ce0bc52f5d0b21bd5e08007dd41eb068
[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 = r1
10 mov r0 = 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[K]
79 mov ar.k1 = r3
80 br.ia.sptk b0
81 ;;
82
83 // AR[LC]
84 br.cloop.sptk L
85 mov r4 = ar.lc
86 ;;
87
88 // AR[PFS]
89 mov ar.pfs = r5
90 epc
91
92 // AR[RNAT]
93 mov ar.bspstore = r8
94 mov r9 = ar.rnat
95 ;;
96
97 // AR[RSC]
98 mov ar.rsc = r10
99 mov r11 = ar.rnat
100 ;;
101
102 // AR[UNAT]
103 mov ar.unat = r12
104 ld8.fill r13 = [r14]
105 ;;
106
107 // AR%
108
109 // BR%
110 mov b0 = r0
111 mov r0 = b0
112 ;;
113
114 // CFM
115 br.wtop.sptk L
116 fadd f0 = f1, f32 // read from rotating register region
117 ;;
118
119 // CR[CMCV]
120 mov cr.cmcv = r1
121 mov r2 = cr.cmcv
122 ;;
123
124 // CR[DCR]
125 mov cr.dcr = r3
126 ld8.s r4 = [r5]
127 ;;
128
129 // CR[EOI]
130
131 // CR[GPTA]
132 mov cr.gpta = r6
133 thash r7 = r8
134 ;;
135 srlz.d
136
137 // CR[IFA]
138 mov cr.ifa = r9
139 itc.i r10
140 ;;
141
142 // CR[IFS]
143 mov cr.ifs = r11
144 mov r12 = cr.ifs
145 ;;
146
147 // CR[IHA]
148 mov cr.iha = r13
149 mov r14 = cr.iha
150 ;;
151
152 // CR[IIM]
153 mov cr.iim = r15
154 mov r16 = cr.iim
155 ;;
156
157 // CR[IIP]
158 mov cr.iip = r17
159 rfi
160 ;;
161
162 // CR[IIPA]
163 mov cr.iipa = r19
164 mov r20 = cr.iipa
165 ;;
166
167 // CR[IPSR]
168 mov cr.ipsr = r21
169 rfi
170 ;;
171
172 // CR[IRR%]
173 mov r22 = cr.ivr
174 mov r23 = cr.irr0
175 ;;
176
177 // CR[ISR]
178 mov cr.isr = r24
179 mov r25 = cr.isr
180 ;;
181
182 // CR[ITIR]
183 mov cr.itir = r26
184 itc.d r27
185 ;;
186
187 // CR[ITM]
188 mov cr.itm = r28
189 mov r29 = cr.itm
190 ;;
191
192 // CR[ITV]
193 mov cr.itv = r0
194 mov r1 = cr.itv
195 ;;
196
197 // CR[IVR] (all writes are implicit in other resource usage)
198
199 // CR[IVA]
200 mov cr.iva = r0
201 mov r1 = cr.iva
202 ;;
203
204 // CR[LID]
205 mov cr.lid = r0
206 mov r1 = cr.lid
207 ;;
208 srlz.d
209
210 // CR[LRR%]
211 mov cr.lrr0 = r0
212 mov r1 = cr.lrr0
213 ;;
214
215 // CR[PMV]
216 mov cr.pmv = r0
217 mov r1 = cr.pmv
218 ;;
219
220 // CR[PTA]
221 mov cr.pta = r0
222 thash r1 = r2
223 ;;
224
225 // CR[TPR]
226 mov cr.tpr = r0
227 mov r1 = cr.ivr // data
228 ;;
229 srlz.d
230 mov cr.tpr = r2
231 mov psr.l = r3 // other
232 ;;
233 srlz.d
234
235 // DBR#
236 mov dbr[r0] = r1
237 mov r2 = dbr[r3]
238 ;;
239 srlz.d
240 mov dbr[r4] = r5
241 probe.r r6 = r7, r8
242 ;;
243 srlz.d
244
245 // DTC
246 ptc.e r0
247 fc r1
248 ;;
249 srlz.d
250 itr.i itr[r2] = r3
251 ptc.e r4
252 ;;
253
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
258 srlz.d
259
260 // DTR
261 itr.d dtr[r0] = r1
262 tak r2 = r3
263 ;;
264 srlz.d
265 ptr.d r4, r5
266 tpa r6 = r7
267 ;;
268 srlz.d
269
270 // FR%
271 ldfs.c.clr f2 = [r1]
272 mov f3 = f2 // no DV here
273 ;;
274 mov f4 = f5
275 mov f6 = f4
276 ;;
277
278 // GR%
279 ld8.c.clr r0 = [r1] // no DV here
280 mov r2 = r0
281 ;;
282 mov r3 = r4
283 mov r5 = r3
284 ;;
285
286 // IBR#
287 mov ibr[r0] = r1
288 mov r2 = ibr[r3]
289 ;;
290
291 // InService
292 mov cr.eoi = r0
293 mov r1 = cr.ivr
294 ;;
295 srlz.d
296 mov r2 = cr.ivr
297 mov r3 = cr.ivr // several DVs
298 ;;
299 mov cr.eoi = r4
300 mov cr.eoi = r5
301 ;;
302
303 // ITC
304 ptc.e r0
305 epc
306 ;;
307 srlz.i
308 ;;
309
310 // ITC_LIMIT (see DTC_LIMIT)
311
312 // ITR
313 itr.i itr[r0] = r1
314 epc
315 ;;
316 srlz.i
317 ;;
318
319 // PKR#
320 mov pkr[r0] = r1
321 probe.r r2 = r3, r4
322 ;;
323 srlz.d
324 mov pkr[r5] = r6
325 mov r7 = pkr[r8]
326 ;;
327 srlz.d
328
329 // PMC#
330 mov pmc[r0] = r1
331 mov r2 = pmc[r3]
332 ;;
333 srlz.d
334 mov pmc[r4] = r5
335 mov r6 = pmd[r7]
336 ;;
337 srlz.d
338
339 // PMD#
340 mov pmd[r0] = r1
341 mov r2 = pmd[r3]
342 ;;
343
344 // PR%
345 cmp.eq p1, p2 = r0, r1 // pr-writer/pr-reader-nobr-nomovpr
346 (p1) add r2 = r3, r4
347 ;;
348 mov pr = r5, 0xffff // mov-to-pr-allreg/pr-reader-nobr-nomovpr
349 (p2) add r6 = r7, r8
350 ;;
351 fcmp.eq p5, p6 = f2, f3 // pr-writer-fp/pr-reader-br
352 (p5) br.cond.sptk b0
353 ;;
354 cmp.eq p7, p8 = r11, r12
355 (p7) br.cond.sptk b1 // no DV here
356 ;;
357
358 // PR63
359 br.wtop.sptk L
360 (p63) add r0 = r1, r2
361 ;;
362 fcmp.eq p62, p63 = f2, f3
363 (p63) add r3 = r4, r5
364 ;;
365 cmp.eq p62, p63 = r6, r7 // no DV here
366 (p63) br.cond.sptk b0
367 ;;
368
369 // PSR.ac
370 rum (1<<3)
371 ld8 r0 = [r1]
372 ;;
373
374 // PSR.be
375 rum (1<<1)
376 ld8 r0 = [r1]
377 ;;
378
379 // PSR.bn
380 bsw.0
381 mov r0 = r15 // no DV here, since gr < 16
382 ;;
383 bsw.1 // GAS automatically emits a stop after bsw.n
384 mov r1 = r16 // so this conflict is avoided
385 ;;
386
387 // PSR.cpl
388 epc
389 st8 [r0] = r1
390 ;;
391 epc
392 mov r2 = ar.itc
393 ;;
394 epc
395 mov ar.itc = r3
396 ;;
397 epc
398 mov ar.rsc = r4
399 ;;
400 epc
401 mov ar.k0 = r5
402 ;;
403 epc
404 mov r6 = pmd[r7]
405 ;;
406 epc
407 mov ar.bsp = r8 // no DV here
408 ;;
409 epc
410 mov r9 = ar.bsp // no DV here
411 ;;
412 epc
413 mov cr.ifa = r10 // any mov-to/from-cr is a DV
414 ;;
415 epc
416 mov r11 = cr.eoi // any mov-to/from-cr is a DV
417 ;;
418
419 // PSR.da (rfi is the only writer)
420 // PSR.db (also ac,be,dt,pk)
421 mov psr.l = r0
422 ld8 r1 = [r2]
423 ;;
424 srlz.d
425
426 // PSR.dd (rfi is the only writer)
427
428 // PSR.dfh
429 mov psr.l = r0
430 mov f64 = f65
431 ;;
432 srlz.d
433
434 // PSR.dfl
435 mov psr.l = r0
436 mov f3 = f4
437 ;;
438 srlz.d
439
440 // PSR.di
441 rsm (1<<22)
442 mov r0 = psr
443 ;;
444
445 // PSR.dt
446 rsm (1<<17)
447 ld8 r0 = [r1]
448 ;;
449
450 // PSR.ed (rfi is the only writer)
451 // PSR.i
452 ssm (1<<14)
453 mov r0 = psr
454 ;;
455
456 // PSR.ia (no DV semantics)
457 // PSR.ic
458 ssm (1<<13)
459 mov r0 = psr
460 ;;
461 srlz.d
462 rsm (1<<13)
463 mov r1 = cr.itir
464 ;;
465 srlz.d
466 rsm (1<<13)
467 mov r1 = cr.irr0 // no DV here
468 ;;
469 srlz.d
470
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)
474 // PSR.lp
475 mov psr.l = r0
476 br.ret.sptk b0
477 ;;
478
479 // PSR.mc (rfi is the only writer)
480 // PSR.mfh
481 mov f32 = f33
482 mov r0 = psr
483 ;;
484
485 // PSR.mfl
486 mov f2 = f3
487 mov r0 = psr
488 ;;
489
490 // PSR.pk
491 rsm (1<<15)
492 ld8 r0 = [r1]
493 ;;
494 rsm (1<<15)
495 mov r2 = psr
496 ;;
497
498 // PSR.pp
499 rsm (1<<21)
500 mov r0 = psr
501 ;;
502
503 // PSR.ri (no DV semantics)
504 // PSR.rt
505 mov psr.l = r0
506 flushrs
507 ;;
508 srlz.d
509
510 // PSR.si
511 rsm (1<<23)
512 mov r0 = ar.itc
513 ;;
514 ssm (1<<23)
515 mov r1 = ar.ec // no DV here
516 ;;
517
518 // PSR.sp
519 ssm (1<<20)
520 mov r0 = pmd[r1]
521 ;;
522 ssm (1<<20)
523 rum 0xff
524 ;;
525 ssm (1<<20)
526 mov r0 = rr[r1]
527 ;;
528
529 // PSR.ss (rfi is the only writer)
530 // PSR.tb
531 mov psr.l = r0
532 chk.s r0, L
533 ;;
534
535 // PSR.up
536 rsm (1<<2)
537 mov r0 = psr.um
538 ;;
539 srlz.d
540
541 // RR#
542 mov rr[r0] = r1
543 ld8 r2 = [r0] // data
544 ;;
545 mov rr[r4] = r5
546 mov r6 = rr[r7] // impliedf
547 ;;
548 // RSE
549 L:
This page took 0.046396 seconds and 3 git commands to generate.