1 /* { dg-require-effective-target fma4 } */
2 /* { dg-options "-O2 -mfma4" } */
4 #include "fma4-check.h"
17 } dst
, res
, src1
, src2
, src3
;
19 /* Note that in macc*,msub*,mnmacc* and mnsub* instructions, the intermdediate
20 product is not rounded, only the addition is rounded. */
26 for (i
= 0; i
< NUM
* 8; i
++)
38 for (i
= 0; i
< NUM
* 4; i
++)
49 int i
, j
, check_fails
= 0;
50 for (i
= 0; i
< NUM
* 8; i
= i
+ 8)
51 for (j
= 0; j
< 8; j
++)
53 res
.f
[i
+ j
] = - (src1
.f
[i
+ j
] * src2
.f
[i
+ j
]) - src3
.f
[i
+ j
];
54 if (dst
.f
[i
+ j
] != res
.f
[i
+ j
])
63 int i
, j
, check_fails
= 0;
64 for (i
= 0; i
< NUM
* 4; i
= i
+ 4)
65 for (j
= 0; j
< 4; j
++)
67 res
.d
[i
+ j
] = - (src1
.d
[i
+ j
] * src2
.d
[i
+ j
]) - src3
.d
[i
+ j
];
68 if (dst
.d
[i
+ j
] != res
.d
[i
+ j
])
81 for (i
= 0; i
< NUM
; i
++)
82 dst
.x
[i
] = _mm256_nmsub_ps (src1
.x
[i
], src2
.x
[i
], src3
.x
[i
]);
84 if (check_nmsubps (&dst
.x
[i
], &src1
.f
[i
* 4], &src2
.f
[i
* 4], &src3
.f
[i
* 4]))
89 for (i
= 0; i
< NUM
; i
++)
90 dst
.y
[i
] = _mm256_nmsub_pd (src1
.y
[i
], src2
.y
[i
], src3
.y
[i
]);
92 if (check_nmsubpd (&dst
.y
[i
], &src1
.d
[i
* 2], &src2
.d
[i
* 2], &src3
.d
[i
* 2]))