1 #ifndef SIMDJSON_IMPLEMENTATIONS_H
2 #define SIMDJSON_IMPLEMENTATIONS_H
11 #ifndef SIMDJSON_IMPLEMENTATION_ARM64
12 #define SIMDJSON_IMPLEMENTATION_ARM64 (SIMDJSON_IS_ARM64)
14 #define SIMDJSON_CAN_ALWAYS_RUN_ARM64 SIMDJSON_IMPLEMENTATION_ARM64 && SIMDJSON_IS_ARM64
19 #if __has_include(<avx512vbmi2intrin.h>)
20 #define SIMDJSON_COMPILER_SUPPORTS_VBMI2 1
28 #define SIMDJSON_COMPILER_SUPPORTS_VBMI2 1
33 #ifndef SIMDJSON_AVX512_ALLOWED
34 #define SIMDJSON_AVX512_ALLOWED 1
39 #ifndef SIMDJSON_IMPLEMENTATION_ICELAKE
40 #define SIMDJSON_IMPLEMENTATION_ICELAKE ((SIMDJSON_IS_X86_64) && (SIMDJSON_AVX512_ALLOWED) && (SIMDJSON_COMPILER_SUPPORTS_VBMI2))
46 #define SIMDJSON_CAN_ALWAYS_RUN_ICELAKE ((SIMDJSON_IMPLEMENTATION_ICELAKE) && (__AVX2__) && (__AVX512F__) && (__AVX512DQ__) && (__AVX512CD__) && (__AVX512BW__) && (__AVX512VL__) && (__AVX512VBMI2__))
48 #define SIMDJSON_CAN_ALWAYS_RUN_ICELAKE ((SIMDJSON_IMPLEMENTATION_ICELAKE) && (__AVX2__) && (__BMI__) && (__PCLMUL__) && (__LZCNT__) && (__AVX512F__) && (__AVX512DQ__) && (__AVX512CD__) && (__AVX512BW__) && (__AVX512VL__) && (__AVX512VBMI2__))
53 #ifndef SIMDJSON_IMPLEMENTATION_HASWELL
54 #if SIMDJSON_CAN_ALWAYS_RUN_ICELAKE
56 #define SIMDJSON_IMPLEMENTATION_HASWELL 0
58 #define SIMDJSON_IMPLEMENTATION_HASWELL SIMDJSON_IS_X86_64
64 #define SIMDJSON_CAN_ALWAYS_RUN_HASWELL ((SIMDJSON_IMPLEMENTATION_HASWELL) && (SIMDJSON_IS_X86_64) && (__AVX2__))
66 #define SIMDJSON_CAN_ALWAYS_RUN_HASWELL ((SIMDJSON_IMPLEMENTATION_HASWELL) && (SIMDJSON_IS_X86_64) && (__AVX2__) && (__BMI__) && (__PCLMUL__) && (__LZCNT__))
70 #ifndef SIMDJSON_IMPLEMENTATION_WESTMERE
71 #if SIMDJSON_CAN_ALWAYS_RUN_ICELAKE || SIMDJSON_CAN_ALWAYS_RUN_HASWELL
73 #define SIMDJSON_IMPLEMENTATION_WESTMERE 0
75 #define SIMDJSON_IMPLEMENTATION_WESTMERE SIMDJSON_IS_X86_64
78 #define SIMDJSON_CAN_ALWAYS_RUN_WESTMERE (SIMDJSON_IMPLEMENTATION_WESTMERE && SIMDJSON_IS_X86_64 && __SSE4_2__ && __PCLMUL__)
80 #ifndef SIMDJSON_IMPLEMENTATION_PPC64
81 #define SIMDJSON_IMPLEMENTATION_PPC64 (SIMDJSON_IS_PPC64 && SIMDJSON_IS_PPC64_VMX)
83 #define SIMDJSON_CAN_ALWAYS_RUN_PPC64 SIMDJSON_IMPLEMENTATION_PPC64 && SIMDJSON_IS_PPC64 && SIMDJSON_IS_PPC64_VMX
86 #ifndef SIMDJSON_IMPLEMENTATION_FALLBACK
87 #if SIMDJSON_CAN_ALWAYS_RUN_ARM64 || SIMDJSON_CAN_ALWAYS_RUN_ICELAKE || SIMDJSON_CAN_ALWAYS_RUN_HASWELL || SIMDJSON_CAN_ALWAYS_RUN_WESTMERE || SIMDJSON_CAN_ALWAYS_RUN_PPC64
89 #define SIMDJSON_IMPLEMENTATION_FALLBACK 0
91 #define SIMDJSON_IMPLEMENTATION_FALLBACK 1
94 #define SIMDJSON_CAN_ALWAYS_RUN_FALLBACK SIMDJSON_IMPLEMENTATION_FALLBACK
96 SIMDJSON_PUSH_DISABLE_WARNINGS
97 SIMDJSON_DISABLE_UNDESIRED_WARNINGS
100 #include "simdjson/arm64.h"
101 #include "simdjson/fallback.h"
102 #include "simdjson/icelake.h"
103 #include "simdjson/haswell.h"
104 #include "simdjson/ppc64.h"
105 #include "simdjson/westmere.h"
108 #include "simdjson/builtin.h"
110 SIMDJSON_POP_DISABLE_WARNINGS
Includes common stuff needed for implementations.