} else if (m_sig == 0) { vdd->sign = (fpscr & FPSCR_RMODE_MASK) == FPSCR_ROUND_MINUSINF ? 0x8000 : 0; 
vfp_double_add(struct vfp_double *vdd, struct vfp_double *vdn,	       struct vfp_double *vdm, u32 fpscr){	u32 exp_diff;	u64 m_sig;	if (vdn->significand & (1ULL << 63) ||	    vdm->significand & (1ULL << 63)) {		pr_info("VFP: bad FP values in %s\n", __func__);		vfp_double_dump("VDN", vdn);		vfp_double_dump("VDM", vdm);	}	/*	 * Ensure that 'n' is the largest magnitude number.  Note that	 * if 'n' and 'm' have equal exponents, we do not swap them.	 * This ensures that NaN propagation works correctly.	 */	if (vdn->exponent < vdm->exponent) {		struct vfp_double *t = vdn;		vdn = vdm;		vdm = t;	}	/*	 * Is 'n' an infinity or a NaN?  Note that 'm' may be a number,	 * infinity or a NaN here.	 */	if (vdn->exponent == 2047)		return vfp_double_fadd_nonnumber(vdd, vdn, vdm, fpscr);	/*	 * We have two proper numbers, where 'vdn' is the larger magnitude.	 *	 * Copy 'n' to 'd' before doing the arithmetic.	 */	*vdd = *vdn;	/*	 * Align 'm' with the result.	 */	exp_diff = vdn->exponent - vdm->exponent;	m_sig = vfp_shiftright64jamming(vdm->significand, exp_diff);	/*	 * If the signs are different, we are really subtracting.	 */	if (vdn->sign ^ vdm->sign) {		m_sig = vdn->significand - m_sig;		if ((s64)m_sig < 0) {			vdd->sign = vfp_sign_negate(vdd->sign);			m_sig = -m_sig;		}	} else {		m_sig += vdn->significand;	}	vdd->significand = m_sig;	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/7b1fbf292bb4c855ddae8add8c459e94684f7543/vfpdouble.c/clean/arch/arm/vfp/vfpdouble.c