2 /* { dg-require-effective-target fma4 } */
3 /* { dg-options "-O0 -mfma4" } */
5 #include "fma4-check.h"
18 } dst
, res
, src1
, src2
, src3
;
20 /* Note that in macc*,msub*,mnmacc* and mnsub* instructions, the intermdediate
21 product is not rounded, only the addition is rounded. */
27 for (i
= 0; i
< NUM
* 4; i
++)
39 for (i
= 0; i
< NUM
* 4; i
++)
50 int i
, j
, check_fails
= 0;
51 for (i
= 0; i
< NUM
* 4; i
= i
+ 4)
52 for (j
= 0; j
< 4; j
++)
54 res
.f
[i
+ j
] = - (src1
.f
[i
+ j
] * src2
.f
[i
+ j
]) + src3
.f
[i
+ j
];
55 if (dst
.f
[i
+ j
] != res
.f
[i
+ j
])
64 int i
, j
, check_fails
= 0;
65 for (i
= 0; i
< NUM
* 2; i
= i
+ 2)
66 for (j
= 0; j
< 2; j
++)
68 res
.d
[i
+ j
] = - (src1
.d
[i
+ j
] * src2
.d
[i
+ j
]) + src3
.d
[i
+ j
];
69 if (dst
.d
[i
+ j
] != res
.d
[i
+ j
])
79 int i
, j
, check_fails
= 0;
80 for (i
= 0; i
< NUM
* 4; i
= i
+ 4)
82 res
.f
[i
] = - (src1
.f
[i
] * src2
.f
[i
]) + src3
.f
[i
];
83 if (dst
.f
[i
] != res
.f
[i
])
92 int i
, j
, check_fails
= 0;
93 for (i
= 0; i
< NUM
* 2; i
= i
+ 2)
95 res
.d
[i
] = - (src1
.d
[i
] * src2
.d
[i
]) + src3
.d
[i
];
96 if (dst
.d
[i
] != res
.d
[i
])
109 for (i
= 0; i
< NUM
; i
++)
110 dst
.x
[i
] = _mm_nmacc_ps (src1
.x
[i
], src2
.x
[i
], src3
.x
[i
]);
112 if (check_nmaccps ())
116 for (i
= 0; i
< NUM
; i
++)
117 dst
.x
[i
] = _mm_nmacc_ss (src1
.x
[i
], src2
.x
[i
], src3
.x
[i
]);
119 if (check_nmaccss ())
124 for (i
= 0; i
< NUM
; i
++)
125 dst
.y
[i
] = _mm_nmacc_pd (src1
.y
[i
], src2
.y
[i
], src3
.y
[i
]);
127 if (check_nmaccpd ())
131 for (i
= 0; i
< NUM
; i
++)
132 dst
.y
[i
] = _mm_nmacc_sd (src1
.y
[i
], src2
.y
[i
], src3
.y
[i
]);
134 if (check_nmaccsd ())