Botan
3.11.0
Crypto and TLS for C&
src
lib
utils
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_BMI2 BOTAN_FUNC_ISA("bmi,bmi2")
31
#define BOTAN_FN_ISA_RNG BOTAN_FUNC_ISA("rdrnd")
32
#define BOTAN_FN_ISA_SSE2 BOTAN_FUNC_ISA("sse2")
33
#define BOTAN_FN_ISA_AVX2 BOTAN_FUNC_ISA("avx2")
34
#define BOTAN_FN_ISA_AVX2_BMI2 BOTAN_FUNC_ISA("avx2,bmi,bmi2")
35
#define BOTAN_FN_ISA_AVX2_GFNI BOTAN_FUNC_ISA("avx2,gfni")
36
#define BOTAN_FN_ISA_AVX2_VAES BOTAN_FUNC_ISA("vaes,avx2")
37
#define BOTAN_FN_ISA_AVX2_SM3 BOTAN_FUNC_ISA("sm3,avx2")
38
#define BOTAN_FN_ISA_AVX2_SM4 BOTAN_FUNC_ISA("sm4,avx2")
39
#define BOTAN_FN_ISA_AVX512 \
40
BOTAN_FUNC_ISA("avx512f,avx512dq,avx512bw,avx512vl,avx512vbmi,avx512vbmi2,avx512bitalg,avx512ifma")
41
#define BOTAN_FN_ISA_AVX512_CLMUL \
42
BOTAN_FUNC_ISA("avx512f,avx512dq,avx512bw,avx512vl,avx512vbmi,avx512vbmi2,avx512bitalg,pclmul,vpclmulqdq")
43
#define BOTAN_FN_ISA_AVX512_BMI2 \
44
BOTAN_FUNC_ISA("avx512f,avx512dq,avx512bw,avx512vl,avx512vbmi,avx512vbmi2,avx512bitalg,avx512ifma,bmi,bmi2")
45
#define BOTAN_FN_ISA_AVX512_GFNI \
46
BOTAN_FUNC_ISA("avx512f,avx512dq,avx512bw,avx512vl,avx512vbmi,avx512vbmi2,avx512bitalg,avx512ifma,gfni")
47
48
#endif
49
50
#if defined(BOTAN_TARGET_ARCH_IS_ARM64)
51
52
#define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("+simd")
53
#define BOTAN_FN_ISA_CLMUL BOTAN_FUNC_ISA("+crypto+aes")
54
#define BOTAN_FN_ISA_AES BOTAN_FUNC_ISA("+crypto+aes")
55
#define BOTAN_FN_ISA_SHA2 BOTAN_FUNC_ISA("+crypto+sha2")
56
#define BOTAN_FN_ISA_SM3 BOTAN_FUNC_ISA("arch=armv8.2-a+sm4")
57
#define BOTAN_FN_ISA_SM4 BOTAN_FUNC_ISA("arch=armv8.2-a+sm4")
58
#define BOTAN_FN_ISA_SHA512 BOTAN_FUNC_ISA("arch=armv8.2-a+sha3")
59
60
#endif
61
62
#if defined(BOTAN_TARGET_ARCH_IS_ARM32)
63
#define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("fpu=neon")
64
#endif
65
66
#if defined(BOTAN_TARGET_ARCH_IS_PPC_FAMILY)
67
68
#define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("altivec")
69
#define BOTAN_FN_ISA_CLMUL BOTAN_FUNC_ISA("vsx,crypto")
70
#define BOTAN_FN_ISA_AES BOTAN_FUNC_ISA("vsx,crypto")
71
#define BOTAN_FN_ISA_RNG BOTAN_FUNC_ISA("cpu=power9")
72
73
#endif
74
75
#if defined(BOTAN_TARGET_ARCH_IS_LOONGARCH64)
76
77
#define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("lsx")
78
79
#endif
80
81
#if defined(BOTAN_TARGET_ARCH_IS_WASM)
82
83
#define BOTAN_FN_ISA_SIMD_4X32 BOTAN_FUNC_ISA("simd128")
84
#define BOTAN_FN_ISA_SIMD_2X64 BOTAN_FUNC_ISA("simd128")
85
86
#endif
87
88
#endif
Generated by
1.15.0