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