]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/lib/Target/PowerPC/P9InstrResources.td
Import zstandard 1.1.4 in base
[FreeBSD/FreeBSD.git] / contrib / llvm / lib / Target / PowerPC / P9InstrResources.td
1 //===- P9InstrResources.td - P9 Instruction Resource Defs  -*- tablegen -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines resources required by some of P9 instruction. This is part
11 // P9 processor model used for instruction scheduling. Not every instruction
12 // is listed here. Instructions in this file belong to itinerary classes that
13 // have instructions with different resource requirements.
14 //
15 //===----------------------------------------------------------------------===//
16
17
18 def : InstRW<[P9_ALUE_2C, P9_ALUO_2C, IP_EXECE_1C, IP_EXECO_1C,
19               DISP_1C, DISP_1C],
20       (instrs
21     VADDCUW,
22     VADDUBM,
23     VADDUDM,
24     VADDUHM,
25     VADDUWM,
26     VAND,
27     VANDC,
28     VCMPEQUB,
29     VCMPEQUBo,
30     VCMPEQUD,
31     VCMPEQUDo,
32     VCMPEQUH,
33     VCMPEQUHo,
34     VCMPEQUW,
35     VCMPEQUWo,
36     VCMPGTSB,
37     VCMPGTSBo,
38     VCMPGTSD,
39     VCMPGTSDo,
40     VCMPGTSH,
41     VCMPGTSHo,
42     VCMPGTSW,
43     VCMPGTSWo,
44     VCMPGTUB,
45     VCMPGTUBo,
46     VCMPGTUD,
47     VCMPGTUDo,
48     VCMPGTUH,
49     VCMPGTUHo,
50     VCMPGTUW,
51     VCMPGTUWo,
52     VCMPNEB,
53     VCMPNEBo,
54     VCMPNEH,
55     VCMPNEHo,
56     VCMPNEW,
57     VCMPNEWo,
58     VCMPNEZB,
59     VCMPNEZBo,
60     VCMPNEZH,
61     VCMPNEZHo,
62     VCMPNEZW,
63     VCMPNEZWo,
64     VEQV,
65     VEXTSB2D,
66     VEXTSB2W,
67     VEXTSH2D,
68     VEXTSH2W,
69     VEXTSW2D,
70     VMRGEW,
71     VMRGOW,
72     VNAND,
73     VNEGD,
74     VNEGW,
75     VNOR,
76     VOR,
77     VORC,
78     VPOPCNTB,
79     VPOPCNTH,
80     VPOPCNTW,
81     VSEL,
82     VSUBCUW,
83     VSUBUBM,
84     VSUBUDM,
85     VSUBUHM,
86     VSUBUWM,
87     VXOR,
88     V_SET0B,
89     V_SET0H,
90     V_SET0,
91     XVABSDP,
92     XVABSSP,
93     XVCPSGNDP,
94     XVCPSGNSP,
95     XVIEXPDP,
96     XVNABSDP,
97     XVNABSSP,
98     XVNEGDP,
99     XVNEGSP,
100     XVXEXPDP,
101     XXLAND,
102     XXLANDC,
103     XXLEQV,
104     XXLNAND,
105     XXLNOR,
106     XXLOR,
107     XXLORf,
108     XXLORC,
109     XXLXOR,
110     XXSEL
111 )>;
112
113 def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C, DISP_1C],
114       (instrs
115     XSABSQP,
116     XSCPSGNQP,
117     XSIEXPQP,
118     XSNABSQP,
119     XSNEGQP,
120     XSXEXPQP,
121     XSABSDP,
122     XSCPSGNDP,
123     XSIEXPDP,
124     XSNABSDP,
125     XSNEGDP,
126     XSXEXPDP
127 )>;
128
129 def : InstRW<[P9_ALUE_3C, P9_ALUO_3C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
130       (instrs
131
132     VMINSB,
133     VMINSD,
134     VMINSH,
135     VMINSW,
136     VMINUB,
137     VMINUD,
138     VMINUH,
139     VMINUW,
140     VPOPCNTD,
141     VPRTYBD,
142     VPRTYBW,
143     VRLB,
144     VRLD,
145     VRLDMI,
146     VRLDNM,
147     VRLH,
148     VRLW,
149     VRLWMI,
150     VRLWNM,
151     VSHASIGMAD,
152     VSHASIGMAW,
153     VSLB,
154     VSLD,
155     VSLH,
156     VSLW,
157     VSRAB,
158     VSRAD,
159     VSRAH,
160     VSRAW,
161     VSRB,
162     VSRD,
163     VSRH,
164     VSRW,
165     VSUBSBS,
166     VSUBSHS,
167     VSUBSWS,
168     VSUBUBS,
169     VSUBUHS,
170     VSUBUWS,
171     XSCMPEQDP,
172     XSCMPEXPDP,
173     XSCMPGEDP,
174     XSCMPGTDP,
175     XSCMPODP,
176     XSCMPUDP,
177     XSCVSPDPN,
178     XSMAXCDP,
179     XSMAXDP,
180     XSMAXJDP,
181     XSMINCDP,
182     XSMINDP,
183     XSMINJDP,
184     XSTDIVDP,
185     XSTSQRTDP,
186     XSTSTDCDP,
187     XSTSTDCSP,
188     XSXSIGDP,
189     XVCMPEQDP,
190     XVCMPEQDPo,
191     XVCMPEQSP,
192     XVCMPEQSPo,
193     XVCMPGEDP,
194     XVCMPGEDPo,
195     XVCMPGESP,
196     XVCMPGESPo,
197     XVCMPGTDP,
198     XVCMPGTDPo,
199     XVCMPGTSP,
200     XVCMPGTSPo,
201     XVIEXPSP,
202     XVMAXDP,
203     XVMAXSP,
204     XVMINDP,
205     XVMINSP,
206     XVTDIVDP,
207     XVTDIVSP,
208     XVTSQRTDP,
209     XVTSQRTSP,
210     XVTSTDCDP,
211     XVTSTDCSP,
212     XVXEXPSP,
213     XVXSIGDP,
214     XVXSIGSP
215 )>;
216
217 def : InstRW<[P9_ALUE_4C, P9_ALUO_4C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
218       (instrs
219     VABSDUB,
220     VABSDUH,
221     VABSDUW,
222     VADDSBS,
223     VADDSHS,
224     VADDSWS,
225     VADDUBS,
226     VADDUHS,
227     VADDUWS,
228     VAVGSB,
229     VAVGSH,
230     VAVGSW,
231     VAVGUB,
232     VAVGUH,
233     VAVGUW,
234     VBPERMD,
235     VCLZB,
236     VCLZD,
237     VCLZH,
238     VCLZW,
239     VCMPBFP,
240     VCMPBFPo,
241     VCMPGTFP,
242     VCMPGTFPo,
243     VCTZB,
244     VCTZD,
245     VCTZH,
246     VCTZW,
247     VMAXFP,
248     VMAXSB,
249     VMAXSD,
250     VMAXSH,
251     VMAXSW,
252     VMAXUB,
253     VMAXUD,
254     VMAXUH,
255     VMAXUW,
256     VMINFP,
257     VCMPEQFP,
258     VCMPEQFPo,
259     VCMPGEFP,
260     VCMPGEFPo
261 )>;
262
263 def : InstRW<[P9_DPE_7C, P9_DPO_7C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
264       (instrs
265     VADDFP,
266     VCTSXS,
267     VCTSXS_0,
268     VCTUXS,
269     VCTUXS_0,
270     VEXPTEFP,
271     VLOGEFP,
272     VMADDFP,
273     VMHADDSHS,
274     VNMSUBFP,
275     VREFP,
276     VRFIM,
277     VRFIN,
278     VRFIP,
279     VRFIZ,
280     VRSQRTEFP,
281     VSUBFP,
282     XVADDDP,
283     XVADDSP,
284     XVCVDPSP,
285     XVCVDPSXDS,
286     XVCVDPSXWS,
287     XVCVDPUXDS,
288     XVCVDPUXWS,
289     XVCVHPSP,
290     XVCVSPDP,
291     XVCVSPHP,
292     XVCVSPSXDS,
293     XVCVSPSXWS,
294     XVCVSPUXDS,
295     XVCVSPUXWS,
296     XVCVSXDDP,
297     XVCVSXDSP,
298     XVCVSXWDP,
299     XVCVSXWSP,
300     XVCVUXDDP,
301     XVCVUXDSP,
302     XVCVUXWDP,
303     XVCVUXWSP,
304     XVMADDADP,
305     XVMADDASP,
306     XVMADDMDP,
307     XVMADDMSP,
308     XVMSUBADP,
309     XVMSUBASP,
310     XVMSUBMDP,
311     XVMSUBMSP,
312     XVMULDP,
313     XVMULSP,
314     XVNMADDADP,
315     XVNMADDASP,
316     XVNMADDMDP,
317     XVNMADDMSP,
318     XVNMSUBADP,
319     XVNMSUBASP,
320     XVNMSUBMDP,
321     XVNMSUBMSP,
322     XVRDPI,
323     XVRDPIC,
324     XVRDPIM,
325     XVRDPIP,
326     XVRDPIZ,
327     XVREDP,
328     XVRESP,
329     XVRSPI,
330     XVRSPIC,
331     XVRSPIM,
332     XVRSPIP,
333     XVRSPIZ,
334     XVRSQRTEDP,
335     XVRSQRTESP,
336     XVSUBDP,
337     XVSUBSP,
338     VCFSX,
339     VCFSX_0,
340     VCFUX,
341     VCFUX_0,
342     VMHRADDSHS,
343     VMLADDUHM,
344     VMSUMMBM,
345     VMSUMSHM,
346     VMSUMSHS,
347     VMSUMUBM,
348     VMSUMUHM,
349     VMSUMUHS,
350     VMULESB,
351     VMULESH,
352     VMULESW,
353     VMULEUB,
354     VMULEUH,
355     VMULEUW,
356     VMULOSB,
357     VMULOSH,
358     VMULOSW,
359     VMULOUB,
360     VMULOUH,
361     VMULOUW,
362     VMULUWM,
363     VSUM2SWS,
364     VSUM4SBS,
365     VSUM4SHS,
366     VSUM4UBS,
367     VSUMSWS
368 )>;
369
370 def : InstRW<[P9_DP_7C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C],
371       (instrs
372     XSMADDADP,
373     XSMADDASP,
374     XSMADDMDP,
375     XSMADDMSP,
376     XSMSUBADP,
377     XSMSUBASP,
378     XSMSUBMDP,
379     XSMSUBMSP,
380     XSMULDP,
381     XSMULSP,
382     XSNMADDADP,
383     XSNMADDASP,
384     XSNMADDMDP,
385     XSNMADDMSP,
386     XSNMSUBADP,
387     XSNMSUBASP,
388     XSNMSUBMDP,
389     XSNMSUBMSP
390 )>;
391
392
393 def : InstRW<[P9_DP_7C, IP_EXEC_1C, DISP_1C, DISP_1C],
394       (instrs
395     XSADDDP,
396     XSADDSP,
397     XSCVDPHP,
398     XSCVDPSP,
399     XSCVDPSXDS,
400     XSCVDPSXWS,
401     XSCVDPUXDS,
402     XSCVDPUXWS,
403     XSCVHPDP,
404     XSCVSPDP,
405     XSCVSXDDP,
406     XSCVSXDSP,
407     XSCVUXDDP,
408     XSCVUXDSP,
409     XSRDPI,
410     XSRDPIC,
411     XSRDPIM,
412     XSRDPIP,
413     XSRDPIZ,
414     XSREDP,
415     XSRESP,
416     //XSRSP,
417     XSRSQRTEDP,
418     XSRSQRTESP,
419     XSSUBDP,
420     XSSUBSP,
421     XSCVDPSPN
422 )>;
423
424 def : InstRW<[P9_PM_3C, IP_EXECO_1C, IP_EXECE_1C, DISP_1C, DISP_1C],
425       (instrs
426     VBPERMQ,
427     VCLZLSBB,
428     VCTZLSBB,
429     VEXTRACTD,
430     VEXTRACTUB,
431     VEXTRACTUH,
432     VEXTRACTUW,
433     VEXTUBLX,
434     VEXTUBRX,
435     VEXTUHLX,
436     VEXTUHRX,
437     VEXTUWLX,
438     VEXTUWRX,
439     VGBBD,
440     VINSERTB,
441     VINSERTD,
442     VINSERTH,
443     VINSERTW,
444     VMRGHB,
445     VMRGHH,
446     VMRGHW,
447     VMRGLB,
448     VMRGLH,
449     VMRGLW,
450     VPERM,
451     VPERMR,
452     VPERMXOR,
453     VPKPX,
454     VPKSDSS,
455     VPKSDUS,
456     VPKSHSS,
457     VPKSHUS,
458     VPKSWSS,
459     VPKSWUS,
460     VPKUDUM,
461     VPKUDUS,
462     VPKUHUM,
463     VPKUHUS,
464     VPKUWUM,
465     VPKUWUS,
466     VPRTYBQ,
467     VSL,
468     VSLDOI,
469     VSLO,
470     VSLV,
471     VSPLTB,
472     VSPLTH,
473     VSPLTISB,
474     VSPLTISH,
475     VSPLTISW,
476     VSPLTW,
477     VSR,
478     VSRO,
479     VSRV,
480     VUPKHPX,
481     VUPKHSB,
482     VUPKHSH,
483     VUPKHSW,
484     VUPKLPX,
485     VUPKLSB,
486     VUPKLSH,
487     VUPKLSW,
488     XXBRD,
489     XXBRH,
490     XXBRQ,
491     XXBRW,
492     XXEXTRACTUW,
493     XXINSERTW,
494     XXMRGHW,
495     XXMRGLW,
496     XXPERM,
497     XXPERMR,
498     XXSLDWI,
499     XXSPLTIB,
500     XXSPLTW,
501     VADDCUQ,
502     VADDECUQ,
503     VADDEUQM,
504     VADDUQM,
505     VMUL10CUQ,
506     VMUL10ECUQ,
507     VMUL10EUQ,
508     VMUL10UQ,
509     VSUBCUQ,
510     VSUBECUQ,
511     VSUBEUQM,
512     VSUBUQM,
513     XSCMPEXPQP,
514     XSCMPOQP,
515     XSCMPUQP,
516     XSTSTDCQP,
517     XSXSIGQP
518 )>;
519
520 def : InstRW<[P9_DFU_12C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
521       (instrs
522     XSADDQP,
523     XSADDQPO,
524     XSCVDPQP,
525     XSCVQPDP,
526     XSCVQPDPO,
527     XSCVQPSDZ,
528     XSCVQPSWZ,
529     XSCVQPUDZ,
530     XSCVQPUWZ,
531     XSCVSDQP,
532     XSCVUDQP,
533     XSRQPI,
534     XSRQPXP,
535     XSSUBQP,
536     XSSUBQPO
537 )>;
538
539 def : InstRW<[P9_DFU_24C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
540       (instrs
541     XSMADDQP,
542     XSMADDQPO,
543     XSMSUBQP,
544     XSMSUBQPO,
545     XSMULQP,
546     XSMULQPO,
547     XSNMADDQP,
548     XSNMADDQPO,
549     XSNMSUBQP,
550     XSNMSUBQPO
551 )>;
552
553 def : InstRW<[P9_DFU_58C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
554       (instrs
555     XSDIVQP,
556     XSDIVQPO
557 )>;
558
559 def : InstRW<[P9_DFU_76C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
560       (instrs
561     XSSQRTQP,
562     XSSQRTQPO
563 )>;
564
565 // Load Operation in IIC_LdStLFD
566
567 def : InstRW<[P9_LS_5C, IP_AGEN_1C, DISP_1C, DISP_1C],
568       (instrs
569     LXSDX,
570     LXVD2X,
571     LXSIWZX,
572     LXV,
573     LXSD
574 )>;
575
576 def : InstRW<[P9_LS_5C, IP_AGEN_1C, DISP_1C, DISP_1C, DISP_1C],
577       (instrs
578     LFIWZX,
579     LFDX,
580     LFD
581 )>;
582
583 def : InstRW<[P9_LoadAndALUOp_7C, IP_AGEN_1C, IP_EXEC_1C,
584               DISP_1C, DISP_1C, DISP_1C, DISP_1C],
585       (instrs
586     LXSSPX,
587     LXSIWAX,
588     LXSSP
589 )>;
590
591 def : InstRW<[P9_LoadAndALUOp_7C, IP_AGEN_1C, IP_EXEC_1C,
592               DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C],
593       (instrs
594     LFIWAX,
595     LFSX,
596     LFS
597 )>;
598
599 def : InstRW<[P9_LoadAndPMOp_8C, IP_AGEN_1C, IP_EXEC_1C, DISP_1C, DISP_1C],
600       (instrs
601     LXVDSX,
602     LXVW4X
603 )>;
604
605 // Store Operations in IIC_LdStSTFD.
606
607 def : InstRW<[P9_LS_1C, IP_EXEC_1C, IP_AGEN_1C, DISP_1C, DISP_1C, DISP_1C],
608       (instrs
609     STFS,
610     STFD,
611     STFIWX,
612     STFSX,
613     STFDX,
614     STXSDX,
615     STXSSPX,
616     STXSIWX
617 )>;
618
619 def : InstRW<[P9_LS_1C, IP_EXEC_1C, IP_EXEC_1C, IP_AGEN_1C, DISP_1C, DISP_1C],
620       (instrs
621     STXVD2X,
622     STXVW4X
623 )>;
624
625
626 // Divide Operations in IIC_IntDivW, IIC_IntDivD.
627
628 def : InstRW<[P9_DIV_16C_8, IP_EXECE_1C, DISP_1C, DISP_1C],
629       (instrs
630     DIVW,
631     DIVWU
632 )>;
633
634 def : InstRW<[P9_DIV_24C_8, IP_EXECE_1C, DISP_1C, DISP_1C],
635       (instrs
636     DIVWE,
637     DIVD,
638     DIVWEU,
639     DIVDU
640 )>;
641
642 def : InstRW<[P9_DIV_40C_8, IP_EXECE_1C, DISP_1C, DISP_1C],
643       (instrs
644     DIVDE,
645     DIVDEU
646 )>;
647
648 def : InstRW<[P9_IntDivAndALUOp_26C_8, IP_EXECE_1C, IP_EXEC_1C,
649               DISP_1C, DISP_1C, DISP_1C, DISP_1C],
650       (instrs
651     DIVWEo,
652     DIVWEUo
653 )>;
654
655 def : InstRW<[P9_IntDivAndALUOp_42C_8, IP_EXECE_1C, IP_EXEC_1C,
656               DISP_1C, DISP_1C, DISP_1C, DISP_1C],
657       (instrs
658     DIVDEo,
659     DIVDEUo
660 )>;
661
662 // Rotate Operations in IIC_IntRotateD, IIC_IntRotateDI
663 def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C, DISP_1C],
664       (instrs
665     SLD,
666     SRD,
667     SRAD,
668     SRADI,
669     RLDIC
670 )>;
671
672 def : InstRW<[P9_ALU_2C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C],
673       (instrs
674     RLDCL,
675     RLDCR,
676     RLDIMI,
677     RLDICL,
678     RLDICR,
679     RLDICL_32_64
680 )>;
681
682 // CR access instructions in _BrMCR, IIC_BrMCRX.
683
684 def : InstRW<[P9_ALU_2C, P9_ALU_2C, IP_EXEC_1C, IP_EXEC_1C,
685               DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C],
686       (instrs
687     MTOCRF,
688     MTOCRF8,
689     MTCRF,
690     MTCRF8
691 )>;
692
693 def : InstRW<[P9_ALU_5C, IP_EXEC_1C, DISP_1C, DISP_1C],
694       (instrs
695     MCRF,
696     MCRXRX
697 )>;
698
699 def : InstRW<[P9_ALU_5C, P9_ALU_5C, IP_EXEC_1C, IP_EXEC_1C,
700               DISP_1C, DISP_1C, DISP_1C, DISP_1C],
701       (instrs
702     MCRFS
703 )>;
704
705 // FP Div instructions in IIC_FPDivD and IIC_FPDivS.
706
707 def : InstRW<[P9_DP_33C_8, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C],
708       (instrs
709     FDIV,
710     XSDIVDP
711 )>;
712
713 def : InstRW<[P9_DP_22C_5, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C],
714       (instrs
715     FDIVS,
716     XSDIVSP
717 )>;
718
719 def : InstRW<[P9_DP_24C_8, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
720       (instrs
721     XVDIVSP
722 )>;
723
724 def : InstRW<[P9_DP_33C_8, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
725       (instrs
726     XVDIVDP
727 )>;
728
729 // FP Instructions in IIC_FPGeneral, IIC_FPFused
730
731 def : InstRW<[P9_DP_7C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C],
732       (instrs
733     FRSP,
734     FRIND,
735     FRINS,
736     FRIPD,
737     FRIPS,
738     FRIZD,
739     FRIZS,
740     FRIMD,
741     FRIMS,
742     FRE,
743     FRES,
744     FRSQRTE,
745     FRSQRTES,
746     FMADDS,
747     FMADD,
748     FMSUBS,
749     FMSUB,
750     FNMADDS,
751     FNMADD,
752     FNMSUBS,
753     FNMSUB,
754     FSELD,
755     FSELS,
756     FADDS,
757     FMULS,
758     FMUL,
759     FSUBS,
760     FCFID,
761     FCTID,
762     FCTIDZ,
763     FCFIDU,
764     FCFIDS,
765     FCFIDUS,
766     FCTIDUZ,
767     FCTIWUZ,
768     FCTIW,
769     FCTIWZ
770 )>;
771
772 def : InstRW<[P9_DP_7C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C],
773       (instrs
774     FMR,
775     FABSD,
776     FABSS,
777     FNABSD,
778     FNABSS,
779     FNEGD,
780     FNEGS,
781     FCPSGND,
782     FCPSGNS
783 )>;
784
785 def : InstRW<[P9_ALU_3C, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C],
786       (instrs
787     FCMPUS,
788     FCMPUD
789 )>;
790
791 // Load instructions in IIC_LdStLFDU and IIC_LdStLFDUX.
792
793 def : InstRW<[P9_LoadAndALUOp_7C, P9_ALU_2C,
794               IP_AGEN_1C, IP_EXEC_1C, IP_EXEC_1C,
795               DISP_1C, DISP_1C, DISP_1C, DISP_1C,
796               DISP_1C, DISP_1C, DISP_1C, DISP_1C],
797       (instrs
798     LFSU,
799     LFSUX
800 )>;
801
802 def : InstRW<[P9_LS_5C, P9_ALU_2C, IP_AGEN_1C, IP_EXEC_1C,
803               DISP_1C, DISP_1C, DISP_1C, DISP_1C, DISP_1C],
804       (instrs
805     LFDU,
806     LFDUX
807 )>;
808