1 // RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -target-feature +gfni -emit-llvm -o - | FileCheck %s --check-prefix SSE
2 // RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -DAVX -target-feature +gfni -target-feature +avx -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX
3 // RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-apple-darwin -DAVX512 -target-feature +gfni -target-feature +avx512bw -target-feature +avx512vl -emit-llvm -o - | FileCheck %s --check-prefixes SSE,AVX,AVX512
7 __m128i test_mm_gf2p8affineinv_epi64_epi8(__m128i A, __m128i B) {
8 // SSE-LABEL: @test_mm_gf2p8affineinv_epi64_epi8
9 // SSE: @llvm.x86.vgf2p8affineinvqb.128
10 return _mm_gf2p8affineinv_epi64_epi8(A, B, 1);
13 __m128i test_mm_gf2p8affine_epi64_epi8(__m128i A, __m128i B) {
14 // SSE-LABEL: @test_mm_gf2p8affine_epi64_epi8
15 // SSE: @llvm.x86.vgf2p8affineqb.128
16 return _mm_gf2p8affine_epi64_epi8(A, B, 1);
19 __m128i test_mm_gf2p8mul_epi8(__m128i A, __m128i B) {
20 // SSE-LABEL: @test_mm_gf2p8mul_epi8
21 // SSE: @llvm.x86.vgf2p8mulb.128
22 return _mm_gf2p8mul_epi8(A, B);
25 #if defined(AVX) || defined(AVX512)
26 __m256i test_mm256_gf2p8affineinv_epi64_epi8(__m256i A, __m256i B) {
27 // AVX-LABEL: @test_mm256_gf2p8affineinv_epi64_epi8
28 // AVX: @llvm.x86.vgf2p8affineinvqb.256
29 return _mm256_gf2p8affineinv_epi64_epi8(A, B, 1);
32 __m256i test_mm256_gf2p8affine_epi64_epi8(__m256i A, __m256i B) {
33 // AVX-LABEL: @test_mm256_gf2p8affine_epi64_epi8
34 // AVX: @llvm.x86.vgf2p8affineqb.256
35 return _mm256_gf2p8affine_epi64_epi8(A, B, 1);
38 __m256i test_mm256_gf2p8mul_epi8(__m256i A, __m256i B) {
39 // AVX-LABEL: @test_mm256_gf2p8mul_epi8
40 // AVX: @llvm.x86.vgf2p8mulb.256
41 return _mm256_gf2p8mul_epi8(A, B);
46 __m512i test_mm512_gf2p8affineinv_epi64_epi8(__m512i A, __m512i B) {
47 // AVX512-LABEL: @test_mm512_gf2p8affineinv_epi64_epi8
48 // AVX512: @llvm.x86.vgf2p8affineinvqb.512
49 return _mm512_gf2p8affineinv_epi64_epi8(A, B, 1);
52 __m512i test_mm512_mask_gf2p8affineinv_epi64_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) {
53 // AVX512-LABEL: @test_mm512_mask_gf2p8affineinv_epi64_epi8
54 // AVX512: @llvm.x86.vgf2p8affineinvqb.512
55 // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
56 return _mm512_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1);
59 __m512i test_mm512_maskz_gf2p8affineinv_epi64_epi8(__mmask64 U, __m512i A, __m512i B) {
60 // AVX512-LABEL: @test_mm512_maskz_gf2p8affineinv_epi64_epi8
61 // AVX512: @llvm.x86.vgf2p8affineinvqb.512
62 // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
63 return _mm512_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1);
66 __m256i test_mm256_mask_gf2p8affineinv_epi64_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) {
67 // AVX256-LABEL: @test_mm256_mask_gf2p8affineinv_epi64_epi8
68 // AVX256: @llvm.x86.vgf2p8affineinvqb.256
69 // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
70 return _mm256_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1);
73 __m256i test_mm256_maskz_gf2p8affineinv_epi64_epi8(__mmask32 U, __m256i A, __m256i B) {
74 // AVX256-LABEL: @test_mm256_maskz_gf2p8affineinv_epi64_epi8
75 // AVX256: @llvm.x86.vgf2p8affineinvqb.256
76 // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
77 return _mm256_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1);
80 __m128i test_mm_mask_gf2p8affineinv_epi64_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) {
81 // AVX512-LABEL: @test_mm_mask_gf2p8affineinv_epi64_epi8
82 // AVX512: @llvm.x86.vgf2p8affineinvqb.128
83 // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
84 return _mm_mask_gf2p8affineinv_epi64_epi8(S, U, A, B, 1);
87 __m128i test_mm_maskz_gf2p8affineinv_epi64_epi8(__mmask16 U, __m128i A, __m128i B) {
88 // AVX512-LABEL: @test_mm_maskz_gf2p8affineinv_epi64_epi8
89 // AVX512: @llvm.x86.vgf2p8affineinvqb.128
90 // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
91 return _mm_maskz_gf2p8affineinv_epi64_epi8(U, A, B, 1);
94 __m512i test_mm512_gf2p8affine_epi64_epi8(__m512i A, __m512i B) {
95 // AVX512-LABEL: @test_mm512_gf2p8affine_epi64_epi8
96 // AVX512: @llvm.x86.vgf2p8affineqb.512
97 return _mm512_gf2p8affine_epi64_epi8(A, B, 1);
100 __m512i test_mm512_mask_gf2p8affine_epi64_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) {
101 // AVX512-LABEL: @test_mm512_mask_gf2p8affine_epi64_epi8
102 // AVX512: @llvm.x86.vgf2p8affineqb.512
103 // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
104 return _mm512_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1);
107 __m512i test_mm512_maskz_gf2p8affine_epi64_epi8(__mmask64 U, __m512i A, __m512i B) {
108 // AVX512-LABEL: @test_mm512_maskz_gf2p8affine_epi64_epi8
109 // AVX512: @llvm.x86.vgf2p8affineqb.512
110 // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
111 return _mm512_maskz_gf2p8affine_epi64_epi8(U, A, B, 1);
114 __m256i test_mm256_mask_gf2p8affine_epi64_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) {
115 // AVX256-LABEL: @test_mm256_mask_gf2p8affine_epi64_epi8
116 // AVX256: @llvm.x86.vgf2p8affineqb.256
117 // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
118 return _mm256_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1);
121 __m256i test_mm256_maskz_gf2p8affine_epi64_epi8(__mmask32 U, __m256i A, __m256i B) {
122 // AVX256-LABEL: @test_mm256_maskz_gf2p8affine_epi64_epi8
123 // AVX256: @llvm.x86.vgf2p8affineqb.256
124 // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
125 return _mm256_maskz_gf2p8affine_epi64_epi8(U, A, B, 1);
128 __m128i test_mm_mask_gf2p8affine_epi64_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) {
129 // AVX512-LABEL: @test_mm_mask_gf2p8affine_epi64_epi8
130 // AVX512: @llvm.x86.vgf2p8affineqb.128
131 // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
132 return _mm_mask_gf2p8affine_epi64_epi8(S, U, A, B, 1);
135 __m128i test_mm_maskz_gf2p8affine_epi64_epi8(__mmask16 U, __m128i A, __m128i B) {
136 // AVX512-LABEL: @test_mm_maskz_gf2p8affine_epi64_epi8
137 // AVX512: @llvm.x86.vgf2p8affineqb.128
138 // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
139 return _mm_maskz_gf2p8affine_epi64_epi8(U, A, B, 1);
142 __m512i test_mm512_gf2p8mul_epi8(__m512i A, __m512i B) {
143 // AVX512-LABEL: @test_mm512_gf2p8mul_epi8
144 // AVX512: @llvm.x86.vgf2p8mulb.512
145 return _mm512_gf2p8mul_epi8(A, B);
148 __m512i test_mm512_mask_gf2p8mul_epi8(__m512i S, __mmask64 U, __m512i A, __m512i B) {
149 // AVX512-LABEL: @test_mm512_mask_gf2p8mul_epi8
150 // AVX512: @llvm.x86.vgf2p8mulb.512
151 // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
152 return _mm512_mask_gf2p8mul_epi8(S, U, A, B);
155 __m512i test_mm512_maskz_gf2p8mul_epi8(__mmask64 U, __m512i A, __m512i B) {
156 // AVX512-LABEL: @test_mm512_maskz_gf2p8mul_epi8
157 // AVX512: @llvm.x86.vgf2p8mulb.512
158 // AVX512: select <64 x i1> %{{[0-9]+}}, <64 x i8> %{{[0-9]+}}, <64 x i8> {{.*}}
159 return _mm512_maskz_gf2p8mul_epi8(U, A, B);
162 __m256i test_mm256_mask_gf2p8mul_epi8(__m256i S, __mmask32 U, __m256i A, __m256i B) {
163 // AVX256-LABEL: @test_mm256_mask_gf2p8mul_epi8
164 // AVX256: @llvm.x86.vgf2p8mulb.256
165 // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
166 return _mm256_mask_gf2p8mul_epi8(S, U, A, B);
169 __m256i test_mm256_maskz_gf2p8mul_epi8(__mmask32 U, __m256i A, __m256i B) {
170 // AVX256-LABEL: @test_mm256_maskz_gf2p8mul_epi8
171 // AVX256: @llvm.x86.vgf2p8mulb.256
172 // AVX256: select <32 x i1> %{{[0-9]+}}, <32 x i8> %{{[0-9]+}}, <32 x i8> {{.*}}
173 return _mm256_maskz_gf2p8mul_epi8(U, A, B);
176 __m128i test_mm_mask_gf2p8mul_epi8(__m128i S, __mmask16 U, __m128i A, __m128i B) {
177 // AVX512-LABEL: @test_mm_mask_gf2p8mul_epi8
178 // AVX512: @llvm.x86.vgf2p8mulb.128
179 // AVX512: select <16 x i1> %{{[0-9]+}}, <16 x i8> %{{[0-9]+}}, <16 x i8> {{.*}}
180 return _mm_mask_gf2p8mul_epi8(S, U, A, B);