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