68 #include <yepPredefines.h>
71 #if defined(YEP_MICROSOFT_COMPILER)
73 typedef unsigned char bool;
81 typedef unsigned char Yep8u;
82 typedef unsigned short Yep16u;
83 typedef unsigned int Yep32u;
84 typedef unsigned long long Yep64u;
86 typedef signed char Yep8s;
87 typedef signed short Yep16s;
88 typedef signed int Yep32s;
89 typedef signed long long Yep64s;
92 typedef double Yep64f;
94 typedef size_t YepSize;
96 typedef bool YepBoolean;
100 unsigned exponent : 5;
101 unsigned mantissa : 10;
402 const Yep64u YepIsaFeaturesDefault = 0x0000000000000000ull;
403 const Yep64u YepSimdFeaturesDefault = 0x0000000000000000ull;
404 const Yep64u YepSystemFeaturesDefault = 0x0000000000000000ull;
537 #define YepIsaFeaturesDefault 0x0000000000000000ull
538 #define YepSimdFeaturesDefault 0x0000000000000000ull
539 #define YepSystemFeaturesDefault 0x0000000000000000ull
546 #define YepSystemFeatureCycleCounter 0x0000000000000001ull
549 #define YepSystemFeatureCycleCounter64Bit 0x0000000000000002ull
552 #define YepSystemFeatureAddressSpace64Bit 0x0000000000000004ull
555 #define YepSystemFeatureGPRegisters64Bit 0x0000000000000008ull
558 #define YepSystemFeatureMisalignedAccess 0x0000000000000010ull
561 #define YepSystemFeatureSingleThreaded 0x0000000000000020ull
570 #define YepX86IsaFeatureFPU 0x0000000000000001ull
573 #define YepX86IsaFeatureCpuid 0x0000000000000002ull
576 #define YepX86IsaFeatureRdtsc 0x0000000000000004ull
579 #define YepX86IsaFeatureCMOV 0x0000000000000008ull
582 #define YepX86IsaFeatureSYSENTER 0x0000000000000010ull
585 #define YepX86IsaFeatureSYSCALL 0x0000000000000020ull
588 #define YepX86IsaFeatureMSR 0x0000000000000040ull
591 #define YepX86IsaFeatureClflush 0x0000000000000080ull
594 #define YepX86IsaFeatureMONITOR 0x0000000000000100ull
597 #define YepX86IsaFeatureFXSAVE 0x0000000000000200ull
600 #define YepX86IsaFeatureXSAVE 0x0000000000000400ull
603 #define YepX86IsaFeatureCmpxchg8b 0x0000000000000800ull
606 #define YepX86IsaFeatureCmpxchg16b 0x0000000000001000ull
609 #define YepX86IsaFeatureX64 0x0000000000002000ull
612 #define YepX86IsaFeatureLahfSahf64 0x0000000000004000ull
615 #define YepX86IsaFeatureFsGsBase 0x0000000000008000ull
618 #define YepX86IsaFeatureMovbe 0x0000000000010000ull
621 #define YepX86IsaFeaturePopcnt 0x0000000000020000ull
624 #define YepX86IsaFeatureLzcnt 0x0000000000040000ull
627 #define YepX86IsaFeatureBMI 0x0000000000080000ull
630 #define YepX86IsaFeatureBMI2 0x0000000000100000ull
633 #define YepX86IsaFeatureTBM 0x0000000000200000ull
636 #define YepX86IsaFeatureRdrand 0x0000000000400000ull
639 #define YepX86IsaFeatureACE 0x0000000000800000ull
642 #define YepX86IsaFeatureACE2 0x0000000001000000ull
645 #define YepX86IsaFeatureRNG 0x0000000002000000ull
648 #define YepX86IsaFeaturePHE 0x0000000004000000ull
651 #define YepX86IsaFeaturePMM 0x0000000008000000ull
654 #define YepX86IsaFeatureAES 0x0000000010000000ull
657 #define YepX86IsaFeaturePclmulqdq 0x0000000020000000ull
660 #define YepX86IsaFeatureRdtscp 0x0000000040000000ull
663 #define YepX86IsaFeatureLWP 0x0000000080000000ull
666 #define YepX86IsaFeatureHLE 0x0000000100000000ull
669 #define YepX86IsaFeatureRTM 0x0000000200000000ull
672 #define YepX86IsaFeatureXtest 0x0000000400000000ull
675 #define YepX86IsaFeatureRdseed 0x0000000800000000ull
678 #define YepX86IsaFeatureADX 0x0000001000000000ull
686 #define YepX86SimdFeatureMMX 0x0000000000000001ull
689 #define YepX86SimdFeatureMMXPlus 0x0000000000000002ull
692 #define YepX86SimdFeatureEMMX 0x0000000000000004ull
695 #define YepX86SimdFeature3dnow 0x0000000000000008ull
698 #define YepX86SimdFeature3dnowPlus 0x0000000000000010ull
701 #define YepX86SimdFeature3dnowPrefetch 0x0000000000000020ull
704 #define YepX86SimdFeature3dnowGeode 0x0000000000000040ull
707 #define YepX86SimdFeatureSSE 0x0000000000000080ull
710 #define YepX86SimdFeatureSSE2 0x0000000000000100ull
713 #define YepX86SimdFeatureSSE3 0x0000000000000200ull
716 #define YepX86SimdFeatureSSSE3 0x0000000000000400ull
719 #define YepX86SimdFeatureSSE4_1 0x0000000000000800ull
722 #define YepX86SimdFeatureSSE4_2 0x0000000000001000ull
725 #define YepX86SimdFeatureSSE4A 0x0000000000002000ull
728 #define YepX86SimdFeatureAVX 0x0000000000004000ull
731 #define YepX86SimdFeatureAVX2 0x0000000000008000ull
734 #define YepX86SimdFeatureXOP 0x0000000000010000ull
737 #define YepX86SimdFeatureF16C 0x0000000000020000ull
740 #define YepX86SimdFeatureFMA3 0x0000000000040000ull
743 #define YepX86SimdFeatureFMA4 0x0000000000080000ull
751 #define YepX86SystemFeatureFPU 0x0000000100000000ull
754 #define YepX86SystemFeatureSSE 0x0000000200000000ull
757 #define YepX86SystemFeatureAVX 0x0000000400000000ull
760 #define YepX86SystemFeatureMisalignedSSE 0x0000000800000000ull
763 #define YepX86SystemFeatureACE 0x0000001000000000ull
766 #define YepX86SystemFeatureACE2 0x0000002000000000ull
769 #define YepX86SystemFeatureRNG 0x0000004000000000ull
772 #define YepX86SystemFeaturePHE 0x0000008000000000ull
775 #define YepX86SystemFeaturePMM 0x0000010000000000ull
783 #define YepIA64IsaFeatureBrl 0x0000000000000001ull
786 #define YepIA64IsaFeatureAtomic128 0x0000000000000002ull
789 #define YepIA64IsaFeatureClz 0x0000000000000004ull
792 #define YepIA64IsaFeatureMpy4 0x0000000000000008ull
800 #define YepARMIsaFeatureV4 0x0000000000000001ull
803 #define YepARMIsaFeatureV5 0x0000000000000002ull
806 #define YepARMIsaFeatureV5E 0x0000000000000004ull
809 #define YepARMIsaFeatureV6 0x0000000000000008ull
812 #define YepARMIsaFeatureV6K 0x0000000000000010ull
815 #define YepARMIsaFeatureV7 0x0000000000000020ull
818 #define YepARMIsaFeatureV7MP 0x0000000000000040ull
821 #define YepARMIsaFeatureThumb 0x0000000000000080ull
824 #define YepARMIsaFeatureThumb2 0x0000000000000100ull
827 #define YepARMIsaFeatureThumbEE 0x0000000000000200ull
830 #define YepARMIsaFeatureJazelle 0x0000000000000400ull
833 #define YepARMIsaFeatureFPA 0x0000000000000800ull
836 #define YepARMIsaFeatureVFP 0x0000000000001000ull
839 #define YepARMIsaFeatureVFP2 0x0000000000002000ull
842 #define YepARMIsaFeatureVFP3 0x0000000000004000ull
845 #define YepARMIsaFeatureVFPd32 0x0000000000008000ull
848 #define YepARMIsaFeatureVFP3HP 0x0000000000010000ull
851 #define YepARMIsaFeatureVFP4 0x0000000000020000ull
854 #define YepARMIsaFeatureDiv 0x0000000000040000ull
857 #define YepARMIsaFeatureArmada 0x0000000000080000ull
865 #define YepARMSimdFeatureXScale 0x0000000000000001ull
868 #define YepARMSimdFeatureWMMX 0x0000000000000002ull
871 #define YepARMSimdFeatureWMMX2 0x0000000000000004ull
874 #define YepARMSimdFeatureNEON 0x0000000000000008ull
877 #define YepARMSimdFeatureNEONHP 0x0000000000000010ull
880 #define YepARMSimdFeatureNEON2 0x0000000000000020ull
889 #define YepARMSystemFeatureVFPVectorMode 0x0000000100000000ull
900 #define YepMIPSIsaFeatureR2 0x0000000000000001ull
904 #define YepMIPSIsaFeatureR3 0x0000000000000002ull
908 #define YepMIPSIsaFeatureFPU 0x0000000000000004ull
911 #define YepMIPSIsaFeatureMT 0x0000000000000008ull
914 #define YepMIPSIsaFeatureMIPS16 0x0000000000000010ull
917 #define YepMIPSIsaFeatureSmartmips 0x0000000000000020ull
925 #define YepMIPSSimdFeatureMDMX 0x0000000000000001ull
928 #define YepMIPSSimdFeatureMIPS3D 0x0000000000000002ull
932 #define YepMIPSSimdFeaturePairedSingle 0x0000000000000004ull
935 #define YepMIPSSimdFeatureDSP 0x0000000000000008ull
939 #define YepMIPSSimdFeatureDSP2 0x0000000000000010ull
943 #define YepMIPSSimdFeatureGodsonMMX 0x0000000000000020ull
946 #define YepMIPSSimdFeatureIMX 0x0000000000000040ull
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))
1011 #if defined(YEP_BUILD_LIBRARY)
1014 template <
typename Function>
1015 struct FunctionDescriptor {
1018 Yep64u simdFeatures;
1019 Yep64u systemFeatures;
1021 #if defined(YEP_STATIC_LIBRARY)
1022 const char language[4];
1023 const char* algorithm;
1024 const char* optimizations;
1028 template <
typename Function>
1029 struct DispatchTableDescriptor {
1030 const FunctionDescriptor<Function>* table;
1031 #if defined(YEP_STATIC_LIBRARY)