Yeppp!  0.9
 All Data Structures Functions Variables Enumerations Enumerator Groups Pages
yepTypes.h
1 /*
2  * Copyright (c) 2010-2012 Marat Dukhan
3  * Copyright (c) 2012 Georgia Institute of Technology
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions are met:
8  *
9  * 1. Redistributions of source code must retain the above copyright notice, this
10  * list of conditions and the following disclaimer.
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
19  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * The views and conclusions contained in the software and documentation are those
27  * of the authors and should not be interpreted as representing official policies,
28  * either expressed or implied, of the Yeppp! Project.
29  */
30 
31 #pragma once
32 
68 #include <yepPredefines.h>
69 #include <stddef.h>
70 #ifndef __cplusplus
71  #if defined(YEP_MICROSOFT_COMPILER)
72  /* OMG! I can't believe it still doesn't have stdbool.h in 2012! */
73  typedef unsigned char bool;
74  #define false 0
75  #define true 1
76  #else
77  #include <stdbool.h>
78  #endif
79 #endif
80 
81 typedef unsigned char Yep8u;
82 typedef unsigned short Yep16u;
83 typedef unsigned int Yep32u;
84 typedef unsigned long long Yep64u;
85 
86 typedef signed char Yep8s;
87 typedef signed short Yep16s;
88 typedef signed int Yep32s;
89 typedef signed long long Yep64s;
90 
91 typedef float Yep32f;
92 typedef double Yep64f;
93 
94 typedef size_t YepSize;
95 
96 typedef bool YepBoolean;
97 
98 struct Yep16f {
99  signed sign : 1;
100  unsigned exponent : 5;
101  unsigned mantissa : 10;
102 };
103 
104 struct Yep16fc {
105  struct Yep16f re;
106  struct Yep16f im;
107 };
108 
109 struct Yep32fc {
110  Yep32f re;
111  Yep32f im;
112 };
113 
114 struct Yep64fc {
115  Yep64f re;
116  Yep64f im;
117 };
118 
124  Yep32u major;
126  Yep32u minor;
128  Yep32u patchLevel;
130  Yep32u build;
132  const char* releaseName;
133 };
134 
137 enum YepStatus {
160 };
161 
182 };
183 
190 
191  /* x86/x86-64 CPUs */
192 
231 
232  /* ARM CPUs */
233 
247 
248  /* MIPS CPUs */
249 
256 
257  /* PowerPC CPUs */
258 
266 
267  /* SPARC CPUs */
268 
278 };
279 
290 
319 
324 
347 
352 
369 
374 
379 
382 
387 
394 
399 };
400 
401 #ifdef __cplusplus
402  const Yep64u YepIsaFeaturesDefault = 0x0000000000000000ull;
403  const Yep64u YepSimdFeaturesDefault = 0x0000000000000000ull;
404  const Yep64u YepSystemFeaturesDefault = 0x0000000000000000ull;
405 
406  const Yep64u YepSystemFeatureCycleCounter = 0x0000000000000001ull;
407  const Yep64u YepSystemFeatureCycleCounter64Bit = 0x0000000000000002ull;
408  const Yep64u YepSystemFeatureAddressSpace64Bit = 0x0000000000000004ull;
409  const Yep64u YepSystemFeatureGPRegisters64Bit = 0x0000000000000008ull;
410  const Yep64u YepSystemFeatureMisalignedAccess = 0x0000000000000010ull;
411  const Yep64u YepSystemFeatureSingleThreaded = 0x0000000000000020ull;
412 
413  /* x86/x86-64 ISA Extensions */
414  const Yep64u YepX86IsaFeatureFPU = 0x0000000000000001ull;
415  const Yep64u YepX86IsaFeatureCpuid = 0x0000000000000002ull;
416  const Yep64u YepX86IsaFeatureRdtsc = 0x0000000000000004ull;
417  const Yep64u YepX86IsaFeatureCMOV = 0x0000000000000008ull;
418  const Yep64u YepX86IsaFeatureSYSENTER = 0x0000000000000010ull;
419  const Yep64u YepX86IsaFeatureSYSCALL = 0x0000000000000020ull;
420  const Yep64u YepX86IsaFeatureMSR = 0x0000000000000040ull;
421  const Yep64u YepX86IsaFeatureClflush = 0x0000000000000080ull;
422  const Yep64u YepX86IsaFeatureMONITOR = 0x0000000000000100ull;
423  const Yep64u YepX86IsaFeatureFXSAVE = 0x0000000000000200ull;
424  const Yep64u YepX86IsaFeatureXSAVE = 0x0000000000000400ull;
425  const Yep64u YepX86IsaFeatureCmpxchg8b = 0x0000000000000800ull;
426  const Yep64u YepX86IsaFeatureCmpxchg16b = 0x0000000000001000ull;
427  const Yep64u YepX86IsaFeatureX64 = 0x0000000000002000ull;
428  const Yep64u YepX86IsaFeatureLahfSahf64 = 0x0000000000004000ull;
429  const Yep64u YepX86IsaFeatureFsGsBase = 0x0000000000008000ull;
430  const Yep64u YepX86IsaFeatureMovbe = 0x0000000000010000ull;
431  const Yep64u YepX86IsaFeaturePopcnt = 0x0000000000020000ull;
432  const Yep64u YepX86IsaFeatureLzcnt = 0x0000000000040000ull;
433  const Yep64u YepX86IsaFeatureBMI = 0x0000000000080000ull;
434  const Yep64u YepX86IsaFeatureBMI2 = 0x0000000000100000ull;
435  const Yep64u YepX86IsaFeatureTBM = 0x0000000000200000ull;
436  const Yep64u YepX86IsaFeatureRdrand = 0x0000000000400000ull;
437  const Yep64u YepX86IsaFeatureACE = 0x0000000000800000ull;
438  const Yep64u YepX86IsaFeatureACE2 = 0x0000000001000000ull;
439  const Yep64u YepX86IsaFeatureRNG = 0x0000000002000000ull;
440  const Yep64u YepX86IsaFeaturePHE = 0x0000000004000000ull;
441  const Yep64u YepX86IsaFeaturePMM = 0x0000000008000000ull;
442  const Yep64u YepX86IsaFeatureAES = 0x0000000010000000ull;
443  const Yep64u YepX86IsaFeaturePclmulqdq = 0x0000000020000000ull;
444  const Yep64u YepX86IsaFeatureRdtscp = 0x0000000040000000ull;
445  const Yep64u YepX86IsaFeatureLWP = 0x0000000080000000ull;
446  const Yep64u YepX86IsaFeatureHLE = 0x0000000100000000ull;
447  const Yep64u YepX86IsaFeatureRTM = 0x0000000200000000ull;
448  const Yep64u YepX86IsaFeatureXtest = 0x0000000400000000ull;
449  const Yep64u YepX86IsaFeatureRdseed = 0x0000000800000000ull;
450  const Yep64u YepX86IsaFeatureADX = 0x0000001000000000ull;
451 
452  const Yep64u YepX86SimdFeatureMMX = 0x0000000000000001ull;
453  const Yep64u YepX86SimdFeatureMMXPlus = 0x0000000000000002ull;
454  const Yep64u YepX86SimdFeatureEMMX = 0x0000000000000004ull;
455  const Yep64u YepX86SimdFeature3dnow = 0x0000000000000008ull;
456  const Yep64u YepX86SimdFeature3dnowPlus = 0x0000000000000010ull;
457  const Yep64u YepX86SimdFeature3dnowPrefetch = 0x0000000000000020ull;
458  const Yep64u YepX86SimdFeature3dnowGeode = 0x0000000000000040ull;
459  const Yep64u YepX86SimdFeatureSSE = 0x0000000000000080ull;
460  const Yep64u YepX86SimdFeatureSSE2 = 0x0000000000000100ull;
461  const Yep64u YepX86SimdFeatureSSE3 = 0x0000000000000200ull;
462  const Yep64u YepX86SimdFeatureSSSE3 = 0x0000000000000400ull;
463  const Yep64u YepX86SimdFeatureSSE4_1 = 0x0000000000000800ull;
464  const Yep64u YepX86SimdFeatureSSE4_2 = 0x0000000000001000ull;
465  const Yep64u YepX86SimdFeatureSSE4A = 0x0000000000002000ull;
466  const Yep64u YepX86SimdFeatureAVX = 0x0000000000004000ull;
467  const Yep64u YepX86SimdFeatureAVX2 = 0x0000000000008000ull;
468  const Yep64u YepX86SimdFeatureXOP = 0x0000000000010000ull;
469  const Yep64u YepX86SimdFeatureF16C = 0x0000000000020000ull;
470  const Yep64u YepX86SimdFeatureFMA3 = 0x0000000000040000ull;
471  const Yep64u YepX86SimdFeatureFMA4 = 0x0000000000080000ull;
472 
473  const Yep64u YepX86SystemFeatureFPU = 0x0000000100000000ull;
474  const Yep64u YepX86SystemFeatureSSE = 0x0000000200000000ull;
475  const Yep64u YepX86SystemFeatureAVX = 0x0000000400000000ull;
476  const Yep64u YepX86SystemFeatureMisalignedSSE = 0x0000000800000000ull;
477  const Yep64u YepX86SystemFeatureACE = 0x0000001000000000ull;
478  const Yep64u YepX86SystemFeatureACE2 = 0x0000002000000000ull;
479  const Yep64u YepX86SystemFeatureRNG = 0x0000004000000000ull;
480  const Yep64u YepX86SystemFeaturePHE = 0x0000008000000000ull;
481  const Yep64u YepX86SystemFeaturePMM = 0x0000010000000000ull;
482 
483  /* IA64 ISA Extensions */
484  const Yep64u YepIA64IsaFeatureBrl = 0x0000000000000001ull; // Long branch instruction
485  const Yep64u YepIA64IsaFeatureAtomic128 = 0x0000000000000002ull; // Atomic 128-bit (16-byte) loads, stores, and CAS
486  const Yep64u YepIA64IsaFeatureClz = 0x0000000000000004ull; // Count leading zeros
487  const Yep64u YepIA64IsaFeatureMpy4 = 0x0000000000000008ull; // Truncated 32-bit multiplication (mpy4 and mpyshl4) instructions.
488 
489  /* ARM ISA Extensions */
490  const Yep64u YepARMIsaFeatureV4 = 0x0000000000000001ull;
491  const Yep64u YepARMIsaFeatureV5 = 0x0000000000000002ull;
492  const Yep64u YepARMIsaFeatureV5E = 0x0000000000000004ull;
493  const Yep64u YepARMIsaFeatureV6 = 0x0000000000000008ull;
494  const Yep64u YepARMIsaFeatureV6K = 0x0000000000000010ull;
495  const Yep64u YepARMIsaFeatureV7 = 0x0000000000000020ull;
496  const Yep64u YepARMIsaFeatureV7MP = 0x0000000000000040ull;
497  const Yep64u YepARMIsaFeatureThumb = 0x0000000000000080ull;
498  const Yep64u YepARMIsaFeatureThumb2 = 0x0000000000000100ull;
499  const Yep64u YepARMIsaFeatureThumbEE = 0x0000000000000200ull;
500  const Yep64u YepARMIsaFeatureJazelle = 0x0000000000000400ull;
501  const Yep64u YepARMIsaFeatureFPA = 0x0000000000000800ull;
502  const Yep64u YepARMIsaFeatureVFP = 0x0000000000001000ull;
503  const Yep64u YepARMIsaFeatureVFP2 = 0x0000000000002000ull;
504  const Yep64u YepARMIsaFeatureVFP3 = 0x0000000000004000ull;
505  const Yep64u YepARMIsaFeatureVFPd32 = 0x0000000000008000ull;
506  const Yep64u YepARMIsaFeatureVFP3HP = 0x0000000000010000ull;
507  const Yep64u YepARMIsaFeatureVFP4 = 0x0000000000020000ull;
508  const Yep64u YepARMIsaFeatureDiv = 0x0000000000040000ull;
509  const Yep64u YepARMIsaFeatureArmada = 0x0000000000080000ull;
510 
511  const Yep64u YepARMSimdFeatureXScale = 0x0000000000000001ull;
512  const Yep64u YepARMSimdFeatureWMMX = 0x0000000000000002ull;
513  const Yep64u YepARMSimdFeatureWMMX2 = 0x0000000000000004ull;
514  const Yep64u YepARMSimdFeatureNEON = 0x0000000000000008ull;
515  const Yep64u YepARMSimdFeatureNEONHP = 0x0000000000000010ull;
516  const Yep64u YepARMSimdFeatureNEON2 = 0x0000000000000020ull;
517 
518  const Yep64u YepARMSystemFeatureVFPVectorMode = 0x0000000100000000ull;
519 
520  /* MIPS ISA Extensions */
521  const Yep64u YepMIPSIsaFeatureR2 = 0x0000000000000001ull;
522  const Yep64u YepMIPSIsaFeatureR3 = 0x0000000000000002ull;
523  const Yep64u YepMIPSIsaFeatureFPU = 0x0000000000000004ull;
524  const Yep64u YepMIPSIsaFeatureMT = 0x0000000000000008ull;
525  const Yep64u YepMIPSIsaFeatureMIPS16 = 0x0000000000000010ull;
526  const Yep64u YepMIPSIsaFeatureSmartmips = 0x0000000000000020ull;
527 
528  const Yep64u YepMIPSSimdFeatureMDMX = 0x0000000000000001ull;
529  const Yep64u YepMIPSSimdFeatureMIPS3D = 0x0000000000000002ull;
530  const Yep64u YepMIPSSimdFeaturePairedSingle = 0x0000000000000004ull;
531  const Yep64u YepMIPSSimdFeatureDSP = 0x0000000000000008ull;
532  const Yep64u YepMIPSSimdFeatureDSP2 = 0x0000000000000010ull;
533  const Yep64u YepMIPSSimdFeatureGodsonMMX = 0x0000000000000020ull;
534  const Yep64u YepMIPSSimdFeatureIMX = 0x0000000000000040ull;
535 
536 #else
537  #define YepIsaFeaturesDefault 0x0000000000000000ull
538  #define YepSimdFeaturesDefault 0x0000000000000000ull
539  #define YepSystemFeaturesDefault 0x0000000000000000ull
540 
546  #define YepSystemFeatureCycleCounter 0x0000000000000001ull
547 
549  #define YepSystemFeatureCycleCounter64Bit 0x0000000000000002ull
550 
552  #define YepSystemFeatureAddressSpace64Bit 0x0000000000000004ull
553 
555  #define YepSystemFeatureGPRegisters64Bit 0x0000000000000008ull
556 
558  #define YepSystemFeatureMisalignedAccess 0x0000000000000010ull
559 
561  #define YepSystemFeatureSingleThreaded 0x0000000000000020ull
562 
570  #define YepX86IsaFeatureFPU 0x0000000000000001ull
571 
573  #define YepX86IsaFeatureCpuid 0x0000000000000002ull
574 
576  #define YepX86IsaFeatureRdtsc 0x0000000000000004ull
577 
579  #define YepX86IsaFeatureCMOV 0x0000000000000008ull
580 
582  #define YepX86IsaFeatureSYSENTER 0x0000000000000010ull
583 
585  #define YepX86IsaFeatureSYSCALL 0x0000000000000020ull
586 
588  #define YepX86IsaFeatureMSR 0x0000000000000040ull
589 
591  #define YepX86IsaFeatureClflush 0x0000000000000080ull
592 
594  #define YepX86IsaFeatureMONITOR 0x0000000000000100ull
595 
597  #define YepX86IsaFeatureFXSAVE 0x0000000000000200ull
598 
600  #define YepX86IsaFeatureXSAVE 0x0000000000000400ull
601 
603  #define YepX86IsaFeatureCmpxchg8b 0x0000000000000800ull
604 
606  #define YepX86IsaFeatureCmpxchg16b 0x0000000000001000ull
607 
609  #define YepX86IsaFeatureX64 0x0000000000002000ull
610 
612  #define YepX86IsaFeatureLahfSahf64 0x0000000000004000ull
613 
615  #define YepX86IsaFeatureFsGsBase 0x0000000000008000ull
616 
618  #define YepX86IsaFeatureMovbe 0x0000000000010000ull
619 
621  #define YepX86IsaFeaturePopcnt 0x0000000000020000ull
622 
624  #define YepX86IsaFeatureLzcnt 0x0000000000040000ull
625 
627  #define YepX86IsaFeatureBMI 0x0000000000080000ull
628 
630  #define YepX86IsaFeatureBMI2 0x0000000000100000ull
631 
633  #define YepX86IsaFeatureTBM 0x0000000000200000ull
634 
636  #define YepX86IsaFeatureRdrand 0x0000000000400000ull
637 
639  #define YepX86IsaFeatureACE 0x0000000000800000ull
640 
642  #define YepX86IsaFeatureACE2 0x0000000001000000ull
643 
645  #define YepX86IsaFeatureRNG 0x0000000002000000ull
646 
648  #define YepX86IsaFeaturePHE 0x0000000004000000ull
649 
651  #define YepX86IsaFeaturePMM 0x0000000008000000ull
652 
654  #define YepX86IsaFeatureAES 0x0000000010000000ull
655 
657  #define YepX86IsaFeaturePclmulqdq 0x0000000020000000ull
658 
660  #define YepX86IsaFeatureRdtscp 0x0000000040000000ull
661 
663  #define YepX86IsaFeatureLWP 0x0000000080000000ull
664 
666  #define YepX86IsaFeatureHLE 0x0000000100000000ull
667 
669  #define YepX86IsaFeatureRTM 0x0000000200000000ull
670 
672  #define YepX86IsaFeatureXtest 0x0000000400000000ull
673 
675  #define YepX86IsaFeatureRdseed 0x0000000800000000ull
676 
678  #define YepX86IsaFeatureADX 0x0000001000000000ull
679 
686  #define YepX86SimdFeatureMMX 0x0000000000000001ull
687 
689  #define YepX86SimdFeatureMMXPlus 0x0000000000000002ull
690 
692  #define YepX86SimdFeatureEMMX 0x0000000000000004ull
693 
695  #define YepX86SimdFeature3dnow 0x0000000000000008ull
696 
698  #define YepX86SimdFeature3dnowPlus 0x0000000000000010ull
699 
701  #define YepX86SimdFeature3dnowPrefetch 0x0000000000000020ull
702 
704  #define YepX86SimdFeature3dnowGeode 0x0000000000000040ull
705 
707  #define YepX86SimdFeatureSSE 0x0000000000000080ull
708 
710  #define YepX86SimdFeatureSSE2 0x0000000000000100ull
711 
713  #define YepX86SimdFeatureSSE3 0x0000000000000200ull
714 
716  #define YepX86SimdFeatureSSSE3 0x0000000000000400ull
717 
719  #define YepX86SimdFeatureSSE4_1 0x0000000000000800ull
720 
722  #define YepX86SimdFeatureSSE4_2 0x0000000000001000ull
723 
725  #define YepX86SimdFeatureSSE4A 0x0000000000002000ull
726 
728  #define YepX86SimdFeatureAVX 0x0000000000004000ull
729 
731  #define YepX86SimdFeatureAVX2 0x0000000000008000ull
732 
734  #define YepX86SimdFeatureXOP 0x0000000000010000ull
735 
737  #define YepX86SimdFeatureF16C 0x0000000000020000ull
738 
740  #define YepX86SimdFeatureFMA3 0x0000000000040000ull
741 
743  #define YepX86SimdFeatureFMA4 0x0000000000080000ull
744 
751  #define YepX86SystemFeatureFPU 0x0000000100000000ull
752 
754  #define YepX86SystemFeatureSSE 0x0000000200000000ull
755 
757  #define YepX86SystemFeatureAVX 0x0000000400000000ull
758 
760  #define YepX86SystemFeatureMisalignedSSE 0x0000000800000000ull
761 
763  #define YepX86SystemFeatureACE 0x0000001000000000ull
764 
766  #define YepX86SystemFeatureACE2 0x0000002000000000ull
767 
769  #define YepX86SystemFeatureRNG 0x0000004000000000ull
770 
772  #define YepX86SystemFeaturePHE 0x0000008000000000ull
773 
775  #define YepX86SystemFeaturePMM 0x0000010000000000ull
776 
783  #define YepIA64IsaFeatureBrl 0x0000000000000001ull
784 
786  #define YepIA64IsaFeatureAtomic128 0x0000000000000002ull
787 
789  #define YepIA64IsaFeatureClz 0x0000000000000004ull
790 
792  #define YepIA64IsaFeatureMpy4 0x0000000000000008ull
793 
800  #define YepARMIsaFeatureV4 0x0000000000000001ull
801 
803  #define YepARMIsaFeatureV5 0x0000000000000002ull
804 
806  #define YepARMIsaFeatureV5E 0x0000000000000004ull
807 
809  #define YepARMIsaFeatureV6 0x0000000000000008ull
810 
812  #define YepARMIsaFeatureV6K 0x0000000000000010ull
813 
815  #define YepARMIsaFeatureV7 0x0000000000000020ull
816 
818  #define YepARMIsaFeatureV7MP 0x0000000000000040ull
819 
821  #define YepARMIsaFeatureThumb 0x0000000000000080ull
822 
824  #define YepARMIsaFeatureThumb2 0x0000000000000100ull
825 
827  #define YepARMIsaFeatureThumbEE 0x0000000000000200ull
828 
830  #define YepARMIsaFeatureJazelle 0x0000000000000400ull
831 
833  #define YepARMIsaFeatureFPA 0x0000000000000800ull
834 
836  #define YepARMIsaFeatureVFP 0x0000000000001000ull
837 
839  #define YepARMIsaFeatureVFP2 0x0000000000002000ull
840 
842  #define YepARMIsaFeatureVFP3 0x0000000000004000ull
843 
845  #define YepARMIsaFeatureVFPd32 0x0000000000008000ull
846 
848  #define YepARMIsaFeatureVFP3HP 0x0000000000010000ull
849 
851  #define YepARMIsaFeatureVFP4 0x0000000000020000ull
852 
854  #define YepARMIsaFeatureDiv 0x0000000000040000ull
855 
857  #define YepARMIsaFeatureArmada 0x0000000000080000ull
858 
865  #define YepARMSimdFeatureXScale 0x0000000000000001ull
866 
868  #define YepARMSimdFeatureWMMX 0x0000000000000002ull
869 
871  #define YepARMSimdFeatureWMMX2 0x0000000000000004ull
872 
874  #define YepARMSimdFeatureNEON 0x0000000000000008ull
875 
877  #define YepARMSimdFeatureNEONHP 0x0000000000000010ull
878 
880  #define YepARMSimdFeatureNEON2 0x0000000000000020ull
881 
889  #define YepARMSystemFeatureVFPVectorMode 0x0000000100000000ull
890 
900  #define YepMIPSIsaFeatureR2 0x0000000000000001ull
901 
904  #define YepMIPSIsaFeatureR3 0x0000000000000002ull
905 
908  #define YepMIPSIsaFeatureFPU 0x0000000000000004ull
909 
911  #define YepMIPSIsaFeatureMT 0x0000000000000008ull
912 
914  #define YepMIPSIsaFeatureMIPS16 0x0000000000000010ull
915 
917  #define YepMIPSIsaFeatureSmartmips 0x0000000000000020ull
918 
925  #define YepMIPSSimdFeatureMDMX 0x0000000000000001ull
926 
928  #define YepMIPSSimdFeatureMIPS3D 0x0000000000000002ull
929 
932  #define YepMIPSSimdFeaturePairedSingle 0x0000000000000004ull
933 
935  #define YepMIPSSimdFeatureDSP 0x0000000000000008ull
936 
939  #define YepMIPSSimdFeatureDSP2 0x0000000000000010ull
940 
943  #define YepMIPSSimdFeatureGodsonMMX 0x0000000000000020ull
944 
946  #define YepMIPSSimdFeatureIMX 0x0000000000000040ull
947 
949 #endif
950 
951 #define YEP_ENUMERATION_ISA_FEATURE_FOR_ARCHITECTURE(architecture) (256 + (architecture))
952 #define YEP_ENUMERATION_SIMD_FEATURE_FOR_ARCHITECTURE(architecture) (512 + (architecture))
953 #define YEP_ENUMERATION_SYSTEM_FEATURE_FOR_ARCHITECTURE(architecture) (768 + (architecture))
954 
968  YepEnumerationGenericIsaFeature = YEP_ENUMERATION_ISA_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureUnknown),
970  YepEnumerationGenericSimdFeature = YEP_ENUMERATION_SIMD_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureUnknown),
972  YepEnumerationGenericSystemFeature = YEP_ENUMERATION_SYSTEM_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureUnknown),
974  YepEnumerationX86IsaFeature = YEP_ENUMERATION_ISA_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureX86),
976  YepEnumerationX86SimdFeature = YEP_ENUMERATION_SIMD_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureX86),
978  YepEnumerationX86SystemFeature = YEP_ENUMERATION_SYSTEM_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureX86),
980  YepEnumerationARMIsaFeature = YEP_ENUMERATION_ISA_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureARM),
982  YepEnumerationARMSimdFeature = YEP_ENUMERATION_SIMD_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureARM),
984  YepEnumerationARMSystemFeature = YEP_ENUMERATION_SYSTEM_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureARM),
986  YepEnumerationMIPSIsaFeature = YEP_ENUMERATION_ISA_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureMIPS),
988  YepEnumerationMIPSSimdFeature = YEP_ENUMERATION_SIMD_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureMIPS),
990  YepEnumerationMIPSSystemFeature = YEP_ENUMERATION_SYSTEM_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureMIPS),
992  YepEnumerationPowerPCIsaFeature = YEP_ENUMERATION_ISA_FEATURE_FOR_ARCHITECTURE(YepCpuArchitecturePowerPC),
994  YepEnumerationPowerPCSimdFeature = YEP_ENUMERATION_SIMD_FEATURE_FOR_ARCHITECTURE(YepCpuArchitecturePowerPC),
996  YepEnumerationPowerPCSystemFeature = YEP_ENUMERATION_SYSTEM_FEATURE_FOR_ARCHITECTURE(YepCpuArchitecturePowerPC),
998  YepEnumerationIA64IsaFeature = YEP_ENUMERATION_ISA_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureIA64),
1000  YepEnumerationIA64SimdFeature = YEP_ENUMERATION_SIMD_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureIA64),
1002  YepEnumerationIA64SystemFeature = YEP_ENUMERATION_SYSTEM_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureIA64),
1004  YepEnumerationSPARCIsaFeature = YEP_ENUMERATION_ISA_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureSPARC),
1006  YepEnumerationSPARCSimdFeature = YEP_ENUMERATION_SIMD_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureSPARC),
1008  YepEnumerationSPARCSystemFeature = YEP_ENUMERATION_SYSTEM_FEATURE_FOR_ARCHITECTURE(YepCpuArchitectureSPARC)
1009 };
1010 
1011 #if defined(YEP_BUILD_LIBRARY)
1012 typedef YepStatus (*FunctionPointer)();
1013 
1014 template <typename Function>
1015 struct FunctionDescriptor {
1016  Function function;
1017  Yep64u isaFeatures;
1018  Yep64u simdFeatures;
1019  Yep64u systemFeatures;
1020  YepCpuMicroarchitecture microarchitecture;
1021 #if defined(YEP_STATIC_LIBRARY)
1022  const char language[4];
1023  const char* algorithm;
1024  const char* optimizations;
1025 #endif
1026 };
1027 
1028 template <typename Function>
1029 struct DispatchTableDescriptor {
1030  const FunctionDescriptor<Function>* table;
1031 #if defined(YEP_STATIC_LIBRARY)
1032  const char* name;
1033 #endif
1034 };
1035 #endif