1 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
2 /* { dg-require-effective-target sse5 } */
3 /* { dg-options "-O2 -msse5" } */
5 #include "sse5-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
])
110 for (i
= 0; i
< NUM
; i
++)
111 dst
.x
[i
] = _mm_msub_ps (src1
.x
[i
], src2
.x
[i
], src3
.x
[i
]);
117 for (i
= 0; i
< NUM
; i
++)
118 dst
.x
[i
] = _mm_msub_ss (src1
.x
[i
], src2
.x
[i
], src3
.x
[i
]);
126 for (i
= 0; i
< NUM
; i
++)
127 dst
.y
[i
] = _mm_msub_pd (src1
.y
[i
], src2
.y
[i
], src3
.y
[i
]);
133 for (i
= 0; i
< NUM
; i
++)
134 dst
.y
[i
] = _mm_msub_sd (src1
.y
[i
], src2
.y
[i
], src3
.y
[i
]);