# Instruction set macros¶

xsimd defines different macros depending on the symbols defined by the compiler options.

## x86 architecture¶

If one of the following symbols is detected, XSIMD_X86_INSTR_SET is set to the corresponding version and XSIMD_X86_INSTR_SET_AVAILABLE is defined.

Symbol Version
__SSE__ XSIMD_X86_SSE_VERSION
_M_IX86_FP >= 1 XSIMD_X86_SSE_VERSION
__SSE2__ XSIMD_X86_SSE2_VERSION
_M_X64 XSIMD_X86_SSE2_VERSION
_M_IX86_FP >= 2 XSIMD_X86_SSE2_VERSION
__SSE3__ XSIMD_X86_SSE3_VERSION
__SSSE3__ XSIMD_X86_SSSE3_VERSION
__SSE4_1__ XSIMD_X86_SSE4_1_VERSION
__SSE4_2__ XSIMD_X86_SSE4_2_VERSION
__AVX__ XSIMD_X86_AVX_VERSION
__FMA__ XSIMD_X86_FMA3_VERSION
__AVX2__ XSIMD_X86_AVX2_VERSION
__AVX512__ XSIMD_X86_AVX512_VERSION
__KNCNI__ XSIMD_X86_AVX512_VERSION
__AVX512F__ XSIMD_X86_AVX512_VERSION

## x86_AMD architecture¶

If one of the following symbols is detected, XSIMD_X86_AMD_INSTR_SET is set to the corresponding version and XSIMD_X86_AMD_SET_AVAILABLE is defined.

Symbol Version
__SSE4A__ XSIMD_X86_AMD_SSE4A_VERSION
__FMA__ XSIMD_X86_AMD_FMA4_VERSION
__XOP__ XSIMD_X86_AMD_XOP_VERSION

If one of the previous symbol is defined, other x86 instruction sets not specific to AMD should be available too; thus XSIMD_X86_INSTR_SET and XSIMD_X86_INSTR_SET_AVAILABLE should be defined. In that case, XSIMD_X86_AMD_INSTR_SET is set to the maximum of XSIMD_X86_INSTR_SET and the current value of XSIMD_X86_AMD_INSTR_SET.

## PPC architecture¶

If one of the following symbols is detected, XSIMD_PPC_INSTR_SET is set to the corresponding version and XSIMD_PPC_INSTR_AVAILABLE is defined.

Symbol Version
__ALTIVEC__ XSIMD_PPC_VMX_VERSION
__VEC__ XSIMD_PPC_VMX_VERSION
__VSX__ XSIMD_PPC_VSX_VERSION
__VECTOR4DOUBLE__ XSIMD_PPC_QPX_VERSION

## ARM architecture¶

If one of the following condition is detected, XSIMD_ARM_INSTR_SET is set to the corresponding version and XSIMD_ARM_INSTR_AVAILABLE is defined.

Symbol Version
__ARM_ARCH == 7 XSIMD_ARM7_NEON_VERSION
__ARM_ARCH == 8 && ! __aarch64__ XSIMD_ARM8_32_NEON_VERSION
__ARM_ARCH == 8 && __aarch64__ XSIMD_ARM8_64_NEON_VERSION

## Generic instruction set¶

If XSIMD_*_INSTR_SET_AVAILABLE has been defined as explained above, XSIMD_INSTR_SET is set to XSIMD_*_INSTR_SET and XSIMD_INSTR_SET_AVAILABLE is defined.