Intrinsic.cs 13 KB

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