Lines Matching defs:fp

57 #include <machine/fp.h>
76 * 2 bits (a la fpu_shr(), but we do not bother with fp->fp_sticky).
79 * Note that we may leave the value 2.0 in fp->fp_mant; it is the caller's
83 fpround(struct fpemu *fe, struct fpn *fp)
88 m0 = fp->fp_mant[0];
89 m1 = fp->fp_mant[1];
90 m2 = fp->fp_mant[2];
91 m3 = fp->fp_mant[3];
93 s = fp->fp_sticky;
117 if ((gr & 1) || fp->fp_sticky || (m3 & 1))
127 if (fp->fp_sign)
133 if (!fp->fp_sign)
143 fp->fp_mant[0] = m0;
144 fp->fp_mant[1] = m1;
145 fp->fp_mant[2] = m2;
146 fp->fp_mant[3] = m3;
150 fp->fp_mant[0] = m0;
151 fp->fp_mant[1] = m1;
152 fp->fp_mant[2] = m2;
153 fp->fp_mant[3] = m3;
196 __fpu_ftoi(fe, fp)
198 struct fpn *fp;
203 sign = fp->fp_sign;
204 switch (fp->fp_class) {
219 if ((exp = fp->fp_exp) >= 32)
222 if (__fpu_shr(fp, FP_NMANT - 1 - exp) != 0)
224 i = fp->fp_mant[3];
244 __fpu_ftox(fe, fp, res)
246 struct fpn *fp;
252 sign = fp->fp_sign;
253 switch (fp->fp_class) {
270 if ((exp = fp->fp_exp) >= 64)
273 if (__fpu_shr(fp, FP_NMANT - 1 - exp) != 0)
275 i = ((u_int64_t)fp->fp_mant[2]<<32)|fp->fp_mant[3];
298 __fpu_ftos(fe, fp)
300 struct fpn *fp;
302 u_int sign = fp->fp_sign << 31;
309 if (ISNAN(fp)) {
312 * Note that fp->fp_mant[0] has the quiet bit set,
315 (void) __fpu_shr(fp, FP_NMANT - 1 - SNG_FRACBITS);
319 if (ISINF(fp))
321 if (ISZERO(fp))
346 if ((exp = fp->fp_exp + SNG_EXP_BIAS) <= 0) { /* subnormal */
348 (void) __fpu_shr(fp, FP_NMANT - FP_NG - SNG_FRACBITS - exp);
349 if (fpround(fe, fp) && fp->fp_mant[3] == SNG_EXP(1)) {
356 return (sign | SNG_EXP(0) | fp->fp_mant[3]);
359 (void) __fpu_shr(fp, FP_NMANT - FP_NG - 1 - SNG_FRACBITS);
361 if ((fp->fp_mant[3] & SNG_EXP(1 << FP_NG)) == 0)
364 if (fpround(fe, fp) && fp->fp_mant[3] == SNG_EXP(2))
375 return (sign | SNG_EXP(exp) | (fp->fp_mant[3] & SNG_MASK));
385 __fpu_ftod(fe, fp, res)
387 struct fpn *fp;
390 u_int sign = fp->fp_sign << 31;
396 if (ISNAN(fp)) {
397 (void) __fpu_shr(fp, FP_NMANT - 1 - DBL_FRACBITS);
401 if (ISINF(fp)) {
405 if (ISZERO(fp)) {
410 if ((exp = fp->fp_exp + DBL_EXP_BIAS) <= 0) {
411 (void) __fpu_shr(fp, FP_NMANT - FP_NG - DBL_FRACBITS - exp);
412 if (fpround(fe, fp) && fp->fp_mant[2] == DBL_EXP(1)) {
423 (void) __fpu_shr(fp, FP_NMANT - FP_NG - 1 - DBL_FRACBITS);
424 if (fpround(fe, fp) && fp->fp_mant[2] == DBL_EXP(2))
436 res[1] = fp->fp_mant[3];
437 return (sign | DBL_EXP(exp) | (fp->fp_mant[2] & DBL_MASK));
447 __fpu_ftoq(fe, fp, res)
449 struct fpn *fp;
452 u_int sign = fp->fp_sign << 31;
458 if (ISNAN(fp)) {
459 (void) __fpu_shr(fp, 2); /* since we are not rounding */
463 if (ISINF(fp)) {
467 if (ISZERO(fp)) {
472 if ((exp = fp->fp_exp + EXT_EXP_BIAS) <= 0) {
473 (void) __fpu_shr(fp, FP_NMANT - FP_NG - EXT_FRACBITS - exp);
474 if (fpround(fe, fp) && fp->fp_mant[0] == EXT_EXP(1)) {
486 if (fpround(fe, fp) && fp->fp_mant[0] == EXT_EXP(2))
498 res[1] = fp->fp_mant[1];
499 res[2] = fp->fp_mant[2];
500 res[3] = fp->fp_mant[3];
501 return (sign | EXT_EXP(exp) | (fp->fp_mant[0] & EXT_MASK));
508 __fpu_implode(fe, fp, type, space)
510 struct fpn *fp;
517 space[0] = __fpu_ftox(fe, fp, space);
521 space[0] = __fpu_ftoi(fe, fp);
525 space[0] = __fpu_ftos(fe, fp);
529 space[0] = __fpu_ftod(fe, fp, space);
534 space[0] = __fpu_ftoq(fe, fp, space);