1b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir// RUN: %clang_cc1 %s -O3 -triple=x86_64-unknown-unknown -target-feature +sha -emit-llvm -o - | FileCheck %s
2b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir
3b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir// Don't include mm_malloc.h, it's system specific.
4b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir#define __MM_MALLOC_H
5b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir
6b2b2c329476d45a5c5dd51be0391449ada1c7ad5Ben Langmuir#include <immintrin.h>
7b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir
8b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir__m128i test_sha1rnds4(__m128i a, __m128i b) {
9b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  // CHECK: call <4 x i32> @llvm.x86.sha1rnds4
10b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  return _mm_sha1rnds4_epu32(a, b, 8);
11b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir}
12b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir__m128i test_sha1nexte(__m128i a, __m128i b) {
13b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  // CHECK: call <4 x i32> @llvm.x86.sha1nexte
14b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  return _mm_sha1nexte_epu32(a, b);
15b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir}
16b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir__m128i test_sha1msg1(__m128i a, __m128i b) {
17b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  // CHECK: call <4 x i32> @llvm.x86.sha1msg1
18b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  return _mm_sha1msg1_epu32(a, b);
19b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir}
20b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir__m128i test_sha1msg2(__m128i a, __m128i b) {
21b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  // CHECK: call <4 x i32> @llvm.x86.sha1msg2
22b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  return _mm_sha1msg2_epu32(a, b);
23b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir}
24b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir__m128i test_sha256rnds2(__m128i a, __m128i b, __m128i c) {
25b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  // CHECK: call <4 x i32> @llvm.x86.sha256rnds2
26b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  return _mm_sha256rnds2_epu32(a, b, c);
27b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir}
28b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir__m128i test_sha256msg1(__m128i a, __m128i b) {
29b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  // CHECK: call <4 x i32> @llvm.x86.sha256msg1
30b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  return _mm_sha256msg1_epu32(a, b);
31b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir}
32b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir__m128i test_sha256msg2(__m128i a, __m128i b) {
33b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  // CHECK: call <4 x i32> @llvm.x86.sha256msg2
34b83f5a77335ca8a5b41ba4e17aa8d4bb6248c1e4Ben Langmuir  return _mm_sha256msg2_epu32(a, b);
35b2b2c329476d45a5c5dd51be0391449ada1c7ad5Ben Langmuir}
36