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
18def : 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
113def : 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
129def : 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
217def : 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
263def : 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
370def : 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
393def : 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
424def : 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
520def : 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
539def : 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
553def : InstRW<[P9_DFU_58C, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
554      (instrs
555    XSDIVQP,
556    XSDIVQPO
557)>;
558
559def : 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
567def : 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
576def : InstRW<[P9_LS_5C, IP_AGEN_1C, DISP_1C, DISP_1C, DISP_1C],
577      (instrs
578    LFIWZX,
579    LFDX,
580    LFD
581)>;
582
583def : 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
591def : 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
599def : 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
607def : 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
619def : 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
628def : InstRW<[P9_DIV_16C_8, IP_EXECE_1C, DISP_1C, DISP_1C],
629      (instrs
630    DIVW,
631    DIVWU
632)>;
633
634def : InstRW<[P9_DIV_24C_8, IP_EXECE_1C, DISP_1C, DISP_1C],
635      (instrs
636    DIVWE,
637    DIVD,
638    DIVWEU,
639    DIVDU
640)>;
641
642def : InstRW<[P9_DIV_40C_8, IP_EXECE_1C, DISP_1C, DISP_1C],
643      (instrs
644    DIVDE,
645    DIVDEU
646)>;
647
648def : 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
655def : 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
663def : 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
672def : 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
684def : 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
693def : InstRW<[P9_ALU_5C, IP_EXEC_1C, DISP_1C, DISP_1C],
694      (instrs
695    MCRF,
696    MCRXRX
697)>;
698
699def : 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
707def : InstRW<[P9_DP_33C_8, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C],
708      (instrs
709    FDIV,
710    XSDIVDP
711)>;
712
713def : InstRW<[P9_DP_22C_5, IP_EXEC_1C, DISP_1C, DISP_1C, DISP_1C],
714      (instrs
715    FDIVS,
716    XSDIVSP
717)>;
718
719def : InstRW<[P9_DP_24C_8, IP_EXECE_1C, IP_EXECO_1C, DISP_1C, DISP_1C],
720      (instrs
721    XVDIVSP
722)>;
723
724def : 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
731def : 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
772def : 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
785def : 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
793def : 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
802def : 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
809