Intrinsic.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631
  1. namespace ARMeilleure.IntermediateRepresentation
  2. {
  3. enum Intrinsic : ushort
  4. {
  5. // X86 (SSE and AVX)
  6. X86Addpd,
  7. X86Addps,
  8. X86Addsd,
  9. X86Addss,
  10. X86Aesdec,
  11. X86Aesdeclast,
  12. X86Aesenc,
  13. X86Aesenclast,
  14. X86Aesimc,
  15. X86Andnpd,
  16. X86Andnps,
  17. X86Andpd,
  18. X86Andps,
  19. X86Blendvpd,
  20. X86Blendvps,
  21. X86Cmppd,
  22. X86Cmpps,
  23. X86Cmpsd,
  24. X86Cmpss,
  25. X86Comisdeq,
  26. X86Comisdge,
  27. X86Comisdlt,
  28. X86Comisseq,
  29. X86Comissge,
  30. X86Comisslt,
  31. X86Crc32,
  32. X86Crc32_16,
  33. X86Crc32_8,
  34. X86Cvtdq2pd,
  35. X86Cvtdq2ps,
  36. X86Cvtpd2dq,
  37. X86Cvtpd2ps,
  38. X86Cvtps2dq,
  39. X86Cvtps2pd,
  40. X86Cvtsd2si,
  41. X86Cvtsd2ss,
  42. X86Cvtsi2sd,
  43. X86Cvtsi2si,
  44. X86Cvtsi2ss,
  45. X86Cvtss2sd,
  46. X86Cvtss2si,
  47. X86Divpd,
  48. X86Divps,
  49. X86Divsd,
  50. X86Divss,
  51. X86Gf2p8affineqb,
  52. X86Haddpd,
  53. X86Haddps,
  54. X86Insertps,
  55. X86Maxpd,
  56. X86Maxps,
  57. X86Maxsd,
  58. X86Maxss,
  59. X86Minpd,
  60. X86Minps,
  61. X86Minsd,
  62. X86Minss,
  63. X86Movhlps,
  64. X86Movlhps,
  65. X86Movss,
  66. X86Mulpd,
  67. X86Mulps,
  68. X86Mulsd,
  69. X86Mulss,
  70. X86Mxcsrmb,
  71. X86Mxcsrub,
  72. X86Paddb,
  73. X86Paddd,
  74. X86Paddq,
  75. X86Paddw,
  76. X86Palignr,
  77. X86Pand,
  78. X86Pandn,
  79. X86Pavgb,
  80. X86Pavgw,
  81. X86Pblendvb,
  82. X86Pclmulqdq,
  83. X86Pcmpeqb,
  84. X86Pcmpeqd,
  85. X86Pcmpeqq,
  86. X86Pcmpeqw,
  87. X86Pcmpgtb,
  88. X86Pcmpgtd,
  89. X86Pcmpgtq,
  90. X86Pcmpgtw,
  91. X86Pmaxsb,
  92. X86Pmaxsd,
  93. X86Pmaxsw,
  94. X86Pmaxub,
  95. X86Pmaxud,
  96. X86Pmaxuw,
  97. X86Pminsb,
  98. X86Pminsd,
  99. X86Pminsw,
  100. X86Pminub,
  101. X86Pminud,
  102. X86Pminuw,
  103. X86Pmovsxbw,
  104. X86Pmovsxdq,
  105. X86Pmovsxwd,
  106. X86Pmovzxbw,
  107. X86Pmovzxdq,
  108. X86Pmovzxwd,
  109. X86Pmulld,
  110. X86Pmullw,
  111. X86Popcnt,
  112. X86Por,
  113. X86Pshufb,
  114. X86Pshufd,
  115. X86Pslld,
  116. X86Pslldq,
  117. X86Psllq,
  118. X86Psllw,
  119. X86Psrad,
  120. X86Psraw,
  121. X86Psrld,
  122. X86Psrlq,
  123. X86Psrldq,
  124. X86Psrlw,
  125. X86Psubb,
  126. X86Psubd,
  127. X86Psubq,
  128. X86Psubw,
  129. X86Punpckhbw,
  130. X86Punpckhdq,
  131. X86Punpckhqdq,
  132. X86Punpckhwd,
  133. X86Punpcklbw,
  134. X86Punpckldq,
  135. X86Punpcklqdq,
  136. X86Punpcklwd,
  137. X86Pxor,
  138. X86Rcpps,
  139. X86Rcpss,
  140. X86Roundpd,
  141. X86Roundps,
  142. X86Roundsd,
  143. X86Roundss,
  144. X86Rsqrtps,
  145. X86Rsqrtss,
  146. X86Sha256Msg1,
  147. X86Sha256Msg2,
  148. X86Sha256Rnds2,
  149. X86Shufpd,
  150. X86Shufps,
  151. X86Sqrtpd,
  152. X86Sqrtps,
  153. X86Sqrtsd,
  154. X86Sqrtss,
  155. X86Subpd,
  156. X86Subps,
  157. X86Subsd,
  158. X86Subss,
  159. X86Unpckhpd,
  160. X86Unpckhps,
  161. X86Unpcklpd,
  162. X86Unpcklps,
  163. X86Vcvtph2ps,
  164. X86Vcvtps2ph,
  165. X86Vfmadd231ps,
  166. X86Vfmadd231sd,
  167. X86Vfmadd231ss,
  168. X86Vfmsub231sd,
  169. X86Vfmsub231ss,
  170. X86Vfnmadd231ps,
  171. X86Vfnmadd231sd,
  172. X86Vfnmadd231ss,
  173. X86Vfnmsub231sd,
  174. X86Vfnmsub231ss,
  175. X86Xorpd,
  176. X86Xorps,
  177. // Arm64 (FP and Advanced SIMD)
  178. Arm64AbsS,
  179. Arm64AbsV,
  180. Arm64AddhnV,
  181. Arm64AddpS,
  182. Arm64AddpV,
  183. Arm64AddvV,
  184. Arm64AddS,
  185. Arm64AddV,
  186. Arm64AesdV,
  187. Arm64AeseV,
  188. Arm64AesimcV,
  189. Arm64AesmcV,
  190. Arm64AndV,
  191. Arm64BicVi,
  192. Arm64BicV,
  193. Arm64BifV,
  194. Arm64BitV,
  195. Arm64BslV,
  196. Arm64ClsV,
  197. Arm64ClzV,
  198. Arm64CmeqS,
  199. Arm64CmeqV,
  200. Arm64CmeqSz,
  201. Arm64CmeqVz,
  202. Arm64CmgeS,
  203. Arm64CmgeV,
  204. Arm64CmgeSz,
  205. Arm64CmgeVz,
  206. Arm64CmgtS,
  207. Arm64CmgtV,
  208. Arm64CmgtSz,
  209. Arm64CmgtVz,
  210. Arm64CmhiS,
  211. Arm64CmhiV,
  212. Arm64CmhsS,
  213. Arm64CmhsV,
  214. Arm64CmleSz,
  215. Arm64CmleVz,
  216. Arm64CmltSz,
  217. Arm64CmltVz,
  218. Arm64CmtstS,
  219. Arm64CmtstV,
  220. Arm64CntV,
  221. Arm64DupSe,
  222. Arm64DupVe,
  223. Arm64DupGp,
  224. Arm64EorV,
  225. Arm64ExtV,
  226. Arm64FabdS,
  227. Arm64FabdV,
  228. Arm64FabsV,
  229. Arm64FabsS,
  230. Arm64FacgeS,
  231. Arm64FacgeV,
  232. Arm64FacgtS,
  233. Arm64FacgtV,
  234. Arm64FaddpS,
  235. Arm64FaddpV,
  236. Arm64FaddV,
  237. Arm64FaddS,
  238. Arm64FccmpeS,
  239. Arm64FccmpS,
  240. Arm64FcmeqS,
  241. Arm64FcmeqV,
  242. Arm64FcmeqSz,
  243. Arm64FcmeqVz,
  244. Arm64FcmgeS,
  245. Arm64FcmgeV,
  246. Arm64FcmgeSz,
  247. Arm64FcmgeVz,
  248. Arm64FcmgtS,
  249. Arm64FcmgtV,
  250. Arm64FcmgtSz,
  251. Arm64FcmgtVz,
  252. Arm64FcmleSz,
  253. Arm64FcmleVz,
  254. Arm64FcmltSz,
  255. Arm64FcmltVz,
  256. Arm64FcmpeS,
  257. Arm64FcmpS,
  258. Arm64FcselS,
  259. Arm64FcvtasS,
  260. Arm64FcvtasV,
  261. Arm64FcvtasGp,
  262. Arm64FcvtauS,
  263. Arm64FcvtauV,
  264. Arm64FcvtauGp,
  265. Arm64FcvtlV,
  266. Arm64FcvtmsS,
  267. Arm64FcvtmsV,
  268. Arm64FcvtmsGp,
  269. Arm64FcvtmuS,
  270. Arm64FcvtmuV,
  271. Arm64FcvtmuGp,
  272. Arm64FcvtnsS,
  273. Arm64FcvtnsV,
  274. Arm64FcvtnsGp,
  275. Arm64FcvtnuS,
  276. Arm64FcvtnuV,
  277. Arm64FcvtnuGp,
  278. Arm64FcvtnV,
  279. Arm64FcvtpsS,
  280. Arm64FcvtpsV,
  281. Arm64FcvtpsGp,
  282. Arm64FcvtpuS,
  283. Arm64FcvtpuV,
  284. Arm64FcvtpuGp,
  285. Arm64FcvtxnS,
  286. Arm64FcvtxnV,
  287. Arm64FcvtzsSFixed,
  288. Arm64FcvtzsVFixed,
  289. Arm64FcvtzsS,
  290. Arm64FcvtzsV,
  291. Arm64FcvtzsGpFixed,
  292. Arm64FcvtzsGp,
  293. Arm64FcvtzuSFixed,
  294. Arm64FcvtzuVFixed,
  295. Arm64FcvtzuS,
  296. Arm64FcvtzuV,
  297. Arm64FcvtzuGpFixed,
  298. Arm64FcvtzuGp,
  299. Arm64FcvtS,
  300. Arm64FdivV,
  301. Arm64FdivS,
  302. Arm64FmaddS,
  303. Arm64FmaxnmpS,
  304. Arm64FmaxnmpV,
  305. Arm64FmaxnmvV,
  306. Arm64FmaxnmV,
  307. Arm64FmaxnmS,
  308. Arm64FmaxpS,
  309. Arm64FmaxpV,
  310. Arm64FmaxvV,
  311. Arm64FmaxV,
  312. Arm64FmaxS,
  313. Arm64FminnmpS,
  314. Arm64FminnmpV,
  315. Arm64FminnmvV,
  316. Arm64FminnmV,
  317. Arm64FminnmS,
  318. Arm64FminpS,
  319. Arm64FminpV,
  320. Arm64FminvV,
  321. Arm64FminV,
  322. Arm64FminS,
  323. Arm64FmlaSe,
  324. Arm64FmlaVe,
  325. Arm64FmlaV,
  326. Arm64FmlsSe,
  327. Arm64FmlsVe,
  328. Arm64FmlsV,
  329. Arm64FmovVi,
  330. Arm64FmovS,
  331. Arm64FmovGp,
  332. Arm64FmovSi,
  333. Arm64FmsubS,
  334. Arm64FmulxSe,
  335. Arm64FmulxVe,
  336. Arm64FmulxS,
  337. Arm64FmulxV,
  338. Arm64FmulSe,
  339. Arm64FmulVe,
  340. Arm64FmulV,
  341. Arm64FmulS,
  342. Arm64FnegV,
  343. Arm64FnegS,
  344. Arm64FnmaddS,
  345. Arm64FnmsubS,
  346. Arm64FnmulS,
  347. Arm64FrecpeS,
  348. Arm64FrecpeV,
  349. Arm64FrecpsS,
  350. Arm64FrecpsV,
  351. Arm64FrecpxS,
  352. Arm64FrintaV,
  353. Arm64FrintaS,
  354. Arm64FrintiV,
  355. Arm64FrintiS,
  356. Arm64FrintmV,
  357. Arm64FrintmS,
  358. Arm64FrintnV,
  359. Arm64FrintnS,
  360. Arm64FrintpV,
  361. Arm64FrintpS,
  362. Arm64FrintxV,
  363. Arm64FrintxS,
  364. Arm64FrintzV,
  365. Arm64FrintzS,
  366. Arm64FrsqrteS,
  367. Arm64FrsqrteV,
  368. Arm64FrsqrtsS,
  369. Arm64FrsqrtsV,
  370. Arm64FsqrtV,
  371. Arm64FsqrtS,
  372. Arm64FsubV,
  373. Arm64FsubS,
  374. Arm64InsVe,
  375. Arm64InsGp,
  376. Arm64Ld1rV,
  377. Arm64Ld1Vms,
  378. Arm64Ld1Vss,
  379. Arm64Ld2rV,
  380. Arm64Ld2Vms,
  381. Arm64Ld2Vss,
  382. Arm64Ld3rV,
  383. Arm64Ld3Vms,
  384. Arm64Ld3Vss,
  385. Arm64Ld4rV,
  386. Arm64Ld4Vms,
  387. Arm64Ld4Vss,
  388. Arm64MlaVe,
  389. Arm64MlaV,
  390. Arm64MlsVe,
  391. Arm64MlsV,
  392. Arm64MoviV,
  393. Arm64MrsFpsr,
  394. Arm64MsrFpsr,
  395. Arm64MulVe,
  396. Arm64MulV,
  397. Arm64MvniV,
  398. Arm64NegS,
  399. Arm64NegV,
  400. Arm64NotV,
  401. Arm64OrnV,
  402. Arm64OrrVi,
  403. Arm64OrrV,
  404. Arm64PmullV,
  405. Arm64PmulV,
  406. Arm64RaddhnV,
  407. Arm64RbitV,
  408. Arm64Rev16V,
  409. Arm64Rev32V,
  410. Arm64Rev64V,
  411. Arm64RshrnV,
  412. Arm64RsubhnV,
  413. Arm64SabalV,
  414. Arm64SabaV,
  415. Arm64SabdlV,
  416. Arm64SabdV,
  417. Arm64SadalpV,
  418. Arm64SaddlpV,
  419. Arm64SaddlvV,
  420. Arm64SaddlV,
  421. Arm64SaddwV,
  422. Arm64ScvtfSFixed,
  423. Arm64ScvtfVFixed,
  424. Arm64ScvtfS,
  425. Arm64ScvtfV,
  426. Arm64ScvtfGpFixed,
  427. Arm64ScvtfGp,
  428. Arm64Sha1cV,
  429. Arm64Sha1hV,
  430. Arm64Sha1mV,
  431. Arm64Sha1pV,
  432. Arm64Sha1su0V,
  433. Arm64Sha1su1V,
  434. Arm64Sha256h2V,
  435. Arm64Sha256hV,
  436. Arm64Sha256su0V,
  437. Arm64Sha256su1V,
  438. Arm64ShaddV,
  439. Arm64ShllV,
  440. Arm64ShlS,
  441. Arm64ShlV,
  442. Arm64ShrnV,
  443. Arm64ShsubV,
  444. Arm64SliS,
  445. Arm64SliV,
  446. Arm64SmaxpV,
  447. Arm64SmaxvV,
  448. Arm64SmaxV,
  449. Arm64SminpV,
  450. Arm64SminvV,
  451. Arm64SminV,
  452. Arm64SmlalVe,
  453. Arm64SmlalV,
  454. Arm64SmlslVe,
  455. Arm64SmlslV,
  456. Arm64SmovV,
  457. Arm64SmullVe,
  458. Arm64SmullV,
  459. Arm64SqabsS,
  460. Arm64SqabsV,
  461. Arm64SqaddS,
  462. Arm64SqaddV,
  463. Arm64SqdmlalSe,
  464. Arm64SqdmlalVe,
  465. Arm64SqdmlalS,
  466. Arm64SqdmlalV,
  467. Arm64SqdmlslSe,
  468. Arm64SqdmlslVe,
  469. Arm64SqdmlslS,
  470. Arm64SqdmlslV,
  471. Arm64SqdmulhSe,
  472. Arm64SqdmulhVe,
  473. Arm64SqdmulhS,
  474. Arm64SqdmulhV,
  475. Arm64SqdmullSe,
  476. Arm64SqdmullVe,
  477. Arm64SqdmullS,
  478. Arm64SqdmullV,
  479. Arm64SqnegS,
  480. Arm64SqnegV,
  481. Arm64SqrdmulhSe,
  482. Arm64SqrdmulhVe,
  483. Arm64SqrdmulhS,
  484. Arm64SqrdmulhV,
  485. Arm64SqrshlS,
  486. Arm64SqrshlV,
  487. Arm64SqrshrnS,
  488. Arm64SqrshrnV,
  489. Arm64SqrshrunS,
  490. Arm64SqrshrunV,
  491. Arm64SqshluS,
  492. Arm64SqshluV,
  493. Arm64SqshlSi,
  494. Arm64SqshlVi,
  495. Arm64SqshlS,
  496. Arm64SqshlV,
  497. Arm64SqshrnS,
  498. Arm64SqshrnV,
  499. Arm64SqshrunS,
  500. Arm64SqshrunV,
  501. Arm64SqsubS,
  502. Arm64SqsubV,
  503. Arm64SqxtnS,
  504. Arm64SqxtnV,
  505. Arm64SqxtunS,
  506. Arm64SqxtunV,
  507. Arm64SrhaddV,
  508. Arm64SriS,
  509. Arm64SriV,
  510. Arm64SrshlS,
  511. Arm64SrshlV,
  512. Arm64SrshrS,
  513. Arm64SrshrV,
  514. Arm64SrsraS,
  515. Arm64SrsraV,
  516. Arm64SshllV,
  517. Arm64SshlS,
  518. Arm64SshlV,
  519. Arm64SshrS,
  520. Arm64SshrV,
  521. Arm64SsraS,
  522. Arm64SsraV,
  523. Arm64SsublV,
  524. Arm64SsubwV,
  525. Arm64St1Vms,
  526. Arm64St1Vss,
  527. Arm64St2Vms,
  528. Arm64St2Vss,
  529. Arm64St3Vms,
  530. Arm64St3Vss,
  531. Arm64St4Vms,
  532. Arm64St4Vss,
  533. Arm64SubhnV,
  534. Arm64SubS,
  535. Arm64SubV,
  536. Arm64SuqaddS,
  537. Arm64SuqaddV,
  538. Arm64TblV,
  539. Arm64TbxV,
  540. Arm64Trn1V,
  541. Arm64Trn2V,
  542. Arm64UabalV,
  543. Arm64UabaV,
  544. Arm64UabdlV,
  545. Arm64UabdV,
  546. Arm64UadalpV,
  547. Arm64UaddlpV,
  548. Arm64UaddlvV,
  549. Arm64UaddlV,
  550. Arm64UaddwV,
  551. Arm64UcvtfSFixed,
  552. Arm64UcvtfVFixed,
  553. Arm64UcvtfS,
  554. Arm64UcvtfV,
  555. Arm64UcvtfGpFixed,
  556. Arm64UcvtfGp,
  557. Arm64UhaddV,
  558. Arm64UhsubV,
  559. Arm64UmaxpV,
  560. Arm64UmaxvV,
  561. Arm64UmaxV,
  562. Arm64UminpV,
  563. Arm64UminvV,
  564. Arm64UminV,
  565. Arm64UmlalVe,
  566. Arm64UmlalV,
  567. Arm64UmlslVe,
  568. Arm64UmlslV,
  569. Arm64UmovV,
  570. Arm64UmullVe,
  571. Arm64UmullV,
  572. Arm64UqaddS,
  573. Arm64UqaddV,
  574. Arm64UqrshlS,
  575. Arm64UqrshlV,
  576. Arm64UqrshrnS,
  577. Arm64UqrshrnV,
  578. Arm64UqshlSi,
  579. Arm64UqshlVi,
  580. Arm64UqshlS,
  581. Arm64UqshlV,
  582. Arm64UqshrnS,
  583. Arm64UqshrnV,
  584. Arm64UqsubS,
  585. Arm64UqsubV,
  586. Arm64UqxtnS,
  587. Arm64UqxtnV,
  588. Arm64UrecpeV,
  589. Arm64UrhaddV,
  590. Arm64UrshlS,
  591. Arm64UrshlV,
  592. Arm64UrshrS,
  593. Arm64UrshrV,
  594. Arm64UrsqrteV,
  595. Arm64UrsraS,
  596. Arm64UrsraV,
  597. Arm64UshllV,
  598. Arm64UshlS,
  599. Arm64UshlV,
  600. Arm64UshrS,
  601. Arm64UshrV,
  602. Arm64UsqaddS,
  603. Arm64UsqaddV,
  604. Arm64UsraS,
  605. Arm64UsraV,
  606. Arm64UsublV,
  607. Arm64UsubwV,
  608. Arm64Uzp1V,
  609. Arm64Uzp2V,
  610. Arm64XtnV,
  611. Arm64Zip1V,
  612. Arm64Zip2V,
  613. Arm64VTypeShift = 13,
  614. Arm64VTypeMask = 1 << Arm64VTypeShift,
  615. Arm64V64 = 0 << Arm64VTypeShift,
  616. Arm64V128 = 1 << Arm64VTypeShift,
  617. Arm64VSizeShift = 14,
  618. Arm64VSizeMask = 3 << Arm64VSizeShift,
  619. Arm64VFloat = 0 << Arm64VSizeShift,
  620. Arm64VDouble = 1 << Arm64VSizeShift,
  621. Arm64VByte = 0 << Arm64VSizeShift,
  622. Arm64VHWord = 1 << Arm64VSizeShift,
  623. Arm64VWord = 2 << Arm64VSizeShift,
  624. Arm64VDWord = 3 << Arm64VSizeShift
  625. }
  626. }