1*e5dd7070Spatrick /*===---- shaintrin.h - SHA intrinsics -------------------------------------===
2*e5dd7070Spatrick *
3*e5dd7070Spatrick * Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*e5dd7070Spatrick * See https://llvm.org/LICENSE.txt for license information.
5*e5dd7070Spatrick * SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*e5dd7070Spatrick *
7*e5dd7070Spatrick *===-----------------------------------------------------------------------===
8*e5dd7070Spatrick */
9*e5dd7070Spatrick
10*e5dd7070Spatrick #ifndef __IMMINTRIN_H
11*e5dd7070Spatrick #error "Never use <shaintrin.h> directly; include <immintrin.h> instead."
12*e5dd7070Spatrick #endif
13*e5dd7070Spatrick
14*e5dd7070Spatrick #ifndef __SHAINTRIN_H
15*e5dd7070Spatrick #define __SHAINTRIN_H
16*e5dd7070Spatrick
17*e5dd7070Spatrick /* Define the default attributes for the functions in this file. */
18*e5dd7070Spatrick #define __DEFAULT_FN_ATTRS __attribute__((__always_inline__, __nodebug__, __target__("sha"), __min_vector_width__(128)))
19*e5dd7070Spatrick
20*e5dd7070Spatrick #define _mm_sha1rnds4_epu32(V1, V2, M) \
21*e5dd7070Spatrick __builtin_ia32_sha1rnds4((__v4si)(__m128i)(V1), (__v4si)(__m128i)(V2), (M))
22*e5dd7070Spatrick
23*e5dd7070Spatrick static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sha1nexte_epu32(__m128i __X,__m128i __Y)24*e5dd7070Spatrick _mm_sha1nexte_epu32(__m128i __X, __m128i __Y)
25*e5dd7070Spatrick {
26*e5dd7070Spatrick return (__m128i)__builtin_ia32_sha1nexte((__v4si)__X, (__v4si)__Y);
27*e5dd7070Spatrick }
28*e5dd7070Spatrick
29*e5dd7070Spatrick static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sha1msg1_epu32(__m128i __X,__m128i __Y)30*e5dd7070Spatrick _mm_sha1msg1_epu32(__m128i __X, __m128i __Y)
31*e5dd7070Spatrick {
32*e5dd7070Spatrick return (__m128i)__builtin_ia32_sha1msg1((__v4si)__X, (__v4si)__Y);
33*e5dd7070Spatrick }
34*e5dd7070Spatrick
35*e5dd7070Spatrick static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sha1msg2_epu32(__m128i __X,__m128i __Y)36*e5dd7070Spatrick _mm_sha1msg2_epu32(__m128i __X, __m128i __Y)
37*e5dd7070Spatrick {
38*e5dd7070Spatrick return (__m128i)__builtin_ia32_sha1msg2((__v4si)__X, (__v4si)__Y);
39*e5dd7070Spatrick }
40*e5dd7070Spatrick
41*e5dd7070Spatrick static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sha256rnds2_epu32(__m128i __X,__m128i __Y,__m128i __Z)42*e5dd7070Spatrick _mm_sha256rnds2_epu32(__m128i __X, __m128i __Y, __m128i __Z)
43*e5dd7070Spatrick {
44*e5dd7070Spatrick return (__m128i)__builtin_ia32_sha256rnds2((__v4si)__X, (__v4si)__Y, (__v4si)__Z);
45*e5dd7070Spatrick }
46*e5dd7070Spatrick
47*e5dd7070Spatrick static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sha256msg1_epu32(__m128i __X,__m128i __Y)48*e5dd7070Spatrick _mm_sha256msg1_epu32(__m128i __X, __m128i __Y)
49*e5dd7070Spatrick {
50*e5dd7070Spatrick return (__m128i)__builtin_ia32_sha256msg1((__v4si)__X, (__v4si)__Y);
51*e5dd7070Spatrick }
52*e5dd7070Spatrick
53*e5dd7070Spatrick static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_sha256msg2_epu32(__m128i __X,__m128i __Y)54*e5dd7070Spatrick _mm_sha256msg2_epu32(__m128i __X, __m128i __Y)
55*e5dd7070Spatrick {
56*e5dd7070Spatrick return (__m128i)__builtin_ia32_sha256msg2((__v4si)__X, (__v4si)__Y);
57*e5dd7070Spatrick }
58*e5dd7070Spatrick
59*e5dd7070Spatrick #undef __DEFAULT_FN_ATTRS
60*e5dd7070Spatrick
61*e5dd7070Spatrick #endif /* __SHAINTRIN_H */
62