1b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir/*===---- shaintrin.h - SHA intrinsics -------------------------------------=== 2b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * 3b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * Permission is hereby granted, free of charge, to any person obtaining a copy 4b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * of this software and associated documentation files (the "Software"), to deal 5b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * in the Software without restriction, including without limitation the rights 6b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * copies of the Software, and to permit persons to whom the Software is 8b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * furnished to do so, subject to the following conditions: 9b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * 10b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * The above copyright notice and this permission notice shall be included in 11b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * all copies or substantial portions of the Software. 12b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * 13b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * THE SOFTWARE. 20b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir * 21b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir *===-----------------------------------------------------------------------=== 22b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir */ 23b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 24b2b2c329476d45a5c5dd51be0391449ada1c7ad5Ben Langmuir#ifndef __IMMINTRIN_H 259e130d037f1f68438306ea136655fffc11a34031Ben Langmuir#error "Never use <shaintrin.h> directly; include <immintrin.h> instead." 26b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir#endif 27b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 28b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir#ifndef __SHAINTRIN_H 29b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir#define __SHAINTRIN_H 30b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 31b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir#if !defined (__SHA__) 32b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir# error "SHA instructions not enabled" 33b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir#endif 34b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 35b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir#define _mm_sha1rnds4_epu32(V1, V2, M) __extension__ ({ \ 36b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir __builtin_ia32_sha1rnds4((V1), (V2), (M)); }) 37b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 38b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuirstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) 39b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir_mm_sha1nexte_epu32(__m128i __X, __m128i __Y) 40b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir{ 410e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return (__m128i)__builtin_ia32_sha1nexte((__v4si)__X, (__v4si)__Y); 42b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir} 43b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 44b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuirstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) 45b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir_mm_sha1msg1_epu32(__m128i __X, __m128i __Y) 46b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir{ 470e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return (__m128i)__builtin_ia32_sha1msg1((__v4si)__X, (__v4si)__Y); 48b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir} 49b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 50b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuirstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) 51b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir_mm_sha1msg2_epu32(__m128i __X, __m128i __Y) 52b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir{ 530e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return (__m128i)__builtin_ia32_sha1msg2((__v4si)__X, (__v4si)__Y); 54b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir} 55b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 56b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuirstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) 57b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir_mm_sha256rnds2_epu32(__m128i __X, __m128i __Y, __m128i __Z) 58b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir{ 590e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return (__m128i)__builtin_ia32_sha256rnds2((__v4si)__X, (__v4si)__Y, (__v4si)__Z); 60b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir} 61b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 62b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuirstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) 63b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir_mm_sha256msg1_epu32(__m128i __X, __m128i __Y) 64b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir{ 650e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return (__m128i)__builtin_ia32_sha256msg1((__v4si)__X, (__v4si)__Y); 66b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir} 67b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 68b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuirstatic __inline__ __m128i __attribute__((__always_inline__, __nodebug__)) 69b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir_mm_sha256msg2_epu32(__m128i __X, __m128i __Y) 70b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir{ 710e2c34f92f00628d48968dfea096d36381f494cbStephen Hines return (__m128i)__builtin_ia32_sha256msg2((__v4si)__X, (__v4si)__Y); 72b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir} 73b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir 74b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir#endif /* __SHAINTRIN_H */ 75