AArch64SchedKryoDetails.td 83 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377
  1. //=- AArch64SchedKryoDetails.td - QC Kryo Scheduling Defs ----*- 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. //
  9. // This file defines the uop and latency details for the machine model for the
  10. // Qualcomm Kryo subtarget.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. def KryoWrite_3cyc_X_noRSV_138ln :
  14. SchedWriteRes<[KryoUnitX]> {
  15. let Latency = 3; let NumMicroOps = 2;
  16. }
  17. def : InstRW<[KryoWrite_3cyc_X_noRSV_138ln],
  18. (instregex "(S|U)R?SRA(d|(v2i32|v4i16|v8i8)_shift)")>;
  19. def KryoWrite_3cyc_X_X_139ln :
  20. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  21. let Latency = 3; let NumMicroOps = 2;
  22. }
  23. def : InstRW<[KryoWrite_3cyc_X_X_139ln],
  24. (instregex "(S|U)R?SRA(v2i64|v4i32|v8i16|v16i8)_shift")>;
  25. def KryoWrite_4cyc_XY_XY_noRSV_172ln :
  26. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  27. let Latency = 4; let NumMicroOps = 3;
  28. }
  29. def : InstRW<[KryoWrite_4cyc_XY_XY_noRSV_172ln],
  30. (instregex "(S|U)ABA(v8i8|v4i16|v2i32)")>;
  31. def KryoWrite_4cyc_XY_XY_XY_XY_178ln :
  32. SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
  33. let Latency = 4; let NumMicroOps = 4;
  34. }
  35. def : InstRW<[KryoWrite_4cyc_XY_XY_XY_XY_178ln],
  36. (instregex "(S|U)ABA(v16i8|v8i16|v4i32)")>;
  37. def KryoWrite_3cyc_XY_XY_XY_XY_177ln :
  38. SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
  39. let Latency = 3; let NumMicroOps = 4;
  40. }
  41. def : InstRW<[KryoWrite_3cyc_XY_XY_XY_XY_177ln],
  42. (instregex "(S|U)ABALv.*")>;
  43. def KryoWrite_3cyc_XY_XY_166ln :
  44. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  45. let Latency = 3; let NumMicroOps = 2;
  46. }
  47. def : InstRW<[KryoWrite_3cyc_XY_XY_166ln],
  48. (instregex "(S|U)(ABD|QSUB|RHADD)(v16i8|v8i16|v4i32|v2i64)")>;
  49. def KryoWrite_3cyc_XY_noRSV_159ln :
  50. SchedWriteRes<[KryoUnitXY]> {
  51. let Latency = 3; let NumMicroOps = 2;
  52. }
  53. def : InstRW<[KryoWrite_3cyc_XY_noRSV_159ln],
  54. (instregex "(S|U)(ABD|RHADD)(v8i8|v4i16|v2i32)")>;
  55. def KryoWrite_3cyc_XY_XY_165ln :
  56. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  57. let Latency = 3; let NumMicroOps = 2;
  58. }
  59. def : InstRW<[KryoWrite_3cyc_XY_XY_165ln],
  60. (instregex "(S|U)ABDLv.*")>;
  61. def KryoWrite_3cyc_X_noRSV_154ln :
  62. SchedWriteRes<[KryoUnitX]> {
  63. let Latency = 3; let NumMicroOps = 2;
  64. }
  65. def : InstRW<[KryoWrite_3cyc_X_noRSV_154ln],
  66. (instregex "(S|U)ADALP(v8i8|v4i16|v2i32)_v.*")>;
  67. def KryoWrite_3cyc_X_X_155ln :
  68. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  69. let Latency = 3; let NumMicroOps = 2;
  70. }
  71. def : InstRW<[KryoWrite_3cyc_X_X_155ln],
  72. (instregex "(S|U)ADALP(v16i8|v8i16|v4i32)_v.*")>;
  73. def KryoWrite_2cyc_XY_XY_151ln :
  74. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  75. let Latency = 2; let NumMicroOps = 2;
  76. }
  77. def : InstRW<[KryoWrite_2cyc_XY_XY_151ln],
  78. (instregex "(S|U)(ADD|SUB)Lv.*")>;
  79. def KryoWrite_2cyc_XY_noRSV_148ln :
  80. SchedWriteRes<[KryoUnitXY]> {
  81. let Latency = 2; let NumMicroOps = 2;
  82. }
  83. def : InstRW<[KryoWrite_2cyc_XY_noRSV_148ln],
  84. (instregex "((S|U)ADDLP|ABS)(v2i32|v4i16|v8i8)(_v.*)?")>;
  85. def KryoWrite_2cyc_XY_XY_150ln :
  86. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  87. let Latency = 2; let NumMicroOps = 2;
  88. }
  89. def : InstRW<[KryoWrite_2cyc_XY_XY_150ln],
  90. (instregex "((S|U)ADDLP|ABS)(v2i64|v4i32|v8i16|v16i8)(_v.*)?")>;
  91. def KryoWrite_3cyc_XY_XY_XY_noRSV_179ln :
  92. SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
  93. let Latency = 3; let NumMicroOps = 4;
  94. }
  95. def : InstRW<[KryoWrite_3cyc_XY_XY_XY_noRSV_179ln],
  96. (instrs SADDLVv4i32v, UADDLVv4i32v)>;
  97. def KryoWrite_5cyc_XY_XY_XY_noRSV_180ln :
  98. SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
  99. let Latency = 5; let NumMicroOps = 4;
  100. }
  101. def : InstRW<[KryoWrite_5cyc_XY_XY_XY_noRSV_180ln],
  102. (instrs SADDLVv8i16v, UADDLVv8i16v)>;
  103. def KryoWrite_6cyc_XY_XY_X_noRSV_181ln :
  104. SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitX]> {
  105. let Latency = 6; let NumMicroOps = 4;
  106. }
  107. def : InstRW<[KryoWrite_6cyc_XY_XY_X_noRSV_181ln],
  108. (instrs SADDLVv16i8v, UADDLVv16i8v)>;
  109. def KryoWrite_3cyc_XY_noRSV_158ln :
  110. SchedWriteRes<[KryoUnitXY]> {
  111. let Latency = 3; let NumMicroOps = 2;
  112. }
  113. def : InstRW<[KryoWrite_3cyc_XY_noRSV_158ln],
  114. (instrs SADDLVv4i16v, UADDLVv4i16v, ADDVv4i16v)>;
  115. def KryoWrite_4cyc_X_noRSV_169ln :
  116. SchedWriteRes<[KryoUnitX]> {
  117. let Latency = 4; let NumMicroOps = 2;
  118. }
  119. def : InstRW<[KryoWrite_4cyc_X_noRSV_169ln],
  120. (instrs SADDLVv8i8v, UADDLVv8i8v, ADDVv8i8v)>;
  121. def KryoWrite_2cyc_XY_XY_XY_XY_176ln :
  122. SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitXY, KryoUnitXY]> {
  123. let Latency = 2; let NumMicroOps = 4;
  124. }
  125. def : InstRW<[KryoWrite_2cyc_XY_XY_XY_XY_176ln],
  126. (instregex "(S|U)(ADDW|SUBW)v.*")>;
  127. def KryoWrite_4cyc_X_noRSV_40ln :
  128. SchedWriteRes<[KryoUnitX]> {
  129. let Latency = 4; let NumMicroOps = 2;
  130. }
  131. def : InstRW<[KryoWrite_4cyc_X_noRSV_40ln],
  132. (instregex "(S|U)CVTFS(W|X)(D|S)ri")>;
  133. def KryoWrite_4cyc_X_noRSV_97ln :
  134. SchedWriteRes<[KryoUnitX]> {
  135. let Latency = 4; let NumMicroOps = 2;
  136. }
  137. def : InstRW<[KryoWrite_4cyc_X_noRSV_97ln],
  138. (instregex "(S|U)CVTFU(W|X)(D|S)ri")>;
  139. def KryoWrite_4cyc_X_noRSV_110ln :
  140. SchedWriteRes<[KryoUnitX]> {
  141. let Latency = 4; let NumMicroOps = 2;
  142. }
  143. def : InstRW<[KryoWrite_4cyc_X_noRSV_110ln],
  144. (instregex "(S|U)CVTF(v1i32|v2i32|v1i64|v2f32|d|s)(_shift)?")>;
  145. def KryoWrite_4cyc_X_X_114ln :
  146. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  147. let Latency = 4; let NumMicroOps = 2;
  148. }
  149. def : InstRW<[KryoWrite_4cyc_X_X_114ln],
  150. (instregex "(S|U)CVTF(v2i64|v4i32|v2f64|v4f32)(_shift)?")>;
  151. def KryoWrite_1cyc_XA_Y_98ln :
  152. SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
  153. let Latency = 1; let NumMicroOps = 2;
  154. }
  155. def : InstRW<[KryoWrite_1cyc_XA_Y_98ln],
  156. (instregex "(S|U)DIV(_Int)?(W|X)r")>;
  157. def KryoWrite_2cyc_XY_XY_152ln :
  158. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  159. let Latency = 2; let NumMicroOps = 2;
  160. }
  161. def : InstRW<[KryoWrite_2cyc_XY_XY_152ln],
  162. (instregex "(S|U)H(ADD|SUB)(v16i8|v8i16|v4i32)")>;
  163. def KryoWrite_2cyc_XY_noRSV_149ln :
  164. SchedWriteRes<[KryoUnitXY]> {
  165. let Latency = 2; let NumMicroOps = 2;
  166. }
  167. def : InstRW<[KryoWrite_2cyc_XY_noRSV_149ln],
  168. (instregex "((S|U)H(ADD|SUB)|ADDP)(v8i8|v4i16|v2i32)")>;
  169. def KryoWrite_4cyc_X_70ln :
  170. SchedWriteRes<[KryoUnitX]> {
  171. let Latency = 4; let NumMicroOps = 1;
  172. }
  173. def : InstRW<[KryoWrite_4cyc_X_70ln],
  174. (instregex "(S|U)(MADDL|MSUBL)rrr")>;
  175. def KryoWrite_4cyc_X_X_191ln :
  176. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  177. let Latency = 4; let NumMicroOps = 2;
  178. }
  179. def : InstRW<[KryoWrite_4cyc_X_X_191ln],
  180. (instregex "(S|U|SQD)(MLAL|MLSL|MULL)v.*")>;
  181. def KryoWrite_1cyc_XY_195ln :
  182. SchedWriteRes<[KryoUnitXY]> {
  183. let Latency = 1; let NumMicroOps = 1;
  184. }
  185. def : InstRW<[KryoWrite_1cyc_XY_195ln],
  186. (instregex "(S|U)MOVv.*")>;
  187. def KryoWrite_5cyc_X_71ln :
  188. SchedWriteRes<[KryoUnitX]> {
  189. let Latency = 5; let NumMicroOps = 1;
  190. }
  191. def : InstRW<[KryoWrite_5cyc_X_71ln],
  192. (instrs SMULHrr, UMULHrr)>;
  193. def KryoWrite_3cyc_XY_noRSV_186ln :
  194. SchedWriteRes<[KryoUnitXY]> {
  195. let Latency = 3; let NumMicroOps = 2;
  196. }
  197. def : InstRW<[KryoWrite_3cyc_XY_noRSV_186ln],
  198. (instregex "^(S|U)QADD(v8i8|v4i16|v2i32)")>;
  199. def KryoWrite_3cyc_XY_XY_187ln :
  200. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  201. let Latency = 3; let NumMicroOps = 2;
  202. }
  203. def : InstRW<[KryoWrite_3cyc_XY_XY_187ln],
  204. (instregex "^(S|U)QADD(v16i8|v8i16|v4i32|v2i64)")>;
  205. def KryoWrite_3cyc_XY_noRSV_69ln :
  206. SchedWriteRes<[KryoUnitXY]> {
  207. let Latency = 3; let NumMicroOps = 2;
  208. }
  209. def : InstRW<[KryoWrite_3cyc_XY_noRSV_69ln],
  210. (instregex "(S|U|SU|US)QADD(v1i8|v1i16|v2i16|v1i32|v1i64)")>;
  211. def KryoWrite_3cyc_XY_noRSV_248ln :
  212. SchedWriteRes<[KryoUnitXY]> {
  213. let Latency = 3; let NumMicroOps = 2;
  214. }
  215. def : InstRW<[KryoWrite_3cyc_XY_noRSV_248ln],
  216. (instregex "(S|U)QSHLU?(d|s|h|b|(v8i8|v4i16|v2i32)_shift)$")>;
  217. def KryoWrite_3cyc_XY_XY_250ln :
  218. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  219. let Latency = 3; let NumMicroOps = 2;
  220. }
  221. def : InstRW<[KryoWrite_3cyc_XY_XY_250ln],
  222. (instregex "(S|U)(QSHLU?|RSHR)(v16i8|v8i16|v4i32|v2i64)_shift$")>;
  223. def KryoWrite_3cyc_XY_noRSV_246ln :
  224. SchedWriteRes<[KryoUnitXY]> {
  225. let Latency = 3; let NumMicroOps = 2;
  226. }
  227. def : InstRW<[KryoWrite_3cyc_XY_noRSV_246ln],
  228. (instregex "(S|U)(QSHL|RSHL|QRSHL)(v1i8|v1i16|v1i32|v1i64|v8i8|v4i16|v2i32)$")>;
  229. def KryoWrite_3cyc_XY_XY_251ln :
  230. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  231. let Latency = 3; let NumMicroOps = 2;
  232. }
  233. def : InstRW<[KryoWrite_3cyc_XY_XY_251ln],
  234. (instregex "(S|U)(QSHL|RSHL|QRSHL)(v16i8|v8i16|v4i32|v2i64)$")>;
  235. def KryoWrite_6cyc_XY_X_238ln :
  236. SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
  237. let Latency = 6; let NumMicroOps = 2;
  238. }
  239. def : InstRW<[KryoWrite_6cyc_XY_X_238ln],
  240. (instregex "((S|U)QR?SHRN|SQR?SHRUN)(v16i8|v8i16|v4i32)_shift$")>;
  241. def KryoWrite_3cyc_XY_noRSV_249ln :
  242. SchedWriteRes<[KryoUnitXY]> {
  243. let Latency = 3; let NumMicroOps = 2;
  244. }
  245. def : InstRW<[KryoWrite_3cyc_XY_noRSV_249ln],
  246. (instregex "((S|U)QR?SHRN|SQR?SHRUN)(s|h|b)?")>;
  247. def KryoWrite_6cyc_XY_X_noRSV_252ln :
  248. SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
  249. let Latency = 6; let NumMicroOps = 3;
  250. }
  251. def : InstRW<[KryoWrite_6cyc_XY_X_noRSV_252ln],
  252. (instregex "((S|U)QR?SHRN|SQR?SHRUN)(v8i8|v4i16|v2i32)_shift?")>;
  253. def KryoWrite_3cyc_XY_noRSV_161ln :
  254. SchedWriteRes<[KryoUnitXY]> {
  255. let Latency = 3; let NumMicroOps = 2;
  256. }
  257. def : InstRW<[KryoWrite_3cyc_XY_noRSV_161ln],
  258. (instregex "(S|U)QSUB(v8i8|v4i16|v2i32|v1i64|v1i32|v1i16|v1i8)")>;
  259. def KryoWrite_3cyc_XY_noRSV_163ln :
  260. SchedWriteRes<[KryoUnitXY]> {
  261. let Latency = 3; let NumMicroOps = 2;
  262. }
  263. def : InstRW<[KryoWrite_3cyc_XY_noRSV_163ln],
  264. (instregex "(S|U)QXTU?N(v16i8|v8i16|v4i32|v8i8|v4i16|v2i32)")>;
  265. def KryoWrite_3cyc_XY_noRSV_162ln :
  266. SchedWriteRes<[KryoUnitXY]> {
  267. let Latency = 3; let NumMicroOps = 2;
  268. }
  269. def : InstRW<[KryoWrite_3cyc_XY_noRSV_162ln],
  270. (instregex "(S|U)QXTU?N(v1i8|v1i16|v1i32)")>;
  271. def KryoWrite_3cyc_XY_noRSV_247ln :
  272. SchedWriteRes<[KryoUnitXY]> {
  273. let Latency = 3; let NumMicroOps = 2;
  274. }
  275. def : InstRW<[KryoWrite_3cyc_XY_noRSV_247ln],
  276. (instregex "(S|U)RSHR(d|(v8i8|v4i16|v2i32)_shift)$")>;
  277. def KryoWrite_2cyc_XY_noRSV_239ln :
  278. SchedWriteRes<[KryoUnitXY]> {
  279. let Latency = 2; let NumMicroOps = 2;
  280. }
  281. def : InstRW<[KryoWrite_2cyc_XY_noRSV_239ln],
  282. (instregex "(S|U)SHL(d|v8i8|v4i16|v2i32|v1i64)$")>;
  283. def KryoWrite_2cyc_XY_XY_243ln :
  284. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  285. let Latency = 2; let NumMicroOps = 2;
  286. }
  287. def : InstRW<[KryoWrite_2cyc_XY_XY_243ln],
  288. (instregex "(S|U)SHL(v16i8|v8i16|v4i32|v2i64)$")>;
  289. def KryoWrite_2cyc_XY_XY_241ln :
  290. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  291. let Latency = 2; let NumMicroOps = 2;
  292. }
  293. def : InstRW<[KryoWrite_2cyc_XY_XY_241ln],
  294. (instregex "(S|U)?SHLL(v16i8|v8i16|v4i32|v8i8|v4i16|v2i32)(_shift)?$")>;
  295. def KryoWrite_2cyc_XY_noRSV_240ln :
  296. SchedWriteRes<[KryoUnitXY]> {
  297. let Latency = 2; let NumMicroOps = 2;
  298. }
  299. def : InstRW<[KryoWrite_2cyc_XY_noRSV_240ln],
  300. (instregex "((S|U)SHR|SHL)(d|(v8i8|v4i16|v2i32)_shift)$")>;
  301. def KryoWrite_2cyc_XY_XY_242ln :
  302. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  303. let Latency = 2; let NumMicroOps = 2;
  304. }
  305. def : InstRW<[KryoWrite_2cyc_XY_XY_242ln],
  306. (instregex "((S|U)SHR|SHL)(v16i8|v8i16|v4i32|v2i64)_shift$")>;
  307. def KryoWrite_2cyc_XY_XY_183ln :
  308. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  309. let Latency = 2; let NumMicroOps = 2;
  310. }
  311. def : InstRW<[KryoWrite_2cyc_XY_XY_183ln],
  312. (instregex "(S|U)(MAX|MIN)P?(v16i8|v8i16|v4i32)")>;
  313. def KryoWrite_2cyc_XY_noRSV_182ln :
  314. SchedWriteRes<[KryoUnitXY]> {
  315. let Latency = 2; let NumMicroOps = 2;
  316. }
  317. def : InstRW<[KryoWrite_2cyc_XY_noRSV_182ln],
  318. (instregex "(S|U)(MAX|MIN)P?(v8i8|v4i16|v2i32)")>;
  319. def KryoWrite_3cyc_XY_noRSV_184ln :
  320. SchedWriteRes<[KryoUnitXY]> {
  321. let Latency = 3; let NumMicroOps = 2;
  322. }
  323. def : InstRW<[KryoWrite_3cyc_XY_noRSV_184ln],
  324. (instregex "(S|U)(MAX|MIN)V(v4i16v|v8i8v|v4i32)")>;
  325. def KryoWrite_4cyc_X_noRSV_185ln :
  326. SchedWriteRes<[KryoUnitX]> {
  327. let Latency = 4; let NumMicroOps = 2;
  328. }
  329. def : InstRW<[KryoWrite_4cyc_X_noRSV_185ln],
  330. (instregex "(S|U)(MAX|MIN)V(v16i8v|v8i16v)")>;
  331. def KryoWrite_2cyc_XY_noRSV_67ln :
  332. SchedWriteRes<[KryoUnitXY]> {
  333. let Latency = 2; let NumMicroOps = 2;
  334. }
  335. def : InstRW<[KryoWrite_2cyc_XY_noRSV_67ln],
  336. (instrs ABSv1i64)>;
  337. def KryoWrite_1cyc_XY_63ln :
  338. SchedWriteRes<[KryoUnitXY]> {
  339. let Latency = 1; let NumMicroOps = 1;
  340. }
  341. def : InstRW<[KryoWrite_1cyc_XY_63ln, ReadI, ReadI],
  342. (instregex "ADC.*")>;
  343. def KryoWrite_1cyc_XY_63_1ln :
  344. SchedWriteRes<[KryoUnitXY]> {
  345. let Latency = 1; let NumMicroOps = 1;
  346. }
  347. def : InstRW<[KryoWrite_1cyc_XY_63_1ln],
  348. (instregex "ADR.*")>;
  349. def KryoWrite_1cyc_XY_62ln :
  350. SchedWriteRes<[KryoUnitXY]> {
  351. let Latency = 1; let NumMicroOps = 1;
  352. }
  353. def : InstRW<[KryoWrite_1cyc_XY_62ln, ReadI],
  354. (instregex "ADDS?(W|X)ri")>;
  355. def KryoWrite_2cyc_XY_XY_64ln :
  356. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  357. let Latency = 2; let NumMicroOps = 2;
  358. }
  359. def : InstRW<[KryoWrite_2cyc_XY_XY_64ln, ReadI, ReadI],
  360. (instregex "ADDS?(W|X)r(r|s|x)(64)?")>;
  361. def KryoWrite_1cyc_XY_noRSV_65ln :
  362. SchedWriteRes<[KryoUnitXY]> {
  363. let Latency = 1; let NumMicroOps = 2;
  364. }
  365. def : InstRW<[KryoWrite_1cyc_XY_noRSV_65ln],
  366. (instrs ADDv1i64)>;
  367. def KryoWrite_1cyc_XY_noRSV_144ln :
  368. SchedWriteRes<[KryoUnitXY]> {
  369. let Latency = 1; let NumMicroOps = 2;
  370. }
  371. def : InstRW<[KryoWrite_1cyc_XY_noRSV_144ln],
  372. (instregex "(ADD|SUB)(v8i8|v4i16|v2i32|v1i64)")>;
  373. def KryoWrite_1cyc_XY_XY_146ln :
  374. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  375. let Latency = 1; let NumMicroOps = 2;
  376. }
  377. def : InstRW<[KryoWrite_1cyc_XY_XY_146ln],
  378. (instregex "(ADD|SUB)(v16i8|v8i16|v4i32|v2i64)")>;
  379. def KryoWrite_4cyc_XY_X_noRSV_171ln :
  380. SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
  381. let Latency = 4; let NumMicroOps = 3;
  382. }
  383. def : InstRW<[KryoWrite_4cyc_XY_X_noRSV_171ln],
  384. (instregex "(ADD|SUB)HNv.*")>;
  385. def KryoWrite_1cyc_XY_noRSV_66ln :
  386. SchedWriteRes<[KryoUnitXY]> {
  387. let Latency = 1; let NumMicroOps = 2;
  388. }
  389. def : InstRW<[KryoWrite_1cyc_XY_noRSV_66ln],
  390. (instrs ADDPv2i64p)>;
  391. def KryoWrite_2cyc_XY_XY_153ln :
  392. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  393. let Latency = 2; let NumMicroOps = 2;
  394. }
  395. def : InstRW<[KryoWrite_2cyc_XY_XY_153ln],
  396. (instregex "ADDP(v16i8|v8i16|v4i32|v2i64)")>;
  397. def KryoWrite_3cyc_XY_XY_noRSV_170ln :
  398. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  399. let Latency = 3; let NumMicroOps = 3;
  400. }
  401. def : InstRW<[KryoWrite_3cyc_XY_XY_noRSV_170ln],
  402. (instrs ADDVv4i32v)>;
  403. def KryoWrite_4cyc_XY_XY_noRSV_173ln :
  404. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  405. let Latency = 4; let NumMicroOps = 3;
  406. }
  407. def : InstRW<[KryoWrite_4cyc_XY_XY_noRSV_173ln],
  408. (instrs ADDVv8i16v)>;
  409. def KryoWrite_5cyc_XY_X_noRSV_174ln :
  410. SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
  411. let Latency = 5; let NumMicroOps = 3;
  412. }
  413. def : InstRW<[KryoWrite_5cyc_XY_X_noRSV_174ln],
  414. (instrs ADDVv16i8v)>;
  415. def KryoWrite_3cyc_XY_XY_X_X_27ln :
  416. SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitX, KryoUnitX]> {
  417. let Latency = 3; let NumMicroOps = 4;
  418. }
  419. def : InstRW<[KryoWrite_3cyc_XY_XY_X_X_27ln],
  420. (instrs AESDrr, AESErr)>;
  421. def KryoWrite_2cyc_X_X_22ln :
  422. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  423. let Latency = 2; let NumMicroOps = 2;
  424. }
  425. def : InstRW<[KryoWrite_2cyc_X_X_22ln],
  426. (instrs AESIMCrr, AESMCrr)>;
  427. def KryoWrite_1cyc_XY_noRSV_76ln :
  428. SchedWriteRes<[KryoUnitXY]> {
  429. let Latency = 1; let NumMicroOps = 2;
  430. }
  431. def : InstRW<[KryoWrite_1cyc_XY_noRSV_76ln],
  432. (instregex "((AND|ORN|EOR|EON)S?(Wr[rsi]|v8i8|v4i16|v2i32)|(ORR|BIC)S?(Wr[rs]|v8i8|v4i16|v2i32))")>;
  433. def KryoWrite_1cyc_XY_XY_79ln :
  434. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  435. let Latency = 1; let NumMicroOps = 2;
  436. }
  437. def : InstRW<[KryoWrite_1cyc_XY_XY_79ln],
  438. (instregex "((AND|ORN|EOR|EON)S?(Xr[rsi]|v16i8|v8i16|v4i32)|(ORR|BIC)S?(Xr[rs]|v16i8|v8i16|v4i32))")>;
  439. def KryoWrite_1cyc_X_72ln :
  440. SchedWriteRes<[KryoUnitX]> {
  441. let Latency = 1; let NumMicroOps = 1;
  442. }
  443. def : InstRW<[KryoWrite_1cyc_X_72ln],
  444. (instregex "(S|U)?BFM.*")>;
  445. def KryoWrite_1cyc_XY_noRSV_77ln :
  446. SchedWriteRes<[KryoUnitXY]> {
  447. let Latency = 1; let NumMicroOps = 2;
  448. }
  449. def : InstRW<[KryoWrite_1cyc_XY_noRSV_77ln],
  450. (instregex "(BIC|ORR)S?Wri")>;
  451. def KryoWrite_1cyc_XY_XY_78ln :
  452. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  453. let Latency = 1; let NumMicroOps = 2;
  454. }
  455. def : InstRW<[KryoWrite_1cyc_XY_XY_78ln],
  456. (instregex "(BIC|ORR)S?Xri")>;
  457. def KryoWrite_1cyc_X_noRSV_74ln :
  458. SchedWriteRes<[KryoUnitX]> {
  459. let Latency = 1; let NumMicroOps = 2;
  460. }
  461. def : InstRW<[KryoWrite_1cyc_X_noRSV_74ln],
  462. (instrs BIFv8i8, BITv8i8, BSLv8i8, BSPv8i8)>;
  463. def KryoWrite_1cyc_X_X_75ln :
  464. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  465. let Latency = 1; let NumMicroOps = 2;
  466. }
  467. def : InstRW<[KryoWrite_1cyc_X_X_75ln],
  468. (instrs BIFv16i8, BITv16i8, BSLv16i8, BSPv16i8)>;
  469. def KryoWrite_0cyc_noRSV_11ln :
  470. SchedWriteRes<[]> {
  471. let Latency = 0; let NumMicroOps = 1;
  472. }
  473. def : InstRW<[KryoWrite_0cyc_noRSV_11ln],
  474. (instrs BRK, DCPS1, DCPS2, DCPS3, HLT, HVC, ISB, HINT, SMC, SVC)>;
  475. def KryoWrite_0cyc_XY_16ln :
  476. SchedWriteRes<[KryoUnitXY]> {
  477. let Latency = 0; let NumMicroOps = 1;
  478. }
  479. def : InstRW<[KryoWrite_0cyc_XY_16ln, ReadI],
  480. (instregex "(CCMN|CCMP)(W|X)i")>;
  481. def KryoWrite_0cyc_XY_16_1ln :
  482. SchedWriteRes<[KryoUnitXY]> {
  483. let Latency = 0; let NumMicroOps = 1;
  484. }
  485. def : InstRW<[KryoWrite_0cyc_XY_16_1ln, ReadI, ReadI],
  486. (instregex "(CCMN|CCMP)(W|X)r")>;
  487. def KryoWrite_2cyc_XY_3ln :
  488. SchedWriteRes<[KryoUnitXY]> {
  489. let Latency = 2; let NumMicroOps = 1;
  490. }
  491. def : InstRW<[KryoWrite_2cyc_XY_3ln, ReadI],
  492. (instregex "(CLS|CLZ)(W|X)r")>;
  493. def KryoWrite_2cyc_XY_noRSV_7ln :
  494. SchedWriteRes<[KryoUnitXY]> {
  495. let Latency = 2; let NumMicroOps = 2;
  496. }
  497. def : InstRW<[KryoWrite_2cyc_XY_noRSV_7ln],
  498. (instregex "(CLS|CLZ|CNT)(v4i32|v8i16|v16i8)")>;
  499. def KryoWrite_2cyc_XY_XY_8ln :
  500. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  501. let Latency = 2; let NumMicroOps = 2;
  502. }
  503. def : InstRW<[KryoWrite_2cyc_XY_XY_8ln],
  504. (instregex "(CLS|CLZ|CNT)(v2i32|v4i16|v8i8)")>;
  505. def KryoWrite_2cyc_XY_noRSV_80ln :
  506. SchedWriteRes<[KryoUnitXY]> {
  507. let Latency = 2; let NumMicroOps = 2;
  508. }
  509. def : InstRW<[KryoWrite_2cyc_XY_noRSV_80ln],
  510. (instregex "CM(EQ|GE|HS|GT|HI|TST)(v8i8|v4i16|v2i32|v1i64)$")>;
  511. def KryoWrite_2cyc_XY_XY_83ln :
  512. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  513. let Latency = 2; let NumMicroOps = 2;
  514. }
  515. def : InstRW<[KryoWrite_2cyc_XY_XY_83ln],
  516. (instregex "CM(EQ|GE|HS|GT|HI|TST)(v16i8|v8i16|v4i32|v2i64)$")>;
  517. def KryoWrite_2cyc_XY_noRSV_81ln :
  518. SchedWriteRes<[KryoUnitXY]> {
  519. let Latency = 2; let NumMicroOps = 2;
  520. }
  521. def : InstRW<[KryoWrite_2cyc_XY_noRSV_81ln],
  522. (instregex "CM(EQ|LE|GE|GT|LT)(v8i8|v4i16|v2i32|v1i64)rz$")>;
  523. def KryoWrite_2cyc_XY_XY_82ln :
  524. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  525. let Latency = 2; let NumMicroOps = 2;
  526. }
  527. def : InstRW<[KryoWrite_2cyc_XY_XY_82ln],
  528. (instregex "CM(EQ|LE|GE|GT|LT)(v16i8|v8i16|v4i32|v2i64)rz$")>;
  529. def KryoWrite_3cyc_XY_4ln :
  530. SchedWriteRes<[KryoUnitXY]> {
  531. let Latency = 3; let NumMicroOps = 1;
  532. }
  533. def : InstRW<[KryoWrite_3cyc_XY_4ln, ReadI, ReadISReg],
  534. (instregex "CRC32.*")>;
  535. def KryoWrite_1cyc_XY_20ln :
  536. SchedWriteRes<[KryoUnitXY]> {
  537. let Latency = 1; let NumMicroOps = 1;
  538. }
  539. def : InstRW<[KryoWrite_1cyc_XY_20ln, ReadI, ReadI],
  540. (instregex "CSEL(W|X)r")>;
  541. def KryoWrite_1cyc_X_17ln :
  542. SchedWriteRes<[KryoUnitX]> {
  543. let Latency = 1; let NumMicroOps = 1;
  544. }
  545. def : InstRW<[KryoWrite_1cyc_X_17ln, ReadI, ReadI],
  546. (instregex "(CSINC|CSNEG)(W|X)r")>;
  547. def KryoWrite_1cyc_XY_18ln :
  548. SchedWriteRes<[KryoUnitXY]> {
  549. let Latency = 1; let NumMicroOps = 1;
  550. }
  551. def : InstRW<[KryoWrite_1cyc_XY_18ln, ReadI, ReadI],
  552. (instregex "(CSINV)(W|X)r")>;
  553. def KryoWrite_3cyc_LS_X_13ln :
  554. SchedWriteRes<[KryoUnitLS, KryoUnitX]> {
  555. let Latency = 3; let NumMicroOps = 2;
  556. }
  557. def : InstRW<[KryoWrite_3cyc_LS_X_13ln],
  558. (instrs DRPS)>;
  559. def KryoWrite_0cyc_LS_10ln :
  560. SchedWriteRes<[KryoUnitLS]> {
  561. let Latency = 0; let NumMicroOps = 1;
  562. }
  563. def : InstRW<[KryoWrite_0cyc_LS_10ln],
  564. (instrs DSB, DMB, CLREX)>;
  565. def KryoWrite_1cyc_X_noRSV_196ln :
  566. SchedWriteRes<[KryoUnitX]> {
  567. let Latency = 1; let NumMicroOps = 2;
  568. }
  569. def : InstRW<[KryoWrite_1cyc_X_noRSV_196ln],
  570. (instregex "DUP(v8i8|v4i16|v2i32)(gpr|lane)")>;
  571. def KryoWrite_1cyc_X_X_197ln :
  572. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  573. let Latency = 1; let NumMicroOps = 2;
  574. }
  575. def : InstRW<[KryoWrite_1cyc_X_X_197ln],
  576. (instregex "DUP(v16i8|v8i16|v4i32|v2i64)(gpr|lane)")>;
  577. def KryoWrite_3cyc_LS_LS_X_15ln :
  578. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX]> {
  579. let Latency = 3; let NumMicroOps = 3;
  580. }
  581. def : InstRW<[KryoWrite_3cyc_LS_LS_X_15ln],
  582. (instrs ERET)>;
  583. def KryoWrite_1cyc_X_noRSV_207ln :
  584. SchedWriteRes<[KryoUnitX]> {
  585. let Latency = 1; let NumMicroOps = 2;
  586. }
  587. def : InstRW<[KryoWrite_1cyc_X_noRSV_207ln],
  588. (instrs EXTv8i8)>;
  589. def KryoWrite_1cyc_X_X_212ln :
  590. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  591. let Latency = 1; let NumMicroOps = 2;
  592. }
  593. def : InstRW<[KryoWrite_1cyc_X_X_212ln],
  594. (instrs EXTv16i8)>;
  595. def KryoWrite_2cyc_XY_X_136ln :
  596. SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
  597. let Latency = 2; let NumMicroOps = 2;
  598. }
  599. def : InstRW<[KryoWrite_2cyc_XY_X_136ln],
  600. (instrs EXTRWrri, EXTRXrri)>;
  601. def KryoWrite_2cyc_XY_noRSV_35ln :
  602. SchedWriteRes<[KryoUnitXY]> {
  603. let Latency = 2; let NumMicroOps = 2;
  604. }
  605. def : InstRW<[KryoWrite_2cyc_XY_noRSV_35ln],
  606. (instregex "F(MAX|MIN)(NM)?P?(D|S)rr")>;
  607. def KryoWrite_2cyc_XY_XY_106ln :
  608. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  609. let Latency = 2; let NumMicroOps = 2;
  610. }
  611. def : InstRW<[KryoWrite_2cyc_XY_XY_106ln],
  612. (instregex "(F(MAX|MIN)(NM)?P?|FAC(GE|GT)|FCM(EQ|GE|GT))(v2i64p|v2f64|v4f32)")>;
  613. def KryoWrite_2cyc_XY_noRSV_104ln :
  614. SchedWriteRes<[KryoUnitXY]> {
  615. let Latency = 2; let NumMicroOps = 2;
  616. }
  617. def : InstRW<[KryoWrite_2cyc_XY_noRSV_104ln],
  618. (instregex "(F(MAX|MIN)(NM)?P?|FAC(GE|GT)|FCM(EQ|GE|GT))(v2f32|v2i32p)")>;
  619. def KryoWrite_3cyc_XY_noRSV_107ln :
  620. SchedWriteRes<[KryoUnitXY]> {
  621. let Latency = 3; let NumMicroOps = 2;
  622. }
  623. def : InstRW<[KryoWrite_3cyc_XY_noRSV_107ln],
  624. (instregex "F(MAX|MIN)(NM)?Vv4i32v")>;
  625. def KryoWrite_3cyc_XY_noRSV_101ln :
  626. SchedWriteRes<[KryoUnitXY]> {
  627. let Latency = 3; let NumMicroOps = 2;
  628. }
  629. def : InstRW<[KryoWrite_3cyc_XY_noRSV_101ln],
  630. (instregex "FABD(32|64|v2f32)")>;
  631. def KryoWrite_3cyc_XY_XY_103ln :
  632. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  633. let Latency = 3; let NumMicroOps = 2;
  634. }
  635. def : InstRW<[KryoWrite_3cyc_XY_XY_103ln],
  636. (instregex "(FABD|FADD|FSUB|FADDP)(v4f32|v2f64)")>;
  637. def KryoWrite_1cyc_XY_noRSV_48ln :
  638. SchedWriteRes<[KryoUnitXY]> {
  639. let Latency = 1; let NumMicroOps = 2;
  640. }
  641. def : InstRW<[KryoWrite_1cyc_XY_noRSV_48ln],
  642. (instregex "F(ABS|NEG)(D|S)r")>;
  643. def KryoWrite_1cyc_XY_noRSV_124ln :
  644. SchedWriteRes<[KryoUnitXY]> {
  645. let Latency = 1; let NumMicroOps = 2;
  646. }
  647. def : InstRW<[KryoWrite_1cyc_XY_noRSV_124ln],
  648. (instregex "F(ABS|NEG)v2f32")>;
  649. def KryoWrite_1cyc_XY_XY_125ln :
  650. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  651. let Latency = 1; let NumMicroOps = 2;
  652. }
  653. def : InstRW<[KryoWrite_1cyc_XY_XY_125ln],
  654. (instregex "F(ABS|NEG)(v2f64|v4f32)")>;
  655. def KryoWrite_2cyc_XY_noRSV_33ln :
  656. SchedWriteRes<[KryoUnitXY]> {
  657. let Latency = 2; let NumMicroOps = 2;
  658. }
  659. def : InstRW<[KryoWrite_2cyc_XY_noRSV_33ln],
  660. (instregex "(FAC(GE|GT)|FCM(EQ|GE|GT))(32|64)")>;
  661. def KryoWrite_3cyc_XY_noRSV_30ln :
  662. SchedWriteRes<[KryoUnitXY]> {
  663. let Latency = 3; let NumMicroOps = 2;
  664. }
  665. def : InstRW<[KryoWrite_3cyc_XY_noRSV_30ln],
  666. (instregex "(FADD|FSUB)(D|S)rr")>;
  667. def KryoWrite_3cyc_XY_noRSV_100ln :
  668. SchedWriteRes<[KryoUnitXY]> {
  669. let Latency = 3; let NumMicroOps = 2;
  670. }
  671. def : InstRW<[KryoWrite_3cyc_XY_noRSV_100ln],
  672. (instregex "(FADD|FSUB|FADDP)v2f32")>;
  673. def KryoWrite_3cyc_XY_noRSV_29ln :
  674. SchedWriteRes<[KryoUnitXY]> {
  675. let Latency = 3; let NumMicroOps = 2;
  676. }
  677. def : InstRW<[KryoWrite_3cyc_XY_noRSV_29ln],
  678. (instregex "FADDP(v2i32p|v2i64p)")>;
  679. def KryoWrite_0cyc_XY_31ln :
  680. SchedWriteRes<[KryoUnitXY]> {
  681. let Latency = 0; let NumMicroOps = 1;
  682. }
  683. def : InstRW<[KryoWrite_0cyc_XY_31ln],
  684. (instregex "FCCMPE?(D|S)rr")>;
  685. def KryoWrite_2cyc_XY_noRSV_34ln :
  686. SchedWriteRes<[KryoUnitXY]> {
  687. let Latency = 2; let NumMicroOps = 2;
  688. }
  689. def : InstRW<[KryoWrite_2cyc_XY_noRSV_34ln],
  690. (instregex "FCM(EQ|LE|GE|GT|LT)(v1i32|v1i64)rz")>;
  691. def KryoWrite_2cyc_XY_XY_36ln :
  692. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  693. let Latency = 2; let NumMicroOps = 2;
  694. }
  695. def : InstRW<[KryoWrite_2cyc_XY_XY_36ln],
  696. (instregex "FCM(EQ|LE|GE|GT|LT)(v2i64|v4i32)rz")>;
  697. def KryoWrite_2cyc_XY_noRSV_105ln :
  698. SchedWriteRes<[KryoUnitXY]> {
  699. let Latency = 2; let NumMicroOps = 2;
  700. }
  701. def : InstRW<[KryoWrite_2cyc_XY_noRSV_105ln],
  702. (instregex "FCM(EQ|LE|GE|GT|LT)v2i32rz")>;
  703. def KryoWrite_0cyc_XY_32ln :
  704. SchedWriteRes<[KryoUnitXY]> {
  705. let Latency = 0; let NumMicroOps = 1;
  706. }
  707. def : InstRW<[KryoWrite_0cyc_XY_32ln],
  708. (instregex "FCMPE?(D|S)r(r|i)")>;
  709. def KryoWrite_1cyc_XY_noRSV_49ln :
  710. SchedWriteRes<[KryoUnitXY]> {
  711. let Latency = 1; let NumMicroOps = 2;
  712. }
  713. def : InstRW<[KryoWrite_1cyc_XY_noRSV_49ln],
  714. (instrs FCSELDrrr, FCSELSrrr)>;
  715. def KryoWrite_4cyc_X_noRSV_41ln :
  716. SchedWriteRes<[KryoUnitX]> {
  717. let Latency = 4; let NumMicroOps = 2;
  718. }
  719. def : InstRW<[KryoWrite_4cyc_X_noRSV_41ln],
  720. (instrs FCVTDHr, FCVTDSr, FCVTHDr, FCVTHSr, FCVTSDr, FCVTSHr)>;
  721. def KryoWrite_4cyc_X_38ln :
  722. SchedWriteRes<[KryoUnitX]> {
  723. let Latency = 4; let NumMicroOps = 1;
  724. }
  725. def : InstRW<[KryoWrite_4cyc_X_38ln],
  726. (instregex "FCVT(((A|N|M|P)(S|U)(S|U)|Z(S|U)_Int(S|U))(W|X)(D|S)ri?|Z(S|U)(d|s))$")>;
  727. def KryoWrite_4cyc_X_noRSV_113ln :
  728. SchedWriteRes<[KryoUnitX]> {
  729. let Latency = 4; let NumMicroOps = 2;
  730. }
  731. def : InstRW<[KryoWrite_4cyc_X_noRSV_113ln],
  732. (instregex "FCVT((A|N|M|P)(S|U)|Z(S|U)_Int)(v1i32|v1i64|v2f32)$")>;
  733. def KryoWrite_4cyc_X_X_117ln :
  734. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  735. let Latency = 4; let NumMicroOps = 2;
  736. }
  737. def : InstRW<[KryoWrite_4cyc_X_X_117ln],
  738. (instregex "FCVT((A|N|M|P)(S|U)|Z(S|U)_Int)(v4f32|v2f64)$")>;
  739. def KryoWrite_5cyc_X_X_XY_noRSV_119ln :
  740. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitXY]> {
  741. let Latency = 5; let NumMicroOps = 4;
  742. }
  743. def : InstRW<[KryoWrite_5cyc_X_X_XY_noRSV_119ln],
  744. (instregex "FCVTX?N(v2f32|v4f32|v2i32|v4i16|v4i32|v8i16)$")>;
  745. def KryoWrite_4cyc_X_X_116ln :
  746. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  747. let Latency = 4; let NumMicroOps = 2;
  748. }
  749. def : InstRW<[KryoWrite_4cyc_X_X_116ln],
  750. (instregex "FCVTL(v2i32|v4i16|v4i32|v8i16)$")>;
  751. def KryoWrite_4cyc_X_noRSV_112ln :
  752. SchedWriteRes<[KryoUnitX]> {
  753. let Latency = 4; let NumMicroOps = 2;
  754. }
  755. def : InstRW<[KryoWrite_4cyc_X_noRSV_112ln],
  756. (instrs FCVTXNv1i64)>;
  757. def KryoWrite_4cyc_X_37ln :
  758. SchedWriteRes<[KryoUnitX]> {
  759. let Latency = 4; let NumMicroOps = 1;
  760. }
  761. def : InstRW<[KryoWrite_4cyc_X_37ln],
  762. (instregex "FCVTZ(S|U)(S|U)(W|X)(D|S)ri?$")>;
  763. def KryoWrite_4cyc_X_noRSV_111ln :
  764. SchedWriteRes<[KryoUnitX]> {
  765. let Latency = 4; let NumMicroOps = 2;
  766. }
  767. def : InstRW<[KryoWrite_4cyc_X_noRSV_111ln],
  768. (instregex "FCVTZ(S|U)(v2f32|v1i32|v1i64|v2i32(_shift)?)$")>;
  769. def KryoWrite_4cyc_X_X_115ln :
  770. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  771. let Latency = 4; let NumMicroOps = 2;
  772. }
  773. def : InstRW<[KryoWrite_4cyc_X_X_115ln],
  774. (instregex "FCVTZ(S|U)(v2f64|v4f32|(v2i64|v4i32)(_shift)?)$")>;
  775. def KryoWrite_10cyc_XA_Y_noRSV_43ln :
  776. SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
  777. let Latency = 10; let NumMicroOps = 3;
  778. }
  779. def : InstRW<[KryoWrite_10cyc_XA_Y_noRSV_43ln],
  780. (instrs FDIVSrr)>;
  781. def KryoWrite_14cyc_XA_Y_noRSV_43ln :
  782. SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
  783. let Latency = 14; let NumMicroOps = 3;
  784. }
  785. def : InstRW<[KryoWrite_14cyc_XA_Y_noRSV_43ln],
  786. (instrs FDIVDrr)>;
  787. def KryoWrite_10cyc_XA_Y_noRSV_121ln :
  788. SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
  789. let Latency = 10; let NumMicroOps = 3;
  790. }
  791. def : InstRW<[KryoWrite_10cyc_XA_Y_noRSV_121ln],
  792. (instrs FDIVv2f32)>;
  793. def KryoWrite_14cyc_XA_Y_XA_Y_123ln :
  794. SchedWriteRes<[KryoUnitXA, KryoUnitY, KryoUnitXA, KryoUnitY]> {
  795. let Latency = 14; let NumMicroOps = 4;
  796. }
  797. def : InstRW<[KryoWrite_14cyc_XA_Y_XA_Y_123ln],
  798. (instrs FDIVv2f64, FDIVv4f32)>;
  799. def KryoWrite_5cyc_X_noRSV_55ln :
  800. SchedWriteRes<[KryoUnitX]> {
  801. let Latency = 5; let NumMicroOps = 2;
  802. }
  803. def : InstRW<[KryoWrite_5cyc_X_noRSV_55ln],
  804. (instregex "FN?M(ADD|SUB)Srrr")>;
  805. def KryoWrite_6cyc_X_noRSV_57ln :
  806. SchedWriteRes<[KryoUnitX]> {
  807. let Latency = 6; let NumMicroOps = 2;
  808. }
  809. def : InstRW<[KryoWrite_6cyc_X_noRSV_57ln],
  810. (instregex "FN?M(ADD|SUB)Drrr")>;
  811. def KryoWrite_5cyc_X_noRSV_51ln :
  812. SchedWriteRes<[KryoUnitX]> {
  813. let Latency = 5; let NumMicroOps = 2;
  814. }
  815. def : InstRW<[KryoWrite_5cyc_X_noRSV_51ln],
  816. (instrs FMLAv2f32, FMLSv2f32, FMLAv1i32_indexed, FMLSv1i32_indexed)>;
  817. def KryoWrite_5cyc_X_X_56ln :
  818. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  819. let Latency = 5; let NumMicroOps = 2;
  820. }
  821. def : InstRW<[KryoWrite_5cyc_X_X_56ln],
  822. (instrs FMLAv4f32, FMLSv4f32)>;
  823. def KryoWrite_6cyc_X_X_61ln :
  824. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  825. let Latency = 6; let NumMicroOps = 2;
  826. }
  827. def : InstRW<[KryoWrite_6cyc_X_X_61ln],
  828. (instrs FMLAv2f64, FMLSv2f64)>;
  829. def KryoWrite_5cyc_X_noRSV_128ln :
  830. SchedWriteRes<[KryoUnitX]> {
  831. let Latency = 5; let NumMicroOps = 2;
  832. }
  833. def : InstRW<[KryoWrite_5cyc_X_noRSV_128ln],
  834. (instrs FMLAv2i32_indexed, FMLSv2i32_indexed)>;
  835. def KryoWrite_5cyc_X_X_131ln :
  836. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  837. let Latency = 5; let NumMicroOps = 2;
  838. }
  839. def : InstRW<[KryoWrite_5cyc_X_X_131ln],
  840. (instrs FMLAv4i32_indexed, FMLSv4i32_indexed)>;
  841. def KryoWrite_6cyc_X_X_134ln :
  842. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  843. let Latency = 6; let NumMicroOps = 2;
  844. }
  845. def : InstRW<[KryoWrite_6cyc_X_X_134ln],
  846. (instrs FMLAv2i64_indexed, FMLSv2i64_indexed)>;
  847. def KryoWrite_6cyc_X_noRSV_60ln :
  848. SchedWriteRes<[KryoUnitX]> {
  849. let Latency = 6; let NumMicroOps = 2;
  850. }
  851. def : InstRW<[KryoWrite_6cyc_X_noRSV_60ln],
  852. (instrs FMLAv1i64_indexed, FMLSv1i64_indexed, FMULv1i64_indexed, FMULXv1i64_indexed)>;
  853. def KryoWrite_1cyc_XY_45ln :
  854. SchedWriteRes<[KryoUnitXY]> {
  855. let Latency = 1; let NumMicroOps = 1;
  856. }
  857. def : InstRW<[KryoWrite_1cyc_XY_45ln],
  858. (instregex "FMOV(XDHigh|DXHigh|DX)r")>;
  859. def KryoWrite_1cyc_XY_noRSV_47ln :
  860. SchedWriteRes<[KryoUnitXY]> {
  861. let Latency = 1; let NumMicroOps = 2;
  862. }
  863. def : InstRW<[KryoWrite_1cyc_XY_noRSV_47ln],
  864. (instregex "FMOV(Di|Dr|Si|Sr|SWr|WSr|XDr|v.*_ns)")>;
  865. def KryoWrite_5cyc_X_noRSV_53ln :
  866. SchedWriteRes<[KryoUnitX]> {
  867. let Latency = 5; let NumMicroOps = 2;
  868. }
  869. def : InstRW<[KryoWrite_5cyc_X_noRSV_53ln],
  870. (instrs FMULv1i32_indexed, FMULXv1i32_indexed)>;
  871. def KryoWrite_5cyc_X_noRSV_127ln :
  872. SchedWriteRes<[KryoUnitX]> {
  873. let Latency = 5; let NumMicroOps = 2;
  874. }
  875. def : InstRW<[KryoWrite_5cyc_X_noRSV_127ln],
  876. (instrs FMULv2f32, FMULXv2f32, FMULv2i32_indexed, FMULXv2i32_indexed)>;
  877. def KryoWrite_5cyc_X_X_130ln :
  878. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  879. let Latency = 5; let NumMicroOps = 2;
  880. }
  881. def : InstRW<[KryoWrite_5cyc_X_X_130ln],
  882. (instrs FMULv4f32, FMULXv4f32, FMULv4i32_indexed, FMULXv4i32_indexed)>;
  883. def KryoWrite_6cyc_X_X_133ln :
  884. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  885. let Latency = 6; let NumMicroOps = 2;
  886. }
  887. def : InstRW<[KryoWrite_6cyc_X_X_133ln],
  888. (instrs FMULv2f64, FMULXv2f64, FMULv2i64_indexed, FMULXv2i64_indexed)>;
  889. def KryoWrite_5cyc_X_noRSV_54ln :
  890. SchedWriteRes<[KryoUnitX]> {
  891. let Latency = 5; let NumMicroOps = 2;
  892. }
  893. def : InstRW<[KryoWrite_5cyc_X_noRSV_54ln],
  894. (instrs FMULSrr, FNMULSrr, FMULX32)>;
  895. def KryoWrite_6cyc_X_noRSV_59ln :
  896. SchedWriteRes<[KryoUnitX]> {
  897. let Latency = 6; let NumMicroOps = 2;
  898. }
  899. def : InstRW<[KryoWrite_6cyc_X_noRSV_59ln],
  900. (instrs FMULDrr, FNMULDrr, FMULX64)>;
  901. def KryoWrite_3cyc_XY_noRSV_28ln :
  902. SchedWriteRes<[KryoUnitXY]> {
  903. let Latency = 3; let NumMicroOps = 2;
  904. }
  905. def : InstRW<[KryoWrite_3cyc_XY_noRSV_28ln],
  906. (instrs FRECPEv1i32, FRECPEv1i64, FRSQRTEv1i32, FRSQRTEv1i64 )>;
  907. def KryoWrite_3cyc_XY_noRSV_99ln :
  908. SchedWriteRes<[KryoUnitXY]> {
  909. let Latency = 3; let NumMicroOps = 2;
  910. }
  911. def : InstRW<[KryoWrite_3cyc_XY_noRSV_99ln],
  912. (instrs FRECPEv2f32, FRSQRTEv2f32)>;
  913. def KryoWrite_3cyc_XY_XY_102ln :
  914. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  915. let Latency = 3; let NumMicroOps = 2;
  916. }
  917. def : InstRW<[KryoWrite_3cyc_XY_XY_102ln],
  918. (instrs FRECPEv2f64, FRECPEv4f32, FRSQRTEv2f64, FRSQRTEv4f32)>;
  919. def KryoWrite_5cyc_X_noRSV_52ln :
  920. SchedWriteRes<[KryoUnitX]> {
  921. let Latency = 5; let NumMicroOps = 2;
  922. }
  923. def : InstRW<[KryoWrite_5cyc_X_noRSV_52ln],
  924. (instrs FRECPS32, FRSQRTS32)>;
  925. def KryoWrite_6cyc_X_noRSV_58ln :
  926. SchedWriteRes<[KryoUnitX]> {
  927. let Latency = 6; let NumMicroOps = 2;
  928. }
  929. def : InstRW<[KryoWrite_6cyc_X_noRSV_58ln],
  930. (instrs FRECPS64, FRSQRTS64)>;
  931. def KryoWrite_5cyc_X_noRSV_126ln :
  932. SchedWriteRes<[KryoUnitX]> {
  933. let Latency = 5; let NumMicroOps = 2;
  934. }
  935. def : InstRW<[KryoWrite_5cyc_X_noRSV_126ln],
  936. (instrs FRECPSv2f32, FRSQRTSv2f32)>;
  937. def KryoWrite_5cyc_X_X_129ln :
  938. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  939. let Latency = 5; let NumMicroOps = 2;
  940. }
  941. def : InstRW<[KryoWrite_5cyc_X_X_129ln],
  942. (instrs FRECPSv4f32, FRSQRTSv4f32)>;
  943. def KryoWrite_6cyc_X_X_132ln :
  944. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  945. let Latency = 6; let NumMicroOps = 2;
  946. }
  947. def : InstRW<[KryoWrite_6cyc_X_X_132ln],
  948. (instrs FRECPSv2f64, FRSQRTSv2f64)>;
  949. def KryoWrite_3cyc_XY_noRSV_50ln :
  950. SchedWriteRes<[KryoUnitXY]> {
  951. let Latency = 3; let NumMicroOps = 2;
  952. }
  953. def : InstRW<[KryoWrite_3cyc_XY_noRSV_50ln],
  954. (instrs FRECPXv1i32, FRECPXv1i64)>;
  955. def KryoWrite_2cyc_XY_noRSV_39ln :
  956. SchedWriteRes<[KryoUnitXY]> {
  957. let Latency = 2; let NumMicroOps = 2;
  958. }
  959. def : InstRW<[KryoWrite_2cyc_XY_noRSV_39ln],
  960. (instregex "FRINT(A|I|M|N|P|X|Z)(S|D)r")>;
  961. def KryoWrite_2cyc_XY_noRSV_108ln :
  962. SchedWriteRes<[KryoUnitXY]> {
  963. let Latency = 2; let NumMicroOps = 2;
  964. }
  965. def : InstRW<[KryoWrite_2cyc_XY_noRSV_108ln],
  966. (instregex "FRINT(A|I|M|N|P|X|Z)v2f32")>;
  967. def KryoWrite_2cyc_XY_XY_109ln :
  968. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  969. let Latency = 2; let NumMicroOps = 2;
  970. }
  971. def : InstRW<[KryoWrite_2cyc_XY_XY_109ln],
  972. (instregex "FRINT(A|I|M|N|P|X|Z)(v2f64|v4f32)")>;
  973. def KryoWrite_12cyc_XA_Y_noRSV_42ln :
  974. SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
  975. let Latency = 12; let NumMicroOps = 3;
  976. }
  977. def : InstRW<[KryoWrite_12cyc_XA_Y_noRSV_42ln],
  978. (instrs FSQRTSr)>;
  979. def KryoWrite_21cyc_XA_Y_noRSV_42ln :
  980. SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
  981. let Latency = 21; let NumMicroOps = 3;
  982. }
  983. def : InstRW<[KryoWrite_21cyc_XA_Y_noRSV_42ln],
  984. (instrs FSQRTDr)>;
  985. def KryoWrite_12cyc_XA_Y_noRSV_120ln :
  986. SchedWriteRes<[KryoUnitXA, KryoUnitY]> {
  987. let Latency = 12; let NumMicroOps = 3;
  988. }
  989. def : InstRW<[KryoWrite_12cyc_XA_Y_noRSV_120ln],
  990. (instrs FSQRTv2f32)>;
  991. def KryoWrite_21cyc_XA_Y_XA_Y_122ln :
  992. SchedWriteRes<[KryoUnitXA, KryoUnitY, KryoUnitXA, KryoUnitY]> {
  993. let Latency = 21; let NumMicroOps = 4;
  994. }
  995. def : InstRW<[KryoWrite_21cyc_XA_Y_XA_Y_122ln],
  996. (instrs FSQRTv4f32)>;
  997. def KryoWrite_36cyc_XA_Y_XA_Y_122ln :
  998. SchedWriteRes<[KryoUnitXA, KryoUnitY, KryoUnitXA, KryoUnitY]> {
  999. let Latency = 36; let NumMicroOps = 4;
  1000. }
  1001. def : InstRW<[KryoWrite_36cyc_XA_Y_XA_Y_122ln],
  1002. (instrs FSQRTv2f64)>;
  1003. def KryoWrite_1cyc_X_201ln :
  1004. SchedWriteRes<[KryoUnitX]> {
  1005. let Latency = 1; let NumMicroOps = 1;
  1006. }
  1007. def : InstRW<[KryoWrite_1cyc_X_201ln],
  1008. (instregex "INSv.*")>;
  1009. def KryoWrite_3cyc_LS_255ln :
  1010. SchedWriteRes<[KryoUnitLS]> {
  1011. let Latency = 3; let NumMicroOps = 1;
  1012. }
  1013. def : InstRW<[KryoWrite_3cyc_LS_255ln],
  1014. (instregex "LD1(One(v16b|v8h|v4s|v2d)|i64)$")>;
  1015. def KryoWrite_4cyc_LS_X_270ln :
  1016. SchedWriteRes<[KryoUnitLS, KryoUnitX]> {
  1017. let Latency = 4; let NumMicroOps = 2;
  1018. }
  1019. def : InstRW<[KryoWrite_4cyc_LS_X_270ln],
  1020. (instregex "LD1(i8|i16|i32)$")>;
  1021. def KryoWrite_3cyc_LS_noRSV_285ln :
  1022. SchedWriteRes<[KryoUnitLS]> {
  1023. let Latency = 3; let NumMicroOps = 2;
  1024. }
  1025. def : InstRW<[KryoWrite_3cyc_LS_noRSV_285ln],
  1026. (instregex "LD1One(v8b|v4h|v2s|v1d)$")>;
  1027. def KryoWrite_3cyc_LS_XY_289ln :
  1028. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1029. let Latency = 3; let NumMicroOps = 2;
  1030. }
  1031. def : InstRW<[KryoWrite_3cyc_LS_XY_289ln, WriteAdr],
  1032. (instregex "LD1(One(v16b|v8h|v4s|v2d)|i64)_POST$")>;
  1033. def KryoWrite_4cyc_LS_XY_X_298ln :
  1034. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitX]> {
  1035. let Latency = 4; let NumMicroOps = 3;
  1036. }
  1037. def : InstRW<[KryoWrite_4cyc_LS_XY_X_298ln, WriteAdr],
  1038. (instregex "LD1(i8|i16|i32)_POST$")>;
  1039. def KryoWrite_3cyc_LS_LS_LS_308ln :
  1040. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
  1041. let Latency = 3; let NumMicroOps = 3;
  1042. }
  1043. def : InstRW<[KryoWrite_3cyc_LS_LS_LS_308ln],
  1044. (instregex "LD1Three(v16b|v8h|v4s|v2d)$")>;
  1045. def KryoWrite_3cyc_LS_XY_noRSV_317ln :
  1046. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1047. let Latency = 3; let NumMicroOps = 3;
  1048. }
  1049. def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_317ln, WriteAdr],
  1050. (instregex "LD1One(v8b|v4h|v2s|v1d)_POST$")>;
  1051. def KryoWrite_3cyc_LS_LS_LS_LS_328ln :
  1052. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
  1053. let Latency = 3; let NumMicroOps = 4;
  1054. }
  1055. def : InstRW<[KryoWrite_3cyc_LS_LS_LS_LS_328ln, WriteAdr],
  1056. (instregex "LD1Four(v16b|v8h|v4s|v2d)_POST$")>;
  1057. def KryoWrite_3cyc_LS_XY_LS_LS_332ln :
  1058. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS]> {
  1059. let Latency = 3; let NumMicroOps = 4;
  1060. }
  1061. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_332ln, WriteAdr],
  1062. (instregex "LD1Three(v16b|v8h|v4s|v2d)_POST$")>;
  1063. def KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_348ln :
  1064. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1065. let Latency = 3; let NumMicroOps = 5;
  1066. }
  1067. def : InstRW<[KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_348ln],
  1068. (instregex "LD1Three(v8b|v4h|v2s|v1d)$")>;
  1069. def KryoWrite_3cyc_LS_XY_LS_LS_LS_351ln :
  1070. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
  1071. let Latency = 3; let NumMicroOps = 5;
  1072. }
  1073. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_LS_351ln],
  1074. (instregex "LD1Four(v16b|v8h|v4s|v2d)$")>;
  1075. def KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_noRSV_358ln :
  1076. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1077. let Latency = 3; let NumMicroOps = 6;
  1078. }
  1079. def : InstRW<[KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_noRSV_358ln],
  1080. (instregex "LD1Four(v8b|v4h|v2s|v1d)$")>;
  1081. def KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_360ln :
  1082. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
  1083. let Latency = 3; let NumMicroOps = 6;
  1084. }
  1085. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_360ln, WriteAdr],
  1086. (instregex "LD1Three(v8b|v4h|v2s|v1d)_POST$")>;
  1087. def KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_noRSV_368ln :
  1088. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
  1089. let Latency = 3; let NumMicroOps = 7;
  1090. }
  1091. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_noRSV_368ln, WriteAdr],
  1092. (instregex "LD1Four(v8b|v4h|v2s|v1d)_POST$")>;
  1093. def KryoWrite_3cyc_LS_LS_281ln :
  1094. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1095. let Latency = 3; let NumMicroOps = 2;
  1096. }
  1097. def : InstRW<[KryoWrite_3cyc_LS_LS_281ln],
  1098. (instregex "LD(1|2)Two(v16b|v8h|v4s|v2d)$")>;
  1099. def KryoWrite_3cyc_LS_noRSV_noRSV_311ln :
  1100. SchedWriteRes<[KryoUnitLS]> {
  1101. let Latency = 3; let NumMicroOps = 3;
  1102. }
  1103. def : InstRW<[KryoWrite_3cyc_LS_noRSV_noRSV_311ln],
  1104. (instregex "LD(1|2)Two(v8b|v4h|v2s|v1d)$")>;
  1105. def KryoWrite_3cyc_LS_XY_LS_313ln :
  1106. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
  1107. let Latency = 3; let NumMicroOps = 3;
  1108. }
  1109. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_313ln, WriteAdr],
  1110. (instregex "LD(1|2)Two(v16b|v8h|v4s|v2d)_POST$")>;
  1111. def KryoWrite_3cyc_LS_XY_noRSV_noRSV_334ln :
  1112. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1113. let Latency = 3; let NumMicroOps = 4;
  1114. }
  1115. def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_noRSV_334ln, WriteAdr],
  1116. (instregex "LD(1|2)Two(v8b|v4h|v2s|v1d)_POST$")>;
  1117. def KryoWrite_3cyc_LS_256ln :
  1118. SchedWriteRes<[KryoUnitLS]> {
  1119. let Latency = 3; let NumMicroOps = 1;
  1120. }
  1121. def : InstRW<[KryoWrite_3cyc_LS_256ln],
  1122. (instregex "LD1R(v16b|v8h|v4s|v2d)$")>;
  1123. def KryoWrite_3cyc_LS_noRSV_286ln :
  1124. SchedWriteRes<[KryoUnitLS]> {
  1125. let Latency = 3; let NumMicroOps = 2;
  1126. }
  1127. def : InstRW<[KryoWrite_3cyc_LS_noRSV_286ln],
  1128. (instregex "LD1R(v8b|v4h|v2s|v1d)$")>;
  1129. def KryoWrite_3cyc_LS_XY_290ln :
  1130. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1131. let Latency = 3; let NumMicroOps = 2;
  1132. }
  1133. def : InstRW<[KryoWrite_3cyc_LS_XY_290ln, WriteAdr],
  1134. (instregex "LD1R(v16b|v8h|v4s|v2d)_POST$")>;
  1135. def KryoWrite_3cyc_LS_XY_noRSV_318ln :
  1136. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1137. let Latency = 3; let NumMicroOps = 3;
  1138. }
  1139. def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_318ln, WriteAdr],
  1140. (instregex "LD1R(v8b|v4h|v2s|v1d)_POST$")>;
  1141. def KryoWrite_3cyc_LS_257ln :
  1142. SchedWriteRes<[KryoUnitLS]> {
  1143. let Latency = 3; let NumMicroOps = 1;
  1144. }
  1145. def : InstRW<[KryoWrite_3cyc_LS_257ln],
  1146. (instregex "LD2i64$")>;
  1147. def KryoWrite_3cyc_LS_XY_291ln :
  1148. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1149. let Latency = 3; let NumMicroOps = 2;
  1150. }
  1151. def : InstRW<[KryoWrite_3cyc_LS_XY_291ln, WriteAdr],
  1152. (instregex "LD2i64_POST$")>;
  1153. def KryoWrite_4cyc_LS_X_X_296ln :
  1154. SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitX]> {
  1155. let Latency = 4; let NumMicroOps = 3;
  1156. }
  1157. def : InstRW<[KryoWrite_4cyc_LS_X_X_296ln],
  1158. (instregex "LD2(i8|i16|i32)$")>;
  1159. def KryoWrite_4cyc_LS_XY_X_X_321ln :
  1160. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitX, KryoUnitX]> {
  1161. let Latency = 4; let NumMicroOps = 4;
  1162. }
  1163. def : InstRW<[KryoWrite_4cyc_LS_XY_X_X_321ln, WriteAdr],
  1164. (instregex "LD2(i8|i16|i32)_POST$")>;
  1165. def KryoWrite_3cyc_LS_LS_282ln :
  1166. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1167. let Latency = 3; let NumMicroOps = 2;
  1168. }
  1169. def : InstRW<[KryoWrite_3cyc_LS_LS_282ln],
  1170. (instregex "LD2R(v16b|v8h|v4s|v2d)$")>;
  1171. def KryoWrite_3cyc_LS_noRSV_noRSV_312ln :
  1172. SchedWriteRes<[KryoUnitLS]> {
  1173. let Latency = 3; let NumMicroOps = 3;
  1174. }
  1175. def : InstRW<[KryoWrite_3cyc_LS_noRSV_noRSV_312ln],
  1176. (instregex "LD2R(v8b|v4h|v2s|v1d)$")>;
  1177. def KryoWrite_3cyc_LS_XY_LS_314ln :
  1178. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
  1179. let Latency = 3; let NumMicroOps = 3;
  1180. }
  1181. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_314ln, WriteAdr],
  1182. (instregex "LD2R(v16b|v8h|v4s|v2d)_POST$")>;
  1183. def KryoWrite_3cyc_LS_XY_noRSV_noRSV_335ln :
  1184. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1185. let Latency = 3; let NumMicroOps = 4;
  1186. }
  1187. def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_noRSV_335ln, WriteAdr],
  1188. (instregex "LD2R(v8b|v4h|v2s|v1d)_POST$")>;
  1189. def KryoWrite_3cyc_LS_LS_283ln :
  1190. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1191. let Latency = 3; let NumMicroOps = 2;
  1192. }
  1193. def : InstRW<[KryoWrite_3cyc_LS_LS_283ln],
  1194. (instregex "LD3i64$")>;
  1195. def KryoWrite_3cyc_LS_LS_LS_309ln :
  1196. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
  1197. let Latency = 3; let NumMicroOps = 3;
  1198. }
  1199. def : InstRW<[KryoWrite_3cyc_LS_LS_LS_309ln],
  1200. (instregex "LD3Threev2d$")>;
  1201. def KryoWrite_3cyc_LS_XY_LS_315ln :
  1202. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
  1203. let Latency = 3; let NumMicroOps = 3;
  1204. }
  1205. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_315ln, WriteAdr],
  1206. (instregex "LD3i64_POST$")>;
  1207. def KryoWrite_4cyc_LS_X_X_X_320ln :
  1208. SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX]> {
  1209. let Latency = 4; let NumMicroOps = 4;
  1210. }
  1211. def : InstRW<[KryoWrite_4cyc_LS_X_X_X_320ln],
  1212. (instregex "LD3(i8|i16|i32)$")>;
  1213. def KryoWrite_3cyc_LS_XY_LS_LS_331ln :
  1214. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS]> {
  1215. let Latency = 3; let NumMicroOps = 4;
  1216. }
  1217. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_331ln, WriteAdr],
  1218. (instregex "LD3Threev2d_POST$")>;
  1219. def KryoWrite_4cyc_LS_XY_X_X_X_338ln :
  1220. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitX, KryoUnitX, KryoUnitX]> {
  1221. let Latency = 4; let NumMicroOps = 5;
  1222. }
  1223. def : InstRW<[KryoWrite_4cyc_LS_XY_X_X_X_338ln, WriteAdr],
  1224. (instregex "LD3(i8|i16|i32)_POST$")>;
  1225. def KryoWrite_4cyc_LS_LS_X_X_X_noRSV_noRSV_noRSV_373ln :
  1226. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX]> {
  1227. let Latency = 4; let NumMicroOps = 8;
  1228. }
  1229. def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_noRSV_noRSV_noRSV_373ln],
  1230. (instregex "LD3Three(v8b|v4h|v2s)$")>;
  1231. def KryoWrite_4cyc_LS_XY_LS_X_X_X_noRSV_noRSV_noRSV_380ln :
  1232. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitX, KryoUnitX,
  1233. KryoUnitX]> {
  1234. let Latency = 4; let NumMicroOps = 9;
  1235. }
  1236. def : InstRW<[KryoWrite_4cyc_LS_XY_LS_X_X_X_noRSV_noRSV_noRSV_380ln, WriteAdr],
  1237. (instregex "LD3Three(v8b|v4h|v2s)_POST$")>;
  1238. def KryoWrite_4cyc_LS_LS_X_X_X_LS_LS_X_X_X_381ln :
  1239. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
  1240. KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX]> {
  1241. let Latency = 4; let NumMicroOps = 10;
  1242. }
  1243. def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_LS_LS_X_X_X_381ln],
  1244. (instregex "LD3Three(v16b|v8h|v4s)$")>;
  1245. def KryoWrite_4cyc_LS_LS_X_X_X_LS_XY_LS_X_X_X_383ln :
  1246. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
  1247. KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitX, KryoUnitX,
  1248. KryoUnitX]> {
  1249. let Latency = 4; let NumMicroOps = 11;
  1250. }
  1251. def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_LS_XY_LS_X_X_X_383ln, WriteAdr],
  1252. (instregex "LD3Three(v16b|v8h|v4s)_POST$")>;
  1253. def KryoWrite_3cyc_LS_LS_LS_310ln :
  1254. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
  1255. let Latency = 3; let NumMicroOps = 3;
  1256. }
  1257. def : InstRW<[KryoWrite_3cyc_LS_LS_LS_310ln],
  1258. (instregex "LD3R(v16b|v8h|v4s|v2d)$")>;
  1259. def KryoWrite_3cyc_LS_XY_LS_LS_333ln :
  1260. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS]> {
  1261. let Latency = 3; let NumMicroOps = 4;
  1262. }
  1263. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_333ln, WriteAdr],
  1264. (instregex "LD3R(v16b|v8h|v4s|v2d)_POST$")>;
  1265. def KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_349ln :
  1266. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1267. let Latency = 3; let NumMicroOps = 5;
  1268. }
  1269. def : InstRW<[KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_349ln],
  1270. (instregex "LD3R(v8b|v4h|v2s|v1d)$")>;
  1271. def KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_361ln :
  1272. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
  1273. let Latency = 3; let NumMicroOps = 6;
  1274. }
  1275. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_361ln, WriteAdr],
  1276. (instregex "LD3R(v8b|v4h|v2s|v1d)_POST$")>;
  1277. def KryoWrite_3cyc_LS_LS_284ln :
  1278. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1279. let Latency = 3; let NumMicroOps = 2;
  1280. }
  1281. def : InstRW<[KryoWrite_3cyc_LS_LS_284ln],
  1282. (instregex "LD4i64$")>;
  1283. def KryoWrite_3cyc_LS_XY_LS_316ln :
  1284. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
  1285. let Latency = 3; let NumMicroOps = 3;
  1286. }
  1287. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_316ln, WriteAdr],
  1288. (instregex "LD4i64_POST$")>;
  1289. def KryoWrite_3cyc_LS_LS_LS_LS_329ln :
  1290. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
  1291. let Latency = 3; let NumMicroOps = 4;
  1292. }
  1293. def : InstRW<[KryoWrite_3cyc_LS_LS_LS_LS_329ln],
  1294. (instregex "LD4Four(v2d)$")>;
  1295. def KryoWrite_4cyc_LS_X_X_X_X_337ln :
  1296. SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
  1297. let Latency = 4; let NumMicroOps = 5;
  1298. }
  1299. def : InstRW<[KryoWrite_4cyc_LS_X_X_X_X_337ln],
  1300. (instregex "LD4(i8|i16|i32)$")>;
  1301. def KryoWrite_3cyc_LS_XY_LS_LS_LS_350ln :
  1302. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
  1303. let Latency = 3; let NumMicroOps = 5;
  1304. }
  1305. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_LS_350ln, WriteAdr],
  1306. (instregex "LD4Four(v2d)_POST$")>;
  1307. def KryoWrite_4cyc_LS_XY_X_X_X_X_355ln :
  1308. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitX, KryoUnitX, KryoUnitX,
  1309. KryoUnitX]> {
  1310. let Latency = 4; let NumMicroOps = 6;
  1311. }
  1312. def : InstRW<[KryoWrite_4cyc_LS_XY_X_X_X_X_355ln, WriteAdr],
  1313. (instregex "LD4(i8|i16|i32)_POST$")>;
  1314. def KryoWrite_4cyc_LS_LS_X_X_X_X_noRSV_noRSV_noRSV_noRSV_382ln :
  1315. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
  1316. KryoUnitX]> {
  1317. let Latency = 4; let NumMicroOps = 10;
  1318. }
  1319. def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_X_noRSV_noRSV_noRSV_noRSV_382ln],
  1320. (instregex "LD4Four(v8b|v4h|v2s)$")>;
  1321. def KryoWrite_4cyc_LS_XY_LS_X_X_X_X_noRSV_noRSV_noRSV_noRSV_384ln :
  1322. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitX, KryoUnitX,
  1323. KryoUnitX, KryoUnitX]> {
  1324. let Latency = 4; let NumMicroOps = 11;
  1325. }
  1326. def : InstRW<[KryoWrite_4cyc_LS_XY_LS_X_X_X_X_noRSV_noRSV_noRSV_noRSV_384ln, WriteAdr],
  1327. (instregex "LD4Four(v8b|v4h|v2s)_POST$")>;
  1328. def KryoWrite_4cyc_LS_LS_X_X_X_X_LS_LS_X_X_X_X_386ln :
  1329. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
  1330. KryoUnitX, KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX,
  1331. KryoUnitX, KryoUnitX]> {
  1332. let Latency = 4; let NumMicroOps = 12;
  1333. }
  1334. def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_X_LS_LS_X_X_X_X_386ln],
  1335. (instregex "LD4Four(v16b|v8h|v4s)$")>;
  1336. def KryoWrite_4cyc_LS_LS_X_X_X_X_LS_XY_LS_X_X_X_X_389ln :
  1337. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitX, KryoUnitX, KryoUnitX,
  1338. KryoUnitX, KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitX,
  1339. KryoUnitX, KryoUnitX, KryoUnitX]> {
  1340. let Latency = 4; let NumMicroOps = 13;
  1341. }
  1342. def : InstRW<[KryoWrite_4cyc_LS_LS_X_X_X_X_LS_XY_LS_X_X_X_X_389ln, WriteAdr],
  1343. (instregex "LD4Four(v16b|v8h|v4s)_POST$")>;
  1344. def KryoWrite_3cyc_LS_LS_LS_LS_330ln :
  1345. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
  1346. let Latency = 3; let NumMicroOps = 4;
  1347. }
  1348. def : InstRW<[KryoWrite_3cyc_LS_LS_LS_LS_330ln],
  1349. (instregex "LD4R(v16b|v8h|v4s|v2d)$")>;
  1350. def KryoWrite_3cyc_LS_XY_LS_LS_LS_352ln :
  1351. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS, KryoUnitLS, KryoUnitLS]> {
  1352. let Latency = 3; let NumMicroOps = 5;
  1353. }
  1354. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_LS_LS_352ln, WriteAdr],
  1355. (instregex "LD4R(v16b|v8h|v4s|v2d)_POST$")>;
  1356. def KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_noRSV_359ln :
  1357. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1358. let Latency = 3; let NumMicroOps = 6;
  1359. }
  1360. def : InstRW<[KryoWrite_3cyc_LS_LS_noRSV_noRSV_noRSV_noRSV_359ln],
  1361. (instregex "LD4R(v8b|v4h|v2s|v1d)$")>;
  1362. def KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_noRSV_369ln :
  1363. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
  1364. let Latency = 3; let NumMicroOps = 7;
  1365. }
  1366. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_noRSV_noRSV_noRSV_noRSV_369ln, WriteAdr],
  1367. (instregex "LD4R(v8b|v4h|v2s|v1d)_POST$")>;
  1368. def KryoWrite_3cyc_LS_LS_400ln :
  1369. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1370. let Latency = 3; let NumMicroOps = 2;
  1371. }
  1372. def : InstRW<[KryoWrite_3cyc_LS_LS_400ln],
  1373. (instregex "LDAX?R(B|H|W|X)")>;
  1374. def : InstRW<[KryoWrite_3cyc_LS_LS_400ln, WriteLDHi],
  1375. (instregex "LDAXP(W|X)")>;
  1376. def KryoWrite_3cyc_LS_LS_401ln :
  1377. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1378. let Latency = 3; let NumMicroOps = 2;
  1379. }
  1380. def : InstRW<[KryoWrite_3cyc_LS_LS_401ln, WriteLDHi],
  1381. (instrs LDNPQi)>;
  1382. def KryoWrite_3cyc_LS_noRSV_noRSV_408ln :
  1383. SchedWriteRes<[KryoUnitLS]> {
  1384. let Latency = 3; let NumMicroOps = 3;
  1385. }
  1386. def : InstRW<[KryoWrite_3cyc_LS_noRSV_noRSV_408ln, WriteLDHi],
  1387. (instrs LDNPDi, LDNPSi)>;
  1388. def KryoWrite_3cyc_LS_394ln :
  1389. SchedWriteRes<[KryoUnitLS]> {
  1390. let Latency = 3; let NumMicroOps = 1;
  1391. }
  1392. def : InstRW<[KryoWrite_3cyc_LS_394ln, WriteLDHi],
  1393. (instrs LDNPWi, LDNPXi)>;
  1394. def KryoWrite_3cyc_LS_LS_402ln :
  1395. SchedWriteRes<[KryoUnitLS, KryoUnitLS]> {
  1396. let Latency = 3; let NumMicroOps = 2;
  1397. }
  1398. def : InstRW<[KryoWrite_3cyc_LS_LS_402ln, WriteLDHi],
  1399. (instrs LDPQi)>;
  1400. def KryoWrite_3cyc_LS_noRSV_noRSV_409ln :
  1401. SchedWriteRes<[KryoUnitLS]> {
  1402. let Latency = 3; let NumMicroOps = 3;
  1403. }
  1404. def : InstRW<[KryoWrite_3cyc_LS_noRSV_noRSV_409ln, WriteLDHi],
  1405. (instrs LDPDi, LDPSi)>;
  1406. def KryoWrite_3cyc_LS_XY_LS_410ln :
  1407. SchedWriteRes<[KryoUnitLS, KryoUnitXY, KryoUnitLS]> {
  1408. let Latency = 3; let NumMicroOps = 3;
  1409. }
  1410. def : InstRW<[KryoWrite_3cyc_LS_XY_LS_410ln, WriteLDHi, WriteAdr],
  1411. (instregex "LDPQ(post|pre)")>;
  1412. def KryoWrite_3cyc_LS_XY_noRSV_noRSV_411ln :
  1413. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1414. let Latency = 3; let NumMicroOps = 4;
  1415. }
  1416. def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_noRSV_411ln, WriteLDHi, WriteAdr],
  1417. (instregex "LDP(D|S)(post|pre)")>;
  1418. def KryoWrite_3cyc_LS_393ln :
  1419. SchedWriteRes<[KryoUnitLS]> {
  1420. let Latency = 3; let NumMicroOps = 1;
  1421. }
  1422. def : InstRW<[KryoWrite_3cyc_LS_393ln, WriteLDHi],
  1423. (instrs LDPWi, LDPXi)>;
  1424. def KryoWrite_3cyc_LS_XY_403ln :
  1425. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1426. let Latency = 3; let NumMicroOps = 2;
  1427. }
  1428. def : InstRW<[KryoWrite_3cyc_LS_XY_403ln, WriteLDHi, WriteAdr],
  1429. (instregex "LDP(W|X)(post|pre)")>;
  1430. def KryoWrite_4cyc_LS_395ln :
  1431. SchedWriteRes<[KryoUnitLS]> {
  1432. let Latency = 4; let NumMicroOps = 1;
  1433. }
  1434. def : InstRW<[KryoWrite_4cyc_LS_395ln, WriteLDHi],
  1435. (instrs LDPSWi)>;
  1436. def KryoWrite_4cyc_LS_XY_405ln :
  1437. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1438. let Latency = 4; let NumMicroOps = 2;
  1439. }
  1440. def : InstRW<[KryoWrite_4cyc_LS_XY_405ln, WriteLDHi, WriteAdr],
  1441. (instrs LDPSWpost, LDPSWpre)>;
  1442. def KryoWrite_3cyc_LS_264ln :
  1443. SchedWriteRes<[KryoUnitLS]> {
  1444. let Latency = 3; let NumMicroOps = 1;
  1445. }
  1446. def : InstRW<[KryoWrite_3cyc_LS_264ln],
  1447. (instrs LDRQui, LDRQl)>;
  1448. def KryoWrite_4cyc_X_LS_271ln :
  1449. SchedWriteRes<[KryoUnitX, KryoUnitLS]> {
  1450. let Latency = 4; let NumMicroOps = 2;
  1451. }
  1452. def : InstRW<[KryoWrite_4cyc_X_LS_271ln],
  1453. (instrs LDRQroW, LDRQroX)>;
  1454. def KryoWrite_3cyc_LS_noRSV_287ln :
  1455. SchedWriteRes<[KryoUnitLS]> {
  1456. let Latency = 3; let NumMicroOps = 2;
  1457. }
  1458. def : InstRW<[KryoWrite_3cyc_LS_noRSV_287ln],
  1459. (instregex "LDR((D|S)l|(D|S|H|B)ui)")>;
  1460. def KryoWrite_3cyc_LS_XY_293ln :
  1461. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1462. let Latency = 3; let NumMicroOps = 2;
  1463. }
  1464. def : InstRW<[KryoWrite_3cyc_LS_XY_293ln, WriteAdr],
  1465. (instrs LDRQpost, LDRQpre)>;
  1466. def KryoWrite_4cyc_X_LS_noRSV_297ln :
  1467. SchedWriteRes<[KryoUnitX, KryoUnitLS]> {
  1468. let Latency = 4; let NumMicroOps = 3;
  1469. }
  1470. def : InstRW<[KryoWrite_4cyc_X_LS_noRSV_297ln],
  1471. (instregex "LDR(D|S|H|B)ro(W|X)")>;
  1472. def KryoWrite_3cyc_LS_XY_noRSV_319ln :
  1473. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1474. let Latency = 3; let NumMicroOps = 3;
  1475. }
  1476. def : InstRW<[KryoWrite_3cyc_LS_XY_noRSV_319ln, WriteAdr],
  1477. (instregex "LDR(D|S|H|B)(post|pre)")>;
  1478. def KryoWrite_3cyc_LS_261ln :
  1479. SchedWriteRes<[KryoUnitLS]> {
  1480. let Latency = 3; let NumMicroOps = 1;
  1481. }
  1482. def : InstRW<[KryoWrite_3cyc_LS_261ln],
  1483. (instregex "LDR(BB|HH|W|X)ui")>;
  1484. def KryoWrite_3cyc_LS_XY_292ln :
  1485. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1486. let Latency = 3; let NumMicroOps = 2;
  1487. }
  1488. def : InstRW<[KryoWrite_3cyc_LS_XY_292ln, WriteAdr],
  1489. (instregex "LDR(BB|HH|W|X)(post|pre)")>;
  1490. def KryoWrite_4cyc_X_LS_272ln :
  1491. SchedWriteRes<[KryoUnitX, KryoUnitLS]> {
  1492. let Latency = 4; let NumMicroOps = 2;
  1493. }
  1494. def : InstRW<[KryoWrite_4cyc_X_LS_272ln],
  1495. (instregex "(LDR(BB|HH|W|X)ro(W|X)|PRFMro(W|X))")>;
  1496. def KryoWrite_3cyc_LS_262ln :
  1497. SchedWriteRes<[KryoUnitLS]> {
  1498. let Latency = 3; let NumMicroOps = 1;
  1499. }
  1500. def : InstRW<[KryoWrite_3cyc_LS_262ln],
  1501. (instrs LDRWl, LDRXl)>;
  1502. def KryoWrite_4cyc_LS_268ln :
  1503. SchedWriteRes<[KryoUnitLS]> {
  1504. let Latency = 4; let NumMicroOps = 1;
  1505. }
  1506. def : InstRW<[KryoWrite_4cyc_LS_268ln],
  1507. (instregex "LDRS(BW|BX|HW|HX|W)ui")>;
  1508. def KryoWrite_5cyc_X_LS_273ln :
  1509. SchedWriteRes<[KryoUnitX, KryoUnitLS]> {
  1510. let Latency = 5; let NumMicroOps = 2;
  1511. }
  1512. def : InstRW<[KryoWrite_5cyc_X_LS_273ln],
  1513. (instregex "LDRS(BW|BX|HW|HX|W)ro(W|X)")>;
  1514. def KryoWrite_4cyc_LS_XY_294ln :
  1515. SchedWriteRes<[KryoUnitLS, KryoUnitXY]> {
  1516. let Latency = 4; let NumMicroOps = 2;
  1517. }
  1518. def : InstRW<[KryoWrite_4cyc_LS_XY_294ln, WriteAdr],
  1519. (instregex "LDRS(BW|BX|HW|HX|W)(post|pre)")>;
  1520. def KryoWrite_4cyc_LS_269ln :
  1521. SchedWriteRes<[KryoUnitLS]> {
  1522. let Latency = 4; let NumMicroOps = 1;
  1523. }
  1524. def : InstRW<[KryoWrite_4cyc_LS_269ln],
  1525. (instrs LDRSWl)>;
  1526. def KryoWrite_3cyc_LS_260ln :
  1527. SchedWriteRes<[KryoUnitLS]> {
  1528. let Latency = 3; let NumMicroOps = 1;
  1529. }
  1530. def : InstRW<[KryoWrite_3cyc_LS_260ln],
  1531. (instregex "LDTR(B|H|W|X)i")>;
  1532. def KryoWrite_4cyc_LS_267ln :
  1533. SchedWriteRes<[KryoUnitLS]> {
  1534. let Latency = 4; let NumMicroOps = 1;
  1535. }
  1536. def : InstRW<[KryoWrite_4cyc_LS_267ln],
  1537. (instregex "LDTRS(BW|BX|HW|HX|W)i")>;
  1538. def KryoWrite_3cyc_LS_263ln :
  1539. SchedWriteRes<[KryoUnitLS]> {
  1540. let Latency = 3; let NumMicroOps = 1;
  1541. }
  1542. def : InstRW<[KryoWrite_3cyc_LS_263ln],
  1543. (instrs LDURQi)>;
  1544. def KryoWrite_3cyc_LS_noRSV_288ln :
  1545. SchedWriteRes<[KryoUnitLS]> {
  1546. let Latency = 3; let NumMicroOps = 2;
  1547. }
  1548. def : InstRW<[KryoWrite_3cyc_LS_noRSV_288ln],
  1549. (instregex "LDUR(D|S|H|B)i")>;
  1550. def KryoWrite_3cyc_LS_259ln :
  1551. SchedWriteRes<[KryoUnitLS]> {
  1552. let Latency = 3; let NumMicroOps = 1;
  1553. }
  1554. def : InstRW<[KryoWrite_3cyc_LS_259ln],
  1555. (instregex "LDUR(BB|HH|W|X)i")>;
  1556. def KryoWrite_4cyc_LS_266ln :
  1557. SchedWriteRes<[KryoUnitLS]> {
  1558. let Latency = 4; let NumMicroOps = 1;
  1559. }
  1560. def : InstRW<[KryoWrite_4cyc_LS_266ln],
  1561. (instregex "LDURS(B|H)?(W|X)i")>;
  1562. def KryoWrite_3cyc_LS_258ln :
  1563. SchedWriteRes<[KryoUnitLS]> {
  1564. let Latency = 3; let NumMicroOps = 1;
  1565. }
  1566. def : InstRW<[KryoWrite_3cyc_LS_258ln, WriteLDHi],
  1567. (instregex "LDXP(W|X)")>;
  1568. def KryoWrite_3cyc_LS_258_1ln :
  1569. SchedWriteRes<[KryoUnitLS]> {
  1570. let Latency = 3; let NumMicroOps = 1;
  1571. }
  1572. def : InstRW<[KryoWrite_3cyc_LS_258_1ln],
  1573. (instregex "LDXR(B|H|W|X)")>;
  1574. def KryoWrite_2cyc_XY_XY_137ln :
  1575. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1576. let Latency = 2; let NumMicroOps = 2;
  1577. }
  1578. def : InstRW<[KryoWrite_2cyc_XY_XY_137ln],
  1579. (instrs LSLVWr, LSLVXr)>;
  1580. def KryoWrite_1cyc_XY_135ln :
  1581. SchedWriteRes<[KryoUnitXY]> {
  1582. let Latency = 1; let NumMicroOps = 1;
  1583. }
  1584. def : InstRW<[KryoWrite_1cyc_XY_135ln],
  1585. (instregex "(LS|AS|RO)RV(W|X)r")>;
  1586. def KryoWrite_4cyc_X_84ln :
  1587. SchedWriteRes<[KryoUnitX]> {
  1588. let Latency = 4; let NumMicroOps = 1;
  1589. }
  1590. def : InstRW<[KryoWrite_4cyc_X_84ln],
  1591. (instrs MADDWrrr, MSUBWrrr)>;
  1592. def KryoWrite_5cyc_X_85ln :
  1593. SchedWriteRes<[KryoUnitX]> {
  1594. let Latency = 5; let NumMicroOps = 1;
  1595. }
  1596. def : InstRW<[KryoWrite_5cyc_X_85ln],
  1597. (instrs MADDXrrr, MSUBXrrr)>;
  1598. def KryoWrite_4cyc_X_noRSV_188ln :
  1599. SchedWriteRes<[KryoUnitX]> {
  1600. let Latency = 4; let NumMicroOps = 2;
  1601. }
  1602. def : InstRW<[KryoWrite_4cyc_X_noRSV_188ln],
  1603. (instregex "(MLA|MLS|MUL)(v8i8|v4i16|v2i32)(_indexed)?")>;
  1604. def KryoWrite_4cyc_X_X_192ln :
  1605. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  1606. let Latency = 4; let NumMicroOps = 2;
  1607. }
  1608. def : InstRW<[KryoWrite_4cyc_X_X_192ln],
  1609. (instregex "(MLA|MLS|MUL|SQR?DMULH)(v16i8|v8i16|v4i32)(_indexed)?")>;
  1610. def KryoWrite_1cyc_XY_noRSV_198ln :
  1611. SchedWriteRes<[KryoUnitXY]> {
  1612. let Latency = 1; let NumMicroOps = 2;
  1613. }
  1614. def : InstRW<[KryoWrite_1cyc_XY_noRSV_198ln],
  1615. (instregex "(MOVI|MVNI)(D|v8b_ns|v2i32|v4i16|v2s_msl)")>;
  1616. def KryoWrite_1cyc_XY_XY_199ln :
  1617. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1618. let Latency = 1; let NumMicroOps = 2;
  1619. }
  1620. def : InstRW<[KryoWrite_1cyc_XY_XY_199ln],
  1621. (instregex "(MOVI|MVNI)(v2d_ns|v16b_ns|v4i32|v8i16|v4s_msl)")>;
  1622. def KryoWrite_1cyc_X_89ln :
  1623. SchedWriteRes<[KryoUnitX]> {
  1624. let Latency = 1; let NumMicroOps = 1;
  1625. }
  1626. def : InstRW<[KryoWrite_1cyc_X_89ln],
  1627. (instrs MOVKWi, MOVKXi)>;
  1628. def KryoWrite_1cyc_XY_91ln :
  1629. SchedWriteRes<[KryoUnitXY]> {
  1630. let Latency = 1; let NumMicroOps = 1;
  1631. }
  1632. def : InstRW<[KryoWrite_1cyc_XY_91ln],
  1633. (instrs MOVNWi, MOVNXi)>;
  1634. def KryoWrite_1cyc_XY_90ln :
  1635. SchedWriteRes<[KryoUnitXY]> {
  1636. let Latency = 1; let NumMicroOps = 1;
  1637. }
  1638. def : InstRW<[KryoWrite_1cyc_XY_90ln],
  1639. (instrs MOVZWi, MOVZXi)>;
  1640. def KryoWrite_2cyc_XY_93ln :
  1641. SchedWriteRes<[KryoUnitXY]> {
  1642. let Latency = 2; let NumMicroOps = 1;
  1643. }
  1644. def : InstRW<[KryoWrite_2cyc_XY_93ln],
  1645. (instrs MRS)>;
  1646. def KryoWrite_0cyc_X_87ln :
  1647. SchedWriteRes<[KryoUnitX]> {
  1648. let Latency = 0; let NumMicroOps = 1;
  1649. }
  1650. def : InstRW<[KryoWrite_0cyc_X_87ln],
  1651. (instrs MSRpstateImm4)>;
  1652. def : InstRW<[KryoWrite_0cyc_X_87ln],
  1653. (instrs MSRpstateImm1)>;
  1654. def KryoWrite_0cyc_XY_88ln :
  1655. SchedWriteRes<[KryoUnitXY]> {
  1656. let Latency = 0; let NumMicroOps = 1;
  1657. }
  1658. def : InstRW<[KryoWrite_0cyc_XY_88ln],
  1659. (instrs MSR)>;
  1660. def KryoWrite_1cyc_XY_noRSV_143ln :
  1661. SchedWriteRes<[KryoUnitXY]> {
  1662. let Latency = 1; let NumMicroOps = 2;
  1663. }
  1664. def : InstRW<[KryoWrite_1cyc_XY_noRSV_143ln],
  1665. (instregex "NEG(v8i8|v4i16|v2i32|v1i64)")>;
  1666. def KryoWrite_1cyc_XY_XY_145ln :
  1667. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1668. let Latency = 1; let NumMicroOps = 2;
  1669. }
  1670. def : InstRW<[KryoWrite_1cyc_XY_XY_145ln],
  1671. (instregex "NEG(v16i8|v8i16|v4i32|v2i64)")>;
  1672. def KryoWrite_1cyc_XY_noRSV_193ln :
  1673. SchedWriteRes<[KryoUnitXY]> {
  1674. let Latency = 1; let NumMicroOps = 2;
  1675. }
  1676. def : InstRW<[KryoWrite_1cyc_XY_noRSV_193ln],
  1677. (instrs NOTv8i8)>;
  1678. def KryoWrite_1cyc_XY_XY_194ln :
  1679. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1680. let Latency = 1; let NumMicroOps = 2;
  1681. }
  1682. def : InstRW<[KryoWrite_1cyc_XY_XY_194ln],
  1683. (instrs NOTv16i8)>;
  1684. def KryoWrite_2cyc_XY_noRSV_234ln :
  1685. SchedWriteRes<[KryoUnitXY]> {
  1686. let Latency = 2; let NumMicroOps = 2;
  1687. }
  1688. def : InstRW<[KryoWrite_2cyc_XY_noRSV_234ln],
  1689. (instrs PMULv8i8)>;
  1690. def KryoWrite_2cyc_XY_XY_236ln :
  1691. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1692. let Latency = 2; let NumMicroOps = 2;
  1693. }
  1694. def : InstRW<[KryoWrite_2cyc_XY_XY_236ln],
  1695. (instrs PMULv16i8)>;
  1696. def KryoWrite_2cyc_XY_XY_235ln :
  1697. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1698. let Latency = 2; let NumMicroOps = 2;
  1699. }
  1700. def : InstRW<[KryoWrite_2cyc_XY_XY_235ln],
  1701. (instrs PMULLv8i8, PMULLv16i8)>;
  1702. def KryoWrite_3cyc_XY_XY_237ln :
  1703. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1704. let Latency = 3; let NumMicroOps = 2;
  1705. }
  1706. def : InstRW<[KryoWrite_3cyc_XY_XY_237ln],
  1707. (instrs PMULLv1i64, PMULLv2i64)>;
  1708. def KryoWrite_0cyc_LS_254ln :
  1709. SchedWriteRes<[KryoUnitLS]> {
  1710. let Latency = 0; let NumMicroOps = 1;
  1711. }
  1712. def : InstRW<[KryoWrite_0cyc_LS_254ln],
  1713. (instrs PRFMl, PRFMui)>;
  1714. def KryoWrite_0cyc_LS_253ln :
  1715. SchedWriteRes<[KryoUnitLS]> {
  1716. let Latency = 0; let NumMicroOps = 1;
  1717. }
  1718. def : InstRW<[KryoWrite_0cyc_LS_253ln],
  1719. (instrs PRFUMi)>;
  1720. def KryoWrite_6cyc_XY_X_noRSV_175ln :
  1721. SchedWriteRes<[KryoUnitXY, KryoUnitX]> {
  1722. let Latency = 6; let NumMicroOps = 3;
  1723. }
  1724. def : InstRW<[KryoWrite_6cyc_XY_X_noRSV_175ln],
  1725. (instregex "R(ADD|SUB)HNv.*")>;
  1726. def KryoWrite_2cyc_XY_204ln :
  1727. SchedWriteRes<[KryoUnitXY]> {
  1728. let Latency = 2; let NumMicroOps = 1;
  1729. }
  1730. def : InstRW<[KryoWrite_2cyc_XY_204ln],
  1731. (instrs RBITWr, RBITXr)>;
  1732. def KryoWrite_2cyc_XY_noRSV_218ln :
  1733. SchedWriteRes<[KryoUnitXY]> {
  1734. let Latency = 2; let NumMicroOps = 2;
  1735. }
  1736. def : InstRW<[KryoWrite_2cyc_XY_noRSV_218ln],
  1737. (instrs RBITv8i8)>;
  1738. def KryoWrite_2cyc_XY_XY_219ln :
  1739. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1740. let Latency = 2; let NumMicroOps = 2;
  1741. }
  1742. def : InstRW<[KryoWrite_2cyc_XY_XY_219ln],
  1743. (instrs RBITv16i8)>;
  1744. def KryoWrite_1cyc_X_202ln :
  1745. SchedWriteRes<[KryoUnitX]> {
  1746. let Latency = 1; let NumMicroOps = 1;
  1747. }
  1748. def : InstRW<[KryoWrite_1cyc_X_202ln],
  1749. (instregex "REV(16|32)?(W|X)r")>;
  1750. def KryoWrite_1cyc_XY_noRSV_214ln :
  1751. SchedWriteRes<[KryoUnitXY]> {
  1752. let Latency = 1; let NumMicroOps = 2;
  1753. }
  1754. def : InstRW<[KryoWrite_1cyc_XY_noRSV_214ln],
  1755. (instregex "REV(16|32|64)(v8i8|v4i16|v2i32)")>;
  1756. def KryoWrite_1cyc_XY_XY_216ln :
  1757. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1758. let Latency = 1; let NumMicroOps = 2;
  1759. }
  1760. def : InstRW<[KryoWrite_1cyc_XY_XY_216ln],
  1761. (instregex "REV(16|32|64)(v16i8|v8i16|v4i32)")>;
  1762. def KryoWrite_3cyc_X_noRSV_244ln :
  1763. SchedWriteRes<[KryoUnitX]> {
  1764. let Latency = 3; let NumMicroOps = 2;
  1765. }
  1766. def : InstRW<[KryoWrite_3cyc_X_noRSV_244ln],
  1767. (instregex "S(L|R)I(d|(v8i8|v4i16|v2i32)_shift)")>;
  1768. def KryoWrite_3cyc_X_X_245ln :
  1769. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  1770. let Latency = 3; let NumMicroOps = 2;
  1771. }
  1772. def : InstRW<[KryoWrite_3cyc_X_X_245ln],
  1773. (instregex "S(L|R)I(v16i8|v8i16|v4i32|v2i64)_shift")>;
  1774. def KryoWrite_1cyc_XY_2ln :
  1775. SchedWriteRes<[KryoUnitXY]> {
  1776. let Latency = 1; let NumMicroOps = 1;
  1777. }
  1778. def : InstRW<[KryoWrite_1cyc_XY_2ln, ReadI, ReadI],
  1779. (instregex "SBCS?(W|X)r")>;
  1780. def KryoWrite_2cyc_XA_XA_XA_24ln :
  1781. SchedWriteRes<[KryoUnitXA, KryoUnitXA, KryoUnitXA]> {
  1782. let Latency = 2; let NumMicroOps = 3;
  1783. }
  1784. def : InstRW<[KryoWrite_2cyc_XA_XA_XA_24ln],
  1785. (instrs SHA1Crrr, SHA1Mrrr, SHA1Prrr)>;
  1786. def KryoWrite_1cyc_XY_noRSV_21ln :
  1787. SchedWriteRes<[KryoUnitXY]> {
  1788. let Latency = 1; let NumMicroOps = 2;
  1789. }
  1790. def : InstRW<[KryoWrite_1cyc_XY_noRSV_21ln],
  1791. (instrs SHA1Hrr)>;
  1792. def KryoWrite_2cyc_X_X_23ln :
  1793. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  1794. let Latency = 2; let NumMicroOps = 2;
  1795. }
  1796. def : InstRW<[KryoWrite_2cyc_X_X_23ln],
  1797. (instrs SHA1SU0rrr, SHA1SU1rr, SHA256SU0rr)>;
  1798. def KryoWrite_4cyc_XA_XA_XA_25ln :
  1799. SchedWriteRes<[KryoUnitXA, KryoUnitXA, KryoUnitXA]> {
  1800. let Latency = 4; let NumMicroOps = 3;
  1801. }
  1802. def : InstRW<[KryoWrite_4cyc_XA_XA_XA_25ln],
  1803. (instrs SHA256Hrrr, SHA256H2rrr)>;
  1804. def KryoWrite_3cyc_XY_XY_X_X_26ln :
  1805. SchedWriteRes<[KryoUnitXY, KryoUnitXY, KryoUnitX, KryoUnitX]> {
  1806. let Latency = 3; let NumMicroOps = 4;
  1807. }
  1808. def : InstRW<[KryoWrite_3cyc_XY_XY_X_X_26ln],
  1809. (instrs SHA256SU1rrr)>;
  1810. def KryoWrite_4cyc_X_noRSV_189ln :
  1811. SchedWriteRes<[KryoUnitX]> {
  1812. let Latency = 4; let NumMicroOps = 2;
  1813. }
  1814. def : InstRW<[KryoWrite_4cyc_X_noRSV_189ln],
  1815. (instregex "SQR?DMULH(v8i8|v4i16|v1i32|v2i32|v1i16)(_indexed)?")>;
  1816. def KryoWrite_3cyc_XY_noRSV_68ln :
  1817. SchedWriteRes<[KryoUnitXY]> {
  1818. let Latency = 3; let NumMicroOps = 2;
  1819. }
  1820. def : InstRW<[KryoWrite_3cyc_XY_noRSV_68ln],
  1821. (instregex "SQ(ABS|NEG)(v1i8|v1i16|v1i32|v1i64)")>;
  1822. def KryoWrite_3cyc_XY_noRSV_157ln :
  1823. SchedWriteRes<[KryoUnitXY]> {
  1824. let Latency = 3; let NumMicroOps = 2;
  1825. }
  1826. def : InstRW<[KryoWrite_3cyc_XY_noRSV_157ln],
  1827. (instregex "SQ(ABS|NEG)(v8i8|v4i16|v2i32)")>;
  1828. def KryoWrite_3cyc_XY_XY_164ln :
  1829. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  1830. let Latency = 3; let NumMicroOps = 2;
  1831. }
  1832. def : InstRW<[KryoWrite_3cyc_XY_XY_164ln],
  1833. (instregex "SQ(ABS|NEG)(v16i8|v8i16|v4i32|v2i64)")>;
  1834. def KryoWrite_4cyc_X_noRSV_190ln :
  1835. SchedWriteRes<[KryoUnitX]> {
  1836. let Latency = 4; let NumMicroOps = 2;
  1837. }
  1838. def : InstRW<[KryoWrite_4cyc_X_noRSV_190ln],
  1839. (instregex "SQD(MLAL|MLSL|MULL)(i16|i32)")>;
  1840. def KryoWrite_0cyc_LS_Y_274ln :
  1841. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  1842. let Latency = 0; let NumMicroOps = 2;
  1843. }
  1844. def : InstRW<[KryoWrite_0cyc_LS_Y_274ln],
  1845. (instregex "ST1(One(v8b|v4h|v2s|v1d|v16b|v8h|v4s|v2d)|(i8|i16|i32|i64)|Two(v8b|v4h|v2s|v1d))$")>;
  1846. def KryoWrite_1cyc_LS_Y_X_301ln :
  1847. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitX]> {
  1848. let Latency = 1; let NumMicroOps = 3;
  1849. }
  1850. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_X_301ln],
  1851. (instregex "ST1(One(v8b|v4h|v2s|v1d|v16b|v8h|v4s|v2d)|(i8|i16|i32|i64)|Two(v8b|v4h|v2s|v1d))_POST$")>;
  1852. def KryoWrite_1cyc_LS_Y_XY_305ln :
  1853. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY]> {
  1854. let Latency = 1; let NumMicroOps = 3;
  1855. }
  1856. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_305ln],
  1857. (instregex "ST1(One(v16b|v8h|v4s|v2d)|Two(v8b|v4h|v2s|v1d))_POST$")>;
  1858. def KryoWrite_0cyc_LS_Y_LS_Y_323ln :
  1859. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
  1860. let Latency = 0; let NumMicroOps = 4;
  1861. }
  1862. def : InstRW<[WriteAdr, KryoWrite_0cyc_LS_Y_LS_Y_323ln],
  1863. (instregex "ST1(Two(v16b|v8h|v4s|v2d)|(Three|Four)(v8b|v4h|v2s|v1d))_POST$")>;
  1864. def KryoWrite_1cyc_LS_Y_XY_LS_Y_345ln :
  1865. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY]> {
  1866. let Latency = 1; let NumMicroOps = 5;
  1867. }
  1868. def : InstRW<[KryoWrite_1cyc_LS_Y_XY_LS_Y_345ln],
  1869. (instregex "ST1(Two(v16b|v8h|v4s|v2d)|(Three|Four)(v8b|v4h|v2s|v1d))$")>;
  1870. def KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_356ln :
  1871. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitLS,
  1872. KryoUnitY]> {
  1873. let Latency = 0; let NumMicroOps = 6;
  1874. }
  1875. def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_356ln],
  1876. (instregex "ST1Three(v16b|v8h|v4s|v2d)$")>;
  1877. def KryoWrite_1cyc_LS_Y_XY_LS_Y_LS_Y_366ln :
  1878. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY,
  1879. KryoUnitLS, KryoUnitY]> {
  1880. let Latency = 1; let NumMicroOps = 7;
  1881. }
  1882. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_LS_Y_366ln],
  1883. (instregex "ST1Three(v16b|v8h|v4s|v2d)_POST$")>;
  1884. def KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_LS_Y_371ln :
  1885. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitLS,
  1886. KryoUnitY, KryoUnitLS, KryoUnitY]> {
  1887. let Latency = 0; let NumMicroOps = 8;
  1888. }
  1889. def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_LS_Y_371ln],
  1890. (instregex "ST1Four(v16b|v8h|v4s|v2d)$")>;
  1891. def KryoWrite_0cyc_LS_Y_LS_Y_XY_LS_Y_LS_Y_377ln :
  1892. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitXY,
  1893. KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
  1894. let Latency = 0; let NumMicroOps = 9;
  1895. }
  1896. def : InstRW<[WriteAdr, KryoWrite_0cyc_LS_Y_LS_Y_XY_LS_Y_LS_Y_377ln],
  1897. (instregex "ST1Four(v16b|v8h|v4s|v2d)_POST$")>;
  1898. def KryoWrite_0cyc_LS_Y_275ln :
  1899. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  1900. let Latency = 0; let NumMicroOps = 2;
  1901. }
  1902. def : InstRW<[KryoWrite_0cyc_LS_Y_275ln],
  1903. (instregex "ST2(Two(v8b|v4h|v2s|v1d|v16b|v8h|v4s|v2d)|(i8|i16|i32|i64))$")>;
  1904. def KryoWrite_1cyc_LS_Y_XY_306ln :
  1905. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY]> {
  1906. let Latency = 1; let NumMicroOps = 3;
  1907. }
  1908. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_306ln],
  1909. (instregex "ST2(Two(v8b|v4h|v2s|v1d)|(i8|i16|i32|i64))_POST$")>;
  1910. def KryoWrite_0cyc_LS_Y_LS_Y_322ln :
  1911. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
  1912. let Latency = 0; let NumMicroOps = 4;
  1913. }
  1914. def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_322ln],
  1915. (instregex "ST2Two(v16b|v8h|v4s|v2d)$")>;
  1916. def KryoWrite_1cyc_LS_Y_XY_LS_Y_344ln :
  1917. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY]> {
  1918. let Latency = 1; let NumMicroOps = 5;
  1919. }
  1920. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_344ln],
  1921. (instregex "ST2Two(v16b|v8h|v4s|v2d)_POST$")>;
  1922. def KryoWrite_0cyc_LS_Y_LS_Y_324ln :
  1923. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
  1924. let Latency = 0; let NumMicroOps = 4;
  1925. }
  1926. def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_324ln],
  1927. (instregex "ST3(Threev1d|(i8|i16|i32|i64))$")>;
  1928. def KryoWrite_1cyc_LS_Y_XY_LS_Y_346ln :
  1929. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY]> {
  1930. let Latency = 1; let NumMicroOps = 5;
  1931. }
  1932. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_346ln],
  1933. (instregex "ST3(Threev1d|(i8|i16|i32|i64))_POST$")>;
  1934. def KryoWrite_1cyc_X_X_LS_Y_LS_Y_353ln :
  1935. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitLS,
  1936. KryoUnitY]> {
  1937. let Latency = 1; let NumMicroOps = 6;
  1938. }
  1939. def : InstRW<[KryoWrite_1cyc_X_X_LS_Y_LS_Y_353ln],
  1940. (instregex "ST3Three(v8b|v4h|v2s)$")>;
  1941. def KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_357ln :
  1942. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitLS,
  1943. KryoUnitY]> {
  1944. let Latency = 0; let NumMicroOps = 6;
  1945. }
  1946. def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_357ln],
  1947. (instregex "ST3Threev2d$")>;
  1948. def KryoWrite_1cyc_X_X_LS_Y_XY_LS_Y_363ln :
  1949. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitXY,
  1950. KryoUnitLS, KryoUnitY]> {
  1951. let Latency = 1; let NumMicroOps = 7;
  1952. }
  1953. def : InstRW<[WriteAdr, KryoWrite_1cyc_X_X_LS_Y_XY_LS_Y_363ln],
  1954. (instregex "ST3Three(v8b|v4h|v2s)_POST$")>;
  1955. def KryoWrite_1cyc_LS_Y_XY_LS_Y_LS_Y_367ln :
  1956. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY,
  1957. KryoUnitLS, KryoUnitY]> {
  1958. let Latency = 1; let NumMicroOps = 7;
  1959. }
  1960. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_LS_Y_367ln],
  1961. (instregex "ST3Threev2d_POST$")>;
  1962. def KryoWrite_1cyc_X_X_LS_Y_LS_Y_X_X_LS_Y_LS_Y_385ln :
  1963. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitLS,
  1964. KryoUnitY, KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY,
  1965. KryoUnitLS, KryoUnitY]> {
  1966. let Latency = 1; let NumMicroOps = 12;
  1967. }
  1968. def : InstRW<[KryoWrite_1cyc_X_X_LS_Y_LS_Y_X_X_LS_Y_LS_Y_385ln],
  1969. (instregex "ST3Three(v16b|v8h|v4s)$")>;
  1970. def KryoWrite_1cyc_X_X_LS_Y_LS_Y_X_X_LS_Y_XY_LS_Y_388ln :
  1971. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitLS,
  1972. KryoUnitY, KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY,
  1973. KryoUnitXY, KryoUnitLS, KryoUnitY]> {
  1974. let Latency = 1; let NumMicroOps = 13;
  1975. }
  1976. def : InstRW<[WriteAdr, KryoWrite_1cyc_X_X_LS_Y_LS_Y_X_X_LS_Y_XY_LS_Y_388ln],
  1977. (instregex "ST3Three(v16b|v8h|v4s)_POST$")>;
  1978. def KryoWrite_0cyc_LS_Y_LS_Y_325ln :
  1979. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
  1980. let Latency = 0; let NumMicroOps = 4;
  1981. }
  1982. def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_325ln],
  1983. (instregex "ST4(Fourv1d|(i8|i16|i32|i64))$")>;
  1984. def KryoWrite_1cyc_LS_Y_XY_LS_Y_347ln :
  1985. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS, KryoUnitY]> {
  1986. let Latency = 1; let NumMicroOps = 5;
  1987. }
  1988. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_XY_LS_Y_347ln],
  1989. (instregex "ST4(Fourv1d|(i8|i16|i32|i64))_POST$")>;
  1990. def KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_370ln :
  1991. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX,
  1992. KryoUnitX, KryoUnitLS, KryoUnitY]> {
  1993. let Latency = 1; let NumMicroOps = 8;
  1994. }
  1995. def : InstRW<[KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_370ln],
  1996. (instregex "ST4Four(v8b|v4h|v2s)$")>;
  1997. def KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_LS_Y_372ln :
  1998. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitLS,
  1999. KryoUnitY, KryoUnitLS, KryoUnitY]> {
  2000. let Latency = 0; let NumMicroOps = 8;
  2001. }
  2002. def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_LS_Y_LS_Y_372ln],
  2003. (instregex "ST4Fourv2d$")>;
  2004. def KryoWrite_1cyc_X_X_LS_Y_XY_X_X_LS_Y_375ln :
  2005. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitXY,
  2006. KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY]> {
  2007. let Latency = 1; let NumMicroOps = 9;
  2008. }
  2009. def : InstRW<[WriteAdr, KryoWrite_1cyc_X_X_LS_Y_XY_X_X_LS_Y_375ln],
  2010. (instregex "ST4Four(v8b|v4h|v2s)_POST$")>;
  2011. def KryoWrite_0cyc_LS_Y_LS_Y_XY_LS_Y_LS_Y_379ln :
  2012. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY, KryoUnitXY,
  2013. KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
  2014. let Latency = 0; let NumMicroOps = 9;
  2015. }
  2016. def : InstRW<[WriteAdr, KryoWrite_0cyc_LS_Y_LS_Y_XY_LS_Y_LS_Y_379ln],
  2017. (instregex "ST4Fourv2d_POST$")>;
  2018. def KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_390ln :
  2019. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX,
  2020. KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX, KryoUnitX,
  2021. KryoUnitLS, KryoUnitY, KryoUnitX, KryoUnitX, KryoUnitLS,
  2022. KryoUnitY]> {
  2023. let Latency = 1; let NumMicroOps = 16;
  2024. }
  2025. def : InstRW<[KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_390ln],
  2026. (instregex "ST4Four(v16b|v8h|v4s)$")>;
  2027. def KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_XY_X_X_LS_Y_392ln :
  2028. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX,
  2029. KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitX, KryoUnitX,
  2030. KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitX, KryoUnitX,
  2031. KryoUnitLS, KryoUnitY]> {
  2032. let Latency = 1; let NumMicroOps = 17;
  2033. }
  2034. def : InstRW<[WriteAdr, KryoWrite_1cyc_X_X_LS_Y_X_X_LS_Y_X_X_LS_Y_XY_X_X_LS_Y_392ln],
  2035. (instregex "ST4Four(v16b|v8h|v4s)_POST$")>;
  2036. def KryoWrite_0cyc_LS_LS_Y_299ln :
  2037. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitY]> {
  2038. let Latency = 0; let NumMicroOps = 3;
  2039. }
  2040. def : InstRW<[KryoWrite_0cyc_LS_LS_Y_299ln],
  2041. (instregex "STLR(B|H|W|X)")>;
  2042. def KryoWrite_3cyc_LS_LS_Y_307ln :
  2043. SchedWriteRes<[KryoUnitLS, KryoUnitLS, KryoUnitY]> {
  2044. let Latency = 3; let NumMicroOps = 3;
  2045. }
  2046. def : InstRW<[KryoWrite_3cyc_LS_LS_Y_307ln],
  2047. (instregex "STLX(P(W|X)|R(B|H|W|X))")>;
  2048. def KryoWrite_0cyc_LS_Y_276ln :
  2049. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2050. let Latency = 0; let NumMicroOps = 2;
  2051. }
  2052. def : InstRW<[KryoWrite_0cyc_LS_Y_276ln],
  2053. (instrs STNPDi, STNPSi)>;
  2054. def KryoWrite_0cyc_LS_Y_LS_Y_326ln :
  2055. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
  2056. let Latency = 0; let NumMicroOps = 4;
  2057. }
  2058. def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_326ln],
  2059. (instrs STNPQi)>;
  2060. def KryoWrite_0cyc_LS_Y_280ln :
  2061. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2062. let Latency = 0; let NumMicroOps = 2;
  2063. }
  2064. def : InstRW<[KryoWrite_0cyc_LS_Y_280ln],
  2065. (instrs STNPWi, STNPXi)>;
  2066. def KryoWrite_0cyc_LS_Y_277ln :
  2067. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2068. let Latency = 0; let NumMicroOps = 2;
  2069. }
  2070. def : InstRW<[KryoWrite_0cyc_LS_Y_277ln],
  2071. (instregex "STP(D|S)i")>;
  2072. def KryoWrite_1cyc_LS_Y_X_303ln :
  2073. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitX]> {
  2074. let Latency = 1; let NumMicroOps = 3;
  2075. }
  2076. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_X_303ln],
  2077. (instregex "STP(D|S)(post|pre)")>;
  2078. def KryoWrite_0cyc_LS_Y_LS_Y_327ln :
  2079. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitLS, KryoUnitY]> {
  2080. let Latency = 0; let NumMicroOps = 4;
  2081. }
  2082. def : InstRW<[KryoWrite_0cyc_LS_Y_LS_Y_327ln],
  2083. (instrs STPQi)>;
  2084. def KryoWrite_1cyc_LS_Y_X_LS_Y_343ln :
  2085. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitX, KryoUnitLS, KryoUnitY]> {
  2086. let Latency = 1; let NumMicroOps = 5;
  2087. }
  2088. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_X_LS_Y_343ln],
  2089. (instrs STPQpost, STPQpre)>;
  2090. def KryoWrite_0cyc_LS_Y_279ln :
  2091. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2092. let Latency = 0; let NumMicroOps = 2;
  2093. }
  2094. def : InstRW<[KryoWrite_0cyc_LS_Y_279ln],
  2095. (instregex "STP(W|X)i")>;
  2096. def KryoWrite_1cyc_LS_X_Y_300ln :
  2097. SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitY]> {
  2098. let Latency = 1; let NumMicroOps = 3;
  2099. }
  2100. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_X_Y_300ln],
  2101. (instregex "STP(W|X)(post|pre)")>;
  2102. def KryoWrite_0cyc_LS_Y_278ln :
  2103. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2104. let Latency = 0; let NumMicroOps = 2;
  2105. }
  2106. def : InstRW<[KryoWrite_0cyc_LS_Y_278ln],
  2107. (instregex "STR(Q|D|S|H|B)ui")>;
  2108. def KryoWrite_1cyc_X_LS_Y_295ln :
  2109. SchedWriteRes<[KryoUnitX, KryoUnitLS, KryoUnitY]> {
  2110. let Latency = 1; let NumMicroOps = 3;
  2111. }
  2112. def : InstRW<[KryoWrite_1cyc_X_LS_Y_295ln],
  2113. (instregex "STR(D|S|H|B)ro(W|X)")>;
  2114. def KryoWrite_1cyc_LS_Y_X_304ln :
  2115. SchedWriteRes<[KryoUnitLS, KryoUnitY, KryoUnitX]> {
  2116. let Latency = 1; let NumMicroOps = 3;
  2117. }
  2118. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_Y_X_304ln],
  2119. (instregex "STR(Q|D|S|H|B)(post|pre)")>;
  2120. def KryoWrite_2cyc_X_LS_Y_XY_LS_Y_354ln :
  2121. SchedWriteRes<[KryoUnitX, KryoUnitLS, KryoUnitY, KryoUnitXY, KryoUnitLS,
  2122. KryoUnitY]> {
  2123. let Latency = 2; let NumMicroOps = 6;
  2124. }
  2125. def : InstRW<[KryoWrite_2cyc_X_LS_Y_XY_LS_Y_354ln],
  2126. (instregex "STRQro(W|X)")>;
  2127. def KryoWrite_0cyc_LS_Y_399ln :
  2128. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2129. let Latency = 0; let NumMicroOps = 2;
  2130. }
  2131. def : InstRW<[KryoWrite_0cyc_LS_Y_399ln],
  2132. (instregex "STR(BB|HH|W|X)ui")>;
  2133. def KryoWrite_1cyc_X_LS_Y_406ln :
  2134. SchedWriteRes<[KryoUnitX, KryoUnitLS, KryoUnitY]> {
  2135. let Latency = 1; let NumMicroOps = 3;
  2136. }
  2137. def : InstRW<[KryoWrite_1cyc_X_LS_Y_406ln],
  2138. (instregex "STR(BB|HH|W|X)ro(W|X)")>;
  2139. def KryoWrite_1cyc_LS_X_Y_407ln :
  2140. SchedWriteRes<[KryoUnitLS, KryoUnitX, KryoUnitY]> {
  2141. let Latency = 1; let NumMicroOps = 3;
  2142. }
  2143. def : InstRW<[WriteAdr, KryoWrite_1cyc_LS_X_Y_407ln],
  2144. (instregex "STR(BB|HH|W|X)(post|pre)")>;
  2145. def KryoWrite_0cyc_LS_Y_398ln :
  2146. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2147. let Latency = 0; let NumMicroOps = 2;
  2148. }
  2149. def : InstRW<[KryoWrite_0cyc_LS_Y_398ln],
  2150. (instregex "STTR(B|H|W|X)i")>;
  2151. def KryoWrite_0cyc_LS_Y_396ln :
  2152. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2153. let Latency = 0; let NumMicroOps = 2;
  2154. }
  2155. def : InstRW<[KryoWrite_0cyc_LS_Y_396ln],
  2156. (instregex "STUR(Q|D|S|H|B)i")>;
  2157. def KryoWrite_0cyc_LS_Y_397ln :
  2158. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2159. let Latency = 0; let NumMicroOps = 2;
  2160. }
  2161. def : InstRW<[KryoWrite_0cyc_LS_Y_397ln],
  2162. (instregex "STUR(BB|HH|W|X)i")>;
  2163. def KryoWrite_3cyc_LS_Y_404ln :
  2164. SchedWriteRes<[KryoUnitLS, KryoUnitY]> {
  2165. let Latency = 3; let NumMicroOps = 2;
  2166. }
  2167. def : InstRW<[KryoWrite_3cyc_LS_Y_404ln],
  2168. (instregex "STX(P(W|X)|R(B|H|W|X))")>;
  2169. def KryoWrite_3cyc_XY_noRSV_160ln :
  2170. SchedWriteRes<[KryoUnitXY]> {
  2171. let Latency = 3; let NumMicroOps = 2;
  2172. }
  2173. def : InstRW<[KryoWrite_3cyc_XY_noRSV_160ln],
  2174. (instregex "^(SU|US)QADD(v8i8|v4i16|v2i32)")>;
  2175. def KryoWrite_3cyc_XY_XY_167ln :
  2176. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  2177. let Latency = 3; let NumMicroOps = 2;
  2178. }
  2179. def : InstRW<[KryoWrite_3cyc_XY_XY_167ln],
  2180. (instregex "^(SU|US)QADD(v16i8|v8i16|v4i32|v2i64)")>;
  2181. def KryoWrite_1cyc_XY_1ln :
  2182. SchedWriteRes<[KryoUnitXY]> {
  2183. let Latency = 1; let NumMicroOps = 1;
  2184. }
  2185. def : InstRW<[KryoWrite_1cyc_XY_1ln, ReadI],
  2186. (instregex "SUBS?(W|X)ri")>;
  2187. def KryoWrite_2cyc_XY_XY_5ln :
  2188. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  2189. let Latency = 2; let NumMicroOps = 2;
  2190. }
  2191. def : InstRW<[KryoWrite_2cyc_XY_XY_5ln, ReadI, ReadIEReg],
  2192. (instregex "SUBS?(W|X)rx")>;
  2193. def KryoWrite_2cyc_XY_XY_5_1ln :
  2194. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  2195. let Latency = 2; let NumMicroOps = 2;
  2196. }
  2197. def : InstRW<[KryoWrite_2cyc_XY_XY_5_1ln, ReadI, ReadISReg],
  2198. (instregex "SUBS?(W|X)rs")>;
  2199. def KryoWrite_1cyc_XY_noRSV_6ln :
  2200. SchedWriteRes<[KryoUnitXY]> {
  2201. let Latency = 1; let NumMicroOps = 2;
  2202. }
  2203. def : InstRW<[KryoWrite_1cyc_XY_noRSV_6ln, ReadI, ReadI],
  2204. (instregex "SUBS?(W|X)rr")>;
  2205. def KryoWrite_0cyc_LS_9ln :
  2206. SchedWriteRes<[KryoUnitLS]> {
  2207. let Latency = 0; let NumMicroOps = 1;
  2208. }
  2209. def : InstRW<[KryoWrite_0cyc_LS_9ln],
  2210. (instregex "SYSL?xt")>;
  2211. def KryoWrite_1cyc_X_noRSV_205ln :
  2212. SchedWriteRes<[KryoUnitX]> {
  2213. let Latency = 1; let NumMicroOps = 2;
  2214. }
  2215. def : InstRW<[KryoWrite_1cyc_X_noRSV_205ln],
  2216. (instrs TBLv8i8One)>;
  2217. def KryoWrite_1cyc_X_X_208ln :
  2218. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  2219. let Latency = 1; let NumMicroOps = 2;
  2220. }
  2221. def : InstRW<[KryoWrite_1cyc_X_X_208ln],
  2222. (instrs TBLv16i8One)>;
  2223. def KryoWrite_2cyc_X_X_X_noRSV_222ln :
  2224. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX]> {
  2225. let Latency = 2; let NumMicroOps = 4;
  2226. }
  2227. def : InstRW<[KryoWrite_2cyc_X_X_X_noRSV_222ln],
  2228. (instrs TBLv8i8Two)>;
  2229. def KryoWrite_2cyc_X_X_X_X_X_X_224ln :
  2230. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2231. KryoUnitX]> {
  2232. let Latency = 2; let NumMicroOps = 6;
  2233. }
  2234. def : InstRW<[KryoWrite_2cyc_X_X_X_X_X_X_224ln],
  2235. (instrs TBLv16i8Two)>;
  2236. def KryoWrite_3cyc_X_X_X_X_X_noRSV_225ln :
  2237. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
  2238. let Latency = 3; let NumMicroOps = 6;
  2239. }
  2240. def : InstRW<[KryoWrite_3cyc_X_X_X_X_X_noRSV_225ln],
  2241. (instrs TBLv8i8Three)>;
  2242. def KryoWrite_3cyc_X_X_X_X_X_X_X_noRSV_228ln :
  2243. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2244. KryoUnitX, KryoUnitX]> {
  2245. let Latency = 3; let NumMicroOps = 8;
  2246. }
  2247. def : InstRW<[KryoWrite_3cyc_X_X_X_X_X_X_X_noRSV_228ln],
  2248. (instrs TBLv8i8Four)>;
  2249. def KryoWrite_4cyc_X_X_X_X_X_X_X_X_XY_X_X_230ln :
  2250. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2251. KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitXY, KryoUnitX,
  2252. KryoUnitX]> {
  2253. let Latency = 4; let NumMicroOps = 11;
  2254. }
  2255. def : InstRW<[KryoWrite_4cyc_X_X_X_X_X_X_X_X_XY_X_X_230ln],
  2256. (instrs TBLv16i8Three)>;
  2257. def KryoWrite_4cyc_X_X_X_X_X_X_X_X_X_X_XY_X_X_X_X_232ln :
  2258. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2259. KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2260. KryoUnitXY, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
  2261. let Latency = 4; let NumMicroOps = 15;
  2262. }
  2263. def : InstRW<[KryoWrite_4cyc_X_X_X_X_X_X_X_X_X_X_XY_X_X_X_X_232ln],
  2264. (instrs TBLv16i8Four)>;
  2265. def KryoWrite_2cyc_X_X_noRSV_220ln :
  2266. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  2267. let Latency = 2; let NumMicroOps = 3;
  2268. }
  2269. def : InstRW<[KryoWrite_2cyc_X_X_noRSV_220ln],
  2270. (instrs TBXv8i8One)>;
  2271. def KryoWrite_2cyc_X_X_X_X_221ln :
  2272. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
  2273. let Latency = 2; let NumMicroOps = 4;
  2274. }
  2275. def : InstRW<[KryoWrite_2cyc_X_X_X_X_221ln],
  2276. (instrs TBXv16i8One)>;
  2277. def KryoWrite_3cyc_X_X_X_X_noRSV_223ln :
  2278. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX]> {
  2279. let Latency = 3; let NumMicroOps = 5;
  2280. }
  2281. def : InstRW<[KryoWrite_3cyc_X_X_X_X_noRSV_223ln],
  2282. (instrs TBXv8i8Two)>;
  2283. def KryoWrite_4cyc_X_X_X_X_X_X_noRSV_226ln :
  2284. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2285. KryoUnitX]> {
  2286. let Latency = 4; let NumMicroOps = 7;
  2287. }
  2288. def : InstRW<[KryoWrite_4cyc_X_X_X_X_X_X_noRSV_226ln],
  2289. (instrs TBXv8i8Three)>;
  2290. def KryoWrite_3cyc_X_X_X_X_X_X_X_X_227ln :
  2291. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2292. KryoUnitX, KryoUnitX, KryoUnitX]> {
  2293. let Latency = 3; let NumMicroOps = 8;
  2294. }
  2295. def : InstRW<[KryoWrite_3cyc_X_X_X_X_X_X_X_X_227ln],
  2296. (instrs TBXv16i8Two)>;
  2297. def KryoWrite_4cyc_X_X_X_X_X_X_X_X_noRSV_229ln :
  2298. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2299. KryoUnitX, KryoUnitX, KryoUnitX]> {
  2300. let Latency = 4; let NumMicroOps = 9;
  2301. }
  2302. def : InstRW<[KryoWrite_4cyc_X_X_X_X_X_X_X_X_noRSV_229ln],
  2303. (instrs TBXv8i8Four)>;
  2304. def KryoWrite_5cyc_X_X_X_X_X_X_X_X_X_XY_X_X_X_231ln :
  2305. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2306. KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitXY,
  2307. KryoUnitX, KryoUnitX, KryoUnitX]> {
  2308. let Latency = 5; let NumMicroOps = 13;
  2309. }
  2310. def : InstRW<[KryoWrite_5cyc_X_X_X_X_X_X_X_X_X_XY_X_X_X_231ln],
  2311. (instrs TBXv16i8Three)>;
  2312. def KryoWrite_5cyc_X_X_X_X_X_X_X_X_X_X_X_XY_X_X_X_X_X_233ln :
  2313. SchedWriteRes<[KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2314. KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX, KryoUnitX,
  2315. KryoUnitX, KryoUnitXY, KryoUnitX, KryoUnitX, KryoUnitX,
  2316. KryoUnitX, KryoUnitX]> {
  2317. let Latency = 5; let NumMicroOps = 17;
  2318. }
  2319. def : InstRW<[KryoWrite_5cyc_X_X_X_X_X_X_X_X_X_X_X_XY_X_X_X_X_X_233ln],
  2320. (instrs TBXv16i8Four)>;
  2321. def KryoWrite_1cyc_XY_XY_217ln :
  2322. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  2323. let Latency = 1; let NumMicroOps = 2;
  2324. }
  2325. def : InstRW<[KryoWrite_1cyc_XY_XY_217ln],
  2326. (instregex "((TRN1|TRN2|ZIP1|UZP1|UZP2)v2i64|ZIP2(v2i64|v4i32|v8i16|v16i8))")>;
  2327. def KryoWrite_1cyc_X_X_211ln :
  2328. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  2329. let Latency = 1; let NumMicroOps = 2;
  2330. }
  2331. def : InstRW<[KryoWrite_1cyc_X_X_211ln],
  2332. (instregex "(TRN1|TRN2)(v4i32|v8i16|v16i8)")>;
  2333. def KryoWrite_1cyc_X_XY_213ln :
  2334. SchedWriteRes<[KryoUnitX, KryoUnitXY]> {
  2335. let Latency = 1; let NumMicroOps = 2;
  2336. }
  2337. def : InstRW<[KryoWrite_1cyc_X_XY_213ln],
  2338. (instregex "(TRN1|TRN2)(v2i32|v4i16|v8i8)")>;
  2339. def KryoWrite_3cyc_XY_noRSV_156ln :
  2340. SchedWriteRes<[KryoUnitXY]> {
  2341. let Latency = 3; let NumMicroOps = 2;
  2342. }
  2343. def : InstRW<[KryoWrite_3cyc_XY_noRSV_156ln],
  2344. (instrs URECPEv2i32, URSQRTEv2i32)>;
  2345. def KryoWrite_3cyc_XY_XY_168ln :
  2346. SchedWriteRes<[KryoUnitXY, KryoUnitXY]> {
  2347. let Latency = 3; let NumMicroOps = 2;
  2348. }
  2349. def : InstRW<[KryoWrite_3cyc_XY_XY_168ln],
  2350. (instrs URECPEv4i32, URSQRTEv4i32)>;
  2351. def KryoWrite_1cyc_X_X_210ln :
  2352. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  2353. let Latency = 1; let NumMicroOps = 2;
  2354. }
  2355. def : InstRW<[KryoWrite_1cyc_X_X_210ln],
  2356. (instregex "(UZP1|UZP2)(v4i32|v8i16|v16i8)")>;
  2357. def KryoWrite_1cyc_X_noRSV_206ln :
  2358. SchedWriteRes<[KryoUnitX]> {
  2359. let Latency = 1; let NumMicroOps = 2;
  2360. }
  2361. def : InstRW<[KryoWrite_1cyc_X_noRSV_206ln],
  2362. (instregex "(UZP1|UZP2|ZIP1|ZIP2)(v2i32|v4i16|v8i8)")>;
  2363. def KryoWrite_1cyc_XY_noRSV_215ln :
  2364. SchedWriteRes<[KryoUnitXY]> {
  2365. let Latency = 1; let NumMicroOps = 2;
  2366. }
  2367. def : InstRW<[KryoWrite_1cyc_XY_noRSV_215ln],
  2368. (instregex "XTNv.*")>;
  2369. def KryoWrite_1cyc_X_X_209ln :
  2370. SchedWriteRes<[KryoUnitX, KryoUnitX]> {
  2371. let Latency = 1; let NumMicroOps = 2;
  2372. }
  2373. def : InstRW<[KryoWrite_1cyc_X_X_209ln],
  2374. (instregex "ZIP1(v4i32|v8i16|v16i8)")>;