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