Botan 3.9.0
Crypto and TLS for C&
isa_extn.h
Go to the documentation of this file.
1/*
2* (C) 2025 Jack Lloyd
3*
4* Botan is released under the Simplified BSD License (see license.txt)
5*/
6
7#ifndef BOTAN_UTIL_ISA_EXTN_H_
8#define BOTAN_UTIL_ISA_EXTN_H_
9
10#include <botan/compiler.h>
11#include <botan/internal/target_info.h>
12
13/*
14* GCC and Clang use string identifiers to tag ISA extensions (eg using the
15* `target` function attribute).
16*
17* This file consolidates the actual definition of such target attributes
18*/
19
20#if defined(BOTAN_TARGET_ARCH_IS_X86_FAMILY)
21
22 #define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("ssse3")
23 #define BOTAN_FN_ISA_SIMD_2X64 BOTAN_FUNC_ISA("ssse3")
24 #define BOTAN_FN_ISA_SIMD_4X64 BOTAN_FUNC_ISA("avx2")
25 #define BOTAN_FN_ISA_SIMD_8X64 BOTAN_FN_ISA_AVX512
26 #define BOTAN_FN_ISA_CLMUL BOTAN_FUNC_ISA("pclmul,ssse3")
27 #define BOTAN_FN_ISA_AESNI BOTAN_FUNC_ISA("aes,ssse3")
28 #define BOTAN_FN_ISA_SHANI BOTAN_FUNC_ISA("sha,ssse3,sse4.1")
29 #define BOTAN_FN_ISA_SHA512 BOTAN_FUNC_ISA("sha512,avx2")
30 #define BOTAN_FN_ISA_SSE2 BOTAN_FUNC_ISA("sse2")
31 #define BOTAN_FN_ISA_AVX2 BOTAN_FUNC_ISA("avx2")
32 #define BOTAN_FN_ISA_AVX2_BMI2 BOTAN_FUNC_ISA("avx2,bmi,bmi2")
33 #define BOTAN_FN_ISA_AVX2_VAES BOTAN_FUNC_ISA("vaes,avx2")
34 #define BOTAN_FN_ISA_AVX2_SM4 BOTAN_FUNC_ISA("sm4,avx2")
35 #define BOTAN_FN_ISA_AVX2_GFNI BOTAN_FUNC_ISA("gfni,avx2")
36 #define BOTAN_FN_ISA_AVX512 BOTAN_FUNC_ISA("avx512f,avx512dq,avx512bw")
37 #define BOTAN_FN_ISA_AVX512_BMI2 BOTAN_FUNC_ISA("avx512f,avx512dq,avx512bw,bmi,bmi2")
38
39#endif
40
41#if defined(BOTAN_TARGET_ARCH_IS_ARM64)
42
43 #define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("+simd")
44 #define BOTAN_FN_ISA_CLMUL BOTAN_FUNC_ISA("+crypto+aes")
45 #define BOTAN_FN_ISA_AES BOTAN_FUNC_ISA("+crypto+aes")
46 #define BOTAN_FN_ISA_SHA2 BOTAN_FUNC_ISA("+crypto+sha2")
47 #define BOTAN_FN_ISA_SM4 BOTAN_FUNC_ISA("arch=armv8.2-a+sm4")
48 #define BOTAN_FN_ISA_SHA512 BOTAN_FUNC_ISA("arch=armv8.2-a+sha3")
49
50#endif
51
52#if defined(BOTAN_TARGET_ARCH_IS_ARM32)
53 #define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("fpu=neon")
54#endif
55
56#if defined(BOTAN_TARGET_ARCH_IS_PPC_FAMILY)
57
58 #define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("altivec")
59 #define BOTAN_FN_ISA_CLMUL BOTAN_FUNC_ISA("vsx,crypto")
60 #define BOTAN_FN_ISA_AES BOTAN_FUNC_ISA("vsx,crypto")
61
62#endif
63
64#if defined(BOTAN_TARGET_ARCH_IS_LOONGARCH64)
65
66 #define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("lsx")
67
68#endif
69
70#endif