P10InstrResources.td 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080
  1. //===--- P10InstrResources.td - P10 Scheduling Definitions -*- tablegen -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8. // Automatically generated file, do not edit!
  9. //
  10. // This file defines the itinerary class data for the POWER10 processor.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. // 22 Cycles Binary Floating Point operations, 2 input operands
  14. def : InstRW<[P10W_BF_22C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
  15. (instrs
  16. FDIVS,
  17. XSDIVSP
  18. )>;
  19. // 2-way crack instructions
  20. // 22 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 2 input operands
  21. def : InstRW<[P10W_BF_22C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  22. (instrs
  23. FDIVS_rec
  24. )>;
  25. // 24 Cycles Binary Floating Point operations, 2 input operands
  26. def : InstRW<[P10W_BF_24C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
  27. (instrs
  28. XVDIVSP
  29. )>;
  30. // 26 Cycles Binary Floating Point operations, 1 input operands
  31. def : InstRW<[P10W_BF_26C, P10W_DISP_ANY, P10BF_Read],
  32. (instrs
  33. FSQRTS,
  34. XSSQRTSP
  35. )>;
  36. // 2-way crack instructions
  37. // 26 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 1 input operands
  38. def : InstRW<[P10W_BF_26C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  39. (instrs
  40. FSQRTS_rec
  41. )>;
  42. // 27 Cycles Binary Floating Point operations, 1 input operands
  43. def : InstRW<[P10W_BF_27C, P10W_DISP_ANY, P10BF_Read],
  44. (instrs
  45. XVSQRTSP
  46. )>;
  47. // 27 Cycles Binary Floating Point operations, 2 input operands
  48. def : InstRW<[P10W_BF_27C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
  49. (instrs
  50. FDIV,
  51. XSDIVDP,
  52. XVDIVDP
  53. )>;
  54. // 2-way crack instructions
  55. // 27 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 2 input operands
  56. def : InstRW<[P10W_BF_27C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  57. (instrs
  58. FDIV_rec
  59. )>;
  60. // 36 Cycles Binary Floating Point operations, 1 input operands
  61. def : InstRW<[P10W_BF_36C, P10W_DISP_ANY, P10BF_Read],
  62. (instrs
  63. FSQRT,
  64. XSSQRTDP,
  65. XVSQRTDP
  66. )>;
  67. // 2-way crack instructions
  68. // 36 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 1 input operands
  69. def : InstRW<[P10W_BF_36C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  70. (instrs
  71. FSQRT_rec
  72. )>;
  73. // 7 Cycles Binary Floating Point operations, 1 input operands
  74. def : InstRW<[P10W_BF_7C, P10W_DISP_ANY, P10BF_Read],
  75. (instrs
  76. FCFID,
  77. FCFIDS,
  78. FCFIDU,
  79. FCFIDUS,
  80. FCTID,
  81. FCTIDU,
  82. FCTIDUZ,
  83. FCTIDZ,
  84. FCTIW,
  85. FCTIWU,
  86. FCTIWUZ,
  87. FCTIWZ,
  88. FRE,
  89. FRES,
  90. FRIMD, FRIMS,
  91. FRIND, FRINS,
  92. FRIPD, FRIPS,
  93. FRIZD, FRIZS,
  94. FRSP,
  95. FRSQRTE,
  96. FRSQRTES,
  97. VCFSX, VCFSX_0,
  98. VCFUX, VCFUX_0,
  99. VCTSXS, VCTSXS_0,
  100. VCTUXS, VCTUXS_0,
  101. VLOGEFP,
  102. VREFP,
  103. VRFIM,
  104. VRFIN,
  105. VRFIP,
  106. VRFIZ,
  107. VRSQRTEFP,
  108. XSCVDPHP,
  109. XSCVDPSP,
  110. XSCVDPSPN,
  111. XSCVDPSXDS, XSCVDPSXDSs,
  112. XSCVDPSXWS, XSCVDPSXWSs,
  113. XSCVDPUXDS, XSCVDPUXDSs,
  114. XSCVDPUXWS, XSCVDPUXWSs,
  115. XSCVSPDP,
  116. XSCVSXDDP,
  117. XSCVSXDSP,
  118. XSCVUXDDP,
  119. XSCVUXDSP,
  120. XSRDPI,
  121. XSRDPIC,
  122. XSRDPIM,
  123. XSRDPIP,
  124. XSRDPIZ,
  125. XSREDP,
  126. XSRESP,
  127. XSRSP,
  128. XSRSQRTEDP,
  129. XSRSQRTESP,
  130. XVCVDPSP,
  131. XVCVDPSXDS,
  132. XVCVDPSXWS,
  133. XVCVDPUXDS,
  134. XVCVDPUXWS,
  135. XVCVSPBF16,
  136. XVCVSPDP,
  137. XVCVSPHP,
  138. XVCVSPSXDS,
  139. XVCVSPSXWS,
  140. XVCVSPUXDS,
  141. XVCVSPUXWS,
  142. XVCVSXDDP,
  143. XVCVSXDSP,
  144. XVCVSXWDP,
  145. XVCVSXWSP,
  146. XVCVUXDDP,
  147. XVCVUXDSP,
  148. XVCVUXWDP,
  149. XVCVUXWSP,
  150. XVRDPI,
  151. XVRDPIC,
  152. XVRDPIM,
  153. XVRDPIP,
  154. XVRDPIZ,
  155. XVREDP,
  156. XVRESP,
  157. XVRSPI,
  158. XVRSPIC,
  159. XVRSPIM,
  160. XVRSPIP,
  161. XVRSPIZ,
  162. XVRSQRTEDP,
  163. XVRSQRTESP
  164. )>;
  165. // 7 Cycles Binary Floating Point operations, 2 input operands
  166. def : InstRW<[P10W_BF_7C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
  167. (instrs
  168. FADD,
  169. FADDS,
  170. FMUL,
  171. FMULS,
  172. FSUB,
  173. FSUBS,
  174. VADDFP,
  175. VSUBFP,
  176. XSADDDP,
  177. XSADDSP,
  178. XSMULDP,
  179. XSMULSP,
  180. XSSUBDP,
  181. XSSUBSP,
  182. XVADDDP,
  183. XVADDSP,
  184. XVMULDP,
  185. XVMULSP,
  186. XVSUBDP,
  187. XVSUBSP
  188. )>;
  189. // 7 Cycles Binary Floating Point operations, 3 input operands
  190. def : InstRW<[P10W_BF_7C, P10W_DISP_ANY, P10BF_Read, P10BF_Read, P10BF_Read],
  191. (instrs
  192. FMADD,
  193. FMADDS,
  194. FMSUB,
  195. FMSUBS,
  196. FNMADD,
  197. FNMADDS,
  198. FNMSUB,
  199. FNMSUBS,
  200. FSELD, FSELS,
  201. VMADDFP,
  202. VNMSUBFP,
  203. XSMADDADP,
  204. XSMADDASP,
  205. XSMADDMDP,
  206. XSMADDMSP,
  207. XSMSUBADP,
  208. XSMSUBASP,
  209. XSMSUBMDP,
  210. XSMSUBMSP,
  211. XSNMADDADP,
  212. XSNMADDASP,
  213. XSNMADDMDP,
  214. XSNMADDMSP,
  215. XSNMSUBADP,
  216. XSNMSUBASP,
  217. XSNMSUBMDP,
  218. XSNMSUBMSP,
  219. XVMADDADP,
  220. XVMADDASP,
  221. XVMADDMDP,
  222. XVMADDMSP,
  223. XVMSUBADP,
  224. XVMSUBASP,
  225. XVMSUBMDP,
  226. XVMSUBMSP,
  227. XVNMADDADP,
  228. XVNMADDASP,
  229. XVNMADDMDP,
  230. XVNMADDMSP,
  231. XVNMSUBADP,
  232. XVNMSUBASP,
  233. XVNMSUBMDP,
  234. XVNMSUBMSP
  235. )>;
  236. // 2-way crack instructions
  237. // 7 Cycles Binary Floating Point operations, and 7 Cycles Binary Floating Point operations, 1 input operands
  238. def : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_BF_7C, P10W_DISP_ANY, P10BF_Read],
  239. (instrs
  240. VEXPTEFP
  241. )>;
  242. // 2-way crack instructions
  243. // 7 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 2 input operands
  244. def : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  245. (instrs
  246. FADD_rec,
  247. FADDS_rec,
  248. FMUL_rec,
  249. FMULS_rec,
  250. FSUB_rec,
  251. FSUBS_rec
  252. )>;
  253. // 2-way crack instructions
  254. // 7 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 1 input operands
  255. def : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  256. (instrs
  257. FCFID_rec,
  258. FCFIDS_rec,
  259. FCFIDU_rec,
  260. FCFIDUS_rec,
  261. FCTID_rec,
  262. FCTIDU_rec,
  263. FCTIDUZ_rec,
  264. FCTIDZ_rec,
  265. FCTIW_rec,
  266. FCTIWU_rec,
  267. FCTIWUZ_rec,
  268. FCTIWZ_rec,
  269. FRE_rec,
  270. FRES_rec,
  271. FRIMD_rec, FRIMS_rec,
  272. FRIND_rec, FRINS_rec,
  273. FRIPD_rec, FRIPS_rec,
  274. FRIZD_rec, FRIZS_rec,
  275. FRSP_rec,
  276. FRSQRTE_rec,
  277. FRSQRTES_rec
  278. )>;
  279. // 2-way crack instructions
  280. // 7 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 3 input operands
  281. def : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  282. (instrs
  283. FMADD_rec,
  284. FMADDS_rec,
  285. FMSUB_rec,
  286. FMSUBS_rec,
  287. FNMADD_rec,
  288. FNMADDS_rec,
  289. FNMSUB_rec,
  290. FNMSUBS_rec,
  291. FSELD_rec, FSELS_rec
  292. )>;
  293. // 2 Cycles Branch operations, 0 input operands
  294. def : InstRW<[P10W_BR_2C, P10W_DISP_ANY],
  295. (instrs
  296. BCLR, BCLRn, BDNZLR, BDNZLR8, BDNZLRm, BDNZLRp, BDZLR, BDZLR8, BDZLRm, BDZLRp, gBCLR,
  297. BCLRL, BCLRLn, BDNZLRL, BDNZLRLm, BDNZLRLp, BDZLRL, BDZLRLm, BDZLRLp, gBCLRL,
  298. BL, BL8, BL8_NOP, BL8_NOP_RM, BL8_NOP_TLS, BL8_NOTOC, BL8_NOTOC_RM, BL8_NOTOC_TLS, BL8_RM, BL8_TLS, BL8_TLS_, BLR, BLR8, BLRL, BL_NOP, BL_NOP_RM, BL_RM, BL_TLS
  299. )>;
  300. // 2 Cycles Branch operations, 1 input operands
  301. def : InstRW<[P10W_BR_2C, P10W_DISP_ANY, P10BR_Read],
  302. (instrs
  303. B, BCC, BCCA, BCCCTR, BCCCTR8, BCCCTRL, BCCCTRL8, BCCL, BCCLA, BCCLR, BCCLRL, CTRL_DEP, TAILB, TAILB8,
  304. BA, TAILBA, TAILBA8,
  305. BC, BCTR, BCTR8, BCTRL, BCTRL8, BCTRL8_LDinto_toc, BCTRL8_LDinto_toc_RM, BCTRL8_RM, BCTRL_LWZinto_toc, BCTRL_LWZinto_toc_RM, BCTRL_RM, BCn, BDNZ, BDNZ8, BDNZm, BDNZp, BDZ, BDZ8, BDZm, BDZp, TAILBCTR, TAILBCTR8, gBC, gBCat,
  306. BCL, BCLalways, BCLn, BDNZL, BDNZLm, BDNZLp, BDZL, BDZLm, BDZLp, gBCL, gBCLat,
  307. BLA, BLA8, BLA8_NOP, BLA8_NOP_RM, BLA8_RM, BLA_RM
  308. )>;
  309. // 2 Cycles Branch operations, 3 input operands
  310. def : InstRW<[P10W_BR_2C, P10W_DISP_ANY, P10BR_Read, P10BR_Read, P10BR_Read],
  311. (instrs
  312. BCCTR, BCCTR8, BCCTR8n, BCCTRn, gBCCTR,
  313. BCCTRL, BCCTRL8, BCCTRL8n, BCCTRLn, gBCCTRL
  314. )>;
  315. // 2 Cycles Branch operations, 4 input operands
  316. def : InstRW<[P10W_BR_2C, P10W_DISP_ANY, P10BR_Read, P10BR_Read, P10BR_Read, P10BR_Read],
  317. (instrs
  318. BDNZA, BDNZAm, BDNZAp, BDZA, BDZAm, BDZAp, gBCA, gBCAat,
  319. BDNZLA, BDNZLAm, BDNZLAp, BDZLA, BDZLAm, BDZLAp, gBCLA, gBCLAat
  320. )>;
  321. // 7 Cycles Crypto operations, 1 input operands
  322. def : InstRW<[P10W_CY_7C, P10W_DISP_ANY, P10CY_Read],
  323. (instrs
  324. VSBOX
  325. )>;
  326. // 7 Cycles Crypto operations, 2 input operands
  327. def : InstRW<[P10W_CY_7C, P10W_DISP_ANY, P10CY_Read, P10CY_Read],
  328. (instrs
  329. CFUGED,
  330. CNTLZDM,
  331. CNTTZDM,
  332. PDEPD,
  333. PEXTD,
  334. VCFUGED,
  335. VCIPHER,
  336. VCIPHERLAST,
  337. VCLZDM,
  338. VCTZDM,
  339. VGNB,
  340. VNCIPHER,
  341. VNCIPHERLAST,
  342. VPDEPD,
  343. VPEXTD,
  344. VPMSUMB,
  345. VPMSUMD,
  346. VPMSUMH,
  347. VPMSUMW
  348. )>;
  349. // 13 Cycles Decimal Floating Point operations, 1 input operands
  350. def : InstRW<[P10W_DF_13C, P10W_DISP_ANY, P10DF_Read],
  351. (instrs
  352. XSCVDPQP,
  353. XSCVQPDP,
  354. XSCVQPDPO,
  355. XSCVQPSDZ,
  356. XSCVQPSQZ,
  357. XSCVQPSWZ,
  358. XSCVQPUDZ,
  359. XSCVQPUQZ,
  360. XSCVQPUWZ,
  361. XSCVSDQP,
  362. XSCVSQQP,
  363. XSCVUDQP,
  364. XSCVUQQP
  365. )>;
  366. // 13 Cycles Decimal Floating Point operations, 2 input operands
  367. def : InstRW<[P10W_DF_13C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
  368. (instrs
  369. XSADDQP,
  370. XSADDQPO,
  371. XSSUBQP,
  372. XSSUBQPO
  373. )>;
  374. // 13 Cycles Decimal Floating Point operations, 3 input operands
  375. def : InstRW<[P10W_DF_13C, P10W_DISP_ANY, P10DF_Read, P10DF_Read, P10DF_Read],
  376. (instrs
  377. BCDSR_rec,
  378. XSRQPI,
  379. XSRQPIX,
  380. XSRQPXP
  381. )>;
  382. // 2-way crack instructions
  383. // 13 Cycles Decimal Floating Point operations, and 3 Cycles Store operations, 2 input operands
  384. def : InstRW<[P10W_DF_13C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY],
  385. (instrs
  386. HASHST, HASHST8,
  387. HASHSTP, HASHSTP8
  388. )>;
  389. // 24 Cycles Decimal Floating Point operations, 1 input operands
  390. def : InstRW<[P10W_DF_24C, P10W_DISP_ANY, P10DF_Read],
  391. (instrs
  392. BCDCTSQ_rec
  393. )>;
  394. // 25 Cycles Decimal Floating Point operations, 2 input operands
  395. def : InstRW<[P10W_DF_25C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
  396. (instrs
  397. XSMULQP,
  398. XSMULQPO
  399. )>;
  400. // 25 Cycles Decimal Floating Point operations, 3 input operands
  401. def : InstRW<[P10W_DF_25C, P10W_DISP_ANY, P10DF_Read, P10DF_Read, P10DF_Read],
  402. (instrs
  403. XSMADDQP,
  404. XSMADDQPO,
  405. XSMSUBQP,
  406. XSMSUBQPO,
  407. XSNMADDQP,
  408. XSNMADDQPO,
  409. XSNMSUBQP,
  410. XSNMSUBQPO
  411. )>;
  412. // 38 Cycles Decimal Floating Point operations, 2 input operands
  413. def : InstRW<[P10W_DF_38C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
  414. (instrs
  415. BCDCFSQ_rec
  416. )>;
  417. // 59 Cycles Decimal Floating Point operations, 2 input operands
  418. def : InstRW<[P10W_DF_59C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
  419. (instrs
  420. XSDIVQP,
  421. XSDIVQPO
  422. )>;
  423. // 61 Cycles Decimal Floating Point operations, 2 input operands
  424. def : InstRW<[P10W_DF_61C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
  425. (instrs
  426. VDIVESQ,
  427. VDIVEUQ,
  428. VDIVSQ,
  429. VDIVUQ
  430. )>;
  431. // 68 Cycles Decimal Floating Point operations, 2 input operands
  432. def : InstRW<[P10W_DF_68C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
  433. (instrs
  434. VMODSQ,
  435. VMODUQ
  436. )>;
  437. // 77 Cycles Decimal Floating Point operations, 1 input operands
  438. def : InstRW<[P10W_DF_77C, P10W_DISP_ANY, P10DF_Read],
  439. (instrs
  440. XSSQRTQP,
  441. XSSQRTQPO
  442. )>;
  443. // 20 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  444. def : InstRW<[P10W_DV_20C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  445. (instrs
  446. DIVW,
  447. DIVWO,
  448. DIVWU,
  449. DIVWUO,
  450. MODSW
  451. )>;
  452. // 2-way crack instructions
  453. // 20 Cycles Scalar Fixed-Point Divide operations, and 3 Cycles ALU operations, 2 input operands
  454. def : InstRW<[P10W_DV_20C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  455. (instrs
  456. DIVW_rec,
  457. DIVWO_rec,
  458. DIVWU_rec,
  459. DIVWUO_rec
  460. )>;
  461. // 25 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  462. def : InstRW<[P10W_DV_25C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  463. (instrs
  464. DIVD,
  465. DIVDO,
  466. DIVDU,
  467. DIVDUO,
  468. DIVWE,
  469. DIVWEO,
  470. DIVWEU,
  471. DIVWEUO
  472. )>;
  473. // 2-way crack instructions
  474. // 25 Cycles Scalar Fixed-Point Divide operations, and 3 Cycles ALU operations, 2 input operands
  475. def : InstRW<[P10W_DV_25C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  476. (instrs
  477. DIVD_rec,
  478. DIVDO_rec,
  479. DIVDU_rec,
  480. DIVDUO_rec,
  481. DIVWE_rec,
  482. DIVWEO_rec,
  483. DIVWEU_rec,
  484. DIVWEUO_rec
  485. )>;
  486. // 27 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  487. def : InstRW<[P10W_DV_27C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  488. (instrs
  489. MODSD,
  490. MODUD,
  491. MODUW
  492. )>;
  493. // 41 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  494. def : InstRW<[P10W_DV_41C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  495. (instrs
  496. DIVDE,
  497. DIVDEO,
  498. DIVDEU,
  499. DIVDEUO
  500. )>;
  501. // 2-way crack instructions
  502. // 41 Cycles Scalar Fixed-Point Divide operations, and 3 Cycles ALU operations, 2 input operands
  503. def : InstRW<[P10W_DV_41C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  504. (instrs
  505. DIVDE_rec,
  506. DIVDEO_rec,
  507. DIVDEU_rec,
  508. DIVDEUO_rec
  509. )>;
  510. // 43 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  511. def : InstRW<[P10W_DV_43C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  512. (instrs
  513. VDIVSD,
  514. VDIVUD
  515. )>;
  516. // 47 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  517. def : InstRW<[P10W_DV_47C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  518. (instrs
  519. VMODSD,
  520. VMODUD
  521. )>;
  522. // 54 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  523. def : InstRW<[P10W_DV_54C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  524. (instrs
  525. VDIVSW,
  526. VDIVUW
  527. )>;
  528. // 60 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  529. def : InstRW<[P10W_DV_60C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  530. (instrs
  531. VMODSW,
  532. VMODUW
  533. )>;
  534. // 75 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  535. def : InstRW<[P10W_DV_75C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  536. (instrs
  537. VDIVESD,
  538. VDIVEUD
  539. )>;
  540. // 83 Cycles Scalar Fixed-Point Divide operations, 2 input operands
  541. def : InstRW<[P10W_DV_83C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
  542. (instrs
  543. VDIVESW,
  544. VDIVEUW
  545. )>;
  546. // 5 Cycles Fixed-Point and BCD operations, 1 input operands
  547. def : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read],
  548. (instrs
  549. BCDCTN_rec,
  550. VMUL10CUQ,
  551. VMUL10UQ,
  552. XSXSIGQP
  553. )>;
  554. // 5 Cycles Fixed-Point and BCD operations, 2 input operands
  555. def : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read, P10DX_Read],
  556. (instrs
  557. BCDCFN_rec,
  558. BCDCFZ_rec,
  559. BCDCPSGN_rec,
  560. BCDCTZ_rec,
  561. BCDSETSGN_rec,
  562. BCDUS_rec,
  563. BCDUTRUNC_rec,
  564. VADDCUQ,
  565. VADDUQM,
  566. VMUL10ECUQ,
  567. VMUL10EUQ,
  568. VSUBCUQ,
  569. VSUBUQM,
  570. XSCMPEXPQP,
  571. XSCMPOQP,
  572. XSCMPUQP,
  573. XSMAXCQP,
  574. XSMINCQP,
  575. XSTSTDCQP,
  576. XXGENPCVBM
  577. )>;
  578. // 5 Cycles Fixed-Point and BCD operations, 3 input operands
  579. def : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read, P10DX_Read, P10DX_Read],
  580. (instrs
  581. BCDADD_rec,
  582. BCDS_rec,
  583. BCDSUB_rec,
  584. BCDTRUNC_rec,
  585. VADDECUQ,
  586. VADDEUQM,
  587. VSUBECUQ,
  588. VSUBEUQM
  589. )>;
  590. // 4 Cycles ALU2 operations, 0 input operands
  591. def : InstRW<[P10W_F2_4C, P10W_DISP_ANY],
  592. (instrs
  593. TRAP, TW
  594. )>;
  595. // 4 Cycles ALU2 operations, 1 input operands
  596. def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read],
  597. (instrs
  598. CNTLZD,
  599. CNTLZD_rec,
  600. CNTLZW, CNTLZW8,
  601. CNTLZW8_rec, CNTLZW_rec,
  602. CNTTZD,
  603. CNTTZD_rec,
  604. CNTTZW, CNTTZW8,
  605. CNTTZW8_rec, CNTTZW_rec,
  606. FTSQRT,
  607. MTVSRBM,
  608. MTVSRBMI,
  609. MTVSRDM,
  610. MTVSRHM,
  611. MTVSRQM,
  612. MTVSRWM,
  613. POPCNTB, POPCNTB8,
  614. POPCNTD,
  615. POPCNTW,
  616. VCLZB,
  617. VCLZD,
  618. VCLZH,
  619. VCLZW,
  620. VCTZB,
  621. VCTZD,
  622. VCTZH,
  623. VCTZW,
  624. VEXPANDBM,
  625. VEXPANDDM,
  626. VEXPANDHM,
  627. VEXPANDQM,
  628. VEXPANDWM,
  629. VEXTRACTBM,
  630. VEXTRACTDM,
  631. VEXTRACTHM,
  632. VEXTRACTQM,
  633. VEXTRACTWM,
  634. VPOPCNTB,
  635. VPOPCNTD,
  636. VPOPCNTH,
  637. VPOPCNTW,
  638. VPRTYBD,
  639. VPRTYBW,
  640. XSCVHPDP,
  641. XSCVSPDPN,
  642. XSTSQRTDP,
  643. XVCVHPSP,
  644. XVTLSBB,
  645. XVTSQRTDP,
  646. XVTSQRTSP
  647. )>;
  648. // 4 Cycles ALU2 operations, 2 input operands
  649. def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read],
  650. (instrs
  651. CMPEQB,
  652. EXTSWSLI_32_64_rec, EXTSWSLI_rec,
  653. FCMPOD, FCMPOS,
  654. FCMPUD, FCMPUS,
  655. FTDIV,
  656. SLD_rec,
  657. SLW8_rec, SLW_rec,
  658. SRD_rec,
  659. SRW8_rec, SRW_rec,
  660. VABSDUB,
  661. VABSDUH,
  662. VABSDUW,
  663. VADDCUW,
  664. VADDSBS,
  665. VADDSHS,
  666. VADDSWS,
  667. VADDUBS,
  668. VADDUHS,
  669. VADDUWS,
  670. VAVGSB,
  671. VAVGSH,
  672. VAVGSW,
  673. VAVGUB,
  674. VAVGUH,
  675. VAVGUW,
  676. VCMPBFP,
  677. VCMPBFP_rec,
  678. VCMPEQFP,
  679. VCMPEQFP_rec,
  680. VCMPEQUB_rec,
  681. VCMPEQUD_rec,
  682. VCMPEQUH_rec,
  683. VCMPEQUQ,
  684. VCMPEQUQ_rec,
  685. VCMPEQUW_rec,
  686. VCMPGEFP,
  687. VCMPGEFP_rec,
  688. VCMPGTFP,
  689. VCMPGTFP_rec,
  690. VCMPGTSB_rec,
  691. VCMPGTSD_rec,
  692. VCMPGTSH_rec,
  693. VCMPGTSQ,
  694. VCMPGTSQ_rec,
  695. VCMPGTSW_rec,
  696. VCMPGTUB_rec,
  697. VCMPGTUD_rec,
  698. VCMPGTUH_rec,
  699. VCMPGTUQ,
  700. VCMPGTUQ_rec,
  701. VCMPGTUW_rec,
  702. VCMPNEB_rec,
  703. VCMPNEH_rec,
  704. VCMPNEW_rec,
  705. VCMPNEZB_rec,
  706. VCMPNEZH_rec,
  707. VCMPNEZW_rec,
  708. VCMPSQ,
  709. VCMPUQ,
  710. VCNTMBB,
  711. VCNTMBD,
  712. VCNTMBH,
  713. VCNTMBW,
  714. VMAXFP,
  715. VMINFP,
  716. VSUBCUW,
  717. VSUBSBS,
  718. VSUBSHS,
  719. VSUBSWS,
  720. VSUBUBS,
  721. VSUBUHS,
  722. VSUBUWS,
  723. XSCMPEQDP,
  724. XSCMPEXPDP,
  725. XSCMPGEDP,
  726. XSCMPGTDP,
  727. XSCMPODP,
  728. XSCMPUDP,
  729. XSMAXCDP,
  730. XSMAXDP,
  731. XSMAXJDP,
  732. XSMINCDP,
  733. XSMINDP,
  734. XSMINJDP,
  735. XSTDIVDP,
  736. XSTSTDCDP,
  737. XSTSTDCSP,
  738. XVCMPEQDP,
  739. XVCMPEQDP_rec,
  740. XVCMPEQSP,
  741. XVCMPEQSP_rec,
  742. XVCMPGEDP,
  743. XVCMPGEDP_rec,
  744. XVCMPGESP,
  745. XVCMPGESP_rec,
  746. XVCMPGTDP,
  747. XVCMPGTDP_rec,
  748. XVCMPGTSP,
  749. XVCMPGTSP_rec,
  750. XVMAXDP,
  751. XVMAXSP,
  752. XVMINDP,
  753. XVMINSP,
  754. XVTDIVDP,
  755. XVTDIVSP,
  756. XVTSTDCDP,
  757. XVTSTDCSP
  758. )>;
  759. // 4 Cycles ALU2 operations, 3 input operands
  760. def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read],
  761. (instrs
  762. CMPRB, CMPRB8,
  763. RLDCL_rec,
  764. RLDCR_rec,
  765. RLDIC_rec,
  766. RLDICL_32_rec, RLDICL_rec,
  767. RLDICR_rec,
  768. TD,
  769. TDI,
  770. TWI,
  771. VSHASIGMAD,
  772. VSHASIGMAW
  773. )>;
  774. // 4 Cycles ALU2 operations, 4 input operands
  775. def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read, P10F2_Read],
  776. (instrs
  777. RLDIMI_rec,
  778. RLWINM8_rec, RLWINM_rec,
  779. RLWNM8_rec, RLWNM_rec
  780. )>;
  781. // 4 Cycles ALU2 operations, 5 input operands
  782. def : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read, P10F2_Read, P10F2_Read],
  783. (instrs
  784. RLWIMI8_rec, RLWIMI_rec
  785. )>;
  786. // Single crack instructions
  787. // 4 Cycles ALU2 operations, 2 input operands
  788. def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_DISP_ANY, P10F2_Read, P10F2_Read],
  789. (instrs
  790. SRAD_rec,
  791. SRADI_rec,
  792. SRAW_rec,
  793. SRAWI_rec
  794. )>;
  795. // Single crack instructions
  796. // 4 Cycles ALU2 operations, 3 input operands
  797. def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read],
  798. (instrs
  799. TABORTDC,
  800. TABORTDCI,
  801. TABORTWC,
  802. TABORTWCI
  803. )>;
  804. // 2-way crack instructions
  805. // 4 Cycles ALU2 operations, and 4 Cycles Permute operations, 2 input operands
  806. def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_PM_4C, P10W_DISP_ANY],
  807. (instrs
  808. VRLQ,
  809. VRLQNM,
  810. VSLQ,
  811. VSRAQ,
  812. VSRQ
  813. )>;
  814. // 2-way crack instructions
  815. // 4 Cycles ALU2 operations, and 4 Cycles Permute operations, 3 input operands
  816. def : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_PM_4C, P10W_DISP_ANY],
  817. (instrs
  818. VRLQMI
  819. )>;
  820. // 2-way crack instructions
  821. // 4 Cycles ALU2 operations, and 4 Cycles ALU2 operations, 0 input operands
  822. def : InstRW<[P10W_F2_4C, P10W_DISP_PAIR, P10W_F2_4C],
  823. (instrs
  824. MFCR, MFCR8
  825. )>;
  826. // 2 Cycles ALU operations, 1 input operands
  827. def : InstRW<[P10W_FX_2C, P10W_DISP_ANY, P10FX_Read],
  828. (instrs
  829. MTCTR, MTCTR8, MTCTR8loop, MTCTRloop,
  830. MTLR, MTLR8
  831. )>;
  832. // 3 Cycles ALU operations, 0 input operands
  833. def : InstRW<[P10W_FX_3C, P10W_DISP_ANY],
  834. (instrs
  835. CR6SET, CREQV, CRSET,
  836. DSS, DSSALL,
  837. MCRXRX,
  838. MFCTR, MFCTR8,
  839. MFLR, MFLR8,
  840. NOP, NOP_GT_PWR6, NOP_GT_PWR7, ORI, ORI8,
  841. VXOR, V_SET0, V_SET0B, V_SET0H,
  842. XXLEQV, XXLEQVOnes,
  843. XXLXOR, XXLXORdpz, XXLXORspz, XXLXORz
  844. )>;
  845. // 3 Cycles ALU operations, 1 input operands
  846. def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read],
  847. (instrs
  848. ADDI, ADDI8, ADDIdtprelL32, ADDItlsldLADDR32, ADDItocL, LI, LI8,
  849. ADDIS, ADDIS8, ADDISdtprelHA32, ADDIStocHA, ADDIStocHA8, LIS, LIS8,
  850. ADDME, ADDME8,
  851. ADDME8O, ADDMEO,
  852. ADDZE, ADDZE8,
  853. ADDZE8O, ADDZEO,
  854. EXTSB, EXTSB8, EXTSB8_32_64,
  855. EXTSB8_rec, EXTSB_rec,
  856. EXTSH, EXTSH8, EXTSH8_32_64,
  857. EXTSH8_rec, EXTSH_rec,
  858. EXTSW, EXTSW_32, EXTSW_32_64,
  859. EXTSW_32_64_rec, EXTSW_rec,
  860. FABSD, FABSS,
  861. FMR,
  862. FNABSD, FNABSS,
  863. FNEGD, FNEGS,
  864. MCRF,
  865. MFOCRF, MFOCRF8,
  866. MFVRD, MFVSRD,
  867. MFVRWZ, MFVSRWZ,
  868. MTOCRF, MTOCRF8,
  869. MTVRD, MTVSRD,
  870. MTVRWA, MTVSRWA,
  871. MTVRWZ, MTVSRWZ,
  872. NEG, NEG8,
  873. NEG8_rec, NEG_rec,
  874. NEG8O, NEGO,
  875. SETB, SETB8,
  876. SETBC, SETBC8,
  877. SETBCR, SETBCR8,
  878. SETNBC, SETNBC8,
  879. SETNBCR, SETNBCR8,
  880. SUBFME, SUBFME8,
  881. SUBFME8O, SUBFMEO,
  882. SUBFZE, SUBFZE8,
  883. SUBFZE8O, SUBFZEO,
  884. VEXTSB2D, VEXTSB2Ds,
  885. VEXTSB2W, VEXTSB2Ws,
  886. VEXTSD2Q,
  887. VEXTSH2D, VEXTSH2Ds,
  888. VEXTSH2W, VEXTSH2Ws,
  889. VEXTSW2D, VEXTSW2Ds,
  890. VNEGD,
  891. VNEGW,
  892. WAIT,
  893. XSABSDP,
  894. XSABSQP,
  895. XSNABSDP,
  896. XSNABSQP,
  897. XSNEGDP,
  898. XSNEGQP,
  899. XSXEXPDP,
  900. XSXEXPQP,
  901. XSXSIGDP,
  902. XVABSDP,
  903. XVABSSP,
  904. XVNABSDP,
  905. XVNABSSP,
  906. XVNEGDP,
  907. XVNEGSP,
  908. XVXEXPDP,
  909. XVXEXPSP,
  910. XVXSIGDP,
  911. XVXSIGSP
  912. )>;
  913. // 3 Cycles ALU operations, 2 input operands
  914. def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
  915. (instrs
  916. ADD4, ADD4TLS, ADD8, ADD8TLS, ADD8TLS_,
  917. ADD4_rec, ADD8_rec,
  918. ADDE, ADDE8,
  919. ADDE8O, ADDEO,
  920. ADDIC, ADDIC8,
  921. ADD4O, ADD8O,
  922. AND, AND8,
  923. AND8_rec, AND_rec,
  924. ANDC, ANDC8,
  925. ANDC8_rec, ANDC_rec,
  926. ANDI8_rec, ANDI_rec,
  927. ANDIS8_rec, ANDIS_rec,
  928. CMPD, CMPW,
  929. CMPB, CMPB8,
  930. CMPDI, CMPWI,
  931. CMPLD, CMPLW,
  932. CMPLDI, CMPLWI,
  933. CRAND,
  934. CRANDC,
  935. CRNAND,
  936. CRNOR,
  937. CROR,
  938. CRORC,
  939. CR6UNSET, CRUNSET, CRXOR,
  940. EQV, EQV8,
  941. EQV8_rec, EQV_rec,
  942. EXTSWSLI, EXTSWSLI_32_64,
  943. FCPSGND, FCPSGNS,
  944. NAND, NAND8,
  945. NAND8_rec, NAND_rec,
  946. NOR, NOR8,
  947. NOR8_rec, NOR_rec,
  948. COPY, OR, OR8,
  949. OR8_rec, OR_rec,
  950. ORC, ORC8,
  951. ORC8_rec, ORC_rec,
  952. ORIS, ORIS8,
  953. SLD,
  954. SLW, SLW8,
  955. SRAD,
  956. SRADI, SRADI_32,
  957. SRAW,
  958. SRAWI,
  959. SRD,
  960. SRW, SRW8,
  961. SUBF, SUBF8,
  962. SUBF8_rec, SUBF_rec,
  963. SUBFE, SUBFE8,
  964. SUBFE8O, SUBFEO,
  965. SUBFIC, SUBFIC8,
  966. SUBF8O, SUBFO,
  967. VADDUBM,
  968. VADDUDM,
  969. VADDUHM,
  970. VADDUWM,
  971. VAND,
  972. VANDC,
  973. VCMPEQUB,
  974. VCMPEQUD,
  975. VCMPEQUH,
  976. VCMPEQUW,
  977. VCMPGTSB,
  978. VCMPGTSD,
  979. VCMPGTSH,
  980. VCMPGTSW,
  981. VCMPGTUB,
  982. VCMPGTUD,
  983. VCMPGTUH,
  984. VCMPGTUW,
  985. VCMPNEB,
  986. VCMPNEH,
  987. VCMPNEW,
  988. VCMPNEZB,
  989. VCMPNEZH,
  990. VCMPNEZW,
  991. VEQV,
  992. VMAXSB,
  993. VMAXSD,
  994. VMAXSH,
  995. VMAXSW,
  996. VMAXUB,
  997. VMAXUD,
  998. VMAXUH,
  999. VMAXUW,
  1000. VMINSB,
  1001. VMINSD,
  1002. VMINSH,
  1003. VMINSW,
  1004. VMINUB,
  1005. VMINUD,
  1006. VMINUH,
  1007. VMINUW,
  1008. VMRGEW,
  1009. VMRGOW,
  1010. VNAND,
  1011. VNOR,
  1012. VOR,
  1013. VORC,
  1014. VRLB,
  1015. VRLD,
  1016. VRLDNM,
  1017. VRLH,
  1018. VRLW,
  1019. VRLWNM,
  1020. VSLB,
  1021. VSLD,
  1022. VSLH,
  1023. VSLW,
  1024. VSRAB,
  1025. VSRAD,
  1026. VSRAH,
  1027. VSRAW,
  1028. VSRB,
  1029. VSRD,
  1030. VSRH,
  1031. VSRW,
  1032. VSUBUBM,
  1033. VSUBUDM,
  1034. VSUBUHM,
  1035. VSUBUWM,
  1036. XOR, XOR8,
  1037. XOR8_rec, XOR_rec,
  1038. XORI, XORI8,
  1039. XORIS, XORIS8,
  1040. XSCPSGNDP,
  1041. XSCPSGNQP,
  1042. XSIEXPDP,
  1043. XSIEXPQP,
  1044. XVCPSGNDP,
  1045. XVCPSGNSP,
  1046. XVIEXPDP,
  1047. XVIEXPSP,
  1048. XXLAND,
  1049. XXLANDC,
  1050. XXLNAND,
  1051. XXLNOR,
  1052. XXLOR, XXLORf,
  1053. XXLORC
  1054. )>;
  1055. // 3 Cycles ALU operations, 3 input operands
  1056. def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read],
  1057. (instrs
  1058. ADDEX, ADDEX8,
  1059. DST, DST64, DSTT, DSTT64,
  1060. DSTST, DSTST64, DSTSTT, DSTSTT64,
  1061. ISEL, ISEL8,
  1062. RLDCL,
  1063. RLDCR,
  1064. RLDIC,
  1065. RLDICL, RLDICL_32, RLDICL_32_64,
  1066. RLDICR, RLDICR_32,
  1067. VRLDMI,
  1068. VRLWMI,
  1069. VSEL,
  1070. XXSEL
  1071. )>;
  1072. // 3 Cycles ALU operations, 4 input operands
  1073. def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read, P10FX_Read],
  1074. (instrs
  1075. RLDIMI,
  1076. RLWINM, RLWINM8,
  1077. RLWNM, RLWNM8
  1078. )>;
  1079. // 3 Cycles ALU operations, 5 input operands
  1080. def : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read, P10FX_Read, P10FX_Read],
  1081. (instrs
  1082. RLWIMI, RLWIMI8
  1083. )>;
  1084. // Single crack instructions
  1085. // 3 Cycles ALU operations, 0 input operands
  1086. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY],
  1087. (instrs
  1088. MFFS,
  1089. MFFS_rec,
  1090. MFFSL,
  1091. MFVSCR,
  1092. TRECHKPT
  1093. )>;
  1094. // Single crack instructions
  1095. // 3 Cycles ALU operations, 1 input operands
  1096. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10FX_Read],
  1097. (instrs
  1098. ADDME8_rec, ADDME_rec,
  1099. ADDME8O_rec, ADDMEO_rec,
  1100. ADDZE8_rec, ADDZE_rec,
  1101. ADDZE8O_rec, ADDZEO_rec,
  1102. MCRFS,
  1103. MFFSCDRN,
  1104. MFFSCDRNI,
  1105. MFFSCRN,
  1106. MFFSCRNI,
  1107. MTFSB0,
  1108. MTVSCR,
  1109. NEG8O_rec, NEGO_rec,
  1110. SUBFME8_rec, SUBFME_rec,
  1111. SUBFME8O_rec, SUBFMEO_rec,
  1112. SUBFZE8_rec, SUBFZE_rec,
  1113. SUBFZE8O_rec, SUBFZEO_rec,
  1114. TABORT,
  1115. TBEGIN,
  1116. TRECLAIM,
  1117. TSR
  1118. )>;
  1119. // Single crack instructions
  1120. // 3 Cycles ALU operations, 2 input operands
  1121. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
  1122. (instrs
  1123. ADDE8_rec, ADDE_rec,
  1124. ADDE8O_rec, ADDEO_rec,
  1125. ADDIC_rec,
  1126. ADD4O_rec, ADD8O_rec,
  1127. SUBFE8_rec, SUBFE_rec,
  1128. SUBFE8O_rec, SUBFEO_rec,
  1129. SUBF8O_rec, SUBFO_rec
  1130. )>;
  1131. // 2-way crack instructions
  1132. // 3 Cycles ALU operations, and 3 Cycles ALU operations, 0 input operands
  1133. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  1134. (instrs
  1135. HRFID,
  1136. MFFSCE,
  1137. RFID,
  1138. STOP
  1139. )>;
  1140. // 2-way crack instructions
  1141. // 3 Cycles ALU operations, and 3 Cycles ALU operations, 1 input operands
  1142. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read],
  1143. (instrs
  1144. FABSD_rec, FABSS_rec,
  1145. FMR_rec,
  1146. FNABSD_rec, FNABSS_rec,
  1147. FNEGD_rec, FNEGS_rec,
  1148. MTFSB1,
  1149. RFEBB,
  1150. SC
  1151. )>;
  1152. // 2-way crack instructions
  1153. // 3 Cycles ALU operations, and 3 Cycles ALU operations, 2 input operands
  1154. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
  1155. (instrs
  1156. ADDC, ADDC8,
  1157. ADDC8_rec, ADDC_rec,
  1158. ADDC8O, ADDCO,
  1159. FCPSGND_rec, FCPSGNS_rec,
  1160. MTFSF, MTFSFb,
  1161. MTFSFI, MTFSFIb,
  1162. SUBFC, SUBFC8,
  1163. SUBFC8_rec, SUBFC_rec,
  1164. SUBFC8O, SUBFCO
  1165. )>;
  1166. // 2-way crack instructions
  1167. // 3 Cycles ALU operations, and 3 Cycles ALU operations, 3 input operands
  1168. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read],
  1169. (instrs
  1170. MTFSFI_rec
  1171. )>;
  1172. // 2-way crack instructions
  1173. // 3 Cycles ALU operations, and 3 Cycles ALU operations, 4 input operands
  1174. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read, P10FX_Read],
  1175. (instrs
  1176. MTFSF_rec
  1177. )>;
  1178. // 4-way crack instructions
  1179. // 3 Cycles ALU operations, 3 Cycles ALU operations, 3 Cycles ALU operations, and 3 Cycles ALU operations, 2 input operands
  1180. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
  1181. (instrs
  1182. ADDC8O_rec, ADDCO_rec,
  1183. SUBFC8O_rec, SUBFCO_rec
  1184. )>;
  1185. // 2-way crack instructions
  1186. // 3 Cycles ALU operations, and 4 Cycles Permute operations, 1 input operands
  1187. def : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_PM_4C, P10W_DISP_ANY],
  1188. (instrs
  1189. VSTRIBL_rec,
  1190. VSTRIBR_rec,
  1191. VSTRIHL_rec,
  1192. VSTRIHR_rec
  1193. )>;
  1194. // 2-way crack instructions
  1195. // 3 Cycles ALU operations, and 3 Cycles ALU operations, 2 input operands
  1196. def : InstRW<[P10W_FX_3C, P10W_DISP_PAIR, P10W_FX_3C, P10FX_Read, P10FX_Read],
  1197. (instrs
  1198. MTCRF, MTCRF8
  1199. )>;
  1200. // 6 Cycles Load operations, 1 input operands
  1201. def : InstRW<[P10W_LD_6C, P10W_DISP_ANY, P10LD_Read],
  1202. (instrs
  1203. LBZ, LBZ8,
  1204. LD, LDtoc, LDtocBA, LDtocCPT, LDtocJTI, LDtocL, SPILLTOVSR_LD,
  1205. LDBRX,
  1206. DFLOADf32, DFLOADf64, LFD,
  1207. LFDX, XFLOADf32, XFLOADf64,
  1208. LFIWAX, LIWAX,
  1209. LFIWZX, LIWZX,
  1210. LHA, LHA8,
  1211. LHAX, LHAX8,
  1212. LHBRX, LHBRX8,
  1213. LHZ, LHZ8,
  1214. LVEBX,
  1215. LVEHX,
  1216. LVEWX,
  1217. LVX,
  1218. LVXL,
  1219. LWA, LWA_32,
  1220. LWAX, LWAX_32,
  1221. LWBRX, LWBRX8,
  1222. LWZ, LWZ8, LWZtoc, LWZtocL,
  1223. LXSD,
  1224. LXSDX,
  1225. LXSIBZX,
  1226. LXSIHZX,
  1227. LXSIWAX,
  1228. LXSIWZX,
  1229. LXV,
  1230. LXVB16X,
  1231. LXVD2X,
  1232. LXVDSX,
  1233. LXVH8X,
  1234. LXVRBX,
  1235. LXVRDX,
  1236. LXVRHX,
  1237. LXVRWX,
  1238. LXVW4X,
  1239. LXVWSX,
  1240. LXVX
  1241. )>;
  1242. // 6 Cycles Load operations, 2 input operands
  1243. def : InstRW<[P10W_LD_6C, P10W_DISP_ANY, P10LD_Read, P10LD_Read],
  1244. (instrs
  1245. DCBT,
  1246. DCBTST,
  1247. ICBT,
  1248. LBZX, LBZX8, LBZXTLS, LBZXTLS_, LBZXTLS_32,
  1249. LDX, LDXTLS, LDXTLS_, SPILLTOVSR_LDX,
  1250. LHZX, LHZX8, LHZXTLS, LHZXTLS_, LHZXTLS_32,
  1251. LWZX, LWZX8, LWZXTLS, LWZXTLS_, LWZXTLS_32,
  1252. LXVL,
  1253. LXVLL
  1254. )>;
  1255. // 2-way crack instructions
  1256. // 6 Cycles Load operations, and 13 Cycles Decimal Floating Point operations, 2 input operands
  1257. def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DF_13C, P10W_DISP_ANY],
  1258. (instrs
  1259. HASHCHK, HASHCHK8,
  1260. HASHCHKP, HASHCHKP8
  1261. )>;
  1262. // Single crack instructions
  1263. // 6 Cycles Load operations, 0 input operands
  1264. def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY],
  1265. (instrs
  1266. SLBIA
  1267. )>;
  1268. // Single crack instructions
  1269. // 6 Cycles Load operations, 1 input operands
  1270. def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY, P10LD_Read],
  1271. (instrs
  1272. DARN,
  1273. LBARX, LBARXL,
  1274. LDARX, LDARXL,
  1275. LHARX, LHARXL,
  1276. LWARX, LWARXL,
  1277. SLBFEE_rec,
  1278. SLBIE,
  1279. SLBMFEE,
  1280. SLBMFEV
  1281. )>;
  1282. // Single crack instructions
  1283. // 6 Cycles Load operations, 2 input operands
  1284. def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY, P10LD_Read, P10LD_Read],
  1285. (instrs
  1286. LBZCIX,
  1287. LDCIX,
  1288. LHZCIX,
  1289. LWZCIX,
  1290. MTSPR, MTSPR8, MTSR, MTVRSAVE, MTVRSAVEv
  1291. )>;
  1292. // Expand instructions
  1293. // 6 Cycles Load operations, 6 Cycles Load operations, 6 Cycles Load operations, and 6 Cycles Load operations, 1 input operands
  1294. def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10LD_Read],
  1295. (instrs
  1296. LMW
  1297. )>;
  1298. // Expand instructions
  1299. // 6 Cycles Load operations, 6 Cycles Load operations, 6 Cycles Load operations, and 6 Cycles Load operations, 2 input operands
  1300. def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10LD_Read, P10LD_Read],
  1301. (instrs
  1302. LSWI
  1303. )>;
  1304. // 2-way crack instructions
  1305. // 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 1 input operands
  1306. def : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_SX_3C, P10W_DISP_ANY],
  1307. (instrs
  1308. LBZU, LBZU8,
  1309. LBZUX, LBZUX8,
  1310. LDU,
  1311. LDUX,
  1312. LFDU,
  1313. LFDUX,
  1314. LHAU, LHAU8,
  1315. LHAUX, LHAUX8,
  1316. LHZU, LHZU8,
  1317. LHZUX, LHZUX8,
  1318. LWAUX,
  1319. LWZU, LWZU8,
  1320. LWZUX, LWZUX8
  1321. )>;
  1322. // 6 Cycles Load operations, 1 input operands
  1323. def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10LD_Read],
  1324. (instrs
  1325. PLBZ, PLBZ8, PLBZ8pc, PLBZpc,
  1326. PLD, PLDpc,
  1327. PLFD, PLFDpc,
  1328. PLFS, PLFSpc,
  1329. PLHA, PLHA8, PLHA8pc, PLHApc,
  1330. PLHZ, PLHZ8, PLHZ8pc, PLHZpc,
  1331. PLWA, PLWA8, PLWA8pc, PLWApc,
  1332. PLWZ, PLWZ8, PLWZ8pc, PLWZpc,
  1333. PLXSD, PLXSDpc,
  1334. PLXSSP, PLXSSPpc,
  1335. PLXV, PLXVpc,
  1336. PLXVP, PLXVPpc
  1337. )>;
  1338. // 2-way crack instructions
  1339. // 6 Cycles Load operations, and 4 Cycles ALU2 operations, 1 input operands
  1340. def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C],
  1341. (instrs
  1342. LFS,
  1343. LFSX,
  1344. LXSSP,
  1345. LXSSPX
  1346. )>;
  1347. // 4-way crack instructions
  1348. // 6 Cycles Load operations, 4 Cycles ALU2 operations, 3 Cycles Simple Fixed-point (SFX) operations, and 3 Cycles ALU operations, 1 input operands
  1349. def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C, P10W_SX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY],
  1350. (instrs
  1351. LFSU,
  1352. LFSUX
  1353. )>;
  1354. // 2-way crack instructions
  1355. // 6 Cycles Load operations, and 6 Cycles Load operations, 1 input operands
  1356. def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_LD_6C, P10W_DISP_PAIR, P10LD_Read],
  1357. (instrs
  1358. TLBIEL
  1359. )>;
  1360. // 2-way crack instructions
  1361. // 6 Cycles Load operations, and 6 Cycles Load operations, 2 input operands
  1362. def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_LD_6C, P10W_DISP_PAIR, P10LD_Read, P10LD_Read],
  1363. (instrs
  1364. SLBMTE
  1365. )>;
  1366. // 2-way crack instructions
  1367. // 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 1 input operands
  1368. def : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_SX_3C],
  1369. (instrs
  1370. LXVP,
  1371. LXVPX
  1372. )>;
  1373. // Single crack instructions
  1374. // 13 Cycles Unknown operations, 1 input operands
  1375. def : InstRW<[P10W_MFL_13C, P10W_DISP_EVEN, P10W_DISP_ANY],
  1376. (instrs
  1377. MFSPR, MFSPR8, MFSR, MFTB8, MFVRSAVE, MFVRSAVEv
  1378. )>;
  1379. // 10 Cycles SIMD Matrix Multiply Engine operations, 0 input operands
  1380. def : InstRW<[P10W_MM_10C, P10W_DISP_ANY],
  1381. (instrs
  1382. XXSETACCZ
  1383. )>;
  1384. // 10 Cycles SIMD Matrix Multiply Engine operations, 2 input operands
  1385. def : InstRW<[P10W_MM_10C, P10W_DISP_ANY, P10MM_Read, P10MM_Read],
  1386. (instrs
  1387. XVBF16GER2,
  1388. XVF16GER2,
  1389. XVF32GER,
  1390. XVF64GER,
  1391. XVI16GER2,
  1392. XVI16GER2S,
  1393. XVI4GER8,
  1394. XVI8GER4
  1395. )>;
  1396. // 10 Cycles SIMD Matrix Multiply Engine operations, 3 input operands
  1397. def : InstRW<[P10W_MM_10C, P10W_DISP_ANY, P10MM_Read, P10MM_Read, P10MM_Read],
  1398. (instrs
  1399. XVBF16GER2NN,
  1400. XVBF16GER2NP,
  1401. XVBF16GER2PN,
  1402. XVBF16GER2PP,
  1403. XVF16GER2NN,
  1404. XVF16GER2NP,
  1405. XVF16GER2PN,
  1406. XVF16GER2PP,
  1407. XVF32GERNN,
  1408. XVF32GERNP,
  1409. XVF32GERPN,
  1410. XVF32GERPP,
  1411. XVF64GERNN,
  1412. XVF64GERNP,
  1413. XVF64GERPN,
  1414. XVF64GERPP,
  1415. XVI16GER2PP,
  1416. XVI16GER2SPP,
  1417. XVI4GER8PP,
  1418. XVI8GER4PP,
  1419. XVI8GER4SPP
  1420. )>;
  1421. // 10 Cycles SIMD Matrix Multiply Engine operations, 4 input operands
  1422. def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read],
  1423. (instrs
  1424. PMXVF32GER,
  1425. PMXVF64GER
  1426. )>;
  1427. // 10 Cycles SIMD Matrix Multiply Engine operations, 5 input operands
  1428. def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read],
  1429. (instrs
  1430. PMXVBF16GER2,
  1431. PMXVF16GER2,
  1432. PMXVF32GERNN,
  1433. PMXVF32GERNP,
  1434. PMXVF32GERPN,
  1435. PMXVF32GERPP,
  1436. PMXVF64GERNN,
  1437. PMXVF64GERNP,
  1438. PMXVF64GERPN,
  1439. PMXVF64GERPP,
  1440. PMXVI16GER2,
  1441. PMXVI16GER2S,
  1442. PMXVI4GER8,
  1443. PMXVI8GER4
  1444. )>;
  1445. // 10 Cycles SIMD Matrix Multiply Engine operations, 6 input operands
  1446. def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read, P10MM_Read],
  1447. (instrs
  1448. PMXVBF16GER2NN,
  1449. PMXVBF16GER2NP,
  1450. PMXVBF16GER2PN,
  1451. PMXVBF16GER2PP,
  1452. PMXVF16GER2NN,
  1453. PMXVF16GER2NP,
  1454. PMXVF16GER2PN,
  1455. PMXVF16GER2PP,
  1456. PMXVI16GER2PP,
  1457. PMXVI16GER2SPP,
  1458. PMXVI4GER8PP,
  1459. PMXVI8GER4PP,
  1460. PMXVI8GER4SPP
  1461. )>;
  1462. // 2-way crack instructions
  1463. // 10 Cycles SIMD Matrix Multiply Engine operations, and 3 Cycles ALU operations, 1 input operands
  1464. def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10W_FX_3C],
  1465. (instrs
  1466. XXMTACC
  1467. )>;
  1468. // 4-way crack instructions
  1469. // 10 Cycles SIMD Matrix Multiply Engine operations, 3 Cycles ALU operations, 10 Cycles SIMD Matrix Multiply Engine operations, and 3 Cycles ALU operations, 1 input operands
  1470. def : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10W_FX_3C, P10W_MM_10C, P10W_DISP_PAIR, P10W_FX_3C],
  1471. (instrs
  1472. XXMFACC
  1473. )>;
  1474. // 5 Cycles GPR Multiply operations, 2 input operands
  1475. def : InstRW<[P10W_MU_5C, P10W_DISP_ANY, P10MU_Read, P10MU_Read],
  1476. (instrs
  1477. MULHD,
  1478. MULHDU,
  1479. MULHW,
  1480. MULHWU,
  1481. MULLD,
  1482. MULLDO,
  1483. MULLI, MULLI8,
  1484. MULLW,
  1485. MULLWO,
  1486. VMULHSD,
  1487. VMULHUD,
  1488. VMULLD
  1489. )>;
  1490. // 5 Cycles GPR Multiply operations, 3 input operands
  1491. def : InstRW<[P10W_MU_5C, P10W_DISP_ANY, P10MU_Read, P10MU_Read, P10MU_Read],
  1492. (instrs
  1493. MADDHD,
  1494. MADDHDU,
  1495. MADDLD, MADDLD8
  1496. )>;
  1497. // 2-way crack instructions
  1498. // 5 Cycles GPR Multiply operations, and 3 Cycles ALU operations, 2 input operands
  1499. def : InstRW<[P10W_MU_5C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  1500. (instrs
  1501. MULHD_rec,
  1502. MULHDU_rec,
  1503. MULHW_rec,
  1504. MULHWU_rec,
  1505. MULLD_rec,
  1506. MULLDO_rec,
  1507. MULLW_rec,
  1508. MULLWO_rec
  1509. )>;
  1510. // 4 Cycles Permute operations, 0 input operands
  1511. def : InstRW<[P10W_PM_4C, P10W_DISP_ANY],
  1512. (instrs
  1513. VSPLTISW, V_SETALLONES, V_SETALLONESB, V_SETALLONESH
  1514. )>;
  1515. // 4 Cycles Permute operations, 1 input operands
  1516. def : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read],
  1517. (instrs
  1518. LVSL,
  1519. LVSR,
  1520. MFVSRLD,
  1521. MTVSRWS,
  1522. VCLZLSBB,
  1523. VCTZLSBB,
  1524. VGBBD,
  1525. VPRTYBQ,
  1526. VSPLTISB,
  1527. VSPLTISH,
  1528. VSTRIBL,
  1529. VSTRIBR,
  1530. VSTRIHL,
  1531. VSTRIHR,
  1532. VUPKHPX,
  1533. VUPKHSB,
  1534. VUPKHSH,
  1535. VUPKHSW,
  1536. VUPKLPX,
  1537. VUPKLSB,
  1538. VUPKLSH,
  1539. VUPKLSW,
  1540. XVCVBF16SPN,
  1541. XXBRD,
  1542. XXBRH,
  1543. XXBRQ,
  1544. XXBRW,
  1545. XXSPLTIB
  1546. )>;
  1547. // 4 Cycles Permute operations, 2 input operands
  1548. def : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read, P10PM_Read],
  1549. (instrs
  1550. BPERMD,
  1551. MTVSRDD,
  1552. VBPERMD,
  1553. VBPERMQ,
  1554. VCLRLB,
  1555. VCLRRB,
  1556. VEXTRACTD,
  1557. VEXTRACTUB,
  1558. VEXTRACTUH,
  1559. VEXTRACTUW,
  1560. VEXTUBLX,
  1561. VEXTUBRX,
  1562. VEXTUHLX,
  1563. VEXTUHRX,
  1564. VEXTUWLX,
  1565. VEXTUWRX,
  1566. VINSERTD,
  1567. VINSERTW,
  1568. VMRGHB,
  1569. VMRGHH,
  1570. VMRGHW,
  1571. VMRGLB,
  1572. VMRGLH,
  1573. VMRGLW,
  1574. VPKPX,
  1575. VPKSDSS,
  1576. VPKSDUS,
  1577. VPKSHSS,
  1578. VPKSHUS,
  1579. VPKSWSS,
  1580. VPKSWUS,
  1581. VPKUDUM,
  1582. VPKUDUS,
  1583. VPKUHUM,
  1584. VPKUHUS,
  1585. VPKUWUM,
  1586. VPKUWUS,
  1587. VSL,
  1588. VSLO,
  1589. VSLV,
  1590. VSPLTB, VSPLTBs,
  1591. VSPLTH, VSPLTHs,
  1592. VSPLTW,
  1593. VSR,
  1594. VSRO,
  1595. VSRV,
  1596. XXEXTRACTUW,
  1597. XXGENPCVDM,
  1598. XXGENPCVHM,
  1599. XXGENPCVWM,
  1600. XXMRGHW,
  1601. XXMRGLW,
  1602. XXPERM,
  1603. XXPERMDI, XXPERMDIs,
  1604. XXPERMR,
  1605. XXSLDWI, XXSLDWIs,
  1606. XXSPLTW, XXSPLTWs
  1607. )>;
  1608. // 4 Cycles Permute operations, 3 input operands
  1609. def : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read, P10PM_Read, P10PM_Read],
  1610. (instrs
  1611. VEXTDDVLX,
  1612. VEXTDDVRX,
  1613. VEXTDUBVLX,
  1614. VEXTDUBVRX,
  1615. VEXTDUHVLX,
  1616. VEXTDUHVRX,
  1617. VEXTDUWVLX,
  1618. VEXTDUWVRX,
  1619. VINSBLX,
  1620. VINSBRX,
  1621. VINSBVLX,
  1622. VINSBVRX,
  1623. VINSD,
  1624. VINSDLX,
  1625. VINSDRX,
  1626. VINSERTB,
  1627. VINSERTH,
  1628. VINSHLX,
  1629. VINSHRX,
  1630. VINSHVLX,
  1631. VINSHVRX,
  1632. VINSW,
  1633. VINSWLX,
  1634. VINSWRX,
  1635. VINSWVLX,
  1636. VINSWVRX,
  1637. VPERM,
  1638. VPERMR,
  1639. VPERMXOR,
  1640. VSLDBI,
  1641. VSLDOI,
  1642. VSRDBI,
  1643. XXINSERTW
  1644. )>;
  1645. // 2-way crack instructions
  1646. // 4 Cycles Permute operations, and 7 Cycles VMX Multiply operations, 2 input operands
  1647. def : InstRW<[P10W_PM_4C, P10W_DISP_EVEN, P10W_vMU_7C, P10W_DISP_ANY],
  1648. (instrs
  1649. VSUMSWS
  1650. )>;
  1651. // 4 Cycles Permute operations, 1 input operands
  1652. def : InstRW<[P10W_PM_4C, P10W_DISP_PAIR, P10PM_Read],
  1653. (instrs
  1654. XXSPLTIDP,
  1655. XXSPLTIW
  1656. )>;
  1657. // 4 Cycles Permute operations, 3 input operands
  1658. def : InstRW<[P10W_PM_4C, P10W_DISP_PAIR, P10PM_Read, P10PM_Read, P10PM_Read],
  1659. (instrs
  1660. XXBLENDVB,
  1661. XXBLENDVD,
  1662. XXBLENDVH,
  1663. XXBLENDVW,
  1664. XXSPLTI32DX
  1665. )>;
  1666. // 4 Cycles Permute operations, 4 input operands
  1667. def : InstRW<[P10W_PM_4C, P10W_DISP_PAIR, P10PM_Read, P10PM_Read, P10PM_Read, P10PM_Read],
  1668. (instrs
  1669. XXEVAL,
  1670. XXPERMX
  1671. )>;
  1672. // 3 Cycles Store operations, 1 input operands
  1673. def : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read],
  1674. (instrs
  1675. DCBST,
  1676. DCBZ,
  1677. ICBI
  1678. )>;
  1679. // 3 Cycles Store operations, 2 input operands
  1680. def : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
  1681. (instrs
  1682. DCBF,
  1683. PSTXVP, PSTXVPpc,
  1684. STB, STB8,
  1685. STBU, STBU8,
  1686. STBUX, STBUX8,
  1687. SPILLTOVSR_ST, STD,
  1688. STDBRX,
  1689. STDU,
  1690. STDUX,
  1691. DFSTOREf32, DFSTOREf64, STFD,
  1692. STFDU,
  1693. STFDUX,
  1694. STFDX,
  1695. STFIWX, STIWX,
  1696. STFS,
  1697. STFSU,
  1698. STFSUX,
  1699. STFSX,
  1700. STH, STH8,
  1701. STHBRX,
  1702. STHU, STHU8,
  1703. STHUX, STHUX8,
  1704. STVEBX,
  1705. STVEHX,
  1706. STVEWX,
  1707. STVX,
  1708. STVXL,
  1709. STW, STW8,
  1710. STWBRX,
  1711. STWU, STWU8,
  1712. STWUX, STWUX8,
  1713. STXSD,
  1714. STXSDX,
  1715. STXSIBX, STXSIBXv,
  1716. STXSIHX, STXSIHXv,
  1717. STXSIWX,
  1718. STXSSP,
  1719. STXSSPX,
  1720. STXV,
  1721. STXVB16X,
  1722. STXVD2X,
  1723. STXVH8X,
  1724. STXVRBX,
  1725. STXVRDX,
  1726. STXVRHX,
  1727. STXVRWX,
  1728. STXVW4X,
  1729. STXVX
  1730. )>;
  1731. // 3 Cycles Store operations, 3 input operands
  1732. def : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read, P10ST_Read],
  1733. (instrs
  1734. CP_COPY, CP_COPY8,
  1735. STBX, STBX8, STBXTLS, STBXTLS_, STBXTLS_32,
  1736. SPILLTOVSR_STX, STDX, STDXTLS, STDXTLS_,
  1737. STHX, STHX8, STHXTLS, STHXTLS_, STHXTLS_32,
  1738. STWX, STWX8, STWXTLS, STWXTLS_, STWXTLS_32,
  1739. STXVL,
  1740. STXVLL
  1741. )>;
  1742. // Single crack instructions
  1743. // 3 Cycles Store operations, 0 input operands
  1744. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY],
  1745. (instrs
  1746. EnforceIEIO,
  1747. MSGSYNC,
  1748. SLBSYNC,
  1749. TCHECK,
  1750. TLBSYNC
  1751. )>;
  1752. // Single crack instructions
  1753. // 3 Cycles Store operations, 1 input operands
  1754. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read],
  1755. (instrs
  1756. TEND
  1757. )>;
  1758. // Single crack instructions
  1759. // 3 Cycles Store operations, 2 input operands
  1760. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
  1761. (instrs
  1762. SLBIEG,
  1763. STBCX,
  1764. STDCX,
  1765. STHCX,
  1766. STWCX,
  1767. TLBIE
  1768. )>;
  1769. // Single crack instructions
  1770. // 3 Cycles Store operations, 3 input operands
  1771. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read, P10ST_Read, P10ST_Read],
  1772. (instrs
  1773. CP_PASTE8_rec, CP_PASTE_rec,
  1774. STBCIX,
  1775. STDCIX,
  1776. STHCIX,
  1777. STWCIX
  1778. )>;
  1779. // 2-way crack instructions
  1780. // 3 Cycles Store operations, and 3 Cycles ALU operations, 0 input operands
  1781. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  1782. (instrs
  1783. ISYNC
  1784. )>;
  1785. // 2-way crack instructions
  1786. // 3 Cycles Store operations, and 3 Cycles ALU operations, 1 input operands
  1787. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  1788. (instrs
  1789. SYNC
  1790. )>;
  1791. // Expand instructions
  1792. // 3 Cycles Store operations, 3 Cycles ALU operations, 3 Cycles Store operations, 3 Cycles ALU operations, 3 Cycles Store operations, 3 Cycles ALU operations, 6 Cycles Load operations, and 3 Cycles Store operations, 2 input operands
  1793. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY],
  1794. (instrs
  1795. LDAT,
  1796. LWAT
  1797. )>;
  1798. // 4-way crack instructions
  1799. // 3 Cycles Store operations, 3 Cycles ALU operations, 3 Cycles Store operations, and 3 Cycles Store operations, 3 input operands
  1800. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY],
  1801. (instrs
  1802. STDAT,
  1803. STWAT
  1804. )>;
  1805. // Expand instructions
  1806. // 3 Cycles Store operations, 3 Cycles Store operations, 3 Cycles Store operations, and 3 Cycles Store operations, 2 input operands
  1807. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
  1808. (instrs
  1809. STMW
  1810. )>;
  1811. // Expand instructions
  1812. // 3 Cycles Store operations, 3 Cycles Store operations, 3 Cycles Store operations, and 3 Cycles Store operations, 3 input operands
  1813. def : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read, P10ST_Read],
  1814. (instrs
  1815. STSWI
  1816. )>;
  1817. // 3 Cycles Store operations, 2 input operands
  1818. def : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10ST_Read, P10ST_Read],
  1819. (instrs
  1820. PSTB, PSTB8, PSTB8pc, PSTBpc,
  1821. PSTD, PSTDpc,
  1822. PSTFD, PSTFDpc,
  1823. PSTFS, PSTFSpc,
  1824. PSTH, PSTH8, PSTH8pc, PSTHpc,
  1825. PSTW, PSTW8, PSTW8pc, PSTWpc,
  1826. PSTXSD, PSTXSDpc,
  1827. PSTXSSP, PSTXSSPpc,
  1828. PSTXV, PSTXVpc
  1829. )>;
  1830. // 2-way crack instructions
  1831. // 3 Cycles Store operations, and 3 Cycles Store operations, 2 input operands
  1832. def : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10W_ST_3C, P10ST_Read, P10ST_Read],
  1833. (instrs
  1834. STXVP,
  1835. STXVPX
  1836. )>;
  1837. // FIXME - Miss scheduling information from datasheet
  1838. // Temporary set it as 1 Cycles Simple Fixed-point (SFX) operations, 0 input operands
  1839. def : InstRW<[P10W_SX, P10W_DISP_ANY],
  1840. (instrs
  1841. ATTN,
  1842. CP_ABORT,
  1843. DCBA,
  1844. DCBI,
  1845. DCBZL,
  1846. DCCCI,
  1847. ICBLC,
  1848. ICBLQ,
  1849. ICBTLS,
  1850. ICCCI,
  1851. LA, LA8,
  1852. LDMX,
  1853. MFDCR,
  1854. MFPMR,
  1855. MFSRIN,
  1856. MSYNC,
  1857. MTDCR,
  1858. MTPMR,
  1859. MTSRIN,
  1860. NAP,
  1861. TLBIA,
  1862. TLBLD,
  1863. TLBLI,
  1864. TLBRE2,
  1865. TLBSX2,
  1866. TLBSX2D,
  1867. TLBWE2
  1868. )>;
  1869. // Single crack instructions
  1870. // 3 Cycles Simple Fixed-point (SFX) operations, 0 input operands
  1871. def : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_DISP_ANY],
  1872. (instrs
  1873. CLRBHRB,
  1874. MFMSR
  1875. )>;
  1876. // Single crack instructions
  1877. // 3 Cycles Simple Fixed-point (SFX) operations, 1 input operands
  1878. def : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10SX_Read],
  1879. (instrs
  1880. MFTB
  1881. )>;
  1882. // Single crack instructions
  1883. // 3 Cycles Simple Fixed-point (SFX) operations, 2 input operands
  1884. def : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10SX_Read, P10SX_Read],
  1885. (instrs
  1886. MFBHRBE,
  1887. MTMSR,
  1888. MTMSRD
  1889. )>;
  1890. // 2-way crack instructions
  1891. // 3 Cycles Simple Fixed-point (SFX) operations, and 3 Cycles ALU operations, 1 input operands
  1892. def : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
  1893. (instrs
  1894. ADDPCIS
  1895. )>;
  1896. // 3 Cycles Simple Fixed-point (SFX) operations, 1 input operands
  1897. def : InstRW<[P10W_SX_3C, P10W_DISP_PAIR, P10SX_Read],
  1898. (instrs
  1899. PADDI, PADDI8, PADDI8pc, PADDIpc, PLI, PLI8
  1900. )>;
  1901. // 7 Cycles VMX Multiply operations, 2 input operands
  1902. def : InstRW<[P10W_vMU_7C, P10W_DISP_ANY, P10vMU_Read, P10vMU_Read],
  1903. (instrs
  1904. VMULESB,
  1905. VMULESD,
  1906. VMULESH,
  1907. VMULESW,
  1908. VMULEUB,
  1909. VMULEUD,
  1910. VMULEUH,
  1911. VMULEUW,
  1912. VMULHSW,
  1913. VMULHUW,
  1914. VMULOSB,
  1915. VMULOSD,
  1916. VMULOSH,
  1917. VMULOSW,
  1918. VMULOUB,
  1919. VMULOUD,
  1920. VMULOUH,
  1921. VMULOUW,
  1922. VMULUWM,
  1923. VSUM2SWS,
  1924. VSUM4SBS,
  1925. VSUM4SHS,
  1926. VSUM4UBS
  1927. )>;
  1928. // 7 Cycles VMX Multiply operations, 3 input operands
  1929. def : InstRW<[P10W_vMU_7C, P10W_DISP_ANY, P10vMU_Read, P10vMU_Read, P10vMU_Read],
  1930. (instrs
  1931. VMHADDSHS,
  1932. VMHRADDSHS,
  1933. VMLADDUHM,
  1934. VMSUMCUD,
  1935. VMSUMMBM,
  1936. VMSUMSHM,
  1937. VMSUMSHS,
  1938. VMSUMUBM,
  1939. VMSUMUDM,
  1940. VMSUMUHM,
  1941. VMSUMUHS
  1942. )>;