{
int which;
bool infzero = (ab_mask == float_cmask_infzero);
+ bool have_snan = (abc_mask & float_cmask_snan);
- if (unlikely(abc_mask & float_cmask_snan)) {
+ if (unlikely(have_snan)) {
float_raise(float_flag_invalid | float_flag_invalid_snan, s);
}
if (s->default_nan_mode) {
which = 3;
} else {
- which = pickNaNMulAdd(a->cls, b->cls, c->cls, infzero, s);
+ which = pickNaNMulAdd(a->cls, b->cls, c->cls, infzero, have_snan, s);
}
if (which == 3) {
| Return values : 0 : a; 1 : b; 2 : c; 3 : default-NaN
*----------------------------------------------------------------------------*/
static int pickNaNMulAdd(FloatClass a_cls, FloatClass b_cls, FloatClass c_cls,
- bool infzero, float_status *status)
+ bool infzero, bool have_snan, float_status *status)
{
/*
* We guarantee not to require the target to tell us how to