H A D | vfpdouble.c | 207 vfp_propagate_nan(struct vfp_double *vdd, struct vfp_double *vdn, vfp_propagate_nan() argument 213 tn = vfp_double_type(vdn); vfp_propagate_nan() 230 nan = vdn; vfp_propagate_nan() 683 vfp_double_fadd_nonnumber(struct vfp_double *vdd, struct vfp_double *vdn, vfp_double_fadd_nonnumber() argument 690 tn = vfp_double_type(vdn); vfp_double_fadd_nonnumber() 697 if (vdn->sign ^ vdm->sign) { vfp_double_fadd_nonnumber() 707 vdp = vdn; vfp_double_fadd_nonnumber() 713 vdp = vdn; vfp_double_fadd_nonnumber() 718 return vfp_propagate_nan(vdd, vdn, vdm, fpscr); vfp_double_fadd_nonnumber() 725 vfp_double_add(struct vfp_double *vdd, struct vfp_double *vdn, vfp_double_add() argument 731 if (vdn->significand & (1ULL << 63) || vfp_double_add() 734 vfp_double_dump("VDN", vdn); vfp_double_add() 743 if (vdn->exponent < vdm->exponent) { vfp_double_add() 744 struct vfp_double *t = vdn; vfp_double_add() 745 vdn = vdm; vfp_double_add() 753 if (vdn->exponent == 2047) vfp_double_add() 754 return vfp_double_fadd_nonnumber(vdd, vdn, vdm, fpscr); vfp_double_add() 757 * We have two proper numbers, where 'vdn' is the larger magnitude. vfp_double_add() 761 *vdd = *vdn; vfp_double_add() 766 exp_diff = vdn->exponent - vdm->exponent; vfp_double_add() 772 if (vdn->sign ^ vdm->sign) { vfp_double_add() 773 m_sig = vdn->significand - m_sig; vfp_double_add() 782 m_sig += vdn->significand; vfp_double_add() 790 vfp_double_multiply(struct vfp_double *vdd, struct vfp_double *vdn, vfp_double_multiply() argument 793 vfp_double_dump("VDN", vdn); vfp_double_multiply() 801 if (vdn->exponent < vdm->exponent) { vfp_double_multiply() 802 struct vfp_double *t = vdn; vfp_double_multiply() 803 vdn = vdm; vfp_double_multiply() 808 vdd->sign = vdn->sign ^ vdm->sign; vfp_double_multiply() 813 if (vdn->exponent == 2047) { vfp_double_multiply() 814 if (vdn->significand || (vdm->exponent == 2047 && vdm->significand)) vfp_double_multiply() 815 return vfp_propagate_nan(vdd, vdn, vdm, fpscr); vfp_double_multiply() 820 vdd->exponent = vdn->exponent; vfp_double_multiply() 840 vdd->exponent = vdn->exponent + vdm->exponent - 1023 + 2; vfp_double_multiply() 841 vdd->significand = vfp_hi64multiply64(vdn->significand, vdm->significand); vfp_double_multiply() 853 struct vfp_double vdd, vdp, vdn, vdm; vfp_double_multiply_accumulate() local 856 vfp_double_unpack(&vdn, vfp_get_double(dn)); vfp_double_multiply_accumulate() 857 if (vdn.exponent == 0 && vdn.significand) vfp_double_multiply_accumulate() 858 vfp_double_normalise_denormal(&vdn); vfp_double_multiply_accumulate() 864 exceptions = vfp_double_multiply(&vdp, &vdn, &vdm, fpscr); vfp_double_multiply_accumulate() 868 vfp_double_unpack(&vdn, vfp_get_double(dd)); vfp_double_multiply_accumulate() 869 if (vdn.exponent == 0 && vdn.significand) vfp_double_multiply_accumulate() 870 vfp_double_normalise_denormal(&vdn); vfp_double_multiply_accumulate() 872 vdn.sign = vfp_sign_negate(vdn.sign); vfp_double_multiply_accumulate() 874 exceptions |= vfp_double_add(&vdd, &vdn, &vdp, fpscr); vfp_double_multiply_accumulate() 920 struct vfp_double vdd, vdn, vdm; vfp_double_fmul() local 923 vfp_double_unpack(&vdn, vfp_get_double(dn)); vfp_double_fmul() 924 if (vdn.exponent == 0 && vdn.significand) vfp_double_fmul() 925 vfp_double_normalise_denormal(&vdn); vfp_double_fmul() 931 exceptions = vfp_double_multiply(&vdd, &vdn, &vdm, fpscr); vfp_double_fmul() 940 struct vfp_double vdd, vdn, vdm; vfp_double_fnmul() local 943 vfp_double_unpack(&vdn, vfp_get_double(dn)); vfp_double_fnmul() 944 if (vdn.exponent == 0 && vdn.significand) vfp_double_fnmul() 945 vfp_double_normalise_denormal(&vdn); vfp_double_fnmul() 951 exceptions = vfp_double_multiply(&vdd, &vdn, &vdm, fpscr); vfp_double_fnmul() 962 struct vfp_double vdd, vdn, vdm; vfp_double_fadd() local 965 vfp_double_unpack(&vdn, vfp_get_double(dn)); vfp_double_fadd() 966 if (vdn.exponent == 0 && vdn.significand) vfp_double_fadd() 967 vfp_double_normalise_denormal(&vdn); vfp_double_fadd() 973 exceptions = vfp_double_add(&vdd, &vdn, &vdm, fpscr); vfp_double_fadd() 983 struct vfp_double vdd, vdn, vdm; vfp_double_fsub() local 986 vfp_double_unpack(&vdn, vfp_get_double(dn)); vfp_double_fsub() 987 if (vdn.exponent == 0 && vdn.significand) vfp_double_fsub() 988 vfp_double_normalise_denormal(&vdn); vfp_double_fsub() 999 exceptions = vfp_double_add(&vdd, &vdn, &vdm, fpscr); vfp_double_fsub() 1009 struct vfp_double vdd, vdn, vdm; vfp_double_fdiv() local 1013 vfp_double_unpack(&vdn, vfp_get_double(dn)); vfp_double_fdiv() 1016 vdd.sign = vdn.sign ^ vdm.sign; vfp_double_fdiv() 1018 tn = vfp_double_type(&vdn); vfp_double_fdiv() 1059 vfp_double_normalise_denormal(&vdn); vfp_double_fdiv() 1066 vdd.exponent = vdn.exponent - vdm.exponent + 1023 - 1; vfp_double_fdiv() 1068 if (vdm.significand <= (2 * vdn.significand)) { vfp_double_fdiv() 1069 vdn.significand >>= 1; vfp_double_fdiv() 1072 vdd.significand = vfp_estimate_div128to64(vdn.significand, 0, vdm.significand); vfp_double_fdiv() 1076 sub128(&remh, &reml, vdn.significand, 0, termh, terml); vfp_double_fdiv() 1086 exceptions = vfp_propagate_nan(&vdd, &vdn, &vdm, fpscr); vfp_double_fdiv() 1092 exceptions = vfp_propagate_nan(&vdd, &vdm, &vdn, fpscr); vfp_double_fdiv()
|