]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.target/i386/avx512f-vfmsubXXXss-2.c
6beaed87898f8e5ad52d373fe1f72ffbdd7a626f
2 /* { dg-options "-O2 -mavx512f" } */
3 /* { dg-require-effective-target avx512f } */
5 #include "avx512f-check.h"
7 #include "avx512f-helper.h"
9 #define SIZE (128 / 32)
10 #include "avx512f-mask-type.h"
13 calc_add (float *s1
, float *s2
, float *s3
, float* r
)
15 r
[0] = s1
[0] * s2
[0] - s3
[0];
18 for (i
= 1; i
< SIZE
; i
++)
23 calc_add_3 (float *s1
, float *s2
, float *s3
, float* r
)
25 r
[0] = s2
[0] * s3
[0] - s1
[0];
28 for (i
= 1; i
< SIZE
; i
++)
36 union128 res1
, res2
, res3
, res4
, res5
, res6
, res7
, src1
, src2
, src3
;
37 MASK_TYPE mask
= MASK_VALUE
;
38 float res_ref1
[SIZE
], res_ref2
[SIZE
];
41 for (i
= 0; i
< SIZE
; i
++)
43 src1
.a
[i
] = DEFAULT_VALUE
;
44 src2
.a
[i
] = 56.78 * (i
+ 1) * sign
;
45 src3
.a
[i
] = 90.12 * (i
+ 2) * sign
;
48 for (i
= 0; i
< SIZE
; i
++)
50 res1
.a
[i
] = DEFAULT_VALUE
;
51 res2
.a
[i
] = DEFAULT_VALUE
;
52 res5
.a
[i
] = DEFAULT_VALUE
;
53 res6
.a
[i
] = DEFAULT_VALUE
;
56 calc_add (src1
.a
, src2
.a
, src3
.a
, res_ref1
);
57 calc_add_3(src1
.a
, src2
.a
, src3
.a
, res_ref2
);
59 res1
.x
= _mm_mask_fmsub_ss (src1
.x
, mask
, src2
.x
, src3
.x
);
60 res2
.x
= _mm_mask3_fmsub_ss (src2
.x
, src3
.x
, src1
.x
, mask
);
61 res3
.x
= _mm_maskz_fmsub_ss (mask
, src1
.x
, src2
.x
, src3
.x
);
62 res4
.x
= _mm_fmsub_round_ss (src1
.x
, src2
.x
, src3
.x
, _MM_FROUND_NO_EXC
);
63 res5
.x
= _mm_mask_fmsub_round_ss (src1
.x
, mask
, src2
.x
, src3
.x
, _MM_FROUND_NO_EXC
);
64 res6
.x
= _mm_mask3_fmsub_round_ss (src2
.x
, src3
.x
, src1
.x
, mask
, _MM_FROUND_NO_EXC
);
65 res7
.x
= _mm_maskz_fmsub_round_ss (mask
, src1
.x
, src2
.x
, src3
.x
, _MM_FROUND_NO_EXC
);
67 if (check_union128 (res4
, res_ref1
))
70 MASK_ZERO () (res_ref1
, mask
, 1);
71 if (check_union128 (res3
, res_ref1
))
74 MASK_ZERO () (res_ref1
, mask
, 1);
75 if (check_union128 (res7
, res_ref1
))
78 MASK_MERGE () (res_ref2
, mask
, 1);
79 if (check_union128 (res2
, res_ref2
))
82 MASK_MERGE () (res_ref2
, mask
, 1);
83 if (check_union128 (res6
, res_ref2
))
86 MASK_MERGE () (res_ref1
, mask
, 1);
87 if (check_union128 (res1
, res_ref1
))
90 MASK_MERGE () (res_ref1
, mask
, 1);
91 if (check_union128 (res5
, res_ref1
))