/* Propagate the NaN, setting exceptions if it is signalling. 'n' is always a NaN. 'm' may be a number, NaN or infinity.  */
static u32 vfp_propagate_nan(struct vfp_single *vsd, struct vfp_single *vsn, struct vfp_single *vsm, u32 fpscr)
/* Propagate the NaN, setting exceptions if it is signalling. 'n' is always a NaN. 'm' may be a number, NaN or infinity.  */
static u32 vfp_propagate_nan(struct vfp_single *vsd, struct vfp_single *vsn, struct vfp_single *vsm, u32 fpscr)
{
	struct vfp_single *nan;
	int tn, tm = 0;
	tn = vfp_single_type(vsn);
	if (vsm)
		tm = vfp_single_type(vsm);
	if (fpscr & FPSCR_DEFAULT_NAN)
		nan = &vfp_single_default_qnan;
	else {
		if (tn == VFP_SNAN || (tm != VFP_SNAN && tn == VFP_QNAN))
			nan = vsn;
		else
			nan = vsm;
		nan->significand |= VFP_SINGLE_SIGNIFICAND_QNAN;
	}
	*vsd = *nan;
	return tn == VFP_SNAN || tm == VFP_SNAN ? FPSCR_IOC : VFP_NAN_FLAG;
}