Lines Matching refs:src
32 fp_fabs(struct fp_ext *dest, struct fp_ext *src)
36 fp_monadic_check(dest, src);
44 fp_fneg(struct fp_ext *dest, struct fp_ext *src)
48 fp_monadic_check(dest, src);
61 fp_fadd(struct fp_ext *dest, struct fp_ext *src)
67 fp_dyadic_check(dest, src);
71 if (IS_INF(src) && (src->sign != dest->sign))
75 if (IS_INF(src)) {
76 fp_copy_ext(dest, src);
81 if (IS_ZERO(src)) {
82 if (src->sign != dest->sign) {
89 fp_copy_ext(dest, src);
93 dest->lowmant = src->lowmant = 0;
95 if ((diff = dest->exp - src->exp) > 0)
96 fp_denormalize(src, diff);
100 if (dest->sign == src->sign) {
101 if (fp_addmant(dest, src))
105 if (dest->mant.m64 < src->mant.m64) {
106 fp_submant(dest, src, dest);
109 fp_submant(dest, dest, src);
121 fp_fsub(struct fp_ext *dest, struct fp_ext *src)
125 src->sign = !src->sign;
126 return fp_fadd(dest, src);
131 fp_fcmp(struct fp_ext *dest, struct fp_ext *src)
136 src->sign = !src->sign;
137 return fp_fadd(&FPDATA->temp[1], src);
141 fp_ftst(struct fp_ext *dest, struct fp_ext *src)
147 return src;
151 fp_fmul(struct fp_ext *dest, struct fp_ext *src)
158 fp_dyadic_check(dest, src);
161 dest->sign = src->sign ^ dest->sign;
165 if (IS_ZERO(src))
169 if (IS_INF(src)) {
173 fp_copy_ext(dest, src);
180 if (IS_ZERO(dest) || IS_ZERO(src)) {
188 exp = dest->exp + src->exp - 0x3ffe;
195 if ((long)src->mant.m32[0] >= 0)
196 exp -= fp_overnormalize(src);
199 fp_multiplymant(&temp, dest, src);
226 of src / dest, the result is actually dest / src. */
229 fp_fdiv(struct fp_ext *dest, struct fp_ext *src)
236 fp_dyadic_check(dest, src);
239 dest->sign = src->sign ^ dest->sign;
244 if (IS_INF(src))
249 if (IS_INF(src)) {
261 if (IS_ZERO(src))
266 if (IS_ZERO(src)) {
275 exp = dest->exp - src->exp + 0x3fff;
282 if ((long)src->mant.m32[0] >= 0)
283 exp -= fp_overnormalize(src);
286 fp_dividemant(&temp, dest, src);
310 fp_fsglmul(struct fp_ext *dest, struct fp_ext *src)
316 fp_dyadic_check(dest, src);
319 dest->sign = src->sign ^ dest->sign;
323 if (IS_ZERO(src))
327 if (IS_INF(src)) {
331 fp_copy_ext(dest, src);
338 if (IS_ZERO(dest) || IS_ZERO(src)) {
346 exp = dest->exp + src->exp - 0x3ffe;
351 src->mant.m32[0] & 0xffffff00);
367 fp_fsgldiv(struct fp_ext *dest, struct fp_ext *src)
374 fp_dyadic_check(dest, src);
377 dest->sign = src->sign ^ dest->sign;
382 if (IS_INF(src))
387 if (IS_INF(src)) {
399 if (IS_ZERO(src))
404 if (IS_ZERO(src)) {
413 exp = dest->exp - src->exp + 0x3fff;
416 src->mant.m32[0] &= 0xffffff00;
419 if (dest->mant.m32[0] >= src->mant.m32[0]) {
420 fp_sub64(dest->mant, src->mant);
421 fp_div64(quot, rem, dest->mant.m32[0], 0, src->mant.m32[0]);
425 fp_div64(quot, rem, dest->mant.m32[0], 0, src->mant.m32[0]);
577 modrem_kernel(struct fp_ext *dest, struct fp_ext *src, int mode)
581 fp_dyadic_check(dest, src);
584 if (IS_INF(dest) || IS_ZERO(src)) {
588 if (IS_ZERO(dest) || IS_INF(src))
593 fp_fdiv(&tmp, src); /* NOTE: src might be modified */
595 fp_fmul(&tmp, src);
608 fmod(src,dest) = (dest - (src * floor(dest / src))) */
611 fp_fmod(struct fp_ext *dest, struct fp_ext *src)
614 return modrem_kernel(dest, src, FPCR_ROUND_RZ);
619 frem(src,dest) = (dest - (src * round(dest / src)))
623 fp_frem(struct fp_ext *dest, struct fp_ext *src)
626 return modrem_kernel(dest, src, FPCR_ROUND_RN);
630 fp_fint(struct fp_ext *dest, struct fp_ext *src)
634 fp_copy_ext(dest, src);
642 fp_fintrz(struct fp_ext *dest, struct fp_ext *src)
646 fp_copy_ext(dest, src);
654 fp_fscale(struct fp_ext *dest, struct fp_ext *src)
660 fp_dyadic_check(dest, src);
663 if (IS_INF(src)) {
671 if (IS_ZERO(src) || IS_ZERO(dest))
675 if (src->exp >= 0x400c) {
680 /* src must be rounded with round to zero. */
683 scale = fp_conv_ext2long(src);