| Index: gcc/libgfortran/m4/maxval.m4
|
| diff --git a/gcc/libgfortran/m4/maxval.m4 b/gcc/libgfortran/m4/maxval.m4
|
| index 1fd64a02bd9857c9d06f91b4a22664cbff220e19..7557eb130a1cce2a3496362ad57732aad1f45439 100644
|
| --- a/gcc/libgfortran/m4/maxval.m4
|
| +++ b/gcc/libgfortran/m4/maxval.m4
|
| @@ -33,14 +33,55 @@ include(ifunction.m4)dnl
|
| `#if defined (HAVE_'atype_name`) && defined (HAVE_'rtype_name`)'
|
|
|
| ARRAY_FUNCTION(atype_min,
|
| -` result = atype_min;',
|
| -` if (*src > result)
|
| - result = *src;')
|
| +`#if defined ('atype_inf`)
|
| + result = -atype_inf;
|
| +#else
|
| + result = atype_min;
|
| +#endif',
|
| +`#if defined ('atype_nan`)
|
| + if (*src >= result)
|
| + break;
|
| + }
|
| + if (unlikely (n >= len))
|
| + result = atype_nan;
|
| + else for (; n < len; n++, src += delta)
|
| + {
|
| +#endif
|
| + if (*src > result)
|
| + result = *src;')
|
|
|
| MASKED_ARRAY_FUNCTION(atype_min,
|
| -` result = atype_min;',
|
| -` if (*msrc && *src > result)
|
| - result = *src;')
|
| +`#if defined ('atype_inf`)
|
| + result = -atype_inf;
|
| +#else
|
| + result = atype_min;
|
| +#endif
|
| +#if defined ('atype_nan`)
|
| + int non_empty_p = 0;
|
| +#endif',
|
| +`#if defined ('atype_inf`) || defined ('atype_nan`)
|
| + if (*msrc)
|
| + {
|
| +#if defined ('atype_nan`)
|
| + non_empty_p = 1;
|
| + if (*src >= result)
|
| +#endif
|
| + break;
|
| + }
|
| + }
|
| + if (unlikely (n >= len))
|
| + {
|
| +#if defined ('atype_nan`)
|
| + result = non_empty_p ? atype_nan : atype_min;
|
| +#else
|
| + result = atype_min;
|
| +#endif
|
| + }
|
| + else for (; n < len; n++, src += delta, msrc += mdelta)
|
| + {
|
| +#endif
|
| + if (*msrc && *src > result)
|
| + result = *src;')
|
|
|
| SCALAR_ARRAY_FUNCTION(atype_min)
|
|
|
|
|