blob: aea022f887667291378c03707c60ab51d9be05df [file] [log] [blame]
Ehsan Amiri6c17bb02016-12-19 13:35:45 +00001//===- 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