Lines Matching refs:pu

33 __fp_rightshift(unpacked *pu, int n)
41 for (i = 0; (pu->significand[i] == 0) && (i < UNPACKED_SIZE);
44 pu->fpclass = fp_zero;
48 pu->significand[i] = 0;
49 pu->significand[UNPACKED_SIZE - 1] = 1;
54 if (pu->significand[UNPACKED_SIZE - 1] != 0)
55 pu->significand[UNPACKED_SIZE - 2] |= 1;
57 pu->significand[i + 1] = pu->significand[i];
58 pu->significand[0] = 0;
64 high = pu->significand[i] >> n;
65 low = pu->significand[i] << (32 - n);
66 pu->significand[i] = shiftout | high;
70 pu->significand[UNPACKED_SIZE - 1] |= 1;
100 round(unpacked *pu, int roundword, enum fp_direction_type rd, int *ex)
102 * Round according to current rounding mode. pu must be shifted to so that
103 * the roundbit is pu->significand[roundword] & 0x80000000
111 if (pu->significand[is] != 0) {
113 pu->significand[roundword] |= 1;
116 if (pu->significand[roundword] == 0)
121 increment = pu->significand[roundword] >= 0x80000000;
127 increment = (pu->sign == 0) & (pu->significand[roundword] != 0);
130 increment = (pu->sign != 0) & (pu->significand[roundword] != 0);
134 msw = pu->significand[0]; /* save msw before round */
138 pu->significand[is]++;
140 while ((pu->significand[is] == 0) && (is > 0));
141 if (pu->significand[0] < msw) { /* rounding carried out */
142 pu->exponent++;
143 pu->significand[0] = 0x80000000;
147 (pu->significand[roundword] == 0x80000000)) {
149 pu->significand[roundword - 1] &= ~1; /* force round to even */
154 __pack_single(unpacked *pu, single *px, enum fp_direction_type rd,
161 kluge.f.msw.sign = pu->sign;
162 switch (pu->fpclass) {
175 (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, rd, &e);
184 if (pu->significand[0] == 0x800000) {
193 kluge.f.msw.significand = 0x7fffff & pu->significand[0];
196 round(pu, 1, rd, &e);
197 if (pu->significand[0] == 0x1000000) { /* rounding overflow */
198 pu->significand[0] = 0x800000;
199 pu->exponent += 1;
201 if (pu->exponent >= 0xff) {
203 if (overflow_to_infinity(pu->sign, rd))
209 kluge.f.msw.exponent = pu->exponent;
210 kluge.f.msw.significand = 0x7fffff & pu->significand[0];
218 __pack_double(unpacked *pu, double *px, enum fp_direction_type rd,
225 kluge.f.msw.sign = pu->sign;
226 switch (pu->fpclass) {
240 __fp_rightshift(pu, 11);
242 (0x7ffff & pu->significand[0]);
243 kluge.f.significand2 = pu->significand[1];
246 __fp_rightshift(pu, 11);
247 pu->exponent += DOUBLE_BIAS;
248 if (pu->exponent <= 0) { /* underflow */
249 __fp_rightshift(pu, 1 - pu->exponent);
250 round(pu, 2, rd, &e);
251 if (pu->significand[0] == 0x100000) {
262 kluge.f.msw.significand = 0xfffff & pu->significand[0];
263 kluge.f.significand2 = pu->significand[1];
266 round(pu, 2, rd, &e);
267 if (pu->significand[0] == 0x200000) { /* rounding overflow */
268 pu->significand[0] = 0x100000;
269 pu->exponent += 1;
271 if (pu->exponent >= 0x7ff) { /* overflow */
273 if (overflow_to_infinity(pu->sign, rd))
280 kluge.f.msw.exponent = pu->exponent;
281 kluge.f.msw.significand = 0xfffff & pu->significand[0];
282 kluge.f.significand2 = pu->significand[1];
291 __pack_extended(unpacked *pu, extended *px, enum fp_direction_type rd,
298 kluge.f.msw.sign = pu->sign;
299 switch (pu->fpclass) {
313 kluge.f.significand = 0x40000000 | pu->significand[0];
314 kluge.f.significand2 = pu->significand[1];
317 pu->exponent += EXTENDED_BIAS;
318 if (pu->exponent <= 0) { /* underflow */
319 __fp_rightshift(pu, 1 - pu->exponent);
320 round(pu, 2, rd, &e);
321 if (pu->significand[0] == 0x80000000u) {
332 kluge.f.significand = pu->significand[0];
333 kluge.f.significand2 = pu->significand[1];
336 round(pu, 2, rd, &e);
337 if (pu->exponent >= 0x7fff) { /* overflow */
339 if (overflow_to_infinity(pu->sign, rd))
346 kluge.f.msw.exponent = pu->exponent;
347 kluge.f.significand = pu->significand[0];
348 kluge.f.significand2 = pu->significand[1];
359 __pack_quadruple(unpacked *pu, quadruple *px, enum fp_direction_type rd,
366 kluge.f.msw.sign = pu->sign;
367 switch (pu->fpclass) {
385 __fp_rightshift(pu, 15);
387 (0xffff & pu->significand[0]);
388 kluge.f.significand2 = pu->significand[1];
389 kluge.f.significand3 = pu->significand[2];
390 kluge.f.significand4 = pu->significand[3];
393 __fp_rightshift(pu, 15);
394 pu->exponent += QUAD_BIAS;
395 if (pu->exponent <= 0) { /* underflow */
396 __fp_rightshift(pu, 1 - pu->exponent);
397 round(pu, 4, rd, &e);
398 if (pu->significand[0] == 0x10000) {
411 kluge.f.msw.significand = 0xffff & pu->significand[0];
412 kluge.f.significand2 = pu->significand[1];
413 kluge.f.significand3 = pu->significand[2];
414 kluge.f.significand4 = pu->significand[3];
417 round(pu, 4, rd, &e);
418 if (pu->significand[0] == 0x20000) { /* rounding overflow */
419 pu->significand[0] = 0x10000;
420 pu->exponent += 1;
422 if (pu->exponent >= 0x7fff) { /* overflow */
424 if (overflow_to_infinity(pu->sign, rd))
433 kluge.f.msw.exponent = pu->exponent;
434 kluge.f.msw.significand = pu->significand[0] & 0xffff;
435 kluge.f.significand2 = pu->significand[1];
436 kluge.f.significand3 = pu->significand[2];
437 kluge.f.significand4 = pu->significand[3];