...
+/* Returns - x, implemented by inverting the sign bit,
+ so that it works also on 'float' NaN values. */
+_GL_UNUSED static float
+minus_NaNf (float x)
+{
+#if defined __mips__
+ /* The mips instruction neg.s may have no effect on NaNs.
+ Therefore, invert the sign bit using integer operations. */
+ union { unsigned int i; float value; } u;
+ u.value = x;
+ u.i ^= 1U << 31;
+ return u.value;
+#else
+ return - x;
+#endif
+}
Accessing the union first though 'value' and then through 'i' may be undefined behavior. I don't think you can legally access the union through the inactive member.
Jeff