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