51#if defined(__cplusplus)
52# define QSC_CPLUSPLUS_ENABLED_START extern "C" {
53# define QSC_CPLUSPLUS_ENABLED_END }
55# define QSC_CPLUSPLUS_ENABLED_START
56# define QSC_CPLUSPLUS_ENABLED_END
59QSC_CPLUSPLUS_ENABLED_START
80# define QSC_SYSTEM_COMPILER_MSC
83#if defined(__MINGW32__)
88# define QSC_SYSTEM_COMPILER_MINGW
93# define QSC_SYSTEM_COMPILER_GCC
101# define QSC_SYSTEM_COMPILER_ARM
104#if defined(__BORLANDC__)
109# define QSC_SYSTEM_COMPILER_BORLAND
112#if defined(__GNUC__) && !defined(__MINGW32__)
117# define QSC_SYSTEM_COMPILER_GCC
120#if defined(__clang__)
125# define QSC_SYSTEM_COMPILER_CLANG
128#if defined(__IBMC__) || defined(__IBMCPP__)
133# define QSC_SYSTEM_COMPILER_IBM
136#if defined(__INTEL_COMPILER) || defined(__ICL)
141# define QSC_SYSTEM_COMPILER_INTEL
144#if defined(__MWERKS__)
149# define QSC_SYSTEM_COMPILER_MWERKS
152#if defined(__OPEN64__)
157# define QSC_SYSTEM_COMPILER_OPEN64
160#if defined(__SUNPRO_C)
165# define QSC_SYSTEM_COMPILER_SUNPRO
168#if defined(__TURBOC__)
173# define QSC_SYSTEM_COMPILER_TURBO
180#if defined(_WIN64) || defined(_WIN32) || defined(__WIN64__) || defined(__WIN32__)
185# if !defined(QSC_SYSTEM_OS_WINDOWS)
186# define QSC_SYSTEM_OS_WINDOWS
193# define QSC_SYSTEM_ISWIN64
194# elif defined(_WIN32)
199# define QSC_SYSTEM_ISWIN32
203#if defined(__ANDROID__)
208# define QSC_SYSTEM_OS_ANDROID
211#if defined(__APPLE__) || defined(__MACH__)
212# include "TargetConditionals.h"
217# define QSC_SYSTEM_OS_APPLE
222# define QSC_SYSTEM_OS_BSD
223# if defined(TARGET_OS_IPHONE) && defined(TARGET_IPHONE_SIMULATOR)
228# define QSC_SYSTEM_ISIPHONESIM
229# elif TARGET_OS_IPHONE
234# define QSC_SYSTEM_ISIPHONE
240# define QSC_SYSTEM_ISOSX
244#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__) || defined(QSC_SYSTEM_ISOSX)
249# define QSC_SYSTEM_OS_BSD
252#if defined(__linux) || defined(__linux__) || defined(__gnu_linux__)
257# define QSC_SYSTEM_OS_LINUX
258 typedef int32_t errno_t;
261#if defined(__unix) || defined(__unix__)
266# define QSC_SYSTEM_OS_UNIX
267# if defined(__hpux) || defined(hpux)
272# define QSC_SYSTEM_OS_HPUX
274# if defined(__sun__) || defined(__sun) || defined(sun)
279# define QSC_SYSTEM_OS_SUNUX
283#if defined(__posix) || defined(__posix__) || defined(__USE_POSIX) || defined(_POSIX_VERSION) || defined(QSC_SYSTEM_OS_APPLE)
288# define QSC_SYSTEM_OS_POSIX
291#if defined(QSC_SYSTEM_OS_WINDOWS) && defined(QSC_SYSTEM_COMPILER_MSC)
296# define QSC_WINDOWS_VSTUDIO_BUILD
304# define QSC_SYSTEM_OPENMP
307#if defined(DEBUG) || defined(_DEBUG) || defined(__DEBUG__) || (defined(__GNUC__) && !defined(__OPTIMIZE__))
312# define QSC_DEBUG_MODE
318#if defined(QSC_SYSTEM_COMPILER_MSC)
319# if defined(_M_X64) || defined(_M_AMD64)
324# define QSC_SYSTEM_ARCH_IX86_64
329# define QSC_SYSTEM_ARCH_IX86
330# if defined(_M_AMD64)
335# define QSC_SYSTEM_ARCH_AMD64
337# elif defined(_M_IX86) || defined(_X86_)
342# define QSC_SYSTEM_ARCH_IX86_32
347# define QSC_SYSTEM_ARCH_IX86
348# elif defined(_M_ARM)
353# define QSC_SYSTEM_ARCH_ARM
354# if defined(_M_ARM_ARMV7VE)
359# define QSC_SYSTEM_ARCH_ARMV7VE
360# elif defined(_M_ARM_FP)
365# define QSC_SYSTEM_ARCH_ARMFP
366# elif defined(_M_ARM64)
371# define QSC_SYSTEM_ARCH_ARM64
373# elif defined(_M_IA64)
378# define QSC_SYSTEM_ARCH_IA64
380#elif defined(QSC_SYSTEM_COMPILER_GCC)
381# if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64)
386# define QSC_SYSTEM_ARCH_IX86_64
391# define QSC_SYSTEM_ARCH_IX86
392# if defined(_M_AMD64)
397# define QSC_SYSTEM_ARCH_AMD64
399# elif defined(i386) || defined(__i386) || defined(__i386__)
404# define QSC_SYSTEM_ARCH_IX86_32
409# define QSC_SYSTEM_ARCH_IX86
410# elif defined(__arm__)
415# define QSC_SYSTEM_ARCH_ARM
416# if defined(__aarch64__)
421# define QSC_SYSTEM_ARCH_ARM64
423# elif defined(__ia64) || defined(__ia64__) || defined(__itanium__)
428# define QSC_SYSTEM_ARCH_IA64
429# elif defined(__powerpc64__) || defined(__ppc64__) || defined(__PPC64__) || defined(__64BIT__) || defined(_LP64) || defined(__LP64__)
434# define QSC_SYSTEM_ARCH_PPC
435# elif defined(__sparc) || defined(__sparc__)
440# define QSC_SYSTEM_ARCH_SPARC
441# if defined(__sparc64__)
446# define QSC_SYSTEM_ARCH_SPARC64
455#if defined(_WIN64) || defined(_WIN32) || defined(__CYGWIN__)
460# define QSC_SYSTEM_SOCKETS_WINDOWS
466# define QSC_SYSTEM_SOCKETS_BERKELY
469#if !defined(__clang__) && !defined(__GNUC__)
477# define __attribute__(a)
492#if defined(QSC_DLL_API)
494#if defined(QSC_SYSTEM_COMPILER_MSC)
495# if defined(QSC_DLL_IMPORT)
496# define QSC_EXPORT_API __declspec(dllimport)
498# define QSC_EXPORT_API __declspec(dllexport)
500#elif defined(QSC_SYSTEM_COMPILER_GCC)
501# if defined(QSC_DLL_IMPORT)
502# define QSC_EXPORT_API __attribute__((dllimport))
504# define QSC_EXPORT_API __attribute__((dllexport))
507# if defined(__SUNPRO_C)
508# if !defined(__GNU_C__)
509# define QSC_EXPORT_API __attribute__ (visibility(__global))
511# define QSC_EXPORT_API __attribute__ __global
513# elif defined(_MSG_VER)
514# define QSC_EXPORT_API extern __declspec(dllexport)
516# define QSC_EXPORT_API __attribute__ ((visibility ("default")))
520# define QSC_EXPORT_API
528# define QSC_CACHE_ALIGNED __attribute__((aligned(64)))
529#elif defined(_MSC_VER)
530# define QSC_CACHE_ALIGNED __declspec(align(64))
533#if defined(QSC_SYSTEM_ARCH_IX86_64) || defined(QSC_SYSTEM_ARCH_ARM64) || defined(QSC_SYSTEM_ARCH_IA64) || defined(QSC_SYSTEM_ARCH_AMD64) || defined(QSC_SYSTEM_ARCH_SPARC64)
538# define QSC_SYSTEM_IS_X64
544# define QSC_SYSTEM_IS_X86
547#if defined(QSC_SYSTEM_IS_X64)
552# define QSC_SIZE_MAX UINT64_MAX
558# define QSC_SIZE_MAX UINT32_MAX
565#define QSC_SYSTEM_IS_LITTLE_ENDIAN (((union { uint32_t x; uint8_t c; }){1}).c)
567#if (!defined(QSC_SYSTEM_IS_LITTLE_ENDIAN))
568# if defined(__sparc) || defined(__sparc__) || defined(__hppa__) || defined(__PPC__) || defined(__mips__) || (defined(__MWERKS__) && !defined(__INTEL__))
573# define QSC_SYSTEM_IS_BIG_ENDIAN
579# define QSC_SYSTEM_IS_LITTLE_ENDIAN
587#if !defined(QSC_ALIGN)
588# if defined(__GNUC__) || defined(__clang__)
589# define QSC_ALIGN(x) __attribute__((aligned(x)))
590# elif defined(_MSC_VER)
591# define QSC_ALIGN(x) __declspec(align(x))
597#if defined(__SIZEOF_INT128__) && defined(QSC_SYSTEM_IS_X64) && !defined(__xlc__) && !defined(uint128_t)
602# define QSC_SYSTEM_NATIVE_UINT128
603# if defined(__GNUC__)
610 typedef __int128 uint128_t;
618#if defined(QSC_SYSTEM_NATIVE_UINT128)
619# define QSC_SYSTEM_FAST_64X64_MUL(X,Y,Low,High) \
621 const uint128_t r = (uint128_t)(X) * (Y); \
622 *(High) = (r >> 64) & 0xFFFFFFFFFFFFFFFFULL; \
623 *(Low) = (r) & 0xFFFFFFFFFFFFFFFFULL; \
625#elif defined(QSC_SYSTEM_COMPILER_MSC) && defined(QSC_SYSTEM_IS_X64)
627# pragma intrinsic(_umul128)
628# define QSC_SYSTEM_FAST_64X64_MUL(X,Y,Low,High) \
630 *(Low) = _umul128((X), (Y), (High)); \
632#elif defined(QSC_SYSTEM_COMPILER_GCC)
633# if defined(QSC_SYSTEM_ARCH_IX86)
634# define QSC_SYSTEM_FAST_64X64_MUL(X,Y,Low,High) \
636 asm("mulq %3" : "=d" (*(High)), "=X" (*(Low)) : "X" (X), "rm" (Y) : "cc"); \
638# elif defined(QSC_SYSTEM_ARCH_ALPHA)
639# define QSC_SYSTEM_FAST_64X64_MUL(X,Y,Low,High) \
641 asm("umulh %1,%2,%0" : "=r" (*(High)) : "r" (X), "r" (Y)); \
642 *(Low) = (X) * (Y); \
644# elif defined(QSC_SYSTEM_ARCH_IA64)
645# define QSC_SYSTEM_FAST_64X64_MUL(X,Y,Low,High) \
647 asm("xmpy.hu %0=%1,%2" : "=f" (*(High)) : "f" (X), "f" (Y)); \
648 *(Low) = (X) * (Y); \
650# elif defined(QSC_SYSTEM_ARCH_PPC)
651# define QSC_SYSTEM_FAST_64X64_MUL(X,Y,Low,High) \
653 asm("mulhdu %0,%1,%2" : "=r" (*(High)) : "r" (X), "r" (Y) : "cc"); \
654 *(Low) = (X) * (Y); \
663#define QSC_SYSTEM_MAX_PATH 260ULL
669#define QSC_SYSTEM_SECMEMALLOC_DEFAULT 4096ULL
675#define QSC_SYSTEM_SECMEMALLOC_MIN 16ULL
681#define QSC_SYSTEM_SECMEMALLOC_MAX 128ULL
687#define QSC_SYSTEM_SECMEMALLOC_MAXKB 512ULL
694# define QSC_SYSTEM_VIRTUAL_LOCK
700# define QSC_RTL_SECURE_MEMORY
703#if defined(_POSIX_MEMLOCK_RANGE)
708# define QSC_SYSTEM_POSIX_MLOCK
711#if defined(QSC_SYSTEM_VIRTUAL_LOCK) || defined(QSC_SYSTEM_POSIX_MLOCK)
716# define QSC_SYSTEM_SECURE_ALLOCATOR
723#if defined(QSC_SYSTEM_COMPILER_MSC)
724# define QSC_SYSTEM_OPTIMIZE_IGNORE __pragma(optimize("", off))
725#elif defined(QSC_SYSTEM_COMPILER_GCC) || defined(QSC_SYSTEM_COMPILER_MINGW)
726# if defined(__clang__)
731# define QSC_SYSTEM_OPTIMIZE_IGNORE __attribute__((optnone))
737# define QSC_SYSTEM_OPTIMIZE_IGNORE __attribute__((optimize("O0")))
739#elif defined(QSC_SYSTEM_COMPILER_CLANG)
744# define QSC_SYSTEM_OPTIMIZE_IGNORE __attribute__((optnone))
745#elif defined(QSC_SYSTEM_COMPILER_INTEL)
750# define QSC_SYSTEM_OPTIMIZE_IGNORE pragma optimize("", off)
752# define QSC_SYSTEM_OPTIMIZE_IGNORE
759#if defined(QSC_SYSTEM_COMPILER_MSC)
760# define QSC_SYSTEM_OPTIMIZE_RESUME __pragma(optimize("", on))
761#elif defined(QSC_SYSTEM_COMPILER_GCC) || defined(QSC_SYSTEM_COMPILER_MINGW)
762# if defined(__clang__)
763# define QSC_SYSTEM_OPTIMIZE_RESUME
765# define QSC_SYSTEM_OPTIMIZE_RESUME _Pragma("GCC diagnostic pop")
767#elif defined(QSC_SYSTEM_COMPILER_INTEL)
768# define QSC_SYSTEM_OPTIMIZE_RESUME pragma optimize("", on)
770# define QSC_SYSTEM_OPTIMIZE_RESUME
777#if defined(QSC_SYSTEM_COMPILER_MSC)
778# define QSC_SYSTEM_CONDITION_IGNORE(x) __pragma(warning(disable : x))
779#elif defined(QSC_SYSTEM_COMPILER_GCC) || defined(QSC_SYSTEM_COMPILER_MINGW)
780# define QSC_SYSTEM_CONDITION_IGNORE(x) _Pragma("GCC diagnostic push") _Pragma("GCC diagnostic ignored \"-Wunused-parameter\"")
781#elif defined(QSC_SYSTEM_COMPILER_INTEL)
782# define QSC_SYSTEM_CONDITION_IGNORE(x)
784# define QSC_SYSTEM_CONDITION_IGNORE(x)
787#if (_MSC_VER >= 1600)
792# define QSC_WMMINTRIN_H 1
795#if (_MSC_VER >= 1700) && (defined(_M_X64))
800# define QSC_HAVE_AVX2INTRIN_H 1
810#if defined(__AVX512F__) && (__AVX512F__ == 1)
815# include <immintrin.h>
816# if (!defined(__AVX512__))
826# define QSC_SYSTEM_HAS_SSE2
834# define QSC_SYSTEM_HAS_SSE3
837#if defined(__SSSE3__)
842# define QSC_SYSTEM_HAS_SSSE3
845#if defined(__SSE4_1__)
850# define QSC_SYSTEM_HAS_SSE41
853#if defined(__SSE4_2__)
858# define QSC_SYSTEM_HAS_SSE42
861#if defined(__ARM_NEON__)
862# define QSC_SYSTEM_HAS_ARM_NEON
870# define QSC_SYSTEM_HAS_AVX
878# define QSC_SYSTEM_HAS_AVX2
881#if defined(__AVX512__)
886# define QSC_SYSTEM_HAS_AVX512
894# define QSC_SYSTEM_HAS_XOP
897#if defined(QSC_SYSTEM_HAS_AVX) || defined(QSC_SYSTEM_HAS_AVX2) || defined(QSC_SYSTEM_HAS_AVX512)
902# define QSC_SYSTEM_AVX_INTRINSICS
911#if defined(QSC_SYSTEM_AVX_INTRINSICS) && defined(QSC_SYSTEM_COMPILER_GCC) && defined(QSC_ASM_ENABLED)
915#if defined(QSC_SYSTEM_HAS_AVX512)
920# define QSC_SIMD_ALIGN QSC_ALIGN(64)
925# define QSC_SIMD_ALIGNMENT 64
926#elif defined(QSC_SYSTEM_HAS_AVX2)
931# define QSC_SIMD_ALIGN QSC_ALIGN(32)
936# define QSC_SIMD_ALIGNMENT 32
937#elif defined(QSC_SYSTEM_HAS_AVX)
942# define QSC_SIMD_ALIGN QSC_ALIGN(16)
947# define QSC_SIMD_ALIGNMENT 16
953# define QSC_SIMD_ALIGN
958# define QSC_SIMD_ALIGNMENT 8
961#if defined(QSC_SYSTEM_AVX_INTRINSICS)
966# define QSC_RDRAND_COMPATIBLE
973#define QSC_STATUS_SUCCESS 0LL
979#define QSC_STATUS_FAILURE -1LL
985#if !defined(QSC_SYSTEM_AESNI_ENABLED)
986# if defined(QSC_SYSTEM_AVX_INTRINSICS)
991# define QSC_SYSTEM_AESNI_ENABLED
1009#define QSC_ECDH_S1EC25519
1023#define QSC_KYBER_FIPS203
1041#define QSC_KYBER_S5P3168
1067#define QSC_MCELIECE_S5N6688T128
1099#define QSC_NTRU_S5HPS4096821
1125#define QSC_DILITHIUM_S5P4880
1133#define QSC_ECDSA_S1EC25519
1147#define QSC_FALCON_S5SHAKE256F1024
1179#define QSC_SPHINCSPLUS_S5S256SHAKERF
1199QSC_CPLUSPLUS_ENABLED_END
#define __attribute__(a)
Fallback definition for the attribute keyword for compilers that do not support it.
Definition common.h:477