1 /*===---- riscv_crypto.h - RISC-V Zk* intrinsics ---------------------------===
3 * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 * See https://llvm.org/LICENSE.txt for license information.
5 * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 *===-----------------------------------------------------------------------===
10 #ifndef __RISCV_CRYPTO_H
11 #define __RISCV_CRYPTO_H
15 #if defined(__cplusplus)
19 #if defined(__riscv_zknd)
20 #if __riscv_xlen == 32
21 #define __riscv_aes32dsi(x, y, bs) __builtin_riscv_aes32dsi(x, y, bs)
22 #define __riscv_aes32dsmi(x, y, bs) __builtin_riscv_aes32dsmi(x, y, bs)
25 #if __riscv_xlen == 64
26 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
27 __riscv_aes64ds(uint64_t __x
, uint64_t __y
) {
28 return __builtin_riscv_aes64ds(__x
, __y
);
31 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
32 __riscv_aes64dsm(uint64_t __x
, uint64_t __y
) {
33 return __builtin_riscv_aes64dsm(__x
, __y
);
36 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
37 __riscv_aes64im(uint64_t __x
) {
38 return __builtin_riscv_aes64im(__x
);
41 #endif // defined(__riscv_zknd)
43 #if defined(__riscv_zkne)
44 #if __riscv_xlen == 32
45 #define __riscv_aes32esi(x, y, bs) __builtin_riscv_aes32esi(x, y, bs)
46 #define __riscv_aes32esmi(x, y, bs) __builtin_riscv_aes32esmi(x, y, bs)
49 #if __riscv_xlen == 64
50 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
51 __riscv_aes64es(uint64_t __x
, uint64_t __y
) {
52 return __builtin_riscv_aes64es(__x
, __y
);
55 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
56 __riscv_aes64esm(uint64_t __x
, uint64_t __y
) {
57 return __builtin_riscv_aes64esm(__x
, __y
);
60 #endif // defined(__riscv_zkne)
62 #if defined(__riscv_zknd) || defined(__riscv_zkne)
63 #if __riscv_xlen == 64
64 #define __riscv_aes64ks1i(x, rnum) __builtin_riscv_aes64ks1i(x, rnum)
66 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
67 __riscv_aes64ks2(uint64_t __x
, uint64_t __y
) {
68 return __builtin_riscv_aes64ks2(__x
, __y
);
71 #endif // defined(__riscv_zknd) || defined(__riscv_zkne)
73 #if defined(__riscv_zknh)
74 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
75 __riscv_sha256sig0(uint32_t __x
) {
76 return __builtin_riscv_sha256sig0(__x
);
79 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
80 __riscv_sha256sig1(uint32_t __x
) {
81 return __builtin_riscv_sha256sig1(__x
);
84 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
85 __riscv_sha256sum0(uint32_t __x
) {
86 return __builtin_riscv_sha256sum0(__x
);
89 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
90 __riscv_sha256sum1(uint32_t __x
) {
91 return __builtin_riscv_sha256sum1(__x
);
94 #if __riscv_xlen == 32
95 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
96 __riscv_sha512sig0h(uint32_t __x
, uint32_t __y
) {
97 return __builtin_riscv_sha512sig0h(__x
, __y
);
100 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
101 __riscv_sha512sig0l(uint32_t __x
, uint32_t __y
) {
102 return __builtin_riscv_sha512sig0l(__x
, __y
);
105 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
106 __riscv_sha512sig1h(uint32_t __x
, uint32_t __y
) {
107 return __builtin_riscv_sha512sig1h(__x
, __y
);
110 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
111 __riscv_sha512sig1l(uint32_t __x
, uint32_t __y
) {
112 return __builtin_riscv_sha512sig1l(__x
, __y
);
115 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
116 __riscv_sha512sum0r(uint32_t __x
, uint32_t __y
) {
117 return __builtin_riscv_sha512sum0r(__x
, __y
);
120 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
121 __riscv_sha512sum1r(uint32_t __x
, uint32_t __y
) {
122 return __builtin_riscv_sha512sum1r(__x
, __y
);
126 #if __riscv_xlen == 64
127 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
128 __riscv_sha512sig0(uint64_t __x
) {
129 return __builtin_riscv_sha512sig0(__x
);
132 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
133 __riscv_sha512sig1(uint64_t __x
) {
134 return __builtin_riscv_sha512sig1(__x
);
137 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
138 __riscv_sha512sum0(uint64_t __x
) {
139 return __builtin_riscv_sha512sum0(__x
);
142 static __inline__
uint64_t __attribute__((__always_inline__
, __nodebug__
))
143 __riscv_sha512sum1(uint64_t __x
) {
144 return __builtin_riscv_sha512sum1(__x
);
147 #endif // defined(__riscv_zknh)
149 #if defined(__riscv_zksh)
150 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
151 __riscv_sm3p0(uint32_t __x
) {
152 return __builtin_riscv_sm3p0(__x
);
155 static __inline__
uint32_t __attribute__((__always_inline__
, __nodebug__
))
156 __riscv_sm3p1(uint32_t __x
) {
157 return __builtin_riscv_sm3p1(__x
);
159 #endif // defined(__riscv_zksh)
161 #if defined(__riscv_zksed)
162 #define __riscv_sm4ed(x, y, bs) __builtin_riscv_sm4ed(x, y, bs);
163 #define __riscv_sm4ks(x, y, bs) __builtin_riscv_sm4ks(x, y, bs);
164 #endif // defined(__riscv_zksed)
166 #if defined(__cplusplus)