Intrinsic.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  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. X86Vpternlogd,
  176. X86Xorpd,
  177. X86Xorps,
  178. // Arm64 (FP and Advanced SIMD)
  179. Arm64AbsS,
  180. Arm64AbsV,
  181. Arm64AddhnV,
  182. Arm64AddpS,
  183. Arm64AddpV,
  184. Arm64AddvV,
  185. Arm64AddS,
  186. Arm64AddV,
  187. Arm64AesdV,
  188. Arm64AeseV,
  189. Arm64AesimcV,
  190. Arm64AesmcV,
  191. Arm64AndV,
  192. Arm64BicVi,
  193. Arm64BicV,
  194. Arm64BifV,
  195. Arm64BitV,
  196. Arm64BslV,
  197. Arm64ClsV,
  198. Arm64ClzV,
  199. Arm64CmeqS,
  200. Arm64CmeqV,
  201. Arm64CmeqSz,
  202. Arm64CmeqVz,
  203. Arm64CmgeS,
  204. Arm64CmgeV,
  205. Arm64CmgeSz,
  206. Arm64CmgeVz,
  207. Arm64CmgtS,
  208. Arm64CmgtV,
  209. Arm64CmgtSz,
  210. Arm64CmgtVz,
  211. Arm64CmhiS,
  212. Arm64CmhiV,
  213. Arm64CmhsS,
  214. Arm64CmhsV,
  215. Arm64CmleSz,
  216. Arm64CmleVz,
  217. Arm64CmltSz,
  218. Arm64CmltVz,
  219. Arm64CmtstS,
  220. Arm64CmtstV,
  221. Arm64CntV,
  222. Arm64DupSe,
  223. Arm64DupVe,
  224. Arm64DupGp,
  225. Arm64EorV,
  226. Arm64ExtV,
  227. Arm64FabdS,
  228. Arm64FabdV,
  229. Arm64FabsV,
  230. Arm64FabsS,
  231. Arm64FacgeS,
  232. Arm64FacgeV,
  233. Arm64FacgtS,
  234. Arm64FacgtV,
  235. Arm64FaddpS,
  236. Arm64FaddpV,
  237. Arm64FaddV,
  238. Arm64FaddS,
  239. Arm64FccmpeS,
  240. Arm64FccmpS,
  241. Arm64FcmeqS,
  242. Arm64FcmeqV,
  243. Arm64FcmeqSz,
  244. Arm64FcmeqVz,
  245. Arm64FcmgeS,
  246. Arm64FcmgeV,
  247. Arm64FcmgeSz,
  248. Arm64FcmgeVz,
  249. Arm64FcmgtS,
  250. Arm64FcmgtV,
  251. Arm64FcmgtSz,
  252. Arm64FcmgtVz,
  253. Arm64FcmleSz,
  254. Arm64FcmleVz,
  255. Arm64FcmltSz,
  256. Arm64FcmltVz,
  257. Arm64FcmpeS,
  258. Arm64FcmpS,
  259. Arm64FcselS,
  260. Arm64FcvtasS,
  261. Arm64FcvtasV,
  262. Arm64FcvtasGp,
  263. Arm64FcvtauS,
  264. Arm64FcvtauV,
  265. Arm64FcvtauGp,
  266. Arm64FcvtlV,
  267. Arm64FcvtmsS,
  268. Arm64FcvtmsV,
  269. Arm64FcvtmsGp,
  270. Arm64FcvtmuS,
  271. Arm64FcvtmuV,
  272. Arm64FcvtmuGp,
  273. Arm64FcvtnsS,
  274. Arm64FcvtnsV,
  275. Arm64FcvtnsGp,
  276. Arm64FcvtnuS,
  277. Arm64FcvtnuV,
  278. Arm64FcvtnuGp,
  279. Arm64FcvtnV,
  280. Arm64FcvtpsS,
  281. Arm64FcvtpsV,
  282. Arm64FcvtpsGp,
  283. Arm64FcvtpuS,
  284. Arm64FcvtpuV,
  285. Arm64FcvtpuGp,
  286. Arm64FcvtxnS,
  287. Arm64FcvtxnV,
  288. Arm64FcvtzsSFixed,
  289. Arm64FcvtzsVFixed,
  290. Arm64FcvtzsS,
  291. Arm64FcvtzsV,
  292. Arm64FcvtzsGpFixed,
  293. Arm64FcvtzsGp,
  294. Arm64FcvtzuSFixed,
  295. Arm64FcvtzuVFixed,
  296. Arm64FcvtzuS,
  297. Arm64FcvtzuV,
  298. Arm64FcvtzuGpFixed,
  299. Arm64FcvtzuGp,
  300. Arm64FcvtS,
  301. Arm64FdivV,
  302. Arm64FdivS,
  303. Arm64FmaddS,
  304. Arm64FmaxnmpS,
  305. Arm64FmaxnmpV,
  306. Arm64FmaxnmvV,
  307. Arm64FmaxnmV,
  308. Arm64FmaxnmS,
  309. Arm64FmaxpS,
  310. Arm64FmaxpV,
  311. Arm64FmaxvV,
  312. Arm64FmaxV,
  313. Arm64FmaxS,
  314. Arm64FminnmpS,
  315. Arm64FminnmpV,
  316. Arm64FminnmvV,
  317. Arm64FminnmV,
  318. Arm64FminnmS,
  319. Arm64FminpS,
  320. Arm64FminpV,
  321. Arm64FminvV,
  322. Arm64FminV,
  323. Arm64FminS,
  324. Arm64FmlaSe,
  325. Arm64FmlaVe,
  326. Arm64FmlaV,
  327. Arm64FmlsSe,
  328. Arm64FmlsVe,
  329. Arm64FmlsV,
  330. Arm64FmovVi,
  331. Arm64FmovS,
  332. Arm64FmovGp,
  333. Arm64FmovSi,
  334. Arm64FmsubS,
  335. Arm64FmulxSe,
  336. Arm64FmulxVe,
  337. Arm64FmulxS,
  338. Arm64FmulxV,
  339. Arm64FmulSe,
  340. Arm64FmulVe,
  341. Arm64FmulV,
  342. Arm64FmulS,
  343. Arm64FnegV,
  344. Arm64FnegS,
  345. Arm64FnmaddS,
  346. Arm64FnmsubS,
  347. Arm64FnmulS,
  348. Arm64FrecpeS,
  349. Arm64FrecpeV,
  350. Arm64FrecpsS,
  351. Arm64FrecpsV,
  352. Arm64FrecpxS,
  353. Arm64FrintaV,
  354. Arm64FrintaS,
  355. Arm64FrintiV,
  356. Arm64FrintiS,
  357. Arm64FrintmV,
  358. Arm64FrintmS,
  359. Arm64FrintnV,
  360. Arm64FrintnS,
  361. Arm64FrintpV,
  362. Arm64FrintpS,
  363. Arm64FrintxV,
  364. Arm64FrintxS,
  365. Arm64FrintzV,
  366. Arm64FrintzS,
  367. Arm64FrsqrteS,
  368. Arm64FrsqrteV,
  369. Arm64FrsqrtsS,
  370. Arm64FrsqrtsV,
  371. Arm64FsqrtV,
  372. Arm64FsqrtS,
  373. Arm64FsubV,
  374. Arm64FsubS,
  375. Arm64InsVe,
  376. Arm64InsGp,
  377. Arm64Ld1rV,
  378. Arm64Ld1Vms,
  379. Arm64Ld1Vss,
  380. Arm64Ld2rV,
  381. Arm64Ld2Vms,
  382. Arm64Ld2Vss,
  383. Arm64Ld3rV,
  384. Arm64Ld3Vms,
  385. Arm64Ld3Vss,
  386. Arm64Ld4rV,
  387. Arm64Ld4Vms,
  388. Arm64Ld4Vss,
  389. Arm64MlaVe,
  390. Arm64MlaV,
  391. Arm64MlsVe,
  392. Arm64MlsV,
  393. Arm64MoviV,
  394. Arm64MrsFpsr,
  395. Arm64MsrFpsr,
  396. Arm64MulVe,
  397. Arm64MulV,
  398. Arm64MvniV,
  399. Arm64NegS,
  400. Arm64NegV,
  401. Arm64NotV,
  402. Arm64OrnV,
  403. Arm64OrrVi,
  404. Arm64OrrV,
  405. Arm64PmullV,
  406. Arm64PmulV,
  407. Arm64RaddhnV,
  408. Arm64RbitV,
  409. Arm64Rev16V,
  410. Arm64Rev32V,
  411. Arm64Rev64V,
  412. Arm64RshrnV,
  413. Arm64RsubhnV,
  414. Arm64SabalV,
  415. Arm64SabaV,
  416. Arm64SabdlV,
  417. Arm64SabdV,
  418. Arm64SadalpV,
  419. Arm64SaddlpV,
  420. Arm64SaddlvV,
  421. Arm64SaddlV,
  422. Arm64SaddwV,
  423. Arm64ScvtfSFixed,
  424. Arm64ScvtfVFixed,
  425. Arm64ScvtfS,
  426. Arm64ScvtfV,
  427. Arm64ScvtfGpFixed,
  428. Arm64ScvtfGp,
  429. Arm64Sha1cV,
  430. Arm64Sha1hV,
  431. Arm64Sha1mV,
  432. Arm64Sha1pV,
  433. Arm64Sha1su0V,
  434. Arm64Sha1su1V,
  435. Arm64Sha256h2V,
  436. Arm64Sha256hV,
  437. Arm64Sha256su0V,
  438. Arm64Sha256su1V,
  439. Arm64ShaddV,
  440. Arm64ShllV,
  441. Arm64ShlS,
  442. Arm64ShlV,
  443. Arm64ShrnV,
  444. Arm64ShsubV,
  445. Arm64SliS,
  446. Arm64SliV,
  447. Arm64SmaxpV,
  448. Arm64SmaxvV,
  449. Arm64SmaxV,
  450. Arm64SminpV,
  451. Arm64SminvV,
  452. Arm64SminV,
  453. Arm64SmlalVe,
  454. Arm64SmlalV,
  455. Arm64SmlslVe,
  456. Arm64SmlslV,
  457. Arm64SmovV,
  458. Arm64SmullVe,
  459. Arm64SmullV,
  460. Arm64SqabsS,
  461. Arm64SqabsV,
  462. Arm64SqaddS,
  463. Arm64SqaddV,
  464. Arm64SqdmlalSe,
  465. Arm64SqdmlalVe,
  466. Arm64SqdmlalS,
  467. Arm64SqdmlalV,
  468. Arm64SqdmlslSe,
  469. Arm64SqdmlslVe,
  470. Arm64SqdmlslS,
  471. Arm64SqdmlslV,
  472. Arm64SqdmulhSe,
  473. Arm64SqdmulhVe,
  474. Arm64SqdmulhS,
  475. Arm64SqdmulhV,
  476. Arm64SqdmullSe,
  477. Arm64SqdmullVe,
  478. Arm64SqdmullS,
  479. Arm64SqdmullV,
  480. Arm64SqnegS,
  481. Arm64SqnegV,
  482. Arm64SqrdmulhSe,
  483. Arm64SqrdmulhVe,
  484. Arm64SqrdmulhS,
  485. Arm64SqrdmulhV,
  486. Arm64SqrshlS,
  487. Arm64SqrshlV,
  488. Arm64SqrshrnS,
  489. Arm64SqrshrnV,
  490. Arm64SqrshrunS,
  491. Arm64SqrshrunV,
  492. Arm64SqshluS,
  493. Arm64SqshluV,
  494. Arm64SqshlSi,
  495. Arm64SqshlVi,
  496. Arm64SqshlS,
  497. Arm64SqshlV,
  498. Arm64SqshrnS,
  499. Arm64SqshrnV,
  500. Arm64SqshrunS,
  501. Arm64SqshrunV,
  502. Arm64SqsubS,
  503. Arm64SqsubV,
  504. Arm64SqxtnS,
  505. Arm64SqxtnV,
  506. Arm64SqxtunS,
  507. Arm64SqxtunV,
  508. Arm64SrhaddV,
  509. Arm64SriS,
  510. Arm64SriV,
  511. Arm64SrshlS,
  512. Arm64SrshlV,
  513. Arm64SrshrS,
  514. Arm64SrshrV,
  515. Arm64SrsraS,
  516. Arm64SrsraV,
  517. Arm64SshllV,
  518. Arm64SshlS,
  519. Arm64SshlV,
  520. Arm64SshrS,
  521. Arm64SshrV,
  522. Arm64SsraS,
  523. Arm64SsraV,
  524. Arm64SsublV,
  525. Arm64SsubwV,
  526. Arm64St1Vms,
  527. Arm64St1Vss,
  528. Arm64St2Vms,
  529. Arm64St2Vss,
  530. Arm64St3Vms,
  531. Arm64St3Vss,
  532. Arm64St4Vms,
  533. Arm64St4Vss,
  534. Arm64SubhnV,
  535. Arm64SubS,
  536. Arm64SubV,
  537. Arm64SuqaddS,
  538. Arm64SuqaddV,
  539. Arm64TblV,
  540. Arm64TbxV,
  541. Arm64Trn1V,
  542. Arm64Trn2V,
  543. Arm64UabalV,
  544. Arm64UabaV,
  545. Arm64UabdlV,
  546. Arm64UabdV,
  547. Arm64UadalpV,
  548. Arm64UaddlpV,
  549. Arm64UaddlvV,
  550. Arm64UaddlV,
  551. Arm64UaddwV,
  552. Arm64UcvtfSFixed,
  553. Arm64UcvtfVFixed,
  554. Arm64UcvtfS,
  555. Arm64UcvtfV,
  556. Arm64UcvtfGpFixed,
  557. Arm64UcvtfGp,
  558. Arm64UhaddV,
  559. Arm64UhsubV,
  560. Arm64UmaxpV,
  561. Arm64UmaxvV,
  562. Arm64UmaxV,
  563. Arm64UminpV,
  564. Arm64UminvV,
  565. Arm64UminV,
  566. Arm64UmlalVe,
  567. Arm64UmlalV,
  568. Arm64UmlslVe,
  569. Arm64UmlslV,
  570. Arm64UmovV,
  571. Arm64UmullVe,
  572. Arm64UmullV,
  573. Arm64UqaddS,
  574. Arm64UqaddV,
  575. Arm64UqrshlS,
  576. Arm64UqrshlV,
  577. Arm64UqrshrnS,
  578. Arm64UqrshrnV,
  579. Arm64UqshlSi,
  580. Arm64UqshlVi,
  581. Arm64UqshlS,
  582. Arm64UqshlV,
  583. Arm64UqshrnS,
  584. Arm64UqshrnV,
  585. Arm64UqsubS,
  586. Arm64UqsubV,
  587. Arm64UqxtnS,
  588. Arm64UqxtnV,
  589. Arm64UrecpeV,
  590. Arm64UrhaddV,
  591. Arm64UrshlS,
  592. Arm64UrshlV,
  593. Arm64UrshrS,
  594. Arm64UrshrV,
  595. Arm64UrsqrteV,
  596. Arm64UrsraS,
  597. Arm64UrsraV,
  598. Arm64UshllV,
  599. Arm64UshlS,
  600. Arm64UshlV,
  601. Arm64UshrS,
  602. Arm64UshrV,
  603. Arm64UsqaddS,
  604. Arm64UsqaddV,
  605. Arm64UsraS,
  606. Arm64UsraV,
  607. Arm64UsublV,
  608. Arm64UsubwV,
  609. Arm64Uzp1V,
  610. Arm64Uzp2V,
  611. Arm64XtnV,
  612. Arm64Zip1V,
  613. Arm64Zip2V,
  614. Arm64VTypeShift = 13,
  615. Arm64VTypeMask = 1 << Arm64VTypeShift,
  616. Arm64V64 = 0 << Arm64VTypeShift,
  617. Arm64V128 = 1 << Arm64VTypeShift,
  618. Arm64VSizeShift = 14,
  619. Arm64VSizeMask = 3 << Arm64VSizeShift,
  620. Arm64VFloat = 0 << Arm64VSizeShift,
  621. Arm64VDouble = 1 << Arm64VSizeShift,
  622. Arm64VByte = 0 << Arm64VSizeShift,
  623. Arm64VHWord = 1 << Arm64VSizeShift,
  624. Arm64VWord = 2 << Arm64VSizeShift,
  625. Arm64VDWord = 3 << Arm64VSizeShift
  626. }
  627. }