Lines Matching refs:pu

31 _fp_rightshift(pu, n)
32 unpacked *pu;
41 for (i = 0; (pu->significand[i] == 0) && (i < UNPACKED_SIZE); i++);
43 pu->fpclass = fp_zero;
47 pu->significand[i] = 0;
48 pu->significand[UNPACKED_SIZE - 1] = 1;
53 if (pu->significand[UNPACKED_SIZE - 1] != 0)
54 pu->significand[UNPACKED_SIZE - 2] |= 1;
56 pu->significand[i + 1] = pu->significand[i];
57 pu->significand[0] = 0;
63 high = pu->significand[i] >> n;
64 low = pu->significand[i] << (32 - n);
65 pu->significand[i] = shiftout | high;
69 pu->significand[UNPACKED_SIZE - 1] |= 1;
100 round(pu, roundword)
101 unpacked *pu;
104 * Round according to current rounding mode. pu must be shifted to so that
105 * the roundbit is pu->significand[roundword] & 0x80000000
114 if (pu->significand[is] != 0) { /* Condense extra bits into
117 pu->significand[roundword] |= 1;
120 if (pu->significand[roundword] == 0)
125 increment = pu->significand[roundword] >= 0x80000000;
131 increment = (pu->sign == 0) & (pu->significand[roundword] != 0);
134 increment = (pu->sign != 0) & (pu->significand[roundword] != 0);
138 msw=pu->significand[0]; /* save msw before round */
142 pu->significand[is]++;
144 while ((pu->significand[is] == 0) && (is > 0));
145 if (pu->significand[0] < msw) { /* rounding carried out */
146 pu->exponent++;
147 pu->significand[0] = 0x80000000;
150 if ((_fp_current_direction == fp_nearest) && (pu->significand[roundword] == 0x80000000)) { /* ambiguous case */
151 pu->significand[roundword - 1] &= ~1; /* force round to even */
156 _pack_single(pu, px)
157 unpacked *pu; /* unpacked result */
162 kluge.f.msw.sign = pu->sign;
163 switch (pu->fpclass) {
175 kluge.f.msw.significand = 0x400000 | (0x3fffff & (pu->significand[0] >> 8));
178 _fp_rightshift(pu, 8);
179 pu->exponent += SINGLE_BIAS;
180 if (pu->exponent <= 0) {
182 _fp_rightshift(pu, 1 - pu->exponent);
183 round(pu, 1);
184 if (pu->significand[0] == 0x800000) { /* rounded back up to
193 kluge.f.msw.significand = 0x7fffff & pu->significand[0];
196 round(pu, 1);
197 if (pu->significand[0] == 0x1000000) { /* rounding overflow */
198 pu->significand[0] = 0x800000;
199 pu->exponent += 1;
201 if (pu->exponent >= 0xff) {
204 if (overflow_to_infinity(pu->sign))
210 kluge.f.msw.exponent = pu->exponent;
211 kluge.f.msw.significand = 0x7fffff & pu->significand[0];
218 _pack_double(pu, px)
219 unpacked *pu; /* unpacked result */
224 kluge.f.msw.sign = pu->sign;
225 switch (pu->fpclass) {
239 _fp_rightshift(pu, 11);
240 kluge.f.msw.significand = 0x80000 | (0x7ffff & pu->significand[0]);
241 kluge.f.significand2 = pu->significand[1];
244 _fp_rightshift(pu, 11);
245 pu->exponent += DOUBLE_BIAS;
246 if (pu->exponent <= 0) { /* underflow */
248 _fp_rightshift(pu, 1 - pu->exponent);
249 round(pu, 2);
250 if (pu->significand[0] == 0x100000) { /* rounded back up to
261 kluge.f.msw.significand = 0xfffff & pu->significand[0];
262 kluge.f.significand2 = pu->significand[1];
265 round(pu, 2);
266 if (pu->significand[0] == 0x200000) { /* rounding overflow */
267 pu->significand[0] = 0x100000;
268 pu->exponent += 1;
270 if (pu->exponent >= 0x7ff) { /* overflow */
273 if (overflow_to_infinity(pu->sign))
280 kluge.f.msw.exponent = pu->exponent;
281 kluge.f.msw.significand = 0xfffff & pu->significand[0];
282 kluge.f.significand2 = pu->significand[1];
290 _pack_extended(pu, px)
291 unpacked *pu; /* unpacked result */
296 kluge.f.msw.sign = pu->sign;
297 switch (pu->fpclass) {
311 kluge.f.significand = 0x40000000 | (0x7fffffff & pu->significand[0]);
312 kluge.f.significand2 = pu->significand[1];
319 _pack_single(pu, &s);
320 _unpack_single(pu, &s);
326 _pack_double(pu, &s);
327 _unpack_double(pu, &s);
331 pu->exponent += EXTENDED_BIAS;
332 if (pu->exponent <= 0) { /* underflow */
334 _fp_rightshift(pu, -pu->exponent);
335 round(pu, 2);
339 kluge.f.significand = pu->significand[0];
340 kluge.f.significand2 = pu->significand[1];
343 round(pu, 2);
344 if (pu->exponent >= 0x7fff) { /* overflow */
347 if (overflow_to_infinity(pu->sign))
354 kluge.f.msw.exponent = pu->exponent;
355 kluge.f.significand = pu->significand[0];
356 kluge.f.significand2 = pu->significand[1];
366 _pack_quadruple(pu, px)
367 unpacked *pu; /* unpacked result */
373 kluge.f.msw.sign = pu->sign;
374 switch (pu->fpclass) {
392 _fp_rightshift(pu, 15);
393 kluge.f.msw.significand = 0x8000 | (0xffff & pu->significand[0]);
394 kluge.f.significand2 = pu->significand[1];
395 kluge.f.significand3 = pu->significand[2];
396 kluge.f.significand4 = pu->significand[3];
399 _fp_rightshift(pu, 15);
400 pu->exponent += QUAD_BIAS;
401 if (pu->exponent <= 0) { /* underflow */
403 _fp_rightshift(pu, 1 - pu->exponent);
404 round(pu, 4);
405 if (pu->significand[0] == 0x10000) { /* rounded back up to
418 kluge.f.msw.significand = 0xffff & pu->significand[0];
419 kluge.f.significand2 = pu->significand[1];
420 kluge.f.significand3 = pu->significand[2];
421 kluge.f.significand4 = pu->significand[3];
424 round(pu, 4);
425 if (pu->significand[0] == 0x20000) { /* rounding overflow */
426 pu->significand[0] = 0x10000;
427 pu->exponent += 1;
429 if (pu->exponent >= 0x7fff) { /* overflow */
432 if (overflow_to_infinity(pu->sign))
441 kluge.f.msw.exponent = pu->exponent;
442 kluge.f.msw.significand = pu->significand[0] & 0xffff;
443 kluge.f.significand2 = pu->significand[1];
444 kluge.f.significand3 = pu->significand[2];
445 kluge.f.significand4 = pu->significand[3];