1133707Skan/* { dg-do run } */ 2133707Skan/* { dg-options "-O2 -mavx512f" } */ 3156854Sru/* { dg-require-effective-target avx512f } */ 4156854Sru 5198471Skan#define AVX512F 6133707Skan 7133707Skan#include "avx512f-helper.h" 8133707Skan 9169718Skan#define SIZE (AVX512F_LEN / 32) 10133707Skan#include "avx512f-mask-type.h" 11133707Skan 12133707Skan 13133707Skanstatic void 14133707SkanCALC (int *src1, int *src2, int *dst) 15133707Skan{ 16133707Skan int i; 17169718Skan 18133707Skan for (i = 0; i < SIZE; i++) 19133707Skan dst[i] = src1[i] * src2[i]; 20169718Skan} 21169718Skan 22169718Skanvoid 23169718SkanTEST (void) 24169718Skan{ 25133707Skan UNION_TYPE (AVX512F_LEN, i_d) src1, src2, res1, res2, res3; 26133707Skan MASK_TYPE mask = MASK_VALUE; 27133707Skan int dst_ref[SIZE]; 28133707Skan int i; 29133707Skan 30133707Skan for (i = 0; i < SIZE; i++) 31194564Skan { 32194564Skan src1.a[i] = i + 50; 33194564Skan src2.a[i] = i + 100; 34194564Skan } 35194564Skan 36194564Skan for (i = 0; i < SIZE; i++) 37194564Skan res2.a[i] = DEFAULT_VALUE; 38194564Skan 39194564Skan res1.x = INTRINSIC (_mullo_epi32) (src1.x, src2.x); 40169718Skan res2.x = INTRINSIC (_mask_mullo_epi32) (res2.x, mask, src1.x, src2.x); 41133707Skan res3.x = INTRINSIC (_maskz_mullo_epi32) (mask, src1.x, src2.x); 42133707Skan 43133707Skan CALC (src1.a, src2.a, dst_ref); 44133707Skan 45133707Skan if (UNION_CHECK (AVX512F_LEN, i_d) (res1, dst_ref)) 46133707Skan abort (); 47133707Skan 48194564Skan MASK_MERGE (i_d) (dst_ref, mask, SIZE); 49133707Skan if (UNION_CHECK (AVX512F_LEN, i_d) (res2, dst_ref)) 50139106Sru abort (); 51133707Skan 52194564Skan MASK_ZERO (i_d) (dst_ref, mask, SIZE); 53133707Skan if (UNION_CHECK (AVX512F_LEN, i_d) (res3, dst_ref)) 54133707Skan abort (); 55156854Sru 56169718Skan} 57194564Skan